[ 
https://issues.apache.org/jira/browse/ARROW-18042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17617367#comment-17617367
 ] 

Kouhei Sutou commented on ARROW-18042:
--------------------------------------

We need to choose one the following approaches:

- Bundle {{lib*.dylib}} that contains binaries for both x86_64 and arm64
- Bundle {{lib*.dylib}} for x86_64 and {{lib*.dylib}} for arm64 separately

See also: 
https://issues.apache.org/jira/browse/ARROW-16608?focusedCommentId=17539166#comment-17539166

If we choose the former, we need to add support for 
{{-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"}} in our Apache Arrow C++ CMake 
configuration.

If we choose the latter, we need a change like the following + a Java side 
change that choose suitable {{.dylib}} that depends on host architecture:

{noformat}
diff --git a/dev/tasks/java-jars/github.yml b/dev/tasks/java-jars/github.yml
index 6f7fdc82d5..f3f763c31a 100644
--- a/dev/tasks/java-jars/github.yml
+++ b/dev/tasks/java-jars/github.yml
@@ -47,8 +47,8 @@ jobs:
         run: archery docker push java-jni-manylinux-2014
     {% endif %}
 
-  build-cpp-macos:
-    name: Build C++ libraries macOS
+  build-cpp-macos-x86_64:
+    name: Build C++ libraries macOS x86_64
     runs-on: macos-latest
     env:
       MACOSX_DEPLOYMENT_TARGET: "10.13"
@@ -76,12 +76,54 @@ jobs:
             $GITHUB_WORKSPACE/arrow/cpp-build \
             $GITHUB_WORKSPACE/arrow/java-dist
       - name: Compress into single artifact to keep directory structure
-        run: tar -cvzf arrow-shared-libs-macos.tar.gz arrow/java-dist/
+        run: |
+          mkdir -p arrow/java-dist/x86_64
+          mv arrow/java-dist/*.* arrow/java-dist/x86_64/
+          tar -cvzf arrow-shared-libs-macos-x86_64.tar.gz arrow/java-dist/
       - name: Upload artifacts
         uses: actions/upload-artifact@v2
         with:
-          name: macos-shared-lib
-          path: arrow-shared-libs-macos.tar.gz
+          name: macos-shared-lib-x86_64
+          path: arrow-shared-libs-macos-x86_64.tar.gz
+
+  build-cpp-macos-arm64:
+    name: Build C++ libraries macOS arm64
+    runs-on: ["self-hosted", "macOS", "arm64"]
+    env:
+      MACOSX_DEPLOYMENT_TARGET: "10.13"
+    steps:
+      {{ macros.github_checkout_arrow()|indent }}
+      {{ macros.github_install_archery()|indent }}
+      - name: Install dependencies
+        run: |
+          brew install --overwrite git
+          brew bundle --file=arrow/cpp/Brewfile
+          # We want to link aws-sdk-cpp statically but Homebrew's
+          # aws-sdk-cpp provides only shared library. If we have
+          # Homebrew's aws-sdk-cpp, our build mix Homebrew's
+          # aws-sdk-cpp and bundled aws-sdk-cpp. We uninstall Homebrew's
+          # aws-sdk-cpp to ensure using only bundled aws-sdk-cpp.
+          brew uninstall aws-sdk-cpp
+      - name: Setup ccache
+        run: |
+          arrow/ci/scripts/ccache_setup.sh
+      - name: Build C++ libraries
+        run: |
+          set -e
+          arrow/ci/scripts/java_jni_macos_build.sh \
+            $GITHUB_WORKSPACE/arrow \
+            $GITHUB_WORKSPACE/arrow/cpp-build \
+            $GITHUB_WORKSPACE/arrow/java-dist
+      - name: Compress into single artifact to keep directory structure
+        run: |
+          mkdir -p arrow/java-dist/arm64
+          mv arrow/java-dist/*.* arrow/java-dist/arm64/
+          tar -cvzf arrow-shared-libs-macos-arm64.tar.gz arrow/java-dist/
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v2
+        with:
+          name: macos-shared-lib-arm64
+          path: arrow-shared-libs-macos-arm64.tar.gz
 
   build-cpp-windows:
     name: Build C++ libraries Windows
@@ -116,7 +158,8 @@ jobs:
     runs-on: macos-latest
     needs:
       - build-cpp-ubuntu
-      - build-cpp-macos
+      - build-cpp-macos-x86_64
+      - build-cpp-macos-arm64
       - build-cpp-windows
     steps:
       {{ macros.github_checkout_arrow(fetch_depth=0)|indent }}
@@ -124,10 +167,14 @@ jobs:
         uses: actions/download-artifact@v2
         with:
           name: ubuntu-shared-lib
-      - name: Download macOS C++ libraries
+      - name: Download macOS x86_64 C++ libraries
         uses: actions/download-artifact@v2
         with:
-          name: macos-shared-lib
+          name: macos-shared-lib-x86_64
+      - name: Download macOS arm64 C++ libraries
+        uses: actions/download-artifact@v2
+        with:
+          name: macos-shared-lib-arm64
       - name: Download Windows C++ libraries
         uses: actions/download-artifact@v2
         with:
@@ -135,24 +182,30 @@ jobs:
       - name: Descompress artifacts
         run: |
           tar -xvzf arrow-shared-libs-linux.tar.gz
-          tar -xvzf arrow-shared-libs-macos.tar.gz
+          tar -xvzf arrow-shared-libs-macos-x86_64.tar.gz
+          tar -xvzf arrow-shared-libs-macos-arm64.tar.gz
           tar -xvzf arrow-shared-libs-windows.tar.gz
       - name: Test that shared libraries exist
         run: |
           set -x
-          test -f arrow/java-dist/libarrow_cdata_jni.dylib
+          test -f arrow/java-dist/x86_64/libarrow_cdata_jni.dylib
+          test -f arrow/java-dist/arm64/libarrow_cdata_jni.dylib
           test -f arrow/java-dist/libarrow_cdata_jni.so
           test -f arrow/java-dist/arrow_cdata_jni.dll
-          test -f arrow/java-dist/libarrow_dataset_jni.dylib
+          test -f arrow/java-dist/x86_64/libarrow_dataset_jni.dylib
+          test -f arrow/java-dist/arm64/libarrow_dataset_jni.dylib
           test -f arrow/java-dist/libarrow_dataset_jni.so
           test -f arrow/java-dist/arrow_dataset_jni.dll
-          test -f arrow/java-dist/libarrow_orc_jni.dylib
+          test -f arrow/java-dist/x86_64/libarrow_orc_jni.dylib
+          test -f arrow/java-dist/arm64/libarrow_orc_jni.dylib
           test -f arrow/java-dist/libarrow_orc_jni.so
           # We can enable this after ARROW-17817 is resolved.
           # test -f arrow/java-dist/arrow_orc_jni.dll
-          test -f arrow/java-dist/libgandiva_jni.dylib
+          test -f arrow/java-dist/x86_64/libgandiva_jni.dylib
+          test -f arrow/java-dist/arm64/libgandiva_jni.dylib
           test -f arrow/java-dist/libgandiva_jni.so
-          test -f arrow/java-dist/libplasma_java.dylib
+          test -f arrow/java-dist/x86_64/libplasma_java.dylib
+          test -f arrow/java-dist/arm64/libplasma_java.dylib
           test -f arrow/java-dist/libplasma_java.so
       - name: Build bundled jar
         run: |
{noformat} 


> [Java] Distribute Apple M1 compatible JNI libraries via mavencentral
> --------------------------------------------------------------------
>
>                 Key: ARROW-18042
>                 URL: https://issues.apache.org/jira/browse/ARROW-18042
>             Project: Apache Arrow
>          Issue Type: New Feature
>          Components: Java
>    Affects Versions: 9.0.0
>            Reporter: Rok Mihevc
>            Priority: Major
>
> Currently JNI libraries need to be built locally to be usable on Apple 
> silicon. We should build and distribute compatible libraries via mavencentral.
> @dsusanibara @lidavidm
> Also see ARROW-17267 and ARROW-16608



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to