Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 18 additions & 21 deletions .github/workflows/rc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,20 +197,13 @@ jobs:
python-version: 3.12
- name: Install Archery
run: pip install -e arrow/dev/archery[all]
- name: Set up Java
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
- name: Install dependencies
run: |
# We want to use llvm@14 to avoid shared z3
# dependency. llvm@14 doesn't depend on z3 and llvm depends
# on z3. And Homebrew's z3 provides only shared library. It
# doesn't provides static z3 because z3's CMake doesn't accept
# building both shared and static libraries at once.
# See also: Z3_BUILD_LIBZ3_SHARED in
# https://github.com/Z3Prover/z3/blob/master/README-CMake.md
#
# If llvm is installed, Apache Arrow C++ uses llvm rather than
# llvm@14 because llvm is newer than llvm@14.
brew uninstall llvm || :

# We can remove this when we drop support for
# macos-15-intel. because macos-14 or later with arm64 uses /opt/homebrew/
# not /usr/local/.
Expand All @@ -228,6 +221,9 @@ jobs:
done
brew install --overwrite python3

# Use a version supported by Gandiva with prebuilt macOS bottles.
brew install --force-bottle llvm@18

if [ "$(uname -m)" = "arm64" ]; then
# pkg-config formula is deprecated but it's still installed
# in GitHub Actions runner now. We can remove this once
Expand All @@ -236,7 +232,7 @@ jobs:
brew uninstall pkg-config@0.29.2 || :
fi

# We don't use Homebrew's aws-sdk-cpp and gRPC. See the
# We don't use Homebrew's aws-sdk-cpp, gRPC, RE2 or Protobuf. See the
# "brew uninstall" calls below for details. So we don't install
# them instead of installing and uninstalling them.
#
Expand All @@ -251,8 +247,10 @@ jobs:
#
# We don't use Homebrew's Node.js too. Homebrew doesn't provide
# a bottle for it on x86_64 macOS for the same reason.
HOMEBREW_BUNDLE_BREW_SKIP="aws-sdk-cpp grpc node" \
brew bundle --file=arrow/cpp/Brewfile
# LLVM is installed explicitly above instead of using the latest version.
# Keep installed dependencies instead of rebuilding newer releases.
HOMEBREW_BUNDLE_BREW_SKIP="aws-sdk-cpp grpc re2 protobuf node llvm" \
brew bundle --no-upgrade --verbose --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
Expand All @@ -267,14 +265,15 @@ jobs:
# We uninstall Homebrew's RE2 to ensure using bundled RE2.
brew uninstall grpc || : # gRPC depends on RE2
brew uninstall grpc@1.54 || : # gRPC 1.54 may be installed too
brew uninstall re2
# We want to use bundled Protobuf for static linking. If
# Homebrew's Protobuf is installed, its library file may be
# used on test We uninstall Homebrew's Protobuf to ensure using
# bundled Protobuf.
brew uninstall protobuf

brew bundle --file=Brewfile
for package in re2 protobuf; do
if brew list --versions "${package}" >/dev/null; then
brew uninstall "${package}"
fi
done
- name: Prepare ccache
run: |
echo "CCACHE_DIR=${PWD}/ccache" >> ${GITHUB_ENV}
Expand All @@ -287,8 +286,6 @@ jobs:
- name: Build
run: |
set -e
# make brew Java available to CMake
export JAVA_HOME=$(brew --prefix openjdk@17)/libexec/openjdk.jdk/Contents/Home
ci/scripts/jni_macos_build.sh . arrow build jni
- name: Compress into single artifact to keep directory structure
run: tar -cvzf jni-macos-${{ matrix.platform.arch }}.tar.gz jni/
Expand Down
1 change: 0 additions & 1 deletion Brewfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,3 @@
# under the License.

brew "openjdk@17"
brew "sccache"
11 changes: 11 additions & 0 deletions ci/scripts/jni_macos_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,22 @@ export ARROW_PARQUET=ON

export AWS_EC2_METADATA_DISABLED=TRUE

llvm_root="$(brew --prefix llvm@18)"
"${llvm_root}/bin/llvm-config" --version
llvm_cmake_args=(
"-DLLVM_ROOT=${llvm_root}"
"-DLLVM_DIR=${llvm_root}/lib/cmake/llvm"
"-DCLANG_EXECUTABLE=${llvm_root}/bin/clang"
"-DLLVM_LINK_EXECUTABLE=${llvm_root}/bin/llvm-link"
)

cmake \
-S "${arrow_dir}/cpp" \
-B "${build_dir}/cpp" \
--preset=ninja-release-jni-macos \
-Dabsl_SOURCE=BUNDLED \
-Dsimdjson_SOURCE=BUNDLED \
"${llvm_cmake_args[@]}" \
-DCMAKE_INSTALL_PREFIX="${install_dir}"
cmake --build "${build_dir}/cpp" --target install
github_actions_group_end
Expand All @@ -88,6 +98,7 @@ fi
JAVA_JNI_CMAKE_ARGS="-DProtobuf_ROOT=${build_dir}/cpp/_deps/protobuf-build"
JAVA_JNI_CMAKE_ARGS+=" -DProtobuf_SRC_ROOT_FOLDER=${build_dir}/cpp/_deps/protobuf-src"
JAVA_JNI_CMAKE_ARGS+=" -DARROW_JAVA_JNI_ABSL_INCLUDE_DIR=${absl_include_dir}"
JAVA_JNI_CMAKE_ARGS+=" ${llvm_cmake_args[*]}"
export JAVA_JNI_CMAKE_ARGS
"${source_dir}/ci/scripts/jni_build.sh" \
"${source_dir}" \
Expand Down
6 changes: 6 additions & 0 deletions dataset/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

find_package(ArrowDataset REQUIRED)
find_package(ArrowSubstrait REQUIRED)
find_package(ArrowS3 QUIET)

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${JNI_INCLUDE_DIRS} ${JNI_HEADERS_DIR})
Expand All @@ -40,6 +41,11 @@ target_link_libraries(arrow_java_jni_dataset
ArrowDataset::arrow_dataset_static
ArrowSubstrait::arrow_substrait_static)

# Older Arrow releases include S3 in arrow_static instead of a separate library.
if(TARGET ArrowS3::arrow_s3_static)
target_link_libraries(arrow_java_jni_dataset ArrowS3::arrow_s3_static)
endif()

if(BUILD_TESTING)
add_executable(arrow-java-jni-dataset-test src/main/cpp/jni_util_test.cc
src/main/cpp/jni_util.cc)
Expand Down
Loading