You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2022/11/08 01:01:30 UTC
[arrow] branch master updated: ARROW-18042: [Java] Distribute Apple M1 compatible JNI libraries via mavencentral (#14472)
This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 8776295ffb ARROW-18042: [Java] Distribute Apple M1 compatible JNI libraries via mavencentral (#14472)
8776295ffb is described below
commit 8776295ffb5dc635f2dfe016ce6f4e9847ae1131
Author: Jacob Wujciak-Jens <ja...@wujciak.de>
AuthorDate: Tue Nov 8 02:01:19 2022 +0100
ARROW-18042: [Java] Distribute Apple M1 compatible JNI libraries via mavencentral (#14472)
Lead-authored-by: Rok Mihevc <ro...@mihevc.org>
Co-authored-by: Sutou Kouhei <ko...@clear-code.com>
Co-authored-by: Jacob Wujciak-Jens <ja...@wujciak.de>
Co-authored-by: Sutou Kouhei <ko...@cozmixng.org>
Signed-off-by: Sutou Kouhei <ko...@clear-code.com>
---
.github/workflows/java_jni.yml | 2 +-
ci/scripts/java_build.sh | 2 +-
ci/scripts/java_jni_macos_build.sh | 11 ++-
ci/scripts/java_jni_manylinux_build.sh | 2 +-
ci/scripts/java_jni_windows_build.sh | 2 +-
ci/scripts/java_test.sh | 2 +-
cpp/Brewfile | 1 -
dev/tasks/java-jars/github.yml | 102 +++++++++++++--------
docker-compose.yml | 2 +-
docs/source/developers/java/building.rst | 24 ++---
{cpp => java}/Brewfile | 28 +-----
.../org/apache/arrow/adapter/orc/OrcJniUtils.java | 27 +++++-
.../java/org/apache/arrow/c/jni/JniLoader.java | 19 +++-
.../org/apache/arrow/dataset/jni/JniLoader.java | 19 +++-
.../apache/arrow/gandiva/evaluator/JniLoader.java | 24 ++++-
java/plasma/pom.xml | 12 +++
java/pom.xml | 10 +-
17 files changed, 190 insertions(+), 99 deletions(-)
diff --git a/.github/workflows/java_jni.yml b/.github/workflows/java_jni.yml
index e78a7605eb..ee80c2c9d9 100644
--- a/.github/workflows/java_jni.yml
+++ b/.github/workflows/java_jni.yml
@@ -41,7 +41,7 @@ concurrency:
permissions:
contents: read
-
+
env:
DOCKER_VOLUME_PREFIX: ".docker/"
diff --git a/ci/scripts/java_build.sh b/ci/scripts/java_build.sh
index a126e13bb0..3ea6fe28d6 100755
--- a/ci/scripts/java_build.sh
+++ b/ci/scripts/java_build.sh
@@ -93,7 +93,7 @@ fi
if [ "${ARROW_PLASMA}" = "ON" ]; then
pushd ${source_dir}/plasma
- ${mvn} clean install
+ ${mvn} -Darrow.cpp.build.dir=${java_jni_dist_dir} clean install
popd
fi
diff --git a/ci/scripts/java_jni_macos_build.sh b/ci/scripts/java_jni_macos_build.sh
index 05d68f3359..912638b508 100755
--- a/ci/scripts/java_jni_macos_build.sh
+++ b/ci/scripts/java_jni_macos_build.sh
@@ -21,8 +21,17 @@ set -ex
arrow_dir=${1}
build_dir=${2}
+normalized_arch=$(arch)
+case ${normalized_arch} in
+ arm64)
+ normalized_arch=aarch_64
+ ;;
+ i386)
+ normalized_arch=x86_64
+ ;;
+esac
# The directory where the final binaries will be stored when scripts finish
-dist_dir=${3}
+dist_dir=${3}/${normalized_arch}
echo "=== Clear output directories and leftovers ==="
# Clear output directories and leftovers
diff --git a/ci/scripts/java_jni_manylinux_build.sh b/ci/scripts/java_jni_manylinux_build.sh
index 884b76bc05..051ebe41d0 100755
--- a/ci/scripts/java_jni_manylinux_build.sh
+++ b/ci/scripts/java_jni_manylinux_build.sh
@@ -22,7 +22,7 @@ set -ex
arrow_dir=${1}
build_dir=${2}
# The directory where the final binaries will be stored when scripts finish
-dist_dir=${3}
+dist_dir=${3}/$(arch)
echo "=== Clear output directories and leftovers ==="
# Clear output directories and leftovers
diff --git a/ci/scripts/java_jni_windows_build.sh b/ci/scripts/java_jni_windows_build.sh
index 8d142bd425..ce445db578 100755
--- a/ci/scripts/java_jni_windows_build.sh
+++ b/ci/scripts/java_jni_windows_build.sh
@@ -22,7 +22,7 @@ set -ex
arrow_dir=${1}
build_dir=${2}
# The directory where the final binaries will be stored when scripts finish
-dist_dir=${3}
+dist_dir=${3}/x86_64
echo "=== Clear output directories and leftovers ==="
# Clear output directories and leftovers
diff --git a/ci/scripts/java_test.sh b/ci/scripts/java_test.sh
index c062590e07..46577b6962 100755
--- a/ci/scripts/java_test.sh
+++ b/ci/scripts/java_test.sh
@@ -60,7 +60,7 @@ if [ "${#projects[@]}" -gt 0 ]; then
if [ "${ARROW_PLASMA}" = "ON" ]; then
pushd ${source_dir}/plasma
java -cp target/test-classes:target/classes \
- -Djava.library.path=${java_jni_dist_dir} \
+ -Djava.library.path=${java_jni_dist_dir}/$(arch) \
org.apache.arrow.plasma.PlasmaClientTest
popd
fi
diff --git a/cpp/Brewfile b/cpp/Brewfile
index 35941a9289..2ffc1232a0 100644
--- a/cpp/Brewfile
+++ b/cpp/Brewfile
@@ -31,7 +31,6 @@ brew "grpc"
brew "llvm@14"
brew "lz4"
brew "ninja"
-brew "numpy"
brew "openssl@1.1"
brew "protobuf"
brew "python"
diff --git a/dev/tasks/java-jars/github.yml b/dev/tasks/java-jars/github.yml
index 763f5df5cd..b3aa46bf71 100644
--- a/dev/tasks/java-jars/github.yml
+++ b/dev/tasks/java-jars/github.yml
@@ -28,6 +28,8 @@ jobs:
{{ macros.github_checkout_arrow()|indent }}
{{ macros.github_install_archery()|indent }}
- name: Build C++ libraries
+ env:
+ {{ macros.github_set_sccache_envvars()|indent(8) }}
run: |
archery docker run \
-e ARROW_JAVA_BUILD=OFF \
@@ -48,16 +50,31 @@ jobs:
{% endif %}
build-cpp-macos:
- name: Build C++ libraries macOS
- runs-on: macos-latest
+ {% set arch = '${{ matrix.platform.arch }}' %}
+ name: Build C++ libraries macOS {{ arch }}
+ runs-on: {{ '${{ matrix.platform.runs_on }}' }}
+ strategy:
+ fail-fast: false
+ matrix:
+ platform:
+ - { runs_on: ["macos-latest"], arch: "x86_64"}
+ - { runs_on: ["self-hosted", "macOS", "arm64", "devops-managed"], arch: "aarch_64" }
env:
MACOSX_DEPLOYMENT_TARGET: "10.13"
steps:
{{ macros.github_checkout_arrow()|indent }}
- {{ macros.github_install_archery()|indent }}
+ - name: Set up Python
+ if: |
+ !contains(matrix.platform.runs_on, 'self-hosted')
+ uses: actions/setup-python@v4
+ with:
+ cache: 'pip'
+ python-version: 3.8
+ - name: Install Archery
+ shell: bash
+ run: pip install -e arrow/dev/archery[all]
- 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
@@ -65,30 +82,33 @@ jobs:
# 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
+ brew bundle --file=arrow/java/Brewfile
- name: Build C++ libraries
+ env:
+ {{ macros.github_set_sccache_envvars()|indent(8) }}
run: |
set -e
+ # make brew Java available to CMake
+ if [ "{{ arch }}" = "aarch_64" ]; then
+ export JAVA_HOME=$(brew --prefix openjdk@11)/libexec/openjdk.jdk/Contents/Home
+ fi
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: tar -cvzf arrow-shared-libs-macos.tar.gz arrow/java-dist/
+ run: tar -cvzf arrow-shared-libs-macos-{{ arch }}.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-{{ arch }}
+ path: arrow-shared-libs-macos-{{ arch }}.tar.gz
build-cpp-windows:
name: Build C++ libraries Windows
runs-on: windows-2019
steps:
{{ macros.github_checkout_arrow()|indent }}
- {{ macros.github_install_archery()|indent }}
- name: Set up Java
uses: actions/setup-java@v3
with:
@@ -97,8 +117,13 @@ jobs:
- name: Download Timezone Database
shell: bash
run: arrow/ci/scripts/download_tz_database.sh
+ - name: Install sccache
+ shell: bash
+ run: arrow/ci/scripts/install_sccache.sh pc-windows-msvc $(pwd)/sccache
- name: Build C++ libraries
shell: cmd
+ env:
+ {{ macros.github_set_sccache_envvars()|indent(8) }}
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
REM For ORC
@@ -122,39 +147,42 @@ jobs:
- build-cpp-windows
steps:
{{ macros.github_checkout_arrow(fetch_depth=0)|indent }}
- - name: Download Linux C++ Libraries
- uses: actions/download-artifact@v2
+ - name: Download Libraries
+ uses: actions/download-artifact@v3
with:
- name: ubuntu-shared-lib
- - name: Download macOS C++ libraries
- uses: actions/download-artifact@v2
- with:
- name: macos-shared-lib
- - name: Download Windows C++ libraries
- uses: actions/download-artifact@v2
- with:
- name: windows-shared-lib
- - name: Descompress artifacts
+ path: artifacts
+ - name: Decompress artifacts
run: |
+ mv artifacts/*/*.tar.gz .
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-aarch_64.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/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/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/libarrow_orc_jni.so
- test -f arrow/java-dist/arrow_orc_jni.dll
- test -f arrow/java-dist/libgandiva_jni.dylib
- test -f arrow/java-dist/libgandiva_jni.so
- test -f arrow/java-dist/libplasma_java.dylib
- test -f arrow/java-dist/libplasma_java.so
+
+ test -f arrow/java-dist/x86_64/libarrow_cdata_jni.so
+ test -f arrow/java-dist/x86_64/libarrow_dataset_jni.so
+ test -f arrow/java-dist/x86_64/libarrow_orc_jni.so
+ test -f arrow/java-dist/x86_64/libgandiva_jni.so
+ test -f arrow/java-dist/x86_64/libplasma_java.so
+
+ test -f arrow/java-dist/x86_64/libarrow_cdata_jni.dylib
+ test -f arrow/java-dist/x86_64/libarrow_dataset_jni.dylib
+ test -f arrow/java-dist/x86_64/libarrow_orc_jni.dylib
+ test -f arrow/java-dist/x86_64/libgandiva_jni.dylib
+ test -f arrow/java-dist/x86_64/libplasma_java.dylib
+
+ test -f arrow/java-dist/aarch_64/libarrow_cdata_jni.dylib
+ test -f arrow/java-dist/aarch_64/libarrow_dataset_jni.dylib
+ test -f arrow/java-dist/aarch_64/libarrow_orc_jni.dylib
+ test -f arrow/java-dist/aarch_64/libgandiva_jni.dylib
+ test -f arrow/java-dist/aarch_64/libplasma_java.dylib
+
+ test -f arrow/java-dist/x86_64/arrow_cdata_jni.dll
+ test -f arrow/java-dist/x86_64/arrow_dataset_jni.dll
+ test -f arrow/java-dist/x86_64/arrow_orc_jni.dll
- name: Build bundled jar
run: |
set -e
diff --git a/docker-compose.yml b/docker-compose.yml
index e0424f6fe4..5fa77c91d2 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1210,7 +1210,7 @@ services:
command:
[ "/arrow/ci/scripts/cpp_build.sh /arrow /build &&
/arrow/ci/scripts/python_build.sh /arrow /build &&
- /arrow/ci/scripts/java_jni_build.sh /arrow $${ARROW_HOME} /build /tmp/dist/java &&
+ /arrow/ci/scripts/java_jni_build.sh /arrow $${ARROW_HOME} /build /tmp/dist/java/$$(arch) &&
/arrow/ci/scripts/java_build.sh /arrow /build /tmp/dist/java &&
/arrow/ci/scripts/java_cdata_integration.sh /arrow /tmp/dist/java" ]
diff --git a/docs/source/developers/java/building.rst b/docs/source/developers/java/building.rst
index 00a9d3d1df..54be993b37 100644
--- a/docs/source/developers/java/building.rst
+++ b/docs/source/developers/java/building.rst
@@ -112,7 +112,7 @@ Maven
$ export JAVA_HOME=<absolute path to your java home>
$ java --version
$ mvn generate-resources -Pgenerate-libs-cdata-all-os -N
- $ ls -latr ../java-dist/lib
+ $ ls -latr ../java-dist/lib/<your system's architecture>
|__ libarrow_cdata_jni.dylib
|__ libarrow_cdata_jni.so
@@ -122,7 +122,7 @@ Maven
$ cd arrow/java
$ mvn generate-resources -Pgenerate-libs-cdata-all-os -N
- $ dir "../java-dist/bin"
+ $ dir "../java-dist/bin/x86_64"
|__ arrow_cdata_jni.dll
- To build all JNI libraries (MacOS / Linux) except the JNI C Data Interface library:
@@ -133,7 +133,7 @@ Maven
$ export JAVA_HOME=<absolute path to your java home>
$ java --version
$ mvn generate-resources -Pgenerate-libs-jni-macos-linux -N
- $ ls -latr java-dist/lib/*_{jni,java}.*
+ $ ls -latr java-dist/lib/<your system's architecture>/*_{jni,java}.*
|__ libarrow_dataset_jni.dylib
|__ libarrow_orc_jni.dylib
|__ libgandiva_jni.dylib
@@ -145,7 +145,7 @@ Maven
$ cd arrow/java
$ mvn generate-resources -Pgenerate-libs-jni-windows -N
- $ dir "../java-dist/bin"
+ $ dir "../java-dist/bin/x86_64"
|__ arrow_dataset_jni.dll
CMake
@@ -164,7 +164,7 @@ CMake
-DARROW_JAVA_JNI_ENABLE_DEFAULT=OFF \
-DBUILD_TESTING=OFF \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_INSTALL_LIBDIR=lib/<your system's architecture> \
-DCMAKE_INSTALL_PREFIX=java-dist
$ cmake --build java-cdata --target install --config Release
$ ls -latr java-dist/lib
@@ -184,7 +184,7 @@ CMake
-DARROW_JAVA_JNI_ENABLE_DEFAULT=OFF ^
-DBUILD_TESTING=OFF ^
-DCMAKE_BUILD_TYPE=Release ^
- -DCMAKE_INSTALL_LIBDIR=lib ^
+ -DCMAKE_INSTALL_LIBDIR=lib/x86_64 ^
-DCMAKE_INSTALL_PREFIX=java-dist
$ cmake --build java-cdata --target install --config Release
$ dir "java-dist/bin"
@@ -219,7 +219,7 @@ CMake
-DARROW_S3=ON \
-DARROW_USE_CCACHE=ON \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_INSTALL_LIBDIR=lib/<your system's architecture> \
-DCMAKE_INSTALL_PREFIX=java-dist \
-DCMAKE_UNITY_BUILD=ON
$ cmake --build cpp-jni --target install --config Release
@@ -230,11 +230,11 @@ CMake
-DARROW_JAVA_JNI_ENABLE_DEFAULT=ON \
-DBUILD_TESTING=OFF \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_INSTALL_LIBDIR=lib/<your system's architecture> \
-DCMAKE_INSTALL_PREFIX=java-dist \
-DCMAKE_PREFIX_PATH=$PWD/java-dist
$ cmake --build java-jni --target install --config Release
- $ ls -latr java-dist/lib/*_{jni,java}.*
+ $ ls -latr java-dist/lib/<your system's architecture>/*_{jni,java}.*
|__ libarrow_dataset_jni.dylib
|__ libarrow_orc_jni.dylib
|__ libgandiva_jni.dylib
@@ -265,7 +265,7 @@ CMake
-DARROW_WITH_ZLIB=ON ^
-DARROW_WITH_ZSTD=ON ^
-DCMAKE_BUILD_TYPE=Release ^
- -DCMAKE_INSTALL_LIBDIR=lib ^
+ -DCMAKE_INSTALL_LIBDIR=lib/x86_64 ^
-DCMAKE_INSTALL_PREFIX=java-dist ^
-DCMAKE_UNITY_BUILD=ON ^
-GNinja
@@ -282,7 +282,7 @@ CMake
-DARROW_JAVA_JNI_ENABLE_PLASMA=OFF ^
-DBUILD_TESTING=OFF ^
-DCMAKE_BUILD_TYPE=Release ^
- -DCMAKE_INSTALL_LIBDIR=lib ^
+ -DCMAKE_INSTALL_LIBDIR=lib/x86_64 ^
-DCMAKE_INSTALL_PREFIX=java-dist ^
-DCMAKE_PREFIX_PATH=$PWD/java-dist
$ cmake --build java-jni --target install --config Release
@@ -296,7 +296,7 @@ Archery
$ cd arrow
$ archery docker run java-jni-manylinux-2014
- $ ls -latr java-dist/
+ $ ls -latr java-dist/<your system's architecture>/
|__ libarrow_cdata_jni.so
|__ libarrow_dataset_jni.so
|__ libarrow_orc_jni.so
diff --git a/cpp/Brewfile b/java/Brewfile
similarity index 67%
copy from cpp/Brewfile
copy to java/Brewfile
index 35941a9289..af6bd65615 100644
--- a/cpp/Brewfile
+++ b/java/Brewfile
@@ -15,29 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-brew "automake"
-brew "aws-sdk-cpp"
-brew "bash"
-brew "boost"
-brew "brotli"
-brew "c-ares"
-brew "ccache"
-brew "cmake"
-brew "flatbuffers"
-brew "git"
-brew "glog"
-brew "googletest"
-brew "grpc"
-brew "llvm@14"
-brew "lz4"
-brew "ninja"
-brew "numpy"
-brew "openssl@1.1"
-brew "protobuf"
-brew "python"
-brew "rapidjson"
-brew "snappy"
-brew "thrift"
-brew "wget"
-brew "xsimd"
-brew "zstd"
+brew "openjdk@11"
+brew "sccache"
diff --git a/java/adapter/orc/src/main/java/org/apache/arrow/adapter/orc/OrcJniUtils.java b/java/adapter/orc/src/main/java/org/apache/arrow/adapter/orc/OrcJniUtils.java
index 600569be7c..f7b839ece0 100644
--- a/java/adapter/orc/src/main/java/org/apache/arrow/adapter/orc/OrcJniUtils.java
+++ b/java/adapter/orc/src/main/java/org/apache/arrow/adapter/orc/OrcJniUtils.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.Locale;
/**
* Helper class for JNI related operations.
@@ -37,18 +38,34 @@ class OrcJniUtils {
throws IOException, IllegalAccessException {
synchronized (OrcJniUtils.class) {
if (!isLoaded) {
- final String libraryToLoad = System.mapLibraryName(LIBRARY_NAME);
- final File libraryFile = moveFileFromJarToTemp(
- System.getProperty("java.io.tmpdir"), libraryToLoad);
+ final String libraryToLoad =
+ getNormalizedArch() + File.separator + System.mapLibraryName(LIBRARY_NAME);
+ final File libraryFile =
+ moveFileFromJarToTemp(System.getProperty("java.io.tmpdir"), libraryToLoad, LIBRARY_NAME);
System.load(libraryFile.getAbsolutePath());
isLoaded = true;
}
}
}
- private static File moveFileFromJarToTemp(final String tmpDir, String libraryToLoad)
+ private static String getNormalizedArch() {
+ String arch = System.getProperty("os.arch").toLowerCase(Locale.US);
+ switch (arch) {
+ case "amd64":
+ arch = "x86_64";
+ break;
+ case "aarch64":
+ arch = "aarch_64";
+ break;
+ default:
+ break;
+ }
+ return arch;
+ }
+
+ private static File moveFileFromJarToTemp(final String tmpDir, String libraryToLoad, String libraryName)
throws IOException {
- final File temp = File.createTempFile(tmpDir, libraryToLoad);
+ final File temp = File.createTempFile(tmpDir, libraryName);
try (final InputStream is = OrcReaderJniWrapper.class.getClassLoader()
.getResourceAsStream(libraryToLoad)) {
if (is == null) {
diff --git a/java/c/src/main/java/org/apache/arrow/c/jni/JniLoader.java b/java/c/src/main/java/org/apache/arrow/c/jni/JniLoader.java
index ca061937cd..ed71b6db28 100644
--- a/java/c/src/main/java/org/apache/arrow/c/jni/JniLoader.java
+++ b/java/c/src/main/java/org/apache/arrow/c/jni/JniLoader.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
/**
@@ -78,7 +79,8 @@ public class JniLoader {
}
private void load(String name) {
- final String libraryToLoad = System.mapLibraryName(name);
+ final String libraryToLoad =
+ getNormalizedArch() + File.separator + System.mapLibraryName(name);
try {
File temp = File.createTempFile("jnilib-", ".tmp", new File(System.getProperty("java.io.tmpdir")));
temp.deleteOnExit();
@@ -93,4 +95,19 @@ public class JniLoader {
throw new IllegalStateException("error loading native libraries: " + e);
}
}
+
+ private String getNormalizedArch() {
+ String arch = System.getProperty("os.arch").toLowerCase(Locale.US);
+ switch (arch) {
+ case "amd64":
+ arch = "x86_64";
+ break;
+ case "aarch64":
+ arch = "aarch_64";
+ break;
+ default:
+ break;
+ }
+ return arch;
+ }
}
diff --git a/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniLoader.java b/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniLoader.java
index dcbc4978f0..ffdd5e5273 100644
--- a/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniLoader.java
+++ b/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniLoader.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
/**
@@ -76,7 +77,8 @@ public final class JniLoader {
}
private void load(String name) {
- final String libraryToLoad = System.mapLibraryName(name);
+ final String libraryToLoad =
+ getNormalizedArch() + File.separator + System.mapLibraryName(name);
try {
File temp = File.createTempFile("jnilib-", ".tmp", new File(System.getProperty("java.io.tmpdir")));
temp.deleteOnExit();
@@ -92,4 +94,19 @@ public final class JniLoader {
throw new IllegalStateException("error loading native libraries: " + e);
}
}
+
+ private String getNormalizedArch() {
+ String arch = System.getProperty("os.arch").toLowerCase(Locale.US);
+ switch (arch) {
+ case "amd64":
+ arch = "x86_64";
+ break;
+ case "aarch64":
+ arch = "aarch_64";
+ break;
+ default:
+ break;
+ }
+ return arch;
+ }
}
diff --git a/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/JniLoader.java b/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/JniLoader.java
index 676956a34a..01c068f292 100644
--- a/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/JniLoader.java
+++ b/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/JniLoader.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.Locale;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -69,15 +70,30 @@ class JniLoader {
private static void loadGandivaLibraryFromJar(final String tmpDir)
throws IOException, GandivaException {
- final String libraryToLoad = System.mapLibraryName(LIBRARY_NAME);
- final File libraryFile = moveFileFromJarToTemp(tmpDir, libraryToLoad);
+ final String libraryToLoad =
+ getNormalizedArch() + File.separator + System.mapLibraryName(LIBRARY_NAME);
+ final File libraryFile = moveFileFromJarToTemp(tmpDir, libraryToLoad, LIBRARY_NAME);
System.load(libraryFile.getAbsolutePath());
}
+ private static String getNormalizedArch() {
+ String arch = System.getProperty("os.arch").toLowerCase(Locale.US);
+ switch (arch) {
+ case "amd64":
+ arch = "x86_64";
+ break;
+ case "aarch64":
+ arch = "aarch_64";
+ break;
+ default:
+ break;
+ }
+ return arch;
+ }
- private static File moveFileFromJarToTemp(final String tmpDir, String libraryToLoad)
+ private static File moveFileFromJarToTemp(final String tmpDir, String libraryToLoad, String libraryName)
throws IOException, GandivaException {
- final File temp = setupFile(tmpDir, libraryToLoad);
+ final File temp = setupFile(tmpDir, libraryName);
try (final InputStream is = JniLoader.class.getClassLoader()
.getResourceAsStream(libraryToLoad)) {
if (is == null) {
diff --git a/java/plasma/pom.xml b/java/plasma/pom.xml
index f837d692f2..d6ae115dcd 100644
--- a/java/plasma/pom.xml
+++ b/java/plasma/pom.xml
@@ -20,7 +20,19 @@
<name>Arrow Plasma Client</name>
<description>(DEPRECATED) Java client for the Plasma object store.
This is deprecated since 10.0.0. This will be removed from 12.0.0 or so.</description>
+ <properties>
+ <arrow.cpp.build.dir>../../../cpp/release-build</arrow.cpp.build.dir>
+ </properties>
<build>
+ <resources>
+ <resource>
+ <directory>${arrow.cpp.build.dir}</directory>
+ <includes>
+ <include>**/*plasma_java.*</include>
+ </includes>
+ </resource>
+ </resources>
+
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
diff --git a/java/pom.xml b/java/pom.xml
index edc9242227..78182242ad 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -940,7 +940,7 @@
-DARROW_JAVA_JNI_ENABLE_DEFAULT=OFF
-DBUILD_TESTING=OFF
-DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_LIBDIR=lib
+ -DCMAKE_INSTALL_LIBDIR=lib/${os.detected.arch}
-DCMAKE_INSTALL_PREFIX=${arrow.c.jni.dist.dir}
</commandlineArgs>
<workingDirectory>../</workingDirectory>
@@ -1014,7 +1014,7 @@
-DARROW_S3=ON
-DARROW_USE_CCACHE=ON
-DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_LIBDIR=lib
+ -DCMAKE_INSTALL_LIBDIR=lib/${os.detected.arch}
-DCMAKE_INSTALL_PREFIX=java-dist
-DCMAKE_UNITY_BUILD=ON
</commandlineArgs>
@@ -1056,7 +1056,7 @@
-DARROW_JAVA_JNI_ENABLE_DEFAULT=ON
-DBUILD_TESTING=OFF
-DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_LIBDIR=lib
+ -DCMAKE_INSTALL_LIBDIR=lib/${os.detected.arch}
-DCMAKE_INSTALL_PREFIX=${arrow.dataset.jni.dist.dir}
-DCMAKE_PREFIX_PATH=${project.basedir}/../java-dist
</commandlineArgs>
@@ -1130,7 +1130,7 @@
-DARROW_WITH_ZLIB=ON
-DARROW_WITH_ZSTD=ON
-DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_LIBDIR=lib
+ -DCMAKE_INSTALL_LIBDIR=lib/${os.detected.arch}
-DCMAKE_INSTALL_PREFIX=java-dist
-DCMAKE_UNITY_BUILD=ON
-GNinja
@@ -1173,7 +1173,7 @@
-DARROW_JAVA_JNI_ENABLE_DEFAULT=ON
-DBUILD_TESTING=OFF
-DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_LIBDIR=lib
+ -DCMAKE_INSTALL_LIBDIR=lib/${os.detected.arch}
-DCMAKE_INSTALL_PREFIX=${arrow.dataset.jni.dist.dir}
-DCMAKE_PREFIX_PATH=${project.basedir}/../java-dist
</commandlineArgs>