This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/main by this push:
new 682d38c13 ci(java/binding): Use zigbuild for glibc 2.17 support (#3664)
682d38c13 is described below
commit 682d38c13eb3ca187b4cfda3edaa163b513ffbdc
Author: Xuanwo <[email protected]>
AuthorDate: Mon Nov 27 20:57:21 2023 +0800
ci(java/binding): Use zigbuild for glibc 2.17 support (#3664)
* ci(java/binding): Use zigbuild for glibc 2.17 support
Signed-off-by: Xuanwo <[email protected]>
* Fix build
Signed-off-by: Xuanwo <[email protected]>
* Add zigbuild support
Signed-off-by: Xuanwo <[email protected]>
* Fix script
Signed-off-by: Xuanwo <[email protected]>
* Fix build
Signed-off-by: Xuanwo <[email protected]>
* Use new glibc
Signed-off-by: Xuanwo <[email protected]>
* Let's try
Signed-off-by: Xuanwo <[email protected]>
* Build with 2.17 glibc
Signed-off-by: Xuanwo <[email protected]>
---------
Signed-off-by: Xuanwo <[email protected]>
---
.github/workflows/release_java.yml | 11 +++++++++++
bindings/java/Cargo.toml | 3 ++-
bindings/java/pom.xml | 3 +++
bindings/java/tools/build.py | 25 +++++++++++++++++++------
4 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/release_java.yml
b/.github/workflows/release_java.yml
index 472a3158c..5c6729ab2 100644
--- a/.github/workflows/release_java.yml
+++ b/.github/workflows/release_java.yml
@@ -23,6 +23,12 @@ on:
# Staging JARs on Apache Nexus repository for RCs. Read more on
#
https://opendal.apache.org/docs/contributing/release#release-maven-artifacts
- 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+'
+ pull_request:
+ branches:
+ - main
+ paths:
+ - ".github/workflows/release_java.yml"
+ - "bindings/java/tools/build.py"
workflow_dispatch:
jobs:
@@ -63,6 +69,10 @@ jobs:
version: "23.4"
repo-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Setup linux for zigbuild
+ if: "contains(matrix.os, 'ubuntu-latest')"
+ run: pip install cargo-zigbuild
+
- name: Setup linux-aarch_64
if: "contains(matrix.classifier, 'linux-aarch_64')"
run: |
@@ -80,6 +90,7 @@ jobs:
-Djni.classifier=${{ matrix.classifier }} \
-Dcargo-build.profile=release \
-Dcargo-build.features=services-all \
+ -Dcargo-build.enableZigbuild=true \
-DaltStagingDirectory=local-staging \
-DskipRemoteStaging=true \
-DserverId=apache.releases.https \
diff --git a/bindings/java/Cargo.toml b/bindings/java/Cargo.toml
index f783d88ef..e9d5ade68 100644
--- a/bindings/java/Cargo.toml
+++ b/bindings/java/Cargo.toml
@@ -74,7 +74,8 @@ services-all = [
"services-mysql",
"services-redb",
"services-redis",
- "services-rocksdb",
+ # FIXME: rocksdb will lead to "cannot allocate memory in static TLS block"
while linking.
+ # "services-rocksdb",
"services-sled",
"services-supabase",
"services-tikv",
diff --git a/bindings/java/pom.xml b/bindings/java/pom.xml
index 702df9350..f598fc094 100644
--- a/bindings/java/pom.xml
+++ b/bindings/java/pom.xml
@@ -55,6 +55,7 @@
<!-- customized properties -->
<cargo-build.profile>dev</cargo-build.profile>
<cargo-build.features>default</cargo-build.features>
+ <cargo-build.enableZigbuild>false</cargo-build.enableZigbuild>
<cargo-build.target/> <!-- override cargo build target; e.g., use musl
instead -->
<jni.classifier>${os.detected.classifier}</jni.classifier>
@@ -196,6 +197,8 @@
<argument>${cargo-build.profile}</argument>
<argument>--features</argument>
<argument>${cargo-build.features}</argument>
+ <argument>--enable-zigbuild</argument>
+
<argument>${cargo-build.enableZigbuild}</argument>
</arguments>
</configuration>
</execution>
diff --git a/bindings/java/tools/build.py b/bindings/java/tools/build.py
index 45c744de6..728f65c35 100755
--- a/bindings/java/tools/build.py
+++ b/bindings/java/tools/build.py
@@ -55,22 +55,35 @@ if __name__ == '__main__':
parser.add_argument('--target', type=str, default='')
parser.add_argument('--profile', type=str, default='dev')
parser.add_argument('--features', type=str, default='default')
+ parser.add_argument('--enable-zigbuild', type=str, default='false')
args = parser.parse_args()
- cmd = ['cargo', 'build', '--color=always', f'--profile={args.profile}']
-
- if args.features:
- cmd += ['--features', args.features]
-
if args.target:
target = args.target
else:
target = classifier_to_target(args.classifier)
+ # Setup target.
command = ['rustup', 'target', 'add', target]
print('$ ' + subprocess.list2cmdline(command))
subprocess.run(command, cwd=basedir, check=True)
- cmd += ['--target', target]
+
+ # Enable zigbuild if flag enabled and we are building linux target
+ enable_zigbuild = args.enable_zigbuild == 'true' and 'linux' in target
+
+ cmd = ['cargo',
+ 'zigbuild' if enable_zigbuild else 'build',
+ '--color=always',
+ f'--profile={args.profile}']
+
+ if args.features:
+ cmd += ['--features', args.features]
+
+ if enable_zigbuild:
+ # Pin glibc to 2.17 if zigbuild has been enabled.
+ cmd += ['--target', f'{target}.2.17']
+ else:
+ cmd += ['--target', target]
output = basedir / 'target' / 'bindings'
Path(output).mkdir(exist_ok=True, parents=True)