From ec9cb53cd715cc47dcd1348d002358fca1957eed Mon Sep 17 00:00:00 2001 From: Aaditya Srinivasan Date: Wed, 22 Jul 2026 20:18:34 +0530 Subject: [PATCH 1/4] Add ninja-release-jni-windows CMakePreset --- cpp/CMakePresets.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cpp/CMakePresets.json b/cpp/CMakePresets.json index 17f6317e17e6..d96db49c45dd 100644 --- a/cpp/CMakePresets.json +++ b/cpp/CMakePresets.json @@ -681,6 +681,28 @@ "PARQUET_REQUIRE_ENCRYPTION": "OFF", "re2_SOURCE": "BUNDLED" } + }, + { + "name": "ninja-release-jni-windows", + "inherits": [ + "base-release" + ], + "displayName": "Build for JNI on Windows", + "cacheVariables": { + "ARROW_ACERO": "ON", + "ARROW_BUILD_SHARED": "OFF", + "ARROW_BUILD_STATIC": "ON", + "ARROW_CSV": "ON", + "ARROW_DATASET": "ON", + "ARROW_DEPENDENCY_USE_SHARED": "OFF", + "ARROW_ORC": "ON", + "ARROW_PARQUET": "ON", + "ARROW_S3": "ON", + "ARROW_SUBSTRAIT": "ON", + "PARQUET_BUILD_EXAMPLES": "OFF", + "PARQUET_BUILD_EXECUTABLES": "OFF", + "PARQUET_REQUIRE_ENCRYPTION": "OFF" + } } ] } From f625d37181fb561d9c00c2f9951b2ce2382d8c78 Mon Sep 17 00:00:00 2001 From: Aaditya Srinivasan Date: Wed, 22 Jul 2026 20:38:40 +0530 Subject: [PATCH 2/4] Add JNI Windows CI job --- .github/workflows/cpp_extra.yml | 122 ++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml index 908d830b4856..a3e5920c2ee8 100644 --- a/.github/workflows/cpp_extra.yml +++ b/.github/workflows/cpp_extra.yml @@ -351,6 +351,128 @@ jobs: path: ccache key: jni-macos + jni-windows: + needs: check-enabled + if: needs.check-enabled.outputs.is_enabled == 'true' + name: JNI Windows + runs-on: windows-2022 + timeout-minutes: 240 + + steps: + - name: Disable Crash Dialogs + run: | + reg add ` + "HKCU\SOFTWARE\Microsoft\Windows\Windows Error Reporting" ` + /v DontShowUI ` + /t REG_DWORD ` + /d 1 ` + /f + + - name: Checkout Arrow + uses: actions/checkout@v7 + with: + persist-credentials: false + fetch-depth: 0 + submodules: recursive + + - name: Install msys2 (for tzdata for ORC tests) + uses: msys2/setup-msys2@v2 + id: setup-msys2 + + - name: Install cmake + shell: bash + run: | + ci/scripts/install_cmake.sh 4.1.2 /usr + + - name: Install ccache + shell: bash + run: | + ci/scripts/install_ccache.sh 4.13.6 /usr + + - name: Setup ccache + shell: bash + run: | + ci/scripts/ccache_setup.sh + + - name: ccache info + id: ccache-info + shell: bash + run: | + echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT + + - name: Restore ccache + uses: apache/infrastructure-actions/stash/restore@0ba14156c9f4c3cfbe4b0c9f36339ab0f8d81e53 + with: + path: ${{ steps.ccache-info.outputs.cache-dir }} + key: jni-windows + + - name: CMake + shell: cmd + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + cmake ^ + -S cpp ^ + -B cpp.build ^ + --preset=ninja-release-jni-windows ^ + -DARROW_BUILD_TESTS=ON ^ + -DCMAKE_INSTALL_PREFIX=%CD%\cpp.install + + - name: Build + shell: cmd + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + cmake --build cpp.build + + - name: Install + shell: cmd + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + cmake --install cpp.build + + - name: Test + shell: cmd + env: + MSYS2_LOCATION: ${{ steps.setup-msys2.outputs.msys2-location }} + ARROW_TEST_DATA: ${{ github.workspace }}\testing\data + PARQUET_TEST_DATA: ${{ github.workspace }}\cpp\submodules\parquet-testing\data + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + set TZDIR=%MSYS2_LOCATION%\usr\share\zoneinfo + + set exclude_tests=arrow-acero-asof-join-node-test + set exclude_tests=%exclude_tests%|arrow-acero-hash-join-node-test + + ctest ^ + --exclude-regex "%exclude_tests%" ^ + --label-regex unittest ^ + --output-on-failure ^ + --parallel %NUMBER_OF_PROCESSORS% ^ + --test-dir cpp.build ^ + --timeout 300 + + - name: Build example + shell: cmd + run: | + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 + + cmake ^ + -S cpp/examples/minimal_build ^ + -B cpp/examples/minimal_build.build ^ + -GNinja ^ + -DCMAKE_INSTALL_PREFIX=%CD%\cpp.install + + cmake --build cpp/examples/minimal_build.build + + call cpp\examples\minimal_build.build\arrow-example.exe + + - name: Save ccache + if: ${{ !cancelled() }} + continue-on-error: true + uses: apache/infrastructure-actions/stash/save@0ba14156c9f4c3cfbe4b0c9f36339ab0f8d81e53 + with: + path: ${{ steps.ccache-info.outputs.cache-dir }} + key: jni-windows + odbc-linux: needs: check-enabled if: needs.check-enabled.outputs.is_enabled == 'true' From b1a76066daab7d56fffd1206cc05daf12b3ae66f Mon Sep 17 00:00:00 2001 From: Aaditya Srinivasan Date: Thu, 23 Jul 2026 17:49:06 +0530 Subject: [PATCH 3/4] exp: Define ARROW_COMPUTE_STATIC for compute test object library --- cpp/src/arrow/compute/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index e965b89ec055..88f9ae900647 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -46,6 +46,10 @@ if(ARROW_TESTING AND ARROW_COMPUTE) target_link_libraries(arrow_compute_testing PUBLIC $ PUBLIC ${ARROW_GTEST_GTEST}) + if(ARROW_BUILD_STATIC AND WIN32) + target_compile_definitions(arrow_compute_testing PUBLIC ARROW_COMPUTE_STATIC + ARROW_STATIC) + endif() endif() set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") From 1de6e9c9c2445762ef79bd1226f6cd0c30f07ccd Mon Sep 17 00:00:00 2001 From: Aaditya Srinivasan Date: Thu, 23 Jul 2026 18:49:16 +0530 Subject: [PATCH 4/4] Debug: Print Substrait CMake target properties --- cpp/src/arrow/engine/CMakeLists.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/cpp/src/arrow/engine/CMakeLists.txt b/cpp/src/arrow/engine/CMakeLists.txt index adf98087ad1d..ac5c028357c6 100644 --- a/cpp/src/arrow/engine/CMakeLists.txt +++ b/cpp/src/arrow/engine/CMakeLists.txt @@ -70,6 +70,19 @@ foreach(LIB_TARGET ${ARROW_SUBSTRAIT_LIBRARIES}) target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_ENGINE_EXPORTING) endforeach() +message(STATUS "=== ARROW_SUBSTRAIT_LIBRARIES ===") + +foreach(LIB_TARGET ${ARROW_SUBSTRAIT_LIBRARIES}) + get_target_property(DEFS ${LIB_TARGET} COMPILE_DEFINITIONS) + get_target_property(IFACE_DEFS ${LIB_TARGET} INTERFACE_COMPILE_DEFINITIONS) + get_target_property(LINK_LIBS ${LIB_TARGET} LINK_LIBRARIES) + + message(STATUS "${LIB_TARGET}") + message(STATUS " COMPILE_DEFINITIONS=${DEFS}") + message(STATUS " INTERFACE_COMPILE_DEFINITIONS=${IFACE_DEFS}") + message(STATUS " LINK_LIBRARIES=${LINK_LIBS}") +endforeach() + set(ARROW_SUBSTRAIT_TEST_LINK_LIBS ${ARROW_SUBSTRAIT_LINK_lIBS} ${ARROW_TEST_LINK_LIBS}) if(ARROW_TEST_LINKAGE STREQUAL "static") list(APPEND ARROW_SUBSTRAIT_TEST_LINK_LIBS arrow_substrait_static @@ -94,3 +107,13 @@ add_arrow_test(substrait_test "arrow_substrait") add_subdirectory(substrait) + +get_target_property(TEST_DEFS substrait_test COMPILE_DEFINITIONS) +get_target_property(TEST_IFACE substrait_test INTERFACE_COMPILE_DEFINITIONS) + +message(STATUS "=== substrait_test ===") +message(STATUS "COMPILE_DEFINITIONS=${TEST_DEFS}") +message(STATUS "INTERFACE_COMPILE_DEFINITIONS=${TEST_IFACE}") + +get_target_property(TEST_LIBS substrait_test LINK_LIBRARIES) +message(STATUS "LINK_LIBRARIES=${TEST_LIBS}")