This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new d653b71d79 ARROW-16168: [C++][CMake] Use target to add include paths
d653b71d79 is described below
commit d653b71d79fc381c43f59d3095cc1c9fb0c1cf7c
Author: Sutou Kouhei <[email protected]>
AuthorDate: Thu May 12 05:24:28 2022 +0900
ARROW-16168: [C++][CMake] Use target to add include paths
We can remove "include_directories(SYSTEM)" by this.
Closes #12861 from kou/cpp-target-include-path
Authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Sutou Kouhei <[email protected]>
---
ci/scripts/PKGBUILD | 1 +
cpp/CMakeLists.txt | 39 +--
cpp/cmake_modules/BuildUtils.cmake | 113 ++-------
cpp/cmake_modules/DefineOptions.cmake | 10 +-
cpp/cmake_modules/FindBoostAlt.cmake | 63 -----
cpp/cmake_modules/Findutf8proc.cmake | 2 +-
cpp/cmake_modules/ThirdpartyToolchain.cmake | 284 +++++++++++++---------
cpp/examples/parquet/parquet_arrow/CMakeLists.txt | 4 +-
cpp/src/arrow/CMakeLists.txt | 7 +-
cpp/src/arrow/dataset/CMakeLists.txt | 2 +-
cpp/src/arrow/filesystem/CMakeLists.txt | 4 +-
cpp/src/arrow/flight/CMakeLists.txt | 24 +-
cpp/src/arrow/flight/sql/CMakeLists.txt | 4 +-
cpp/src/arrow/flight/transport/ucx/CMakeLists.txt | 1 -
cpp/src/arrow/gpu/CMakeLists.txt | 4 +-
cpp/src/arrow/python/CMakeLists.txt | 16 +-
cpp/src/gandiva/CMakeLists.txt | 18 +-
cpp/src/parquet/CMakeLists.txt | 23 +-
cpp/src/plasma/CMakeLists.txt | 6 +-
19 files changed, 285 insertions(+), 340 deletions(-)
diff --git a/ci/scripts/PKGBUILD b/ci/scripts/PKGBUILD
index 38f28a2328..b9b0194f5c 100644
--- a/ci/scripts/PKGBUILD
+++ b/ci/scripts/PKGBUILD
@@ -111,6 +111,7 @@ build() {
-DARROW_S3="${ARROW_S3}" \
-DARROW_SNAPPY_USE_SHARED=OFF \
-DARROW_USE_GLOG=OFF \
+ -DARROW_UTF8PROC_USE_SHARED=OFF \
-DARROW_WITH_LZ4=ON \
-DARROW_WITH_RE2="${ARROW_WITH_RE2}" \
-DARROW_WITH_SNAPPY=ON \
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index ec12feab3d..23e0ba311f 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -691,11 +691,20 @@ endif()
# Linker and Dependencies
#
-# Libraries to link statically with libarrow.so
-set(ARROW_LINK_LIBS)
-set(ARROW_STATIC_LINK_LIBS)
+# Libraries to link statically with libarrow.so.
+#
+# Note that arrow::hadoop is a header only target that refers
+# cpp/thirdparty/hadoop/include/. See
+# cpp/cmake_modules/ThirdpartyToolchain.cmake for details.
+set(ARROW_LINK_LIBS arrow::flatbuffers arrow::hadoop)
+set(ARROW_STATIC_LINK_LIBS arrow::flatbuffers arrow::hadoop)
set(ARROW_STATIC_INSTALL_INTERFACE_LIBS)
+if(ARROW_USE_BOOST)
+ list(APPEND ARROW_LINK_LIBS Boost::headers)
+ list(APPEND ARROW_STATIC_LINK_LIBS Boost::headers)
+endif()
+
if(ARROW_USE_OPENSSL)
set(ARROW_OPENSSL_LIBS OpenSSL::Crypto OpenSSL::SSL)
list(APPEND ARROW_LINK_LIBS ${ARROW_OPENSSL_LIBS})
@@ -808,6 +817,16 @@ if(ARROW_WITH_RE2)
endif()
endif()
+if(ARROW_WITH_RAPIDJSON)
+ list(APPEND ARROW_LINK_LIBS rapidjson::rapidjson)
+ list(APPEND ARROW_STATIC_LINK_LIBS rapidjson::rapidjson)
+endif()
+
+if(ARROW_USE_XSIMD)
+ list(APPEND ARROW_LINK_LIBS xsimd)
+ list(APPEND ARROW_STATIC_LINK_LIBS xsimd)
+endif()
+
add_custom_target(arrow_dependencies)
add_custom_target(arrow_benchmark_dependencies)
add_custom_target(arrow_test_dependencies)
@@ -830,26 +849,18 @@ endif()
set(ARROW_SHARED_PRIVATE_LINK_LIBS ${ARROW_STATIC_LINK_LIBS})
-# boost::filesystem is needed for S3 and Flight tests as a boost::process
dependency.
-if(((ARROW_FLIGHT
- OR ARROW_S3
- OR ARROW_GCS)
- AND (ARROW_BUILD_TESTS OR ARROW_BUILD_INTEGRATION)
- ))
- list(APPEND ARROW_TEST_LINK_LIBS ${BOOST_FILESYSTEM_LIBRARY}
${BOOST_SYSTEM_LIBRARY})
-endif()
-
if(NOT MSVC_TOOLCHAIN)
list(APPEND ARROW_LINK_LIBS ${CMAKE_DL_LIBS})
list(APPEND ARROW_SHARED_INSTALL_INTERFACE_LIBS ${CMAKE_DL_LIBS})
endif()
set(ARROW_TEST_LINK_TOOLCHAIN
+ arrow::flatbuffers
GTest::gtest_main
GTest::gtest
GTest::gmock
- ${BOOST_FILESYSTEM_LIBRARY}
- ${BOOST_SYSTEM_LIBRARY})
+ Boost::filesystem
+ Boost::system)
if(ARROW_BUILD_TESTS)
add_dependencies(arrow_test_dependencies ${ARROW_TEST_LINK_TOOLCHAIN})
diff --git a/cpp/cmake_modules/BuildUtils.cmake
b/cpp/cmake_modules/BuildUtils.cmake
index 174b1c515a..f3e3269d4f 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -30,25 +30,9 @@ set(ARROW_LIBRARY_PATH_SUFFIXES
"Library/bin")
set(ARROW_INCLUDE_PATH_SUFFIXES "include" "Library" "Library/include")
-set(ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS)
-if(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- # boost/process/detail/windows/handle_workaround.hpp doesn't work
- # without BOOST_USE_WINDOWS_H with MinGW because MinGW doesn't
- # provide __kernel_entry without winternl.h.
- #
- # See also:
- #
https://github.com/boostorg/process/blob/develop/include/boost/process/detail/windows/handle_workaround.hpp
- #
- # You can use this like the following:
- #
- # target_compile_definitions(target PRIVATE
- # ${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
- list(APPEND ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS "BOOST_USE_WINDOWS_H=1")
-endif()
-
-function(ADD_THIRDPARTY_LIB LIB_NAME)
+function(add_thirdparty_lib LIB_NAME LIB_TYPE LIB)
set(options)
- set(one_value_args SHARED_LIB STATIC_LIB)
+ set(one_value_args)
set(multi_value_args DEPS INCLUDE_DIRECTORIES)
cmake_parse_arguments(ARG
"${options}"
@@ -59,78 +43,25 @@ function(ADD_THIRDPARTY_LIB LIB_NAME)
message(SEND_ERROR "Error: unrecognized arguments:
${ARG_UNPARSED_ARGUMENTS}")
endif()
- if(ARG_STATIC_LIB AND ARG_SHARED_LIB)
- set(AUG_LIB_NAME "${LIB_NAME}_static")
- add_library(${AUG_LIB_NAME} STATIC IMPORTED)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
- "${ARG_STATIC_LIB}")
- if(ARG_DEPS)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
- "${ARG_DEPS}")
- endif()
- message(STATUS "Added static library dependency ${AUG_LIB_NAME}:
${ARG_STATIC_LIB}")
- if(ARG_INCLUDE_DIRECTORIES)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
-
"${ARG_INCLUDE_DIRECTORIES}")
- endif()
-
- set(AUG_LIB_NAME "${LIB_NAME}_shared")
- add_library(${AUG_LIB_NAME} SHARED IMPORTED)
-
- if(WIN32)
- # Mark the ".lib" location as part of a Windows DLL
- set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_IMPLIB
- "${ARG_SHARED_LIB}")
- else()
- set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
- "${ARG_SHARED_LIB}")
- endif()
- if(ARG_DEPS)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
- "${ARG_DEPS}")
- endif()
- message(STATUS "Added shared library dependency ${AUG_LIB_NAME}:
${ARG_SHARED_LIB}")
- if(ARG_INCLUDE_DIRECTORIES)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
-
"${ARG_INCLUDE_DIRECTORIES}")
- endif()
- elseif(ARG_STATIC_LIB)
- set(AUG_LIB_NAME "${LIB_NAME}_static")
- add_library(${AUG_LIB_NAME} STATIC IMPORTED)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
- "${ARG_STATIC_LIB}")
- if(ARG_DEPS)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
- "${ARG_DEPS}")
- endif()
- message(STATUS "Added static library dependency ${AUG_LIB_NAME}:
${ARG_STATIC_LIB}")
- if(ARG_INCLUDE_DIRECTORIES)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
-
"${ARG_INCLUDE_DIRECTORIES}")
- endif()
- elseif(ARG_SHARED_LIB)
- set(AUG_LIB_NAME "${LIB_NAME}_shared")
- add_library(${AUG_LIB_NAME} SHARED IMPORTED)
-
+ add_library(${LIB_NAME} ${LIB_TYPE} IMPORTED)
+ if(${LIB_TYPE} STREQUAL "STATIC")
+ set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION "${LIB}")
+ message(STATUS "Added static library dependency ${LIB_NAME}: ${LIB}")
+ else()
if(WIN32)
# Mark the ".lib" location as part of a Windows DLL
- set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_IMPLIB
- "${ARG_SHARED_LIB}")
+ set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_IMPLIB "${LIB}")
else()
- set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
- "${ARG_SHARED_LIB}")
- endif()
- message(STATUS "Added shared library dependency ${AUG_LIB_NAME}:
${ARG_SHARED_LIB}")
- if(ARG_DEPS)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
- "${ARG_DEPS}")
- endif()
- if(ARG_INCLUDE_DIRECTORIES)
- set_target_properties(${AUG_LIB_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
-
"${ARG_INCLUDE_DIRECTORIES}")
+ set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION "${LIB}")
endif()
- else()
- message(FATAL_ERROR "No static or shared library provided for ${LIB_NAME}")
+ message(STATUS "Added shared library dependency ${LIB_NAME}: ${LIB}")
+ endif()
+ if(ARG_DEPS)
+ set_target_properties(${LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
"${ARG_DEPS}")
+ endif()
+ if(ARG_INCLUDE_DIRECTORIES)
+ set_target_properties(${LIB_NAME} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+ "${ARG_INCLUDE_DIRECTORIES}")
endif()
endfunction()
@@ -271,11 +202,16 @@ function(ADD_ARROW_LIB LIB_NAME)
set(OUTPUT_PATH ${BUILD_OUTPUT_ROOT_DIRECTORY})
endif()
- if(WIN32 OR (CMAKE_GENERATOR STREQUAL Xcode))
+ if(WIN32
+ OR (CMAKE_GENERATOR STREQUAL Xcode)
+ OR CMAKE_VERSION VERSION_LESS 3.12)
# We need to compile C++ separately for each library kind (shared and
static)
# because of dllexport declarations on Windows.
# The Xcode generator doesn't reliably work with Xcode as target names are
not
# guessed correctly.
+ # We can't use target for object library with CMake 3.11 or earlier.
+ # See also: Object Libraries:
+ #
https://cmake.org/cmake/help/latest/command/add_library.html#object-libraries
set(USE_OBJLIB OFF)
else()
set(USE_OBJLIB ON)
@@ -310,6 +246,9 @@ function(ADD_ARROW_LIB LIB_NAME)
if(ARG_PRIVATE_INCLUDES)
target_include_directories(${LIB_NAME}_objlib PRIVATE
${ARG_PRIVATE_INCLUDES})
endif()
+ target_link_libraries(${LIB_NAME}_objlib
+ PRIVATE ${ARG_SHARED_LINK_LIBS}
${ARG_SHARED_PRIVATE_LINK_LIBS}
+ ${ARG_STATIC_LINK_LIBS})
else()
# Prepare arguments for separate compilation of static and shared libs
below
# TODO: add PCH directives
diff --git a/cpp/cmake_modules/DefineOptions.cmake
b/cpp/cmake_modules/DefineOptions.cmake
index ab7d2edf56..f3d94353ab 100644
--- a/cpp/cmake_modules/DefineOptions.cmake
+++ b/cpp/cmake_modules/DefineOptions.cmake
@@ -352,6 +352,9 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL
"${CMAKE_CURRENT_SOURCE_DIR}")
"Rely on Protocol Buffers shared libraries where relevant"
${ARROW_DEPENDENCY_USE_SHARED})
+ define_option(ARROW_SNAPPY_USE_SHARED "Rely on snappy shared libraries where
relevant"
+ ${ARROW_DEPENDENCY_USE_SHARED})
+
if(WIN32)
# It seems that Thrift doesn't support DLL well yet.
# MSYS2, conda-forge and vcpkg don't build shared library.
@@ -366,13 +369,6 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL
"${CMAKE_CURRENT_SOURCE_DIR}")
"Rely on utf8proc shared libraries where relevant"
${ARROW_DEPENDENCY_USE_SHARED})
- define_option(ARROW_SNAPPY_USE_SHARED "Rely on snappy shared libraries where
relevant"
- ${ARROW_DEPENDENCY_USE_SHARED})
-
- define_option(ARROW_UTF8PROC_USE_SHARED
- "Rely on utf8proc shared libraries where relevant"
- ${ARROW_DEPENDENCY_USE_SHARED})
-
define_option(ARROW_ZSTD_USE_SHARED "Rely on zstd shared libraries where
relevant"
${ARROW_DEPENDENCY_USE_SHARED})
diff --git a/cpp/cmake_modules/FindBoostAlt.cmake
b/cpp/cmake_modules/FindBoostAlt.cmake
deleted file mode 100644
index 072e267c1f..0000000000
--- a/cpp/cmake_modules/FindBoostAlt.cmake
+++ /dev/null
@@ -1,63 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-if(DEFINED ENV{BOOST_ROOT} OR DEFINED BOOST_ROOT)
- # In older versions of CMake (such as 3.2), the system paths for Boost will
- # be looked in first even if we set $BOOST_ROOT or pass -DBOOST_ROOT
- set(Boost_NO_SYSTEM_PATHS ON)
-endif()
-
-set(BoostAlt_FIND_PACKAGE_OPTIONS)
-if(BoostAlt_FIND_VERSION)
- list(APPEND BoostAlt_FIND_PACKAGE_OPTIONS ${BoostAlt_FIND_VERSION})
-endif()
-if(BoostAlt_FIND_REQUIRED)
- list(APPEND BoostAlt_FIND_PACKAGE_OPTIONS REQUIRED)
-endif()
-if(BoostAlt_FIND_QUIETLY)
- list(APPEND BoostAlt_FIND_PACKAGE_OPTIONS QUIET)
-endif()
-
-if(ARROW_BOOST_USE_SHARED)
- # Find shared Boost libraries.
- set(Boost_USE_STATIC_LIBS OFF)
- set(BUILD_SHARED_LIBS_KEEP ${BUILD_SHARED_LIBS})
- set(BUILD_SHARED_LIBS ON)
-
- find_package(Boost ${BoostAlt_FIND_PACKAGE_OPTIONS} COMPONENTS system
filesystem)
- set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_KEEP})
- unset(BUILD_SHARED_LIBS_KEEP)
-else()
- # Find static boost headers and libs
- # TODO Differentiate here between release and debug builds
- set(Boost_USE_STATIC_LIBS ON)
- find_package(Boost ${BoostAlt_FIND_PACKAGE_OPTIONS} COMPONENTS system
filesystem)
-endif()
-
-if(Boost_FOUND)
- set(BoostAlt_FOUND ON)
- if(MSVC_TOOLCHAIN)
- # disable autolinking in boost
- add_definitions(-DBOOST_ALL_NO_LIB)
- if(ARROW_BOOST_USE_SHARED)
- # force all boost libraries to dynamic link
- add_definitions(-DBOOST_ALL_DYN_LINK)
- endif()
- endif()
-else()
- set(BoostAlt_FOUND OFF)
-endif()
diff --git a/cpp/cmake_modules/Findutf8proc.cmake
b/cpp/cmake_modules/Findutf8proc.cmake
index 4d732f1869..867361cd10 100644
--- a/cpp/cmake_modules/Findutf8proc.cmake
+++ b/cpp/cmake_modules/Findutf8proc.cmake
@@ -95,7 +95,7 @@ if(utf8proc_FOUND)
INTERFACE_INCLUDE_DIRECTORIES
"${utf8proc_INCLUDE_DIR}")
if(NOT ARROW_UTF8PROC_USE_SHARED)
- set_target_properties(utf8proc::utf8proc PROPERTIES
INTERFACE_COMPILER_DEFINITIONS
+ set_target_properties(utf8proc::utf8proc PROPERTIES
INTERFACE_COMPILE_DEFINITIONS
"UTF8PROC_STATIC")
endif()
endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 865406e705..32669b2c07 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -200,7 +200,7 @@ endmacro()
macro(resolve_dependency DEPENDENCY_NAME)
set(options)
set(one_value_args HAVE_ALT IS_RUNTIME_DEPENDENCY REQUIRED_VERSION
USE_CONFIG)
- set(multi_value_args PC_PACKAGE_NAMES)
+ set(multi_value_args COMPONENTS PC_PACKAGE_NAMES)
cmake_parse_arguments(ARG
"${options}"
"${one_value_args}"
@@ -225,6 +225,9 @@ macro(resolve_dependency DEPENDENCY_NAME)
if(ARG_USE_CONFIG)
list(APPEND FIND_PACKAGE_ARGUMENTS CONFIG)
endif()
+ if(ARG_COMPONENTS)
+ list(APPEND FIND_PACKAGE_ARGUMENTS COMPONENTS ${ARG_COMPONENTS})
+ endif()
if(${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO")
find_package(${FIND_PACKAGE_ARGUMENTS})
if(${${PACKAGE_NAME}_FOUND})
@@ -260,8 +263,15 @@ endmacro()
set(THIRDPARTY_DIR "${arrow_SOURCE_DIR}/thirdparty")
-# Include vendored Flatbuffers
-include_directories(SYSTEM "${THIRDPARTY_DIR}/flatbuffers/include")
+add_library(arrow::flatbuffers INTERFACE IMPORTED)
+if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(arrow::flatbuffers
+ PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+ "${THIRDPARTY_DIR}/flatbuffers/include")
+else()
+ target_include_directories(arrow::flatbuffers
+ INTERFACE "${THIRDPARTY_DIR}/flatbuffers/include")
+endif()
# ----------------------------------------------------------------------
# Some EP's require other EP's
@@ -770,6 +780,7 @@ macro(build_boost)
# This is needed by the thrift_ep build
set(BOOST_ROOT ${BOOST_PREFIX})
+ set(Boost_INCLUDE_DIR "${BOOST_PREFIX}")
if(ARROW_BOOST_REQUIRE_LIBRARY)
set(BOOST_LIB_DIR "${BOOST_PREFIX}/stage/lib")
@@ -829,9 +840,16 @@ macro(build_boost)
set(BOOST_BUILD_PRODUCTS ${BOOST_STATIC_SYSTEM_LIBRARY}
${BOOST_STATIC_FILESYSTEM_LIBRARY})
- add_thirdparty_lib(boost_system STATIC_LIB
"${BOOST_STATIC_SYSTEM_LIBRARY}")
-
- add_thirdparty_lib(boost_filesystem STATIC_LIB
"${BOOST_STATIC_FILESYSTEM_LIBRARY}")
+ add_thirdparty_lib(Boost::system
+ STATIC
+ "${BOOST_STATIC_SYSTEM_LIBRARY}"
+ INCLUDE_DIRECTORIES
+ "${Boost_INCLUDE_DIR}")
+ add_thirdparty_lib(Boost::filesystem
+ STATIC
+ "${BOOST_STATIC_FILESYSTEM_LIBRARY}"
+ INCLUDE_DIRECTORIES
+ "${Boost_INCLUDE_DIR}")
externalproject_add(boost_ep
URL ${BOOST_SOURCE_URL}
@@ -841,8 +859,8 @@ macro(build_boost)
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
BUILD_COMMAND ${BOOST_BUILD_COMMAND}
INSTALL_COMMAND "" ${EP_LOG_OPTIONS})
- add_dependencies(boost_system_static boost_ep)
- add_dependencies(boost_filesystem_static boost_ep)
+ add_dependencies(Boost::system boost_ep)
+ add_dependencies(Boost::filesystem boost_ep)
else()
externalproject_add(boost_ep
${EP_LOG_OPTIONS}
@@ -852,9 +870,27 @@ macro(build_boost)
URL ${BOOST_SOURCE_URL}
URL_HASH "SHA256=${ARROW_BOOST_BUILD_SHA256_CHECKSUM}")
endif()
- set(Boost_INCLUDE_DIR "${BOOST_PREFIX}")
- set(Boost_INCLUDE_DIRS "${Boost_INCLUDE_DIR}")
- add_dependencies(toolchain boost_ep)
+ add_library(Boost::headers INTERFACE IMPORTED)
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(Boost::headers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
+ "${Boost_INCLUDE_DIR}")
+ else()
+ target_include_directories(Boost::headers INTERFACE "${Boost_INCLUDE_DIR}")
+ endif()
+ add_dependencies(Boost::headers boost_ep)
+ # If Boost is found but one of system or filesystem components aren't found,
+ # Boost::disable_autolinking and Boost::dynamic_linking are already defined.
+ if(NOT TARGET Boost::disable_autolinking)
+ add_library(Boost::disable_autolinking INTERFACE IMPORTED)
+ if(WIN32)
+ target_compile_definitions(Boost::disable_autolinking INTERFACE
"BOOST_ALL_NO_LIB")
+ endif()
+ endif()
+ if(NOT TARGET Boost::dynamic_linking)
+ # This doesn't add BOOST_ALL_DYN_LINK because bundled Boost is a static
library.
+ add_library(Boost::dynamic_linking INTERFACE IMPORTED)
+ add_dependencies(toolchain boost_ep)
+ endif()
set(BOOST_VENDORED TRUE)
endmacro()
@@ -954,43 +990,83 @@ if(ARROW_BUILD_INTEGRATION
OR ARROW_BUILD_TESTS
OR (ARROW_FLIGHT AND ARROW_BUILD_BENCHMARKS)
OR (ARROW_S3 AND ARROW_BUILD_BENCHMARKS))
- set(ARROW_BOOST_REQUIRED TRUE)
+ set(ARROW_USE_BOOST TRUE)
set(ARROW_BOOST_REQUIRE_LIBRARY TRUE)
elseif(ARROW_GANDIVA
OR (ARROW_WITH_THRIFT AND THRIFT_REQUIRES_BOOST)
OR (NOT ARROW_USE_NATIVE_INT128))
- set(ARROW_BOOST_REQUIRED TRUE)
+ set(ARROW_USE_BOOST TRUE)
set(ARROW_BOOST_REQUIRE_LIBRARY FALSE)
else()
- set(ARROW_BOOST_REQUIRED FALSE)
+ set(ARROW_USE_BOOST FALSE)
endif()
-if(ARROW_BOOST_REQUIRED)
+if(ARROW_USE_BOOST)
+ if(ARROW_BOOST_USE_SHARED)
+ # Find shared Boost libraries.
+ set(Boost_USE_STATIC_LIBS OFF)
+ set(BUILD_SHARED_LIBS_KEEP ${BUILD_SHARED_LIBS})
+ set(BUILD_SHARED_LIBS ON)
+ else()
+ # Find static boost headers and libs
+ set(Boost_USE_STATIC_LIBS ON)
+ endif()
resolve_dependency(Boost
- HAVE_ALT
- TRUE
REQUIRED_VERSION
${ARROW_BOOST_REQUIRED_VERSION}
+ COMPONENTS
+ system
+ filesystem
IS_RUNTIME_DEPENDENCY
# libarrow.so doesn't depend on libboost*.
FALSE)
+ if(ARROW_BOOST_USE_SHARED)
+ set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_KEEP})
+ unset(BUILD_SHARED_LIBS_KEEP)
+ endif()
- if(TARGET Boost::system)
- set(BOOST_SYSTEM_LIBRARY Boost::system)
- set(BOOST_FILESYSTEM_LIBRARY Boost::filesystem)
- elseif(BoostAlt_FOUND)
- set(BOOST_SYSTEM_LIBRARY ${Boost_SYSTEM_LIBRARY})
- set(BOOST_FILESYSTEM_LIBRARY ${Boost_FILESYSTEM_LIBRARY})
- else()
- set(BOOST_SYSTEM_LIBRARY boost_system_static)
- set(BOOST_FILESYSTEM_LIBRARY boost_filesystem_static)
+ # For CMake < 3.15
+ if(NOT TARGET Boost::headers)
+ add_library(Boost::headers INTERFACE IMPORTED)
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(Boost::headers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
+ "${Boost_INCLUDE_DIR}")
+ else()
+ target_include_directories(Boost::headers INTERFACE
"${Boost_INCLUDE_DIR}")
+ endif()
endif()
- set(ARROW_BOOST_LIBS ${BOOST_SYSTEM_LIBRARY} ${BOOST_FILESYSTEM_LIBRARY})
- message(STATUS "Boost include dir: ${Boost_INCLUDE_DIR}")
- message(STATUS "Boost libraries: ${ARROW_BOOST_LIBS}")
+ foreach(BOOST_LIBRARY Boost::headers Boost::filesystem Boost::system)
+ if(NOT TARGET ${BOOST_LIBRARY})
+ continue()
+ endif()
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(${BOOST_LIBRARY} PROPERTIES
INTERFACE_LINK_LIBRARIES
+
Boost::disable_autolinking)
+ else()
+ target_link_libraries(${BOOST_LIBRARY} INTERFACE
Boost::disable_autolinking)
+ endif()
+ if(ARROW_BOOST_USE_SHARED)
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(${BOOST_LIBRARY} PROPERTIES
INTERFACE_LINK_LIBRARIES
+
Boost::dynamic_linking)
+ else()
+ target_link_libraries(${BOOST_LIBRARY} INTERFACE
Boost::dynamic_linking)
+ endif()
+ endif()
+ endforeach()
- include_directories(SYSTEM ${Boost_INCLUDE_DIR})
+ if(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ # boost/process/detail/windows/handle_workaround.hpp doesn't work
+ # without BOOST_USE_WINDOWS_H with MinGW because MinGW doesn't
+ # provide __kernel_entry without winternl.h.
+ #
+ # See also:
+ #
https://github.com/boostorg/process/blob/develop/include/boost/process/detail/windows/handle_workaround.hpp
+ target_compile_definitions(Boost::headers INTERFACE
"BOOST_USE_WINDOWS_H=1")
+ endif()
+
+ message(STATUS "Boost include dir: ${Boost_INCLUDE_DIR}")
endif()
# ----------------------------------------------------------------------
@@ -1056,9 +1132,6 @@ if(ARROW_WITH_SNAPPY)
get_target_property(SNAPPY_LIB Snappy::snappy IMPORTED_LOCATION)
string(APPEND ARROW_PC_LIBS_PRIVATE " ${SNAPPY_LIB}")
endif()
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(SNAPPY_INCLUDE_DIRS Snappy::snappy
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${SNAPPY_INCLUDE_DIRS})
endif()
# ----------------------------------------------------------------------
@@ -1122,10 +1195,6 @@ endmacro()
if(ARROW_WITH_BROTLI)
resolve_dependency(Brotli PC_PACKAGE_NAMES libbrotlidec libbrotlienc)
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(BROTLI_INCLUDE_DIR Brotli::brotlicommon
- INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${BROTLI_INCLUDE_DIR})
endif()
if(PARQUET_REQUIRE_ENCRYPTION AND NOT ARROW_PARQUET)
@@ -1177,9 +1246,7 @@ if(ARROW_USE_OPENSSL)
message(STATUS "Found OpenSSL Crypto Library: ${OPENSSL_CRYPTO_LIBRARY}")
message(STATUS "Building with OpenSSL (Version: ${OPENSSL_VERSION}) support")
- list(APPEND ARROW_SYSTEM_DEPENDENCIES "OpenSSL")
-
- include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR})
+ list(APPEND ARROW_SYSTEM_DEPENDENCIES OpenSSL)
else()
message(STATUS "Building without OpenSSL support. Minimum OpenSSL version
${ARROW_OPENSSL_REQUIRED_VERSION} required."
)
@@ -1242,9 +1309,6 @@ endmacro()
if(ARROW_USE_GLOG)
resolve_dependency(GLOG PC_PACKAGE_NAMES libglog)
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(GLOG_INCLUDE_DIR glog::glog
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${GLOG_INCLUDE_DIR})
endif()
# ----------------------------------------------------------------------
@@ -1296,8 +1360,8 @@ macro(build_gflags)
add_dependencies(toolchain gflags_ep)
- add_thirdparty_lib(gflags STATIC_LIB ${GFLAGS_STATIC_LIB})
- set(GFLAGS_LIBRARY gflags_static)
+ add_thirdparty_lib(gflags::gflags_static STATIC ${GFLAGS_STATIC_LIB})
+ set(GFLAGS_LIBRARY gflags::gflags_static)
set_target_properties(${GFLAGS_LIBRARY}
PROPERTIES INTERFACE_COMPILE_DEFINITIONS
"GFLAGS_IS_A_DLL=0"
INTERFACE_INCLUDE_DIRECTORIES
"${GFLAGS_INCLUDE_DIR}")
@@ -1309,7 +1373,7 @@ macro(build_gflags)
set(GFLAGS_VENDORED TRUE)
- list(APPEND ARROW_BUNDLED_STATIC_LIBS gflags_static)
+ list(APPEND ARROW_BUNDLED_STATIC_LIBS gflags::gflags_static)
endmacro()
if(ARROW_NEED_GFLAGS)
@@ -1321,11 +1385,11 @@ if(ARROW_NEED_GFLAGS)
${ARROW_GFLAGS_REQUIRED_VERSION}
IS_RUNTIME_DEPENDENCY
FALSE)
- # TODO: Don't use global includes but rather target_include_directories
- include_directories(SYSTEM ${GFLAGS_INCLUDE_DIR})
if(NOT TARGET ${GFLAGS_LIBRARIES})
- if(TARGET gflags-shared)
+ if(TARGET gflags::gflags_shared)
+ set(GFLAGS_LIBRARIES gflags::gflags_shared)
+ elseif(TARGET gflags-shared)
set(GFLAGS_LIBRARIES gflags-shared)
elseif(TARGET gflags_shared)
set(GFLAGS_LIBRARIES gflags_shared)
@@ -1405,6 +1469,12 @@ macro(build_thrift)
set_target_properties(thrift::thrift
PROPERTIES IMPORTED_LOCATION "${THRIFT_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES
"${THRIFT_INCLUDE_DIR}")
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(${BOOST_LIBRARY} PROPERTIES INTERFACE_LINK_LIBRARIES
+ Boost::headers)
+ else()
+ target_link_libraries(thrift::thrift INTERFACE Boost::headers)
+ endif()
add_dependencies(toolchain thrift_ep)
add_dependencies(thrift::thrift thrift_ep)
set(THRIFT_VERSION ${ARROW_THRIFT_BUILD_VERSION})
@@ -1423,8 +1493,6 @@ if(ARROW_WITH_THRIFT)
PC_PACKAGE_NAMES
thrift)
endif()
- # TODO: Don't use global includes but rather target_include_directories
- include_directories(SYSTEM ${THRIFT_INCLUDE_DIR})
string(REPLACE "." ";" VERSION_LIST ${THRIFT_VERSION})
list(GET VERSION_LIST 0 THRIFT_VERSION_MAJOR)
@@ -1512,6 +1580,8 @@ macro(build_protobuf)
URL_HASH
"SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}")
file(MAKE_DIRECTORY "${PROTOBUF_INCLUDE_DIR}")
+ # For compatibility of CMake's FindProtobuf.cmake.
+ set(Protobuf_INCLUDE_DIRS "${PROTOBUF_INCLUDE_DIR}")
add_library(arrow::protobuf::libprotobuf STATIC IMPORTED)
set_target_properties(arrow::protobuf::libprotobuf
@@ -1558,9 +1628,6 @@ if(ARROW_WITH_PROTOBUF)
add_definitions(-DPROTOBUF_USE_DLLS)
endif()
- # TODO: Don't use global includes but rather target_include_directories
- include_directories(SYSTEM ${PROTOBUF_INCLUDE_DIR})
-
if(TARGET arrow::protobuf::libprotobuf)
set(ARROW_PROTOBUF_LIBPROTOBUF arrow::protobuf::libprotobuf)
else()
@@ -1760,15 +1827,15 @@ if(ARROW_JEMALLOC)
# Don't use the include directory directly so that we can point to a path
# that is unique to our codebase.
- include_directories(SYSTEM
"${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
+ set(JEMALLOC_INCLUDE_DIR
"${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
# The include directory must exist before it is referenced by a target.
- file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
+ file(MAKE_DIRECTORY "${JEMALLOC_INCLUDE_DIR}")
add_library(jemalloc::jemalloc STATIC IMPORTED)
set_target_properties(jemalloc::jemalloc
PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads
IMPORTED_LOCATION "${JEMALLOC_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES
-
"${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src")
+ "${JEMALLOC_INCLUDE_DIR}")
add_dependencies(jemalloc::jemalloc jemalloc_ep)
list(APPEND ARROW_BUNDLED_STATIC_LIBS jemalloc::jemalloc)
@@ -1810,7 +1877,6 @@ if(ARROW_MIMALLOC)
CMAKE_ARGS ${MIMALLOC_CMAKE_ARGS}
BUILD_BYPRODUCTS "${MIMALLOC_STATIC_LIB}")
- include_directories(SYSTEM ${MIMALLOC_INCLUDE_DIR})
file(MAKE_DIRECTORY ${MIMALLOC_INCLUDE_DIR})
add_library(mimalloc::mimalloc STATIC IMPORTED)
@@ -2003,10 +2069,6 @@ if(ARROW_TESTING)
# endif()
# set(CMAKE_REQUIRED_LIBRARIES)
endif()
-
- get_target_property(GTEST_INCLUDE_DIR GTest::gtest
INTERFACE_INCLUDE_DIRECTORIES)
- # TODO: Don't use global includes but rather target_include_directories
- include_directories(SYSTEM ${GTEST_INCLUDE_DIR})
endif()
macro(build_benchmark)
@@ -2077,10 +2139,6 @@ if(ARROW_BUILD_BENCHMARKS)
${BENCHMARK_REQUIRED_VERSION}
IS_RUNTIME_DEPENDENCY
FALSE)
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(BENCHMARK_INCLUDE_DIR benchmark::benchmark
- INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${BENCHMARK_INCLUDE_DIR})
endif()
macro(build_rapidjson)
@@ -2102,6 +2160,8 @@ macro(build_rapidjson)
CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS})
set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/include")
+ # The include directory must exist before it is referenced by a target.
+ file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}")
add_dependencies(toolchain rapidjson_ep)
add_dependencies(toolchain-tests rapidjson_ep)
@@ -2123,9 +2183,20 @@ if(ARROW_WITH_RAPIDJSON)
if(RapidJSON_INCLUDE_DIR)
set(RAPIDJSON_INCLUDE_DIR "${RapidJSON_INCLUDE_DIR}")
endif()
+ if(WIN32 AND "${RAPIDJSON_INCLUDE_DIR}" MATCHES "^/")
+ # MSYS2
+ execute_process(COMMAND "cygpath" "--windows" "${RAPIDJSON_INCLUDE_DIR}"
+ OUTPUT_VARIABLE RAPIDJSON_INCLUDE_DIR
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ endif()
- # TODO: Don't use global includes but rather target_include_directories
- include_directories(SYSTEM ${RAPIDJSON_INCLUDE_DIR})
+ add_library(rapidjson::rapidjson INTERFACE IMPORTED)
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(rapidjson::rapidjson PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
+
"${RAPIDJSON_INCLUDE_DIR}")
+ else()
+ target_include_directories(rapidjson::rapidjson INTERFACE
"${RAPIDJSON_INCLUDE_DIR}")
+ endif()
endif()
macro(build_xsimd)
@@ -2141,6 +2212,8 @@ macro(build_xsimd)
CMAKE_ARGS ${XSIMD_CMAKE_ARGS})
set(XSIMD_INCLUDE_DIR "${XSIMD_PREFIX}/include")
+ # The include directory must exist before it is referenced by a target.
+ file(MAKE_DIRECTORY "${XSIMD_INCLUDE_DIR}")
add_dependencies(toolchain xsimd_ep)
add_dependencies(toolchain-tests xsimd_ep)
@@ -2150,10 +2223,21 @@ endmacro()
if((NOT ARROW_SIMD_LEVEL STREQUAL "NONE") OR (NOT ARROW_RUNTIME_SIMD_LEVEL
STREQUAL "NONE"
))
+ set(ARROW_USE_XSIMD TRUE)
+else()
+ set(ARROW_USE_XSIMD FALSE)
+endif()
+if(ARROW_USE_XSIMD)
set(xsimd_SOURCE "BUNDLED")
resolve_dependency(xsimd)
- # TODO: Don't use global includes but rather target_include_directories
- include_directories(SYSTEM ${XSIMD_INCLUDE_DIR})
+
+ add_library(xsimd INTERFACE IMPORTED)
+ if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(xsimd PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+ "${XSIMD_INCLUDE_DIR}")
+ else()
+ target_include_directories(xsimd INTERFACE "${XSIMD_INCLUDE_DIR}")
+ endif()
endif()
macro(build_zlib)
@@ -2195,10 +2279,6 @@ endmacro()
if(ARROW_WITH_ZLIB)
resolve_dependency(ZLIB PC_PACKAGE_NAMES zlib)
-
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(ZLIB_INCLUDE_DIR ZLIB::ZLIB
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
endif()
macro(build_lz4)
@@ -2253,10 +2333,6 @@ endmacro()
if(ARROW_WITH_LZ4)
resolve_dependency(Lz4 PC_PACKAGE_NAMES liblz4)
-
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(LZ4_INCLUDE_DIR LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${LZ4_INCLUDE_DIR})
endif()
macro(build_zstd)
@@ -2339,11 +2415,6 @@ if(ARROW_WITH_ZSTD)
endif()
endif()
endif()
-
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(ZSTD_INCLUDE_DIR ${ARROW_ZSTD_LIBZSTD}
- INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${ZSTD_INCLUDE_DIR})
endif()
# ----------------------------------------------------------------------
@@ -2399,10 +2470,6 @@ if(ARROW_WITH_RE2)
string(APPEND ARROW_PC_LIBS_PRIVATE " ${RE2_LIB}")
endif()
add_definitions(-DARROW_WITH_RE2)
-
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(RE2_INCLUDE_DIR re2::re2 INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${RE2_INCLUDE_DIR})
endif()
macro(build_bzip2)
@@ -2465,7 +2532,6 @@ if(ARROW_WITH_BZ2)
PROPERTIES IMPORTED_LOCATION "${BZIP2_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES
"${BZIP2_INCLUDE_DIR}")
endif()
- include_directories(SYSTEM "${BZIP2_INCLUDE_DIR}")
endif()
macro(build_utf8proc)
@@ -2498,7 +2564,7 @@ macro(build_utf8proc)
add_library(utf8proc::utf8proc STATIC IMPORTED)
set_target_properties(utf8proc::utf8proc
PROPERTIES IMPORTED_LOCATION "${UTF8PROC_STATIC_LIB}"
- INTERFACE_COMPILER_DEFINITIONS
"UTF8PROC_STATIC"
+ INTERFACE_COMPILE_DEFINITIONS
"UTF8PROC_STATIC"
INTERFACE_INCLUDE_DIRECTORIES
"${UTF8PROC_PREFIX}/include")
@@ -2514,22 +2580,7 @@ if(ARROW_WITH_UTF8PROC)
"2.2.0"
PC_PACKAGE_NAMES
libutf8proc)
-
add_definitions(-DARROW_WITH_UTF8PROC)
-
- # TODO: Don't use global definitions but rather
- # target_compile_definitions or target_link_libraries
- get_target_property(UTF8PROC_COMPILER_DEFINITIONS utf8proc::utf8proc
- INTERFACE_COMPILER_DEFINITIONS)
- if(UTF8PROC_COMPILER_DEFINITIONS)
- add_definitions(-D${UTF8PROC_COMPILER_DEFINITIONS})
- endif()
-
- # TODO: Don't use global includes but rather
- # target_include_directories or target_link_libraries
- get_target_property(UTF8PROC_INCLUDE_DIR utf8proc::utf8proc
- INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${UTF8PROC_INCLUDE_DIR})
endif()
macro(build_cares)
@@ -3450,9 +3501,6 @@ macro(build_grpc)
TRUE
PC_PACKAGE_NAMES
libcares)
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(c-ares_INCLUDE_DIR c-ares::cares
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${c-ares_INCLUDE_DIR})
# First need Abseil
resolve_dependency_absl()
@@ -3708,10 +3756,6 @@ if(ARROW_WITH_GRPC)
PC_PACKAGE_NAMES
grpc++)
- # TODO: Don't use global includes but rather target_include_directories
- get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${GRPC_INCLUDE_DIR})
-
if(GRPC_VENDORED)
set(GRPCPP_PP_INCLUDE TRUE)
# Examples need to link to static Arrow if we're using static gRPC
@@ -3719,6 +3763,7 @@ if(ARROW_WITH_GRPC)
else()
# grpc++ headers may reside in ${GRPC_INCLUDE_DIR}/grpc++ or
${GRPC_INCLUDE_DIR}/grpcpp
# depending on the gRPC version.
+ get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++
INTERFACE_INCLUDE_DIRECTORIES)
if(EXISTS "${GRPC_INCLUDE_DIR}/grpcpp/impl/codegen/config_protobuf.h")
set(GRPCPP_PP_INCLUDE TRUE)
elseif(EXISTS "${GRPC_INCLUDE_DIR}/grpc++/impl/codegen/config_protobuf.h")
@@ -3802,7 +3847,6 @@ if(ARROW_WITH_NLOHMANN_JSON)
resolve_dependency(nlohmann_json)
get_target_property(nlohmann_json_INCLUDE_DIR nlohmann_json::nlohmann_json
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${nlohmann_json_INCLUDE_DIR})
message(STATUS "Found nlohmann_json headers: ${nlohmann_json_INCLUDE_DIR}")
endif()
@@ -3932,9 +3976,6 @@ if(ARROW_WITH_GOOGLE_CLOUD_CPP)
resolve_dependency(google_cloud_cpp_storage)
get_target_property(google_cloud_cpp_storage_INCLUDE_DIR
google-cloud-cpp::storage
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${google_cloud_cpp_storage_INCLUDE_DIR})
- get_target_property(absl_base_INCLUDE_DIR absl::base
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${absl_base_INCLUDE_DIR})
message(STATUS "Found google-cloud-cpp::storage headers:
${google_cloud_cpp_storage_INCLUDE_DIR}"
)
endif()
@@ -3956,9 +3997,15 @@ set(HDFS_H_PATH "${HADOOP_HOME}/include/hdfs.h")
if(NOT EXISTS ${HDFS_H_PATH})
message(FATAL_ERROR "Did not find hdfs.h at ${HDFS_H_PATH}")
endif()
-message(STATUS "Found hdfs.h at: " ${HDFS_H_PATH})
+message(STATUS "Found hdfs.h at: ${HDFS_H_PATH}")
-include_directories(SYSTEM "${HADOOP_HOME}/include")
+add_library(arrow::hadoop INTERFACE IMPORTED)
+if(CMAKE_VERSION VERSION_LESS 3.11)
+ set_target_properties(arrow::hadoop PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+ "${HADOOP_HOME}/include")
+else()
+ target_include_directories(arrow::hadoop INTERFACE "${HADOOP_HOME}/include")
+endif()
# ----------------------------------------------------------------------
# Apache ORC
@@ -4043,7 +4090,6 @@ endmacro()
if(ARROW_ORC)
resolve_dependency(ORC)
- include_directories(SYSTEM ${ORC_INCLUDE_DIR})
message(STATUS "Found ORC static library: ${ORC_STATIC_LIB}")
message(STATUS "Found ORC headers: ${ORC_INCLUDE_DIR}")
endif()
@@ -4260,7 +4306,6 @@ if(ARROW_WITH_OPENTELEMETRY)
resolve_dependency(opentelemetry-cpp)
get_target_property(OPENTELEMETRY_INCLUDE_DIR opentelemetry-cpp::api
INTERFACE_INCLUDE_DIRECTORIES)
- include_directories(SYSTEM ${OPENTELEMETRY_INCLUDE_DIR})
message(STATUS "Found OpenTelemetry headers: ${OPENTELEMETRY_INCLUDE_DIR}")
endif()
@@ -4486,7 +4531,6 @@ if(ARROW_S3)
endif()
endif()
- include_directories(SYSTEM ${AWSSDK_INCLUDE_DIR})
message(STATUS "Found AWS SDK headers: ${AWSSDK_INCLUDE_DIR}")
message(STATUS "Found AWS SDK libraries: ${AWSSDK_LINK_LIBRARIES}")
diff --git a/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
b/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
index eb5bb86917..32f980060c 100644
--- a/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
+++ b/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
@@ -38,7 +38,5 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Arrow REQUIRED)
find_package(Parquet REQUIRED)
-include_directories(SYSTEM ${ARROW_INCLUDE_DIR} ${PARQUET_INCLUDE_DIR})
-
add_executable(parquet-arrow-example reader_writer.cc)
-target_link_libraries(parquet-arrow-example ${PARQUET_SHARED_LIB}
${ARROW_SHARED_LIB})
+target_link_libraries(parquet-arrow-example parquet_shared arrow_shared)
diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt
index 690c51a4a6..3b49f4ca00 100644
--- a/cpp/src/arrow/CMakeLists.txt
+++ b/cpp/src/arrow/CMakeLists.txt
@@ -622,10 +622,15 @@ if(ARROW_TESTING)
DEPENDENCIES
arrow_test_dependencies
SHARED_LINK_LIBS
+ arrow::flatbuffers
+ rapidjson::rapidjson
arrow_shared
GTest::gtest
STATIC_LINK_LIBS
- arrow_static)
+ arrow::flatbuffers
+ rapidjson::rapidjson
+ arrow_static
+ GTest::gtest)
add_custom_target(arrow_testing)
add_dependencies(arrow_testing ${ARROW_TESTING_LIBRARIES})
diff --git a/cpp/src/arrow/dataset/CMakeLists.txt
b/cpp/src/arrow/dataset/CMakeLists.txt
index 6aa4794a3f..478c13691b 100644
--- a/cpp/src/arrow/dataset/CMakeLists.txt
+++ b/cpp/src/arrow/dataset/CMakeLists.txt
@@ -30,7 +30,7 @@ set(ARROW_DATASET_SRCS
projector.cc
scanner.cc)
-set(ARROW_DATASET_LINK_STATIC arrow_static)
+set(ARROW_DATASET_LINK_STATIC arrow_static ${ARROW_STATIC_LINK_LIBS})
set(ARROW_DATASET_LINK_SHARED arrow_shared)
if(ARROW_CSV)
diff --git a/cpp/src/arrow/filesystem/CMakeLists.txt
b/cpp/src/arrow/filesystem/CMakeLists.txt
index c301a57bad..44b71ed27f 100644
--- a/cpp/src/arrow/filesystem/CMakeLists.txt
+++ b/cpp/src/arrow/filesystem/CMakeLists.txt
@@ -40,7 +40,7 @@ if(ARROW_S3)
EXTRA_LABELS
filesystem)
if(TARGET arrow-s3fs-test)
- set(ARROW_S3FS_TEST_COMPILE_DEFINITIONS
${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
+ set(ARROW_S3FS_TEST_COMPILE_DEFINITIONS)
get_target_property(AWS_CPP_SDK_S3_TYPE aws-cpp-sdk-s3 TYPE)
# We need to initialize AWS C++ SDK for direct use (not via
# arrow::fs::S3FileSystem) in arrow-s3fs-test if we use static AWS
@@ -74,8 +74,6 @@ if(ARROW_S3)
SOURCES
s3fs_benchmark.cc
s3_test_util.cc)
- target_compile_definitions(arrow-filesystem-s3fs-benchmark
- PRIVATE
${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
if(ARROW_TEST_LINKAGE STREQUAL "static")
target_link_libraries(arrow-filesystem-s3fs-benchmark PRIVATE
parquet_static)
else()
diff --git a/cpp/src/arrow/flight/CMakeLists.txt
b/cpp/src/arrow/flight/CMakeLists.txt
index f9d135654b..c09159eb15 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -58,6 +58,13 @@ else()
list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS arrow_cuda_shared)
endif()
endif()
+list(APPEND
+ ARROW_FLIGHT_TEST_INTERFACE_LIBS
+ Boost::headers
+ Boost::filesystem
+ Boost::system
+ GTest::gtest
+ GTest::gmock)
# Needed for Flight SQL and integration
set(ARROW_FLIGHT_TEST_LINK_LIBS
@@ -250,22 +257,19 @@ if(ARROW_TESTING)
arrow_shared
arrow_flight_shared
arrow_testing_shared
- ${BOOST_FILESYSTEM_LIBRARY}
- ${BOOST_SYSTEM_LIBRARY}
- GTest::gtest
${ARROW_FLIGHT_TEST_INTERFACE_LIBS}
STATIC_LINK_LIBS
arrow_static
arrow_flight_static
arrow_testing_static
- ${ARROW_FLIGHT_TEST_INTERFACE_LIBS})
-endif()
+ ${ARROW_FLIGHT_TEST_INTERFACE_LIBS}
+ PRIVATE_INCLUDES
+ "${Protobuf_INCLUDE_DIRS}")
-foreach(LIB_TARGET ${ARROW_FLIGHT_TESTING_LIBRARIES})
- target_compile_definitions(${LIB_TARGET}
- PRIVATE ARROW_FLIGHT_EXPORTING
-
${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
-endforeach()
+ foreach(LIB_TARGET ${ARROW_FLIGHT_TESTING_LIBRARIES})
+ target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_EXPORTING)
+ endforeach()
+endif()
add_arrow_test(flight_internals_test
STATIC_LINK_LIBS
diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt
b/cpp/src/arrow/flight/sql/CMakeLists.txt
index 6efe6e76bf..6a3c922210 100644
--- a/cpp/src/arrow/flight/sql/CMakeLists.txt
+++ b/cpp/src/arrow/flight/sql/CMakeLists.txt
@@ -59,7 +59,9 @@ add_arrow_lib(arrow_flight_sql
SHARED_LINK_LIBS
arrow_flight_shared
STATIC_LINK_LIBS
- arrow_flight_static)
+ arrow_flight_static
+ PRIVATE_INCLUDES
+ "${Protobuf_INCLUDE_DIRS}")
if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static")
set(ARROW_FLIGHT_SQL_TEST_LINK_LIBS arrow_flight_sql_static
diff --git a/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
b/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
index 6e315b68d6..8e28c105b4 100644
--- a/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
+++ b/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
@@ -29,7 +29,6 @@ set(ARROW_FLIGHT_TRANSPORT_UCX_SRCS
util_internal.cc)
set(ARROW_FLIGHT_TRANSPORT_UCX_LINK_LIBS)
-include_directories(SYSTEM ${UCX_INCLUDE_DIRS})
list(APPEND ARROW_FLIGHT_TRANSPORT_UCX_LINK_LIBS PkgConfig::UCX)
add_arrow_lib(arrow_flight_transport_ucx
diff --git a/cpp/src/arrow/gpu/CMakeLists.txt b/cpp/src/arrow/gpu/CMakeLists.txt
index 7a66622f84..934a11f810 100644
--- a/cpp/src/arrow/gpu/CMakeLists.txt
+++ b/cpp/src/arrow/gpu/CMakeLists.txt
@@ -29,6 +29,7 @@ if(DEFINED ENV{CUDA_HOME})
set(CUDA_TOOLKIT_ROOT_DIR "$ENV{CUDA_HOME}")
endif()
+set(ARROW_CUDA_LINK_LIBS arrow::flatbuffers)
if(CMAKE_VERSION VERSION_LESS 3.17)
find_package(CUDA REQUIRED)
set(ARROW_CUDA_SHARED_LINK_LIBS ${CUDA_CUDA_LIBRARY})
@@ -39,7 +40,6 @@ else()
# CUDAToolkit is only available in CMake >= 3.17
find_package(CUDAToolkit REQUIRED)
set(ARROW_CUDA_SHARED_LINK_LIBS CUDA::cuda_driver)
- include_directories(SYSTEM ${CUDAToolkit_INCLUDE_DIRS})
endif()
set(ARROW_CUDA_SRCS cuda_arrow_ipc.cc cuda_context.cc cuda_internal.cc
cuda_memory.cc)
@@ -57,9 +57,11 @@ add_arrow_lib(arrow_cuda
${ARROW_VERSION_SCRIPT_FLAGS} # Defined in
cpp/arrow/CMakeLists.txt
SHARED_LINK_LIBS
arrow_shared
+ ${ARROW_CUDA_LINK_LIBS}
${ARROW_CUDA_SHARED_LINK_LIBS}
# Static arrow_cuda must also link against CUDA shared libs
STATIC_LINK_LIBS
+ ${ARROW_CUDA_LINK_LIBS}
${ARROW_CUDA_SHARED_LINK_LIBS})
add_dependencies(arrow_cuda ${ARROW_CUDA_LIBRARIES})
diff --git a/cpp/src/arrow/python/CMakeLists.txt
b/cpp/src/arrow/python/CMakeLists.txt
index 34dea64df5..c37240a426 100644
--- a/cpp/src/arrow/python/CMakeLists.txt
+++ b/cpp/src/arrow/python/CMakeLists.txt
@@ -71,13 +71,19 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR
CMAKE_CXX_COMPILER_ID STREQUAL
endif()
set(ARROW_PYTHON_SHARED_LINK_LIBS arrow_shared)
+set(ARROW_PYTHON_SHARED_PRIVATE_LINK_LIBS)
+set(ARROW_PYTHON_STATIC_LINK_LIBS ${PYTHON_OTHER_LIBS})
+
if(WIN32)
list(APPEND ARROW_PYTHON_SHARED_LINK_LIBS ${PYTHON_LIBRARIES}
${PYTHON_OTHER_LIBS})
endif()
-
if(PARQUET_REQUIRE_ENCRYPTION)
list(APPEND ARROW_PYTHON_SHARED_LINK_LIBS parquet_shared)
endif()
+if(ARROW_USE_XSIMD)
+ list(APPEND ARROW_PYTHON_SHARED_PRIVATE_LINK_LIBS xsimd)
+ list(APPEND ARROW_PYTHON_STATIC_LINK_LIBS xsimd)
+endif()
set(ARROW_PYTHON_INCLUDES ${NUMPY_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
@@ -98,8 +104,10 @@ add_arrow_lib(arrow_python
${ARROW_VERSION_SCRIPT_FLAGS} # Defined in
cpp/arrow/CMakeLists.txt
SHARED_LINK_LIBS
${ARROW_PYTHON_SHARED_LINK_LIBS}
+ SHARED_PRIVATE_LINK_LIBS
+ ${ARROW_PYTHON_SHARED_PRIVATE_LINK_LIBS}
STATIC_LINK_LIBS
- ${PYTHON_OTHER_LIBS}
+ ${ARROW_PYTHON_STATIC_LINK_LIBS}
EXTRA_INCLUDES
"${ARROW_PYTHON_INCLUDES}")
@@ -138,7 +146,9 @@ if(ARROW_FLIGHT AND ARROW_BUILD_SHARED)
STATIC_LINK_LIBS
${PYTHON_OTHER_LIBS}
EXTRA_INCLUDES
- "${ARROW_PYTHON_INCLUDES}")
+ "${ARROW_PYTHON_INCLUDES}"
+ PRIVATE_INCLUDES
+ "${Protobuf_INCLUDE_DIRS}")
add_dependencies(arrow_python ${ARROW_PYFLIGHT_LIBRARIES})
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 46e819ccc6..56c416ffb4 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -98,9 +98,21 @@ set(SRC_FILES
${GANDIVA_PRECOMPILED_CC_PATH})
set(GANDIVA_SHARED_PRIVATE_LINK_LIBS arrow_shared LLVM::LLVM_INTERFACE
- ${GANDIVA_OPENSSL_LIBS})
-
-set(GANDIVA_STATIC_LINK_LIBS arrow_static LLVM::LLVM_INTERFACE
${GANDIVA_OPENSSL_LIBS})
+ ${GANDIVA_OPENSSL_LIBS} Boost::headers)
+set(GANDIVA_STATIC_LINK_LIBS arrow_static LLVM::LLVM_INTERFACE
${GANDIVA_OPENSSL_LIBS}
+ Boost::headers)
+if(ARROW_WITH_RE2)
+ list(APPEND GANDIVA_SHARED_PRIVATE_LINK_LIBS re2::re2)
+ list(APPEND GANDIVA_STATIC_LINK_LIBS re2::re2)
+endif()
+if(ARROW_WITH_UTF8PROC)
+ list(APPEND GANDIVA_SHARED_PRIVATE_LINK_LIBS utf8proc::utf8proc)
+ list(APPEND GANDIVA_STATIC_LINK_LIBS utf8proc::utf8proc)
+endif()
+if(ARROW_USE_XSIMD)
+ list(APPEND GANDIVA_SHARED_PRIVATE_LINK_LIBS xsimd)
+ list(APPEND GANDIVA_STATIC_LINK_LIBS xsimd)
+endif()
if(ARROW_GANDIVA_STATIC_LIBSTDCPP AND (CMAKE_COMPILER_IS_GNUCC OR
CMAKE_COMPILER_IS_GNUCXX
))
diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt
index 4dcda67acf..28e4f00cac 100644
--- a/cpp/src/parquet/CMakeLists.txt
+++ b/cpp/src/parquet/CMakeLists.txt
@@ -105,13 +105,14 @@ endfunction()
# TODO(wesm): Handling of ABI/SO version
if(ARROW_BUILD_STATIC)
- set(PARQUET_STATIC_LINK_LIBS arrow_static)
- set(ARROW_LIBRARIES_FOR_STATIC_TESTS arrow_testing_static arrow_static)
+ set(PARQUET_STATIC_LINK_LIBS arrow_static ${ARROW_STATIC_LINK_LIBS})
+ set(ARROW_LIBRARIES_FOR_STATIC_TESTS arrow_testing_static arrow_static
+ ${ARROW_STATIC_LINK_LIBS})
else()
set(ARROW_LIBRARIES_FOR_STATIC_TESTS arrow_testing_shared arrow_shared)
endif()
-set(PARQUET_MIN_TEST_LIBS GTest::gtest_main GTest::gtest)
+set(PARQUET_MIN_TEST_LIBS GTest::gtest_main GTest::gtest Boost::headers)
if(APPLE)
set(PARQUET_MIN_TEST_LIBS ${PARQUET_MIN_TEST_LIBS} ${CMAKE_DL_LIBS})
@@ -218,18 +219,6 @@ if(NOT PARQUET_MINIMAL_DEPENDENCY)
# Link publicly with parquet_static (because internal users need to
# transitively link all dependencies)
set(PARQUET_STATIC_LINK_LIBS ${PARQUET_STATIC_LINK_LIBS} thrift::thrift)
-
- # Although we don't link parquet_objlib against anything, we need it to
depend
- # on these libs as we may generate their headers via ExternalProject_Add
- if(ARROW_BUILD_SHARED)
- set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES}
${PARQUET_SHARED_LINK_LIBS}
- ${PARQUET_SHARED_PRIVATE_LINK_LIBS})
- endif()
-
- if(ARROW_BUILD_STATIC)
- set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES}
${PARQUET_STATIC_LINK_LIBS})
- endif()
-
endif(NOT PARQUET_MINIMAL_DEPENDENCY)
if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
@@ -248,8 +237,6 @@ add_arrow_lib(parquet
"$<$<COMPILE_LANGUAGE:CXX>:parquet/pch.h>"
OUTPUTS
PARQUET_LIBRARIES
- DEPENDENCIES
- ${PARQUET_DEPENDENCIES}
SHARED_LINK_FLAGS
${PARQUET_SHARED_LINK_FLAGS}
SHARED_LINK_LIBS
@@ -263,7 +250,7 @@ if(WIN32 AND NOT (ARROW_TEST_LINKAGE STREQUAL "static"))
add_library(parquet_test_support STATIC
"${ARROW_SOURCE_DIR}/src/generated/parquet_constants.cpp"
"${ARROW_SOURCE_DIR}/src/generated/parquet_types.cpp")
- add_dependencies(parquet_test_support thrift::thrift)
+ target_link_libraries(parquet_test_support thrift::thrift)
set(PARQUET_SHARED_TEST_LINK_LIBS ${PARQUET_SHARED_TEST_LINK_LIBS}
parquet_test_support)
set(PARQUET_LIBRARIES ${PARQUET_LIBRARIES} parquet_test_support)
endif()
diff --git a/cpp/src/plasma/CMakeLists.txt b/cpp/src/plasma/CMakeLists.txt
index 46603d6f85..d78a5ccfdc 100644
--- a/cpp/src/plasma/CMakeLists.txt
+++ b/cpp/src/plasma/CMakeLists.txt
@@ -52,8 +52,8 @@ set(PLASMA_STORE_SRCS
store.cc
thirdparty/ae/ae.c)
-set(PLASMA_LINK_LIBS arrow_shared)
-set(PLASMA_STATIC_LINK_LIBS arrow_static)
+set(PLASMA_LINK_LIBS arrow::flatbuffers arrow_shared)
+set(PLASMA_STATIC_LINK_LIBS arrow::flatbuffers arrow_static)
if(ARROW_CUDA)
list(INSERT PLASMA_LINK_LIBS 0 arrow_cuda_shared)
@@ -113,13 +113,13 @@ list(APPEND PLASMA_EXTERNAL_STORE_SOURCES
"external_store.cc" "hash_table_store.
# We use static libraries for the plasma-store-server executable so that it can
# be copied around and used in different locations.
add_executable(plasma-store-server ${PLASMA_EXTERNAL_STORE_SOURCES}
${PLASMA_STORE_SRCS})
-target_link_libraries(plasma-store-server ${GFLAGS_LIBRARIES})
if(ARROW_BUILD_STATIC)
target_link_libraries(plasma-store-server plasma_static
${PLASMA_STATIC_LINK_LIBS})
else()
# Fallback to shared libs in the case that static libraries are not build.
target_link_libraries(plasma-store-server plasma_shared ${PLASMA_LINK_LIBS})
endif()
+target_link_libraries(plasma-store-server ${GFLAGS_LIBRARIES})
add_dependencies(plasma plasma-store-server)
if(ARROW_RPATH_ORIGIN)