feat: support zvec core-only build (#481)

This commit is contained in:
feihongxu0824 2026-06-09 23:45:42 +08:00 committed by GitHub
parent da39a33feb
commit 4679a8f39d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 448 additions and 230 deletions

View File

@ -9,18 +9,30 @@ if(NOT ZVEC_SOURCE_DIR)
message(FATAL_ERROR "ZVEC_SOURCE_DIR is required")
endif()
option(ENABLE_ZVEC_CORE "Validate zvec-core-only subproject integration" OFF)
if(ENABLE_ZVEC_CORE)
set(BUILD_ZVEC_CORE_ONLY ON CACHE BOOL "" FORCE)
endif()
add_subdirectory("${ZVEC_SOURCE_DIR}" zvec)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
add_executable(zvec_embed_db_example
"${ZVEC_SOURCE_DIR}/examples/c++/db/main.cc")
target_link_libraries(zvec_embed_db_example PRIVATE zvec_shared)
if(ENABLE_ZVEC_CORE)
add_executable(zvec_embed_core_only_example
"${ZVEC_SOURCE_DIR}/examples/c++/core/main.cc")
target_link_libraries(zvec_embed_core_only_example PRIVATE zvec_core_shared)
else()
add_executable(zvec_embed_db_example
"${ZVEC_SOURCE_DIR}/examples/c++/db/main.cc")
target_link_libraries(zvec_embed_db_example PRIVATE zvec_shared)
add_executable(zvec_embed_core_example
"${ZVEC_SOURCE_DIR}/examples/c++/core/main.cc")
target_link_libraries(zvec_embed_core_example PRIVATE zvec_shared)
add_executable(zvec_embed_core_example
"${ZVEC_SOURCE_DIR}/examples/c++/core/main.cc")
target_link_libraries(zvec_embed_core_example PRIVATE zvec_shared)
add_executable(zvec_embed_ailego_example
"${ZVEC_SOURCE_DIR}/examples/c++/ailego/main.cc")
target_link_libraries(zvec_embed_ailego_example PRIVATE zvec_shared)
add_executable(zvec_embed_ailego_example
"${ZVEC_SOURCE_DIR}/examples/c++/ailego/main.cc")
target_link_libraries(zvec_embed_ailego_example PRIVATE zvec_shared)
endif()

View File

@ -143,6 +143,27 @@ jobs:
}
}
# core-example links libzvec_core directly, so copy zvec_core.dll too.
$found = $false
foreach ($sub in @("$buildDir\bin", "$buildDir\bin\Release", "$buildDir\lib", "$buildDir\lib\Release")) {
if (Test-Path "$sub\zvec_core.dll") {
Copy-Item "$sub\zvec_core.dll" -Destination . -Force
Write-Host "Copied zvec_core.dll from $sub"
$found = $true
break
}
}
if (-not $found) {
Write-Host "WARNING: zvec_core.dll not found, searching recursively..."
$dll = Get-ChildItem -Path $buildDir -Filter "zvec_core.dll" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1
if ($dll) {
Copy-Item $dll.FullName -Destination . -Force
Write-Host "Copied zvec_core.dll from $($dll.DirectoryName)"
} else {
Write-Error "zvec_core.dll not found anywhere under $buildDir"
}
}
.\db-example.exe
.\core-example.exe
.\ailego-example.exe
@ -151,4 +172,4 @@ jobs:
- name: Show sccache statistics
if: always()
run: sccache --show-stats
shell: powershell
shell: powershell

View File

@ -11,9 +11,19 @@ permissions:
jobs:
subproject-integration:
name: Subproject Build & Example (linux-x64)
name: Subproject Build & Example (${{ matrix.mode }})
runs-on: ubuntu-24.04
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
include:
- mode: linux-x64
cache_key: full
enable_zvec_core: false
- mode: linux-x64-enable-zvec-core
cache_key: core-only
enable_zvec_core: true
steps:
- name: Checkout code
@ -24,7 +34,7 @@ jobs:
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: cmake-subproject-linux-x64
key: cmake-subproject-linux-x64-${{ matrix.cache_key }}
max-size: 150M
- name: Set up Python
@ -58,27 +68,39 @@ jobs:
- name: Configure subproject integration
run: |
SMOKE_SOURCE="$RUNNER_TEMP/zvec-subproject-nightly"
SMOKE_BUILD="$RUNNER_TEMP/zvec-subproject-nightly-build"
SMOKE_SOURCE="$RUNNER_TEMP/zvec-subproject-nightly-${{ matrix.cache_key }}"
SMOKE_BUILD="$RUNNER_TEMP/zvec-subproject-nightly-build-${{ matrix.cache_key }}"
mkdir -p "$SMOKE_SOURCE" "$SMOKE_BUILD"
cp "$GITHUB_WORKSPACE/.github/cmake/subproject-integration/CMakeLists.txt" \
"$SMOKE_SOURCE/CMakeLists.txt"
cmake -S "$SMOKE_SOURCE" -B "$SMOKE_BUILD" -G Ninja \
-DZVEC_SOURCE_DIR="$GITHUB_WORKSPACE" \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TOOLS=OFF \
-DBUILD_C_BINDINGS=OFF \
-DBUILD_PYTHON_BINDINGS=OFF \
-DENABLE_WERROR=ON \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
CMAKE_ARGS=(
-DZVEC_SOURCE_DIR="$GITHUB_WORKSPACE"
-DCMAKE_BUILD_TYPE=Release
-DENABLE_WERROR=ON
-DCMAKE_C_COMPILER_LAUNCHER=ccache
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
)
if [[ "${{ matrix.enable_zvec_core }}" == "true" ]]; then
CMAKE_ARGS+=(-DENABLE_ZVEC_CORE=ON)
else
CMAKE_ARGS+=(
-DBUILD_TOOLS=OFF
-DBUILD_C_BINDINGS=OFF
-DBUILD_PYTHON_BINDINGS=OFF
)
fi
cmake -S "$SMOKE_SOURCE" -B "$SMOKE_BUILD" -G Ninja \
"${CMAKE_ARGS[@]}"
echo "SMOKE_BUILD=$SMOKE_BUILD" >> "$GITHUB_ENV"
shell: bash
- name: Build subproject targets
if: ${{ ! matrix.enable_zvec_core }}
run: |
cmake --build "$SMOKE_BUILD" --target \
core_knn_diskann \
@ -89,9 +111,32 @@ jobs:
shell: bash
- name: Run subproject examples
if: ${{ ! matrix.enable_zvec_core }}
run: |
cd "$SMOKE_BUILD"
./bin/zvec_embed_db_example
./bin/zvec_embed_core_example
./bin/zvec_embed_ailego_example
shell: bash
- name: Build enable_zvec_core targets
if: ${{ matrix.enable_zvec_core }}
run: |
cmake --build "$SMOKE_BUILD" --target \
zvec_core_shared \
zvec_embed_core_only_example \
--parallel "$NPROC"
shell: bash
- name: Run enable_zvec_core example
if: ${{ matrix.enable_zvec_core }}
run: |
cd "$SMOKE_BUILD"
./bin/zvec_embed_core_only_example
ldd ./bin/zvec_embed_core_only_example | tee zvec-core-only-ldd.txt
grep -q 'libzvec_core\.so' zvec-core-only-ldd.txt
if grep -q 'libzvec\.so' zvec-core-only-ldd.txt; then
echo "core-only example unexpectedly depends on libzvec.so"
exit 1
fi
shell: bash

