diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 14b63df5a..dd7c7923e 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -354,6 +354,7 @@ macro(build_graphar_with_arrow_bundled) set(GAR_BUNDLED_DEPS_STATIC_LIBS) list(APPEND GAR_BUNDLED_DEPS_STATIC_LIBS gar_arrow_static + gar_arrow_compute_static gar_parquet_static gar_dataset_static gar_acero_static @@ -378,10 +379,13 @@ macro(build_graphar_with_arrow_bundled) list(INSERT ARROW_STATIC_INSTALL_INTERFACE_LIBS 0 "graphar_bundled_dependencies") if(APPLE) + find_package(Protobuf REQUIRED) target_link_libraries(graphar PRIVATE -Wl,-force_load graphar_bundled_dependencies + protobuf::libprotobuf "-framework CoreFoundation" - "-framework Security") + "-framework Security" + "-framework Network") elseif(MSVC) # MSVC doesn't support GNU ld-style -Wl flags. target_link_libraries(graphar PRIVATE graphar_bundled_dependencies) @@ -475,7 +479,11 @@ if (BUILD_EXAMPLES) if (APPLE) target_link_libraries(${E_NAME} PRIVATE -Wl,-force_load ${GAR_ARROW_STATIC_LIB} "${GAR_PARQUET_STATIC_LIB}" - "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}") + "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" + protobuf::libprotobuf + "-framework CoreFoundation" + "-framework Security" + "-framework Network") else() target_link_libraries(${E_NAME} PRIVATE -Wl,--exclude-libs,ALL -Wl,--whole-archive ${GAR_ARROW_STATIC_LIB} "${GAR_PARQUET_STATIC_LIB}" @@ -558,7 +566,11 @@ if (BUILD_TESTS) if (APPLE) target_link_libraries(${target} PRIVATE -Wl,-force_load gar_arrow_static "${GAR_PARQUET_STATIC_LIB}" - "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}") + "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" + protobuf::libprotobuf + "-framework CoreFoundation" + "-framework Security" + "-framework Network") else() target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL -Wl,--whole-archive gar_arrow_static "${GAR_PARQUET_STATIC_LIB}" @@ -615,6 +627,22 @@ if (BUILD_BENCHMARKS) target_compile_features(${target} PRIVATE cxx_std_17) target_include_directories(${target} PRIVATE ${PROJECT_SOURCE_DIR}/thirdparty) target_link_libraries(${target} PRIVATE benchmark::benchmark_main graphar ${CMAKE_DL_LIBS}) + if (BUILD_ARROW_FROM_SOURCE) + target_include_directories(${target} SYSTEM BEFORE PRIVATE ${GAR_ARROW_INCLUDE_DIR}) + if (APPLE) + target_link_libraries(${target} PRIVATE -Wl,-force_load ${GAR_ARROW_STATIC_LIB} + "${GAR_PARQUET_STATIC_LIB}" + "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" + protobuf::libprotobuf + "-framework CoreFoundation" + "-framework Security" + "-framework Network") + else() + target_link_libraries(${target} PRIVATE -Wl,--exclude-libs,ALL -Wl,--whole-archive ${GAR_ARROW_STATIC_LIB} + "${GAR_PARQUET_STATIC_LIB}" + "${GAR_ARROW_BUNDLED_DEPS_STATIC_LIB}" -Wl,--no-whole-archive) + endif() + endif() endmacro() add_benchmark(arrow_chunk_reader_benchmark SRCS benchmarks/arrow_chunk_reader_benchmark.cc) add_benchmark(label_filter_benchmark SRCS benchmarks/label_filter_benchmark.cc) diff --git a/cpp/cmake/apache-arrow.cmake b/cpp/cmake/apache-arrow.cmake index ca6e63bfe..2e75e2cd1 100644 --- a/cpp/cmake/apache-arrow.cmake +++ b/cpp/cmake/apache-arrow.cmake @@ -64,6 +64,9 @@ function(build_arrow) set(GAR_DATASET_STATIC_LIB_FILENAME "${CMAKE_STATIC_LIBRARY_PREFIX}arrow_dataset${CMAKE_STATIC_LIBRARY_SUFFIX}") set(GAR_DATASET_STATIC_LIB "${GAR_ARROW_STATIC_LIBRARY_DIR}/${GAR_DATASET_STATIC_LIB_FILENAME}" CACHE INTERNAL "arrow dataset lib") + set(GAR_ARROW_COMPUTE_STATIC_LIB_FILENAME + "${CMAKE_STATIC_LIBRARY_PREFIX}arrow_compute${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(GAR_ARROW_COMPUTE_STATIC_LIB "${GAR_ARROW_STATIC_LIBRARY_DIR}/${GAR_ARROW_COMPUTE_STATIC_LIB_FILENAME}" CACHE INTERNAL "arrow compute lib") set(GAR_ARROW_BUNDLED_DEPS_STATIC_LIB_FILENAME "${CMAKE_STATIC_LIBRARY_PREFIX}arrow_bundled_dependencies${CMAKE_STATIC_LIBRARY_SUFFIX}") set(GAR_ARROW_BUNDLED_DEPS_STATIC_LIB @@ -104,17 +107,20 @@ function(build_arrow) "-DARROW_S3=ON") set(GAR_ARROW_INCLUDE_DIR "${GAR_ARROW_PREFIX}/include" CACHE INTERNAL "arrow include directory") - set(GAR_ARROW_BUILD_BYPRODUCTS "${GAR_ARROW_STATIC_LIB}" "${GAR_PARQUET_STATIC_LIB}" "${GAR_DATASET_STATIC_LIB}") + set(GAR_ARROW_BUILD_BYPRODUCTS "${GAR_ARROW_STATIC_LIB}" "${GAR_PARQUET_STATIC_LIB}" "${GAR_DATASET_STATIC_LIB}" "${GAR_ARROW_COMPUTE_STATIC_LIB}") find_package(Threads) find_package(Arrow QUIET) + # Set Arrow version: from env var or default to 23.0.0 + if(DEFINED ENV{GRAPHAR_ARROW_VERSION}) + set(ARROW_VERSION_TO_BUILD "$ENV{GRAPHAR_ARROW_VERSION}" CACHE INTERNAL "arrow version") + else() + set(ARROW_VERSION_TO_BUILD "23.0.0" CACHE INTERNAL "arrow version") + endif() + if(DEFINED ENV{GAR_ARROW_SOURCE_URL}) set(GAR_ARROW_SOURCE_URL "$ENV{GAR_ARROW_SOURCE_URL}") else() - set(ARROW_VERSION_TO_BUILD "15.0.0" CACHE INTERNAL "arrow version") - if (Arrow_FOUND) # arrow is installed, build the same version as the installed one - set(ARROW_VERSION_TO_BUILD "${Arrow_VERSION}" CACHE INTERNAL "arrow version") - endif() set(GAR_ARROW_SOURCE_URL "https://www.apache.org/dyn/closer.lua?action=download&filename=arrow/arrow-${ARROW_VERSION_TO_BUILD}/apache-arrow-${ARROW_VERSION_TO_BUILD}.tar.gz") endif () @@ -157,6 +163,11 @@ function(build_arrow) PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${GAR_ARROW_INCLUDE_DIR} IMPORTED_LOCATION ${GAR_ARROW_ACERO_STATIC_LIB}) endif() + set(GAR_ARROW_COMPUTE_LIBRARY_TARGET gar_arrow_compute_static) + add_library(${GAR_ARROW_COMPUTE_LIBRARY_TARGET} STATIC IMPORTED) + set_target_properties(${GAR_ARROW_COMPUTE_LIBRARY_TARGET} + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${GAR_ARROW_INCLUDE_DIR} + IMPORTED_LOCATION ${GAR_ARROW_COMPUTE_STATIC_LIB}) add_dependencies(${GAR_ARROW_LIBRARY_TARGET} arrow_ep) endfunction() \ No newline at end of file