@@ -2530,6 +2530,7 @@ macro(build_zlib)
25302530 set_property (TARGET ZLIB::ZLIB
25312531 PROPERTY IMPORTED_LOCATION
25322532 "${EMSCRIPTEN_SYSROOT} /lib/wasm32-emscripten/pic/libz.a" )
2533+ target_include_directories (ZLIB::ZLIB INTERFACE "${EMSCRIPTEN_SYSROOT} /include" )
25332534 list (APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB)
25342535 else ()
25352536 set (ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /zlib_ep/src/zlib_ep-install" )
@@ -4481,115 +4482,216 @@ target_include_directories(arrow::hadoop INTERFACE "${HADOOP_HOME}/include")
44814482# ----------------------------------------------------------------------
44824483# Apache ORC
44834484
4484- macro (build_orc )
4485+ function (build_orc )
44854486 message (STATUS "Building Apache ORC from source" )
44864487
4487- set (ORC_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /orc_ep-install" )
4488- set (ORC_HOME "${ORC_PREFIX} " )
4489- set (ORC_INCLUDE_DIR "${ORC_PREFIX} /include" )
4490- set (ORC_STATIC_LIB
4491- "${ORC_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX } orc${CMAKE_STATIC_LIBRARY_SUFFIX } " )
4488+ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.29)
4489+ fetchcontent_declare (orc
4490+ ${FC_DECLARE_COMMON_OPTIONS}
4491+ URL ${ORC_SOURCE_URL}
4492+ URL_HASH "SHA256=${ARROW_ORC_BUILD_SHA256_CHECKSUM} " )
4493+ prepare_fetchcontent ()
4494+
4495+ set (CMAKE_UNITY_BUILD FALSE )
4496+
4497+ set (ORC_PREFER_STATIC_LZ4
4498+ OFF
4499+ CACHE BOOL "" FORCE )
4500+ get_target_property (LZ4_INCLUDE_DIR LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES )
4501+ get_filename_component (LZ4_ROOT "${LZ4_INCLUDE_DIR} " DIRECTORY )
4502+ set (LZ4_HOME
4503+ ${LZ4_ROOT}
4504+ CACHE STRING "" FORCE )
4505+ set (LZ4_LIBRARY
4506+ LZ4::lz4
4507+ CACHE STRING "" FORCE )
4508+
4509+ set (ORC_PREFER_STATIC_PROTOBUF
4510+ OFF
4511+ CACHE BOOL "" FORCE )
4512+ get_target_property (PROTOBUF_INCLUDE_DIR ${ARROW_PROTOBUF_LIBPROTOBUF}
4513+ INTERFACE_INCLUDE_DIRECTORIES )
4514+ get_filename_component (Protobuf_ROOT "${PROTOBUF_INCLUDE_DIR} " DIRECTORY )
4515+ set (PROTOBUF_HOME
4516+ ${Protobuf_ROOT}
4517+ CACHE STRING "" FORCE )
4518+ # ORC uses this.
4519+ target_include_directories (${ARROW_PROTOBUF_LIBPROTOC}
4520+ INTERFACE "${PROTOBUF_INCLUDE_DIR} " )
4521+ set (PROTOBUF_EXECUTABLE ${ARROW_PROTOBUF_PROTOC} )
4522+ set (PROTOBUF_LIBRARY ${ARROW_PROTOBUF_LIBPROTOBUF} )
4523+ set (PROTOC_LIBRARY ${ARROW_PROTOBUF_LIBPROTOC} )
4524+
4525+ set (ORC_PREFER_STATIC_SNAPPY
4526+ OFF
4527+ CACHE BOOL "" FORCE )
4528+ get_target_property (SNAPPY_INCLUDE_DIR ${Snappy_TARGET} INTERFACE_INCLUDE_DIRECTORIES )
4529+ get_filename_component (Snappy_ROOT "${SNAPPY_INCLUDE_DIR} " DIRECTORY )
4530+ set (SNAPPY_HOME
4531+ ${Snappy_ROOT}
4532+ CACHE STRING "" FORCE )
4533+ set (SNAPPY_LIBRARY
4534+ ${Snappy_TARGET}
4535+ CACHE STRING "" FORCE )
4536+
4537+ set (ORC_PREFER_STATIC_ZLIB
4538+ OFF
4539+ CACHE BOOL "" FORCE )
4540+ get_target_property (ZLIB_INCLUDE_DIR ZLIB::ZLIB INTERFACE_INCLUDE_DIRECTORIES )
4541+ get_filename_component (ZLIB_ROOT "${ZLIB_INCLUDE_DIR} " DIRECTORY )
4542+ set (ZLIB_HOME
4543+ ${ZLIB_ROOT}
4544+ CACHE STRING "" FORCE )
4545+ set (ZLIB_LIBRARY
4546+ ZLIB::ZLIB
4547+ CACHE STRING "" FORCE )
4548+
4549+ set (ORC_PREFER_STATIC_ZSTD
4550+ OFF
4551+ CACHE BOOL "" FORCE )
4552+ get_target_property (ZSTD_INCLUDE_DIR ${ARROW_ZSTD_LIBZSTD}
4553+ INTERFACE_INCLUDE_DIRECTORIES )
4554+ get_filename_component (ZSTD_ROOT "${ZSTD_INCLUDE_DIR} " DIRECTORY )
4555+ set (ZSTD_HOME
4556+ ${ZSTD_ROOT}
4557+ CACHE STRING "" FORCE )
4558+ set (ZSTD_LIBRARY ${ARROW_ZSTD_LIBZSTD} )
4559+
4560+ set (BUILD_CPP_TESTS
4561+ OFF
4562+ CACHE BOOL "" FORCE )
4563+ set (BUILD_JAVA
4564+ OFF
4565+ CACHE BOOL "" FORCE )
4566+ set (BUILD_LIBHDFSPP
4567+ OFF
4568+ CACHE BOOL "" FORCE )
4569+ set (BUILD_TOOLS
4570+ OFF
4571+ CACHE BOOL "" FORCE )
4572+ set (INSTALL_VENDORED_LIBS
4573+ OFF
4574+ CACHE BOOL "" FORCE )
4575+ set (STOP_BUILD_ON_WARNING
4576+ OFF
4577+ CACHE BOOL "" FORCE )
4578+
4579+ # We can remove this with ORC 2.0.2 or later.
4580+ list (PREPEND CMAKE_MODULE_PATH
4581+ ${CMAKE_CURRENT_BINARY_DIR } /_deps/orc-src/cmake_modules)
4582+
4583+ fetchcontent_makeavailable (orc)
4584+
4585+ add_library (orc::orc INTERFACE IMPORTED )
4586+ target_link_libraries (orc::orc INTERFACE orc )
4587+ target_include_directories (orc::orc INTERFACE "${orc_BINARY_DIR } /c++/include"
4588+ "${orc_SOURCE_DIR } /c++/include" )
4589+
4590+ list (APPEND ARROW_BUNDLED_STATIC_LIBS orc)
4591+ else ()
4592+ set (ORC_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /orc_ep-install" )
4593+ set (ORC_HOME "${ORC_PREFIX} " )
4594+ set (ORC_INCLUDE_DIR "${ORC_PREFIX} /include" )
4595+ set (ORC_STATIC_LIB
4596+ "${ORC_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX } orc${CMAKE_STATIC_LIBRARY_SUFFIX } "
4597+ )
44924598
4493- get_target_property (ORC_PROTOBUF_ROOT ${ARROW_PROTOBUF_LIBPROTOBUF}
4494- INTERFACE_INCLUDE_DIRECTORIES )
4495- get_filename_component (ORC_PROTOBUF_ROOT "${ORC_PROTOBUF_ROOT} " DIRECTORY )
4599+ get_target_property (ORC_PROTOBUF_ROOT ${ARROW_PROTOBUF_LIBPROTOBUF}
4600+ INTERFACE_INCLUDE_DIRECTORIES )
4601+ get_filename_component (ORC_PROTOBUF_ROOT "${ORC_PROTOBUF_ROOT} " DIRECTORY )
44964602
4497- get_target_property (ORC_SNAPPY_INCLUDE_DIR ${Snappy_TARGET}
4498- INTERFACE_INCLUDE_DIRECTORIES )
4499- get_filename_component (ORC_SNAPPY_ROOT "${ORC_SNAPPY_INCLUDE_DIR} " DIRECTORY )
4603+ get_target_property (ORC_SNAPPY_INCLUDE_DIR ${Snappy_TARGET}
4604+ INTERFACE_INCLUDE_DIRECTORIES )
4605+ get_filename_component (ORC_SNAPPY_ROOT "${ORC_SNAPPY_INCLUDE_DIR} " DIRECTORY )
45004606
4501- get_target_property (ORC_LZ4_ROOT LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES )
4502- get_filename_component (ORC_LZ4_ROOT "${ORC_LZ4_ROOT} " DIRECTORY )
4607+ get_target_property (ORC_LZ4_ROOT LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES )
4608+ get_filename_component (ORC_LZ4_ROOT "${ORC_LZ4_ROOT} " DIRECTORY )
45034609
4504- get_target_property (ORC_ZSTD_ROOT ${ARROW_ZSTD_LIBZSTD} INTERFACE_INCLUDE_DIRECTORIES )
4505- get_filename_component (ORC_ZSTD_ROOT "${ORC_ZSTD_ROOT} " DIRECTORY )
4610+ get_target_property (ORC_ZSTD_ROOT ${ARROW_ZSTD_LIBZSTD} INTERFACE_INCLUDE_DIRECTORIES )
4611+ get_filename_component (ORC_ZSTD_ROOT "${ORC_ZSTD_ROOT} " DIRECTORY )
45064612
4507- set (ORC_CMAKE_ARGS
4508- ${EP_COMMON_CMAKE_ARGS}
4509- "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX} "
4510- -DSTOP_BUILD_ON_WARNING=OFF
4511- -DBUILD_LIBHDFSPP=OFF
4512- -DBUILD_JAVA=OFF
4513- -DBUILD_TOOLS=OFF
4514- -DBUILD_CPP_TESTS=OFF
4515- -DINSTALL_VENDORED_LIBS=OFF
4516- "-DLZ4_HOME=${ORC_LZ4_ROOT} "
4517- "-DPROTOBUF_EXECUTABLE=$<TARGET_FILE :${ARROW_PROTOBUF_PROTOC} >"
4518- "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT} "
4519- "-DPROTOBUF_INCLUDE_DIR=$<TARGET_PROPERTY :${ARROW_PROTOBUF_LIBPROTOBUF} ,INTERFACE_INCLUDE_DIRECTORIES >"
4520- "-DPROTOBUF_LIBRARY=$<TARGET_FILE :${ARROW_PROTOBUF_LIBPROTOBUF} >"
4521- "-DPROTOC_LIBRARY=$<TARGET_FILE :${ARROW_PROTOBUF_LIBPROTOC} >"
4522- "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT} "
4523- "-DSNAPPY_LIBRARY=$<TARGET_FILE :${Snappy_TARGET} >"
4524- "-DLZ4_LIBRARY=$<TARGET_FILE :LZ4 ::lz4 >"
4525- "-DLZ4_STATIC_LIBRARY =$<TARGET_FILE :LZ4 ::lz4 >"
4526- "-DLZ4_INCLUDE_DIR=${ORC_LZ4_ROOT} /include"
4527- "-DSNAPPY_INCLUDE_DIR=${ORC_SNAPPY_INCLUDE_DIR} "
4528- "-DZSTD_HOME=${ORC_ZSTD_ROOT} "
4529- "-DZSTD_INCLUDE_DIR=$<TARGET_PROPERTY :${ARROW_ZSTD_LIBZSTD} ,INTERFACE_INCLUDE_DIRECTORIES >"
4530- "-DZSTD_LIBRARY=$<TARGET_FILE :${ARROW_ZSTD_LIBZSTD} >" )
4531- if (ZLIB_ROOT)
4532- set (ORC_CMAKE_ARGS ${ORC_CMAKE_ARGS} "-DZLIB_HOME=${ZLIB_ROOT} " )
4533- endif ()
4613+ set (ORC_CMAKE_ARGS
4614+ ${EP_COMMON_CMAKE_ARGS}
4615+ "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX} "
4616+ -DSTOP_BUILD_ON_WARNING=OFF
4617+ -DBUILD_LIBHDFSPP=OFF
4618+ -DBUILD_JAVA=OFF
4619+ -DBUILD_TOOLS=OFF
4620+ -DBUILD_CPP_TESTS=OFF
4621+ -DINSTALL_VENDORED_LIBS=OFF
4622+ "-DLZ4_HOME=${ORC_LZ4_ROOT} "
4623+ "-DPROTOBUF_EXECUTABLE=$<TARGET_FILE :${ARROW_PROTOBUF_PROTOC} >"
4624+ "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT} "
4625+ "-DPROTOBUF_INCLUDE_DIR=$<TARGET_PROPERTY :${ARROW_PROTOBUF_LIBPROTOBUF} ,INTERFACE_INCLUDE_DIRECTORIES >"
4626+ "-DPROTOBUF_LIBRARY=$<TARGET_FILE :${ARROW_PROTOBUF_LIBPROTOBUF} >"
4627+ "-DPROTOC_LIBRARY=$<TARGET_FILE :${ARROW_PROTOBUF_LIBPROTOC} >"
4628+ "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT} "
4629+ "-DSNAPPY_LIBRARY=$<TARGET_FILE :${Snappy_TARGET} >"
4630+ "-DLZ4_LIBRARY=$<TARGET_FILE :LZ4 ::lz4 >"
4631+ "-DLZ4_STATIC_LIB =$<TARGET_FILE :LZ4 ::lz4 >"
4632+ "-DLZ4_INCLUDE_DIR=${ORC_LZ4_ROOT} /include"
4633+ "-DSNAPPY_INCLUDE_DIR=${ORC_SNAPPY_INCLUDE_DIR} "
4634+ "-DZSTD_HOME=${ORC_ZSTD_ROOT} "
4635+ "-DZSTD_INCLUDE_DIR=$<TARGET_PROPERTY :${ARROW_ZSTD_LIBZSTD} ,INTERFACE_INCLUDE_DIRECTORIES >"
4636+ "-DZSTD_LIBRARY=$<TARGET_FILE :${ARROW_ZSTD_LIBZSTD} >" )
4637+ if (ZLIB_ROOT)
4638+ set (ORC_CMAKE_ARGS ${ORC_CMAKE_ARGS} "-DZLIB_HOME=${ZLIB_ROOT} " )
4639+ endif ()
45344640
4535- # Work around CMake bug
4536- file (MAKE_DIRECTORY ${ORC_INCLUDE_DIR} )
4641+ # Work around CMake bug
4642+ file (MAKE_DIRECTORY ${ORC_INCLUDE_DIR} )
45374643
4538- externalproject_add (orc_ep
4539- ${EP_COMMON_OPTIONS}
4540- URL ${ORC_SOURCE_URL}
4541- URL_HASH "SHA256=${ARROW_ORC_BUILD_SHA256_CHECKSUM} "
4542- BUILD_BYPRODUCTS ${ORC_STATIC_LIB}
4543- CMAKE_ARGS ${ORC_CMAKE_ARGS}
4544- DEPENDS ${ARROW_PROTOBUF_LIBPROTOBUF}
4545- ${ARROW_ZSTD_LIBZSTD}
4546- ${Snappy_TARGET}
4547- LZ4::lz4
4548- ZLIB::ZLIB)
4549-
4550- set (ORC_VENDORED 1)
4551-
4552- add_library (orc::orc STATIC IMPORTED )
4553- set_target_properties (orc::orc PROPERTIES IMPORTED_LOCATION "${ORC_STATIC_LIB} " )
4554- target_include_directories (orc::orc BEFORE INTERFACE "${ORC_INCLUDE_DIR} " )
4555- target_link_libraries (orc::orc INTERFACE LZ4::lz4 ZLIB::ZLIB ${ARROW_ZSTD_LIBZSTD}
4556- ${Snappy_TARGET} )
4557- # Protobuf generated files may use ABSL_DCHECK*() and
4558- # absl::log_internal_check_op is needed for them.
4559- if (TARGET absl::log_internal_check_op)
4560- target_link_libraries (orc::orc INTERFACE absl::log_internal_check_op )
4561- endif ()
4562- if (NOT MSVC )
4563- if (NOT APPLE AND ARROW_ENABLE_THREADING)
4564- target_link_libraries (orc::orc INTERFACE Threads::Threads )
4565- endif ()
4566- target_link_libraries (orc::orc INTERFACE ${CMAKE_DL_LIBS } )
4567- endif ()
4568- if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
4569- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9" )
4570- target_link_libraries (orc::orc INTERFACE stdc++fs )
4644+ externalproject_add (orc_ep
4645+ ${EP_COMMON_OPTIONS}
4646+ URL ${ORC_SOURCE_URL}
4647+ URL_HASH "SHA256=${ARROW_ORC_BUILD_SHA256_CHECKSUM} "
4648+ BUILD_BYPRODUCTS ${ORC_STATIC_LIB}
4649+ CMAKE_ARGS ${ORC_CMAKE_ARGS}
4650+ DEPENDS ${ARROW_PROTOBUF_LIBPROTOBUF}
4651+ ${ARROW_PROTOBUF_PROTOC}
4652+ ${ARROW_ZSTD_LIBZSTD}
4653+ ${Snappy_TARGET}
4654+ LZ4::lz4
4655+ ZLIB::ZLIB)
4656+ add_library (orc::orc STATIC IMPORTED )
4657+ set_target_properties (orc::orc PROPERTIES IMPORTED_LOCATION "${ORC_STATIC_LIB} " )
4658+ target_include_directories (orc::orc BEFORE INTERFACE "${ORC_INCLUDE_DIR} " )
4659+ target_link_libraries (orc::orc INTERFACE LZ4::lz4 ZLIB::ZLIB ${ARROW_ZSTD_LIBZSTD}
4660+ ${Snappy_TARGET} )
4661+ # Protobuf generated files may use ABSL_DCHECK*() and
4662+ # absl::log_internal_check_op is needed for them.
4663+ if (TARGET absl::log_internal_check_op)
4664+ target_link_libraries (orc::orc INTERFACE absl::log_internal_check_op )
45714665 endif ()
4572- elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
4573- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8" )
4574- target_link_libraries (orc::orc INTERFACE c++fs )
4666+ if (NOT MSVC )
4667+ if (NOT APPLE AND ARROW_ENABLE_THREADING)
4668+ target_link_libraries (orc::orc INTERFACE Threads::Threads )
4669+ endif ()
4670+ target_link_libraries (orc::orc INTERFACE ${CMAKE_DL_LIBS } )
45754671 endif ()
4672+ target_link_libraries (orc::orc INTERFACE ${ARROW_PROTOBUF_LIBPROTOBUF} )
4673+ add_dependencies (orc::orc orc_ep )
4674+ list (APPEND ARROW_BUNDLED_STATIC_LIBS orc::orc)
45764675 endif ()
45774676
4578- add_dependencies (orc::orc orc_ep )
4579-
4580- list (APPEND ARROW_BUNDLED_STATIC_LIBS orc::orc)
4581- endmacro ()
4677+ set (ORC_VENDORED
4678+ TRUE
4679+ PARENT_SCOPE )
4680+ set (ARROW_BUNDLED_STATIC_LIBS
4681+ ${ARROW_BUNDLED_STATIC_LIBS}
4682+ PARENT_SCOPE )
4683+ endfunction ()
45824684
45834685if (ARROW_ORC)
45844686 resolve_dependency (orc HAVE_ALT TRUE )
4585- target_link_libraries (orc::orc INTERFACE ${ARROW_PROTOBUF_LIBPROTOBUF} )
45864687 if (ORC_VENDORED)
45874688 set (ARROW_ORC_VERSION ${ARROW_ORC_BUILD_VERSION} )
45884689 else ()
4690+ target_link_libraries (orc::orc INTERFACE ${ARROW_PROTOBUF_LIBPROTOBUF} )
45894691 set (ARROW_ORC_VERSION ${orcAlt_VERSION} )
4692+ message (STATUS "Found ORC static library: ${ORC_STATIC_LIB} " )
4693+ message (STATUS "Found ORC headers: ${ORC_INCLUDE_DIR} " )
45904694 endif ()
4591- message (STATUS "Found ORC static library: ${ORC_STATIC_LIB} " )
4592- message (STATUS "Found ORC headers: ${ORC_INCLUDE_DIR} " )
45934695endif ()
45944696
45954697# ----------------------------------------------------------------------
0 commit comments