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)

Reply via email to