View File

@ -74,13 +74,28 @@ endif()
include_directories(${PROJECT_ROOT_DIR}/src/include)
include_directories(${PROJECT_ROOT_DIR}/src)
option(BUILD_ZVEC_CORE_ONLY "Build only zvec-core and its all-in-one shared library" OFF)
message(STATUS "BUILD_ZVEC_CORE_ONLY:${BUILD_ZVEC_CORE_ONLY}")
option(BUILD_ZVEC_SHARED "Build all-in-one C++ shared library libzvec" ON)
option(BUILD_ZVEC_CORE_SHARED "Build all-in-one zvec-core shared library libzvec_core" ON)
option(BUILD_PYTHON_BINDINGS "Build Python bindings using pybind11" OFF)
message(STATUS "BUILD_PYTHON_BINDINGS:${BUILD_PYTHON_BINDINGS}")
option(BUILD_C_BINDINGS "Build C bindings" ON)
message(STATUS "BUILD_C_BINDINGS:${BUILD_C_BINDINGS}")
option(BUILD_TOOLS "Build tools" ON)
if(BUILD_ZVEC_CORE_ONLY)
set(BUILD_ZVEC_SHARED OFF CACHE BOOL "Build all-in-one C++ shared library libzvec" FORCE)
set(BUILD_ZVEC_CORE_SHARED ON CACHE BOOL "Build all-in-one zvec-core shared library libzvec_core" FORCE)
set(BUILD_PYTHON_BINDINGS OFF CACHE BOOL "Build Python bindings using pybind11" FORCE)
set(BUILD_C_BINDINGS OFF CACHE BOOL "Build C bindings" FORCE)
set(BUILD_TOOLS OFF CACHE BOOL "Build tools" FORCE)
endif()
message(STATUS "BUILD_ZVEC_SHARED:${BUILD_ZVEC_SHARED}")
message(STATUS "BUILD_ZVEC_CORE_SHARED:${BUILD_ZVEC_CORE_SHARED}")
message(STATUS "BUILD_PYTHON_BINDINGS:${BUILD_PYTHON_BINDINGS}")
message(STATUS "BUILD_C_BINDINGS:${BUILD_C_BINDINGS}")
message(STATUS "BUILD_TOOLS:${BUILD_TOOLS}")
option(RABITQ_ENABLE_AVX512 "Compile RaBitQ with AVX-512 support" OFF)
@ -135,9 +150,18 @@ message(STATUS "USE_OSS_MIRROR:${USE_OSS_MIRROR}")
cc_directory(thirdparty)
cc_directories(src)
cc_directories(tests)
add_custom_target(clang_tidy_deps DEPENDS zvec_proto ARROW.BUILD glog gflags Lz4.BUILD)
if(BUILD_ZVEC_CORE_ONLY)
# Keep the include context from tests/CMakeLists.txt for core tests that include tests/test_util.h.
include_directories(${PROJECT_ROOT_DIR})
cc_directory(tests/core)
else()
cc_directories(tests)
endif()
if(NOT BUILD_ZVEC_CORE_ONLY)
add_custom_target(clang_tidy_deps DEPENDS zvec_proto ARROW.BUILD glog gflags Lz4.BUILD)
endif()
if(BUILD_TOOLS)
cc_directories(tools)

View File

@ -13,66 +13,148 @@ if(NOT DEFINED HOST_BUILD_DIR)
set(HOST_BUILD_DIR "build")
endif()
set(ZVEC_INCLUDE_DIR ${CMAKE_BINARY_DIR}/../../../src/include)
set(ZVEC_LIB_DIR ${CMAKE_BINARY_DIR}/../../../${HOST_BUILD_DIR}/lib)
get_filename_component(ZVEC_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
set(ZVEC_INCLUDE_DIR ${ZVEC_ROOT_DIR}/src/include)
set(ZVEC_LIB_DIR ${ZVEC_ROOT_DIR}/${HOST_BUILD_DIR}/lib)
set(ZVEC_LINK_VIA_CMAKE_TARGET OFF)
if(TARGET zvec_shared OR TARGET zvec_core_shared)
set(ZVEC_LINK_VIA_CMAKE_TARGET ON)
endif()
# Add include and library search paths
include_directories(${ZVEC_INCLUDE_DIR})
link_directories(${ZVEC_LIB_DIR})
set(ZVEC_LIB_SEARCH_DIRS ${ZVEC_LIB_DIR})
# Support multi-config builds (MSVC puts libs in Debug/Release subdirectories)
if(CMAKE_BUILD_TYPE)
link_directories(${ZVEC_LIB_DIR}/${CMAKE_BUILD_TYPE})
set(ZVEC_CONFIG_LIB_DIR ${ZVEC_LIB_DIR}/${CMAKE_BUILD_TYPE})
if(EXISTS "${ZVEC_CONFIG_LIB_DIR}")
list(APPEND ZVEC_LIB_SEARCH_DIRS ${ZVEC_CONFIG_LIB_DIR})
endif()
endif()
if(NOT ZVEC_LINK_VIA_CMAKE_TARGET)
link_directories(${ZVEC_LIB_SEARCH_DIRS})
set(CMAKE_BUILD_RPATH ${ZVEC_LIB_SEARCH_DIRS})
endif()
if(WIN32)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
find_package(Threads REQUIRED)
function(zvec_find_shared_library OUT_VAR LIB_NAME)
unset(${OUT_VAR} CACHE)
if(WIN32)
find_library(${OUT_VAR}
NAMES ${LIB_NAME}_shared ${LIB_NAME}
PATHS ${ZVEC_LIB_SEARCH_DIRS}
NO_DEFAULT_PATH
)
else()
set(ZVEC_ORIGINAL_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
if(APPLE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib")
else()
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
endif()
find_library(${OUT_VAR}
NAMES ${LIB_NAME}
PATHS ${ZVEC_LIB_SEARCH_DIRS}
NO_DEFAULT_PATH
)
set(CMAKE_FIND_LIBRARY_SUFFIXES "${ZVEC_ORIGINAL_LIBRARY_SUFFIXES}")
endif()
set(${OUT_VAR} "${${OUT_VAR}}" PARENT_SCOPE)
endfunction()
set(ZVEC_CORE_EXAMPLE_DEFAULT ON)
if(NOT TARGET zvec_core_shared)
zvec_find_shared_library(ZVEC_CORE_SHARED_LIBRARY zvec_core)
if(NOT ZVEC_CORE_SHARED_LIBRARY)
set(ZVEC_CORE_EXAMPLE_DEFAULT OFF)
endif()
endif()
set(ZVEC_FULL_EXAMPLES_DEFAULT ON)
if(NOT TARGET zvec_shared)
zvec_find_shared_library(ZVEC_SHARED_LIBRARY zvec)
if(NOT ZVEC_SHARED_LIBRARY)
set(ZVEC_FULL_EXAMPLES_DEFAULT OFF)
endif()
endif()
option(BUILD_ZVEC_CORE_EXAMPLE "Build zvec-core example linked only with libzvec_core" ${ZVEC_CORE_EXAMPLE_DEFAULT})
option(BUILD_ZVEC_FULL_EXAMPLES "Build examples linked with libzvec" ${ZVEC_FULL_EXAMPLES_DEFAULT})
# --- Create INTERFACE target for libzvec (all-in-one C++ shared library) ---
# libzvec.so/.dylib/.dll already bundles all zvec internal components
# (zvec_db, zvec_core, zvec_ailego, zvec_turbo), so no individual dependency
# (zvec, zvec_core, zvec_ailego, zvec_turbo), so no individual dependency
# libraries need to be specified by the consumer.
add_library(zvec-lib INTERFACE)
target_link_libraries(zvec-lib INTERFACE
zvec
Threads::Threads
)
if(NOT WIN32)
target_link_libraries(zvec-lib INTERFACE ${CMAKE_DL_LIBS})
if(BUILD_ZVEC_FULL_EXAMPLES)
add_library(zvec-lib INTERFACE)
if(TARGET zvec_shared)
target_link_libraries(zvec-lib INTERFACE zvec_shared)
else()
if(ZVEC_SHARED_LIBRARY)
target_link_libraries(zvec-lib INTERFACE "${ZVEC_SHARED_LIBRARY}")
else()
message(FATAL_ERROR
"libzvec shared library was not found in ${ZVEC_LIB_SEARCH_DIRS}. "
"Build zvec with -DBUILD_ZVEC_SHARED=ON or disable BUILD_ZVEC_FULL_EXAMPLES.")
endif()
endif()
endif()
# --- Create INTERFACE target for libzvec_core (core-only all-in-one library) ---
# The core example intentionally depends only on libzvec_core.
if(BUILD_ZVEC_CORE_EXAMPLE)
add_library(zvec-core-lib INTERFACE)
if(TARGET zvec_core_shared)
target_link_libraries(zvec-core-lib INTERFACE zvec_core_shared)
else()
zvec_find_shared_library(ZVEC_CORE_SHARED_LIBRARY zvec_core)
if(ZVEC_CORE_SHARED_LIBRARY)
target_link_libraries(zvec-core-lib INTERFACE "${ZVEC_CORE_SHARED_LIBRARY}")
else()
message(FATAL_ERROR
"libzvec_core shared library was not found in ${ZVEC_LIB_SEARCH_DIRS}. "
"Build zvec with -DBUILD_ZVEC_CORE_SHARED=ON or "
"-DBUILD_ZVEC_CORE_ONLY=ON, or disable BUILD_ZVEC_CORE_EXAMPLE.")
endif()
endif()
endif()
# --- Executables ---
add_executable(db-example db/main.cc)
target_link_libraries(db-example PRIVATE zvec-lib)
if(ANDROID)
target_link_libraries(db-example PRIVATE log)
set(ZVEC_EXAMPLE_TARGETS)
if(BUILD_ZVEC_FULL_EXAMPLES)
add_executable(db-example db/main.cc)
target_link_libraries(db-example PRIVATE zvec-lib)
if(ANDROID)
target_link_libraries(db-example PRIVATE log)
endif()
list(APPEND ZVEC_EXAMPLE_TARGETS db-example)
add_executable(ailego-example ailego/main.cc)
target_link_libraries(ailego-example PRIVATE zvec-lib)
list(APPEND ZVEC_EXAMPLE_TARGETS ailego-example)
endif()
add_executable(core-example core/main.cc)
target_link_libraries(core-example PRIVATE zvec-lib)
add_executable(ailego-example ailego/main.cc)
target_link_libraries(ailego-example PRIVATE zvec-lib)
if(BUILD_ZVEC_CORE_EXAMPLE)
add_executable(core-example core/main.cc)
target_link_libraries(core-example PRIVATE zvec-core-lib)
list(APPEND ZVEC_EXAMPLE_TARGETS core-example)
endif()
# Strip symbols to reduce executable size
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ANDROID)
add_custom_command(TARGET db-example POST_BUILD
COMMAND ${CMAKE_STRIP} "$<TARGET_FILE:db-example>"
COMMENT "Stripping symbols from db-example")
add_custom_command(TARGET core-example POST_BUILD
COMMAND ${CMAKE_STRIP} "$<TARGET_FILE:core-example>"
COMMENT "Stripping symbols from core-example")
add_custom_command(TARGET ailego-example POST_BUILD
COMMAND ${CMAKE_STRIP} "$<TARGET_FILE:ailego-example>"
COMMENT "Stripping symbols from ailego-example")
foreach(ZVEC_EXAMPLE_TARGET ${ZVEC_EXAMPLE_TARGETS})
add_custom_command(TARGET ${ZVEC_EXAMPLE_TARGET} POST_BUILD
COMMAND ${CMAKE_STRIP} "$<TARGET_FILE:${ZVEC_EXAMPLE_TARGET}>"
COMMENT "Stripping symbols from ${ZVEC_EXAMPLE_TARGET}")
endforeach()
endif()
# Optimize for size
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ANDROID)
set_property(TARGET db-example core-example ailego-example
PROPERTY COMPILE_FLAGS "-Os")
set_property(TARGET db-example core-example ailego-example
PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ANDROID AND ZVEC_EXAMPLE_TARGETS)
set_property(TARGET ${ZVEC_EXAMPLE_TARGETS} PROPERTY COMPILE_FLAGS "-Os")
set_property(TARGET ${ZVEC_EXAMPLE_TARGETS} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()

View File

@ -8,152 +8,162 @@ git_version(ZVEC_VERSION ${CMAKE_CURRENT_SOURCE_DIR})
cc_directory(ailego)
cc_directory(turbo)
cc_directory(core)
cc_directory(db)
cc_directory(binding)
if(NOT BUILD_ZVEC_CORE_ONLY)
cc_directory(db)
cc_directory(binding)
endif()
# =============================================================================
# Build ALL-IN-ONE C++ Shared Library (libzvec.so / libzvec.dylib)
# Build ALL-IN-ONE C++ Shared Libraries
# =============================================================================
# Merges all zvec internal static libraries (zvec_db, zvec_core, zvec_ailego,
# zvec_turbo) into a single shared library, exposing the full C++ interface.
# Unlike zvec_c_api which only exposes C symbols, this library preserves all
# Merges zvec internal static libraries into shared libraries while preserving
# C++ symbols for direct C++ linking.
include(GNUInstallDirs)
find_package(Threads REQUIRED)
# Generate a minimal stub source (add_library SHARED requires at least one source)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/zvec_allin_stub.cc
"// Auto-generated stub for zvec all-in-one C++ shared library\n"
)
function(zvec_add_all_in_one_shared TARGET_NAME OUTPUT_NAME)
cmake_parse_arguments(ZVEC_ALLIN "" "" "LIBS" ${ARGN})
if(NOT ZVEC_ALLIN_LIBS)
message(FATAL_ERROR "zvec_add_all_in_one_shared requires LIBS")
endif()
add_library(zvec_shared SHARED
${CMAKE_CURRENT_BINARY_DIR}/zvec_allin_stub.cc
)
set_target_properties(zvec_shared PROPERTIES
OUTPUT_NAME "zvec"
POSITION_INDEPENDENT_CODE ON
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
# Determine whole-archive flag for current platform
if(MSVC)
set(ZVEC_ALLIN_WA_PREFIX "/WHOLEARCHIVE:")
set(ZVEC_ALLIN_WA_SUFFIX "")
elseif(APPLE)
set(ZVEC_ALLIN_WA_PREFIX "-Wl,-force_load,")
set(ZVEC_ALLIN_WA_SUFFIX "")
else()
set(ZVEC_ALLIN_WA_PREFIX "-Wl,--whole-archive")
set(ZVEC_ALLIN_WA_SUFFIX "-Wl,--no-whole-archive")
endif()
# Platform-specific whole-archive linking (mirrors binding/c/CMakeLists.txt)
if(MSVC)
# On MSVC, WINDOWS_EXPORT_ALL_SYMBOLS generates a .def file only from the
# target's own object files. /WHOLEARCHIVE: pulls objects into the DLL but
# they are NOT scanned for the .def, leaving the import library empty.
# Fix: include static-library objects directly via TARGET_OBJECTS (CMake 3.21+)
# so the def-file generator sees every symbol.
target_sources(zvec_shared PRIVATE
$<TARGET_OBJECTS:zvec_db>
$<TARGET_OBJECTS:zvec_core>
$<TARGET_OBJECTS:zvec_ailego>
$<TARGET_OBJECTS:zvec_turbo>
)
target_link_libraries(zvec_shared
PRIVATE
zvec_db
zvec_core
zvec_ailego
zvec_turbo
Threads::Threads
)
elseif(APPLE)
target_link_options(zvec_shared PRIVATE
${ZVEC_ALLIN_WA_PREFIX}$<TARGET_FILE:zvec_db>
${ZVEC_ALLIN_WA_PREFIX}$<TARGET_FILE:zvec_core>
${ZVEC_ALLIN_WA_PREFIX}$<TARGET_FILE:zvec_ailego>
${ZVEC_ALLIN_WA_PREFIX}$<TARGET_FILE:zvec_turbo>
)
target_link_libraries(zvec_shared
PRIVATE
zvec_db
zvec_core
zvec_ailego
zvec_turbo
Threads::Threads
${CMAKE_DL_LIBS}
)
else()
# Linux and other Unix-like systems
target_link_libraries(zvec_shared
PRIVATE
${ZVEC_ALLIN_WA_PREFIX}
zvec_db
zvec_core
zvec_ailego
zvec_turbo
${ZVEC_ALLIN_WA_SUFFIX}
Threads::Threads
${CMAKE_DL_LIBS}
)
# Try static linking of libstdc++ and libgcc for better portability
set(ALLIN_STATIC_LIBS_FOUND FALSE)
execute_process(
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libstdc++.a
OUTPUT_VARIABLE ALLIN_LIBSTDCPP_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libgcc.a
OUTPUT_VARIABLE ALLIN_LIBGCC_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(EXISTS "${ALLIN_LIBSTDCPP_PATH}" AND EXISTS "${ALLIN_LIBGCC_PATH}")
if(IS_ABSOLUTE "${ALLIN_LIBSTDCPP_PATH}" AND IS_ABSOLUTE "${ALLIN_LIBGCC_PATH}")
set(ALLIN_STATIC_LIBS_FOUND TRUE)
foreach(ZVEC_ALLIN_LIB ${ZVEC_ALLIN_LIBS})
if(NOT TARGET ${ZVEC_ALLIN_LIB})
message(FATAL_ERROR "Target ${ZVEC_ALLIN_LIB} is required by ${TARGET_NAME}")
endif()
endif()
if(ALLIN_STATIC_LIBS_FOUND)
target_link_options(zvec_shared PRIVATE -static-libstdc++ -static-libgcc)
message(STATUS "zvec_shared: Using static libstdc++ and libgcc")
else()
message(STATUS "zvec_shared: Using dynamic linking for libstdc++ and libgcc")
endif()
endif()
endforeach()
# Include directories
target_include_directories(zvec_shared
PUBLIC
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src/generated>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${PROJECT_SOURCE_DIR}/src
)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}_stub.cc
"// Auto-generated stub for ${TARGET_NAME}\n"
)
# Strip symbols in release builds to reduce library size
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
if(UNIX AND NOT APPLE)
# add_custom_command(TARGET zvec_shared POST_BUILD
# COMMAND ${CMAKE_STRIP} $<TARGET_FILE:zvec_shared>
# COMMENT "Stripping symbols from libzvec.so"
# )
elseif(APPLE)
add_custom_command(TARGET zvec_shared POST_BUILD
COMMAND /usr/bin/strip -x $<TARGET_FILE:zvec_shared>
COMMENT "Stripping symbols from libzvec.dylib"
add_library(${TARGET_NAME} SHARED
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}_stub.cc
)
set_target_properties(${TARGET_NAME} PROPERTIES
OUTPUT_NAME "${OUTPUT_NAME}"
POSITION_INDEPENDENT_CODE ON
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
if(WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES
ARCHIVE_OUTPUT_NAME "${TARGET_NAME}"
)
endif()
target_compile_features(${TARGET_NAME} PUBLIC cxx_std_17)
if(MSVC)
foreach(ZVEC_ALLIN_LIB ${ZVEC_ALLIN_LIBS})
target_sources(${TARGET_NAME} PRIVATE
$<TARGET_OBJECTS:${ZVEC_ALLIN_LIB}>
)
endforeach()
target_link_libraries(${TARGET_NAME}
PRIVATE
${ZVEC_ALLIN_LIBS}
Threads::Threads
)
elseif(APPLE)
foreach(ZVEC_ALLIN_LIB ${ZVEC_ALLIN_LIBS})
list(APPEND ZVEC_ALLIN_WA_OPTIONS
-Wl,-force_load,$<TARGET_FILE:${ZVEC_ALLIN_LIB}>
)
endforeach()
target_link_options(${TARGET_NAME} PRIVATE ${ZVEC_ALLIN_WA_OPTIONS})
target_link_libraries(${TARGET_NAME}
PRIVATE
${ZVEC_ALLIN_LIBS}
Threads::Threads
${CMAKE_DL_LIBS}
)
else()
target_link_libraries(${TARGET_NAME}
PRIVATE
-Wl,--whole-archive
${ZVEC_ALLIN_LIBS}
-Wl,--no-whole-archive
Threads::Threads
${CMAKE_DL_LIBS}
)
# Try static linking of libstdc++ and libgcc for better portability.
set(ALLIN_STATIC_LIBS_FOUND FALSE)
execute_process(
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libstdc++.a
OUTPUT_VARIABLE ALLIN_LIBSTDCPP_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=libgcc.a
OUTPUT_VARIABLE ALLIN_LIBGCC_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(EXISTS "${ALLIN_LIBSTDCPP_PATH}" AND EXISTS "${ALLIN_LIBGCC_PATH}")
if(IS_ABSOLUTE "${ALLIN_LIBSTDCPP_PATH}" AND IS_ABSOLUTE "${ALLIN_LIBGCC_PATH}")
set(ALLIN_STATIC_LIBS_FOUND TRUE)
endif()
endif()
if(ALLIN_STATIC_LIBS_FOUND)
target_link_options(${TARGET_NAME} PRIVATE -static-libstdc++ -static-libgcc)
message(STATUS "${TARGET_NAME}: Using static libstdc++ and libgcc")
else()
message(STATUS "${TARGET_NAME}: Using dynamic linking for libstdc++ and libgcc")
endif()
endif()
target_include_directories(${TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src/generated>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${PROJECT_SOURCE_DIR}/src
)
# Strip symbols in release builds to reduce library size.
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
if(UNIX AND NOT APPLE)
# add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
# COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${TARGET_NAME}>
# COMMENT "Stripping symbols from $<TARGET_FILE_NAME:${TARGET_NAME}>"
# )
elseif(APPLE)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND /usr/bin/strip -x $<TARGET_FILE:${TARGET_NAME}>
COMMENT "Stripping symbols from $<TARGET_FILE_NAME:${TARGET_NAME}>"
)
endif()
endif()
install(TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endfunction()
if(BUILD_ZVEC_CORE_SHARED AND NOT IOS)
zvec_add_all_in_one_shared(zvec_core_shared zvec_core
LIBS
zvec_core
zvec_ailego
zvec_turbo
)
elseif(BUILD_ZVEC_CORE_SHARED AND IOS)
message(STATUS "Skipping zvec_core_shared on iOS")
endif()
# Installation
install(TARGETS zvec_shared
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(BUILD_ZVEC_SHARED)
zvec_add_all_in_one_shared(zvec_shared zvec
LIBS
zvec
zvec_core
zvec_ailego
zvec_turbo
)
endif()

View File

@ -13,11 +13,21 @@ git_version(GIT_SRCS_VER ${CMAKE_CURRENT_SOURCE_DIR})
file(GLOB_RECURSE ALL_SRCS *.cc *.c *.h)
set(EXTRA_LIBS ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})
set(EXTRA_DEFS)
if(UNIX AND NOT APPLE)
list(APPEND EXTRA_LIBS ${LIB_RT})
endif()
if(BUILD_ZVEC_CORE_ONLY)
list(FILTER ALL_SRCS EXCLUDE REGEX ".*/buffer/parquet_hash_table\\.cc$")
list(APPEND EXTRA_DEFS ZVEC_CORE_ONLY=1)
else()
list(APPEND EXTRA_LIBS
Arrow::arrow_static
Arrow::parquet_static)
endif()
if(NOT ANDROID AND AUTO_DETECT_ARCH)
if(HOST_ARCH MATCHES "^(x86|x64)$")
setup_compiler_march_for_x86(MATH_MARCH_FLAG_SSE MATH_MARCH_FLAG_AVX2 MATH_MARCH_FLAG_AVX512 MATH_MARCH_FLAG_AVX512FP16)
@ -121,7 +131,6 @@ cc_library(
NAME zvec_ailego STATIC STRICT PACKED
SRCS ${ALL_SRCS}
LIBS ${EXTRA_LIBS}
Arrow::arrow_static
Arrow::parquet_static
DEFS ${EXTRA_DEFS}
VERSION "${GIT_SRCS_VER}"
)

View File

@ -12,10 +12,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#include <zvec/ailego/buffer/parquet_hash_table.h>
#include <zvec/ailego/buffer/vector_page_table.h>
#include <zvec/core/framework/index_logger.h>
#ifndef ZVEC_CORE_ONLY
#include <zvec/ailego/buffer/parquet_hash_table.h>
#endif
namespace zvec {
namespace ailego {
@ -57,11 +60,15 @@ bool BlockEvictionQueue::evict_block(BlockType &item) {
return false;
}
if (item.page_table == nullptr) {
#ifndef ZVEC_CORE_ONLY
if (!ParquetBufferPool::get_instance().is_dead_node(item)) {
break;
} else {
continue;
}
#else
continue;
#endif
}
} while (!is_valid_and_alive(item));
return ok;
@ -76,8 +83,10 @@ void BlockEvictionQueue::recycle() {
valid_page_tables_.end()) {
item.page_table->evict_block(item.vector_block.first);
}
#ifndef ZVEC_CORE_ONLY
} else {
ParquetBufferPool::get_instance().evict(item.parquet_buffer_block.first);
#endif
}
}
}
@ -150,4 +159,4 @@ bool MemoryLimitPool::is_full() {
}
} // namespace ailego
} // namespace zvec
} // namespace zvec

View File

@ -112,7 +112,7 @@ endif()
# Users only need to link libzvec_c_api.so without installing any dependencies
if(MSVC)
target_link_options(zvec_c_api PRIVATE
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_db>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_core>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_ailego>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_turbo>
@ -120,7 +120,7 @@ if(MSVC)
target_link_libraries(zvec_c_api
PRIVATE
zvec_db
zvec
zvec_core
zvec_ailego
zvec_turbo
@ -129,7 +129,7 @@ if(MSVC)
)
elseif(APPLE)
target_link_options(zvec_c_api PRIVATE
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_db>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_core>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_ailego>
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_turbo>
@ -138,7 +138,7 @@ elseif(APPLE)
# Link the libraries themselves (without force_load flags)
target_link_libraries(zvec_c_api
PRIVATE
zvec_db
zvec
zvec_core
zvec_ailego
zvec_turbo
@ -155,7 +155,7 @@ else()
PRIVATE
# Force load all zvec internal libraries (extract all objects)
${ZVEC_WHOLE_ARCHIVE_PREFIX}
zvec_db
zvec
zvec_core
zvec_ailego
zvec_turbo # Required by zvec_core (metric module)

View File

@ -63,7 +63,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
$<TARGET_FILE:core_quantizer_static>
$<TARGET_FILE:core_plugin>
-Wl,--no-whole-archive
zvec_db
zvec
${CMAKE_DL_LIBS}
)
target_link_options(_zvec PRIVATE
@ -99,7 +99,7 @@ elseif (APPLE)
-Wl,-force_load,$<TARGET_FILE:core_utility_static>
-Wl,-force_load,$<TARGET_FILE:core_quantizer_static>
-Wl,-force_load,$<TARGET_FILE:core_plugin>
zvec_db
zvec
)
target_link_libraries(_zvec PRIVATE
-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/exports.mac
@ -121,7 +121,7 @@ elseif (MSVC)
)
target_link_libraries(_zvec PRIVATE
${_zvec_whole_archive_libs}
zvec_db
zvec
)
foreach(_lib ${_zvec_whole_archive_libs})
target_link_options(_zvec PRIVATE

View File

@ -65,7 +65,7 @@ endif()
# The DiskAnn algorithm is provided by the separate core_knn_diskann library
# (real on Linux x86_64, stub on other platforms). Including them here causes
# duplicate symbols and missing -laio when test binaries link both zvec_core
# (via zvec_db) and core_knn_diskann.
# (via zvec) and core_knn_diskann.
list(FILTER ALL_CORE_SRCS EXCLUDE REGEX ".*/algorithm/diskann/.*")
if(NOT DISKANN_SUPPORTED)
list(FILTER ALL_CORE_SRCS EXCLUDE REGEX ".*/interface/indexes/diskann_index\\.cc")

View File

@ -17,7 +17,6 @@
#include <ailego/internal/cpu_features.h>
#include <ailego/pattern/defer.h>
#include <ailego/utility/memory_helper.h>
#include <arrow/compute/ordering.h>
#include "algorithm/hnsw_rabitq/rabitq_reformer.h"
#include "zvec/ailego/container/params.h"
#include "zvec/ailego/logger/logger.h"
@ -993,4 +992,4 @@ int HnswRabitqStreamer::search_bf_by_p_keys_impl(
} // namespace core
} // namespace zvec
} // namespace zvec

View File

@ -14,7 +14,7 @@ cc_directory(sqlengine)
file(GLOB_RECURSE ALL_DB_SRCS *.cc *.c *.h)
# Ensure bitpacked_simd_sse41.cc is compiled with SSE4.1 flag and
# bitpacked_simd_avx2.cc with AVX2 flag in the packed zvec_db target as well
# bitpacked_simd_avx2.cc with AVX2 flag in the packed zvec target as well
# (they are also compiled separately in zvec_index).
if(NOT ANDROID AND AUTO_DETECT_ARCH)
if(HOST_ARCH MATCHES "^(x86|x64)$")
@ -31,7 +31,7 @@ if(NOT ANDROID AND AUTO_DETECT_ARCH)
endif()
cc_library(
NAME zvec_db STATIC STRICT SRCS_NO_GLOB PACKED
NAME zvec STATIC STRICT SRCS_NO_GLOB PACKED
SRCS ${ALL_DB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/proto/zvec.pb.cc
INCS . ${CMAKE_CURRENT_BINARY_DIR}
PUBINCS ${PROJECT_ROOT_DIR}/src/include
@ -51,4 +51,4 @@ cc_library(
Arrow::arrow_acero
DEPS zvec_proto
VERSION "${PROXIMA_ZVEC_VERSION}"
)
)

View File

@ -9,8 +9,6 @@ foreach(CC_SRCS ${ALL_TEST_SRCS})
cc_gtest(
NAME ${CC_TARGET} STRICT
LIBS zvec_ailego core_framework core_utility
Arrow::arrow_depends
Arrow::parquet_static
SRCS ${CC_SRCS}
INCS . ${PROJECT_ROOT_DIR}/src/core/
)

View File

@ -26,7 +26,7 @@ foreach(CC_SRCS ${ALL_TEST_SRCS})
get_filename_component(CC_TARGET ${CC_SRCS} NAME_WE)
cc_gmock(
NAME ${CC_TARGET} STRICT
LIBS zvec_db
LIBS zvec
zvec_proto
core_knn_flat
core_knn_flat_sparse
@ -45,5 +45,5 @@ foreach(CC_SRCS ${ALL_TEST_SRCS})
INCS . .. ../../src
LDFLAGS ${APPLE_FRAMEWORK_LIBS}
)
cc_test_suite(zvec_db ${CC_TARGET})
cc_test_suite(zvec ${CC_TARGET})
endforeach()

View File

@ -26,7 +26,7 @@ endif()
# Common libraries
set(CRASH_RECOVERY_COMMON_LIBS
zvec_db
zvec
zvec_proto
core_knn_flat
core_knn_flat_sparse

View File

@ -36,7 +36,7 @@ foreach(CC_SRCS ${ALL_TEST_SRCS})
get_filename_component(CC_TARGET ${CC_SRCS} NAME_WE)
cc_gmock(
NAME ${CC_TARGET} STRICT
LIBS zvec_db
LIBS zvec
zvec_ailego
zvec_proto
core_metric_static

View File

@ -25,7 +25,7 @@ foreach(CC_SRCS ${ALL_TEST_SRCS})
LIBS zvec_common
zvec_proto
zvec_sqlengine
zvec_db
zvec
zvec_ailego
core_metric
core_utility

View File

@ -13,20 +13,24 @@ set(EXTERNAL_LIB_DIR ${CMAKE_BINARY_DIR}/external/usr/local/lib)
file(MAKE_DIRECTORY ${EXTERNAL_INC_DIR})
file(MAKE_DIRECTORY ${EXTERNAL_LIB_DIR})
add_subdirectory(sparsehash sparsehash EXCLUDE_FROM_ALL)
add_subdirectory(magic_enum magic_enum EXCLUDE_FROM_ALL)
add_subdirectory(RaBitQ-Library RaBitQ-Library EXCLUDE_FROM_ALL)
add_subdirectory(googletest googletest EXCLUDE_FROM_ALL)
if(BUILD_ZVEC_CORE_ONLY)
return()
endif()
add_subdirectory(arrow arrow EXCLUDE_FROM_ALL)
add_subdirectory(gflags gflags EXCLUDE_FROM_ALL)
add_subdirectory(glog glog EXCLUDE_FROM_ALL)
add_subdirectory(sparsehash sparsehash EXCLUDE_FROM_ALL)
add_subdirectory(yaml-cpp yaml-cpp EXCLUDE_FROM_ALL)
add_subdirectory(protobuf protobuf EXCLUDE_FROM_ALL)
add_subdirectory(antlr antlr EXCLUDE_FROM_ALL)
add_subdirectory(lz4 lz4 EXCLUDE_FROM_ALL)
add_subdirectory(rocksdb rocksdb EXCLUDE_FROM_ALL)
add_subdirectory(CRoaring CRoaring EXCLUDE_FROM_ALL)
add_subdirectory(arrow arrow EXCLUDE_FROM_ALL)
add_subdirectory(magic_enum magic_enum EXCLUDE_FROM_ALL)
add_subdirectory(RaBitQ-Library RaBitQ-Library EXCLUDE_FROM_ALL)
add_subdirectory(FastPFOR FastPFOR EXCLUDE_FROM_ALL)
add_subdirectory(limonp limonp EXCLUDE_FROM_ALL)
add_subdirectory(cppjieba cppjieba EXCLUDE_FROM_ALL)

View File

@ -19,6 +19,11 @@ include(ProcessorCount)
ProcessorCount(NPROC)
set(ARROW_CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
if(NOT ARROW_CMAKE_BUILD_TYPE)
set(ARROW_CMAKE_BUILD_TYPE Release)
endif()
if(MSVC)
set(LIB_PARQUET ${EXTERNAL_LIB_DIR}/parquet_static.lib)
set(LIB_ARROW ${EXTERNAL_LIB_DIR}/arrow_static.lib)
@ -64,7 +69,7 @@ if(ANDROID)
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/apache-arrow-21.0.0
DOWNLOAD_COMMAND ""
BUILD_IN_SOURCE false
CONFIGURE_COMMAND env ${CONFIGURE_ENV_LIST} "${CMAKE_COMMAND}" ${CMAKE_CACHE_ARGS} ${_ARROW_COMPILER_LAUNCHER_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX= -DARROW_BUILD_SHARED=OFF -DARROW_ACERO=ON -DARROW_FILESYSTEM=ON -DARROW_DATASET=ON -DARROW_PARQUET=ON -DARROW_COMPUTE=ON -DARROW_WITH_ZLIB=OFF -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_MIMALLOC=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} -DARROW_WITH_MUSL=OFF "<SOURCE_DIR>/cpp"
CONFIGURE_COMMAND env ${CONFIGURE_ENV_LIST} "${CMAKE_COMMAND}" ${CMAKE_CACHE_ARGS} ${_ARROW_COMPILER_LAUNCHER_ARGS} -DCMAKE_BUILD_TYPE=${ARROW_CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX= -DARROW_BUILD_SHARED=OFF -DARROW_ACERO=ON -DARROW_FILESYSTEM=ON -DARROW_DATASET=ON -DARROW_PARQUET=ON -DARROW_COMPUTE=ON -DARROW_WITH_ZLIB=OFF -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_MIMALLOC=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} -DARROW_WITH_MUSL=OFF "<SOURCE_DIR>/cpp"
BUILD_COMMAND "${CMAKE_COMMAND}" --build . --target all -- -j ${NPROC}
INSTALL_COMMAND "${CMAKE_COMMAND}" --install "<BINARY_DIR>" --prefix=${EXTERNAL_BINARY_DIR}/usr/local
BYPRODUCTS ${LIB_PARQUET} ${LIB_ARROW} ${LIB_COMPUTE} ${LIB_ACERO} ${LIB_ARROW_DEPENDS} ${LIB_ARROW_DATASET}
@ -91,7 +96,7 @@ elseif(IOS)
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/apache-arrow-21.0.0
DOWNLOAD_COMMAND ""
BUILD_IN_SOURCE false
CONFIGURE_COMMAND env ${_arrow_ios_env} "${CMAKE_COMMAND}" ${CMAKE_CACHE_ARGS} ${_ARROW_COMPILER_LAUNCHER_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX= -DARROW_BUILD_SHARED=OFF -DARROW_ACERO=ON -DARROW_FILESYSTEM=ON -DARROW_DATASET=ON -DARROW_PARQUET=ON -DARROW_COMPUTE=ON -DARROW_WITH_ZLIB=OFF -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_MIMALLOC=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT} -DARROW_CPU_FLAG=${IOS_ARROW_CPU_FLAG} "<SOURCE_DIR>/cpp"
CONFIGURE_COMMAND env ${_arrow_ios_env} "${CMAKE_COMMAND}" ${CMAKE_CACHE_ARGS} ${_ARROW_COMPILER_LAUNCHER_ARGS} -DCMAKE_BUILD_TYPE=${ARROW_CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX= -DARROW_BUILD_SHARED=OFF -DARROW_ACERO=ON -DARROW_FILESYSTEM=ON -DARROW_DATASET=ON -DARROW_PARQUET=ON -DARROW_COMPUTE=ON -DARROW_WITH_ZLIB=OFF -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_MIMALLOC=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT} -DARROW_CPU_FLAG=${IOS_ARROW_CPU_FLAG} "<SOURCE_DIR>/cpp"
BUILD_COMMAND env "IPHONEOS_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}" "${CMAKE_COMMAND}" --build . --target all -- -j ${NPROC}
INSTALL_COMMAND "${CMAKE_COMMAND}" --install "<BINARY_DIR>" --prefix=${EXTERNAL_BINARY_DIR}/usr/local
BYPRODUCTS ${LIB_PARQUET} ${LIB_ARROW} ${LIB_COMPUTE} ${LIB_ACERO} ${LIB_ARROW_DEPENDS} ${LIB_ARROW_DATASET}
@ -134,7 +139,7 @@ else ()
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/apache-arrow-21.0.0
DOWNLOAD_COMMAND ""
BUILD_IN_SOURCE false
CONFIGURE_COMMAND env ${CONFIGURE_ENV_LIST} "${CMAKE_COMMAND}" ${CMAKE_CACHE_ARGS} ${_ARROW_COMPILER_LAUNCHER_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX= -DARROW_BUILD_SHARED=OFF -DARROW_ACERO=ON -DARROW_FILESYSTEM=ON -DARROW_DATASET=ON -DARROW_PARQUET=ON -DARROW_COMPUTE=ON -DARROW_WITH_ZLIB=OFF -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_MIMALLOC=OFF -DCMAKE_INSTALL_LIBDIR=lib "<SOURCE_DIR>/cpp"
CONFIGURE_COMMAND env ${CONFIGURE_ENV_LIST} "${CMAKE_COMMAND}" ${CMAKE_CACHE_ARGS} ${_ARROW_COMPILER_LAUNCHER_ARGS} -DCMAKE_BUILD_TYPE=${ARROW_CMAKE_BUILD_TYPE} -DCMAKE_DEBUG_POSTFIX= -DARROW_BUILD_SHARED=OFF -DARROW_ACERO=ON -DARROW_FILESYSTEM=ON -DARROW_DATASET=ON -DARROW_PARQUET=ON -DARROW_COMPUTE=ON -DARROW_WITH_ZLIB=OFF -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_MIMALLOC=OFF -DCMAKE_INSTALL_LIBDIR=lib "<SOURCE_DIR>/cpp"
BUILD_COMMAND "${CMAKE_COMMAND}" --build . --target all -- -j ${NPROC}
INSTALL_COMMAND "${CMAKE_COMMAND}" --install "<BINARY_DIR>" --prefix=${EXTERNAL_BINARY_DIR}/usr/local
BYPRODUCTS ${LIB_PARQUET} ${LIB_ARROW} ${LIB_COMPUTE} ${LIB_ACERO} ${LIB_ARROW_DEPENDS} ${LIB_ARROW_DATASET}