Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 72 additions & 16 deletions cpp/cmake_modules/ThirdpartyToolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,8 @@ macro(resolve_dependency DEPENDENCY_NAME)
IS_RUNTIME_DEPENDENCY
REQUIRED_VERSION
USE_CONFIG)
set(multi_value_args COMPONENTS OPTIONAL_COMPONENTS PC_PACKAGE_NAMES)
set(multi_value_args COMPONENTS OPTIONAL_COMPONENTS PC_PACKAGE_NAMES
STATIC_INSTALL_INTERFACE_LIBS)
cmake_parse_arguments(ARG
"${options}"
"${one_value_args}"
Expand Down Expand Up @@ -363,6 +364,29 @@ macro(resolve_dependency DEPENDENCY_NAME)
endforeach()
endif()
endif()
if(${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM" AND ARG_STATIC_INSTALL_INTERFACE_LIBS)
if(NOT ARG_ARROW_CMAKE_PACKAGE_NAME)
set(ARG_ARROW_CMAKE_PACKAGE_NAME "Arrow")
endif()
string(REGEX REPLACE "([A-Z])" "_\\1" ARG_ARROW_CMAKE_PACKAGE_NAME_SNAKE
${ARG_ARROW_CMAKE_PACKAGE_NAME})
string(SUBSTRING ${ARG_ARROW_CMAKE_PACKAGE_NAME_SNAKE} 1 -1
ARG_ARROW_CMAKE_PACKAGE_NAME_SNAKE)
string(TOUPPER ${ARG_ARROW_CMAKE_PACKAGE_NAME_SNAKE}
ARG_ARROW_CMAKE_PACKAGE_NAME_UPPER_SNAKE)
set(RESOLVED_STATIC_INSTALL_INTERFACE_LIBS)
foreach(ARG_STATIC_INSTALL_INTERFACE_LIB ${ARG_STATIC_INSTALL_INTERFACE_LIBS})
if(DEFINED ${ARG_STATIC_INSTALL_INTERFACE_LIB})
list(APPEND RESOLVED_STATIC_INSTALL_INTERFACE_LIBS
${${ARG_STATIC_INSTALL_INTERFACE_LIB}})
else()
list(APPEND RESOLVED_STATIC_INSTALL_INTERFACE_LIBS
${ARG_STATIC_INSTALL_INTERFACE_LIB})
endif()
endforeach()
list(APPEND ${ARG_ARROW_CMAKE_PACKAGE_NAME_UPPER_SNAKE}_STATIC_INSTALL_INTERFACE_LIBS
${RESOLVED_STATIC_INSTALL_INTERFACE_LIBS})
endif()
endmacro()

# ----------------------------------------------------------------------
Expand Down Expand Up @@ -1481,7 +1505,9 @@ if(ARROW_WITH_SNAPPY)
HAVE_ALT
TRUE
PC_PACKAGE_NAMES
snappy)
snappy
STATIC_INSTALL_INTERFACE_LIBS
Snappy_TARGET)
if(${Snappy_SOURCE} STREQUAL "SYSTEM"
AND NOT snappy_PC_FOUND
AND ARROW_BUILD_STATIC)
Expand Down Expand Up @@ -1589,7 +1615,11 @@ if(ARROW_WITH_BROTLI)
TRUE
PC_PACKAGE_NAMES
libbrotlidec
libbrotlienc)
libbrotlienc
STATIC_INSTALL_INTERFACE_LIBS
Brotli::brotlienc
Brotli::brotlidec
Brotli::brotlicommon)
# Order is important for static linking
set(ARROW_BROTLI_LIBS Brotli::brotlienc Brotli::brotlidec Brotli::brotlicommon)
endif()
Expand All @@ -1610,7 +1640,10 @@ if(PARQUET_REQUIRE_ENCRYPTION
HAVE_ALT
TRUE
REQUIRED_VERSION
${ARROW_OPENSSL_REQUIRED_VERSION})
${ARROW_OPENSSL_REQUIRED_VERSION}
STATIC_INSTALL_INTERFACE_LIBS
OpenSSL::Crypto
OpenSSL::SSL)
set(ARROW_USE_OPENSSL ON)
set(ARROW_OPENSSL_LIBS OpenSSL::Crypto OpenSSL::SSL)
endif()
Expand Down Expand Up @@ -1679,7 +1712,9 @@ if(ARROW_USE_GLOG)
HAVE_ALT
TRUE
PC_PACKAGE_NAMES
libglog)
libglog
STATIC_INSTALL_INTERFACE_LIBS
glog::glog)
endif()

# ----------------------------------------------------------------------
Expand Down Expand Up @@ -2288,7 +2323,9 @@ if(ARROW_WITH_PROTOBUF)
PC_PACKAGE_NAMES
protobuf
REQUIRED_VERSION
${ARROW_PROTOBUF_REQUIRED_VERSION})
${ARROW_PROTOBUF_REQUIRED_VERSION}
STATIC_INSTALL_INTERFACE_LIBS
ARROW_PROTOBUF_LIBPROTOBUF)

# If PROTOBUF_VENDORED we build static protobuf from source via FetchContent
if(NOT PROTOBUF_VENDORED
Expand Down Expand Up @@ -2853,7 +2890,9 @@ if(ARROW_WITH_SIMDJSON)
REQUIRED_VERSION
${ARROW_SIMDJSON_REQUIRED_VERSION}
IS_RUNTIME_DEPENDENCY
FALSE)
FALSE
STATIC_INSTALL_INTERFACE_LIBS
simdjson::simdjson)
if(SIMDJSON_VENDORED)
add_library(arrow::simdjson ALIAS simdjson)
else()
Expand Down Expand Up @@ -3007,7 +3046,7 @@ macro(build_zlib)
endmacro()

if(ARROW_WITH_ZLIB)
resolve_dependency(ZLIB PC_PACKAGE_NAMES zlib)
resolve_dependency(ZLIB PC_PACKAGE_NAMES zlib STATIC_INSTALL_INTERFACE_LIBS ZLIB::ZLIB)
endif()

function(build_lz4)
Expand Down Expand Up @@ -3056,7 +3095,9 @@ if(ARROW_WITH_LZ4)
HAVE_ALT
TRUE
PC_PACKAGE_NAMES
liblz4)
liblz4
STATIC_INSTALL_INTERFACE_LIBS
LZ4::lz4)
endif()

macro(build_zstd)
Expand Down Expand Up @@ -3131,6 +3172,9 @@ if(ARROW_WITH_ZSTD)
message(FATAL_ERROR "Zstandard target doesn't exist: ${ARROW_ZSTD_LIBZSTD}")
endif()
message(STATUS "Found Zstandard: ${ARROW_ZSTD_LIBZSTD}")
if(${zstd_SOURCE} STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_ZSTD_LIBZSTD})
endif()
endif()
endif()

Expand Down Expand Up @@ -3178,7 +3222,9 @@ if(ARROW_WITH_RE2)
HAVE_ALT
TRUE
PC_PACKAGE_NAMES
re2)
re2
STATIC_INSTALL_INTERFACE_LIBS
re2::re2)
endif()

macro(build_bzip2)
Expand Down Expand Up @@ -3227,7 +3273,7 @@ macro(build_bzip2)
endmacro()

if(ARROW_WITH_BZ2)
resolve_dependency(BZip2 PC_PACKAGE_NAMES bzip2)
resolve_dependency(BZip2 PC_PACKAGE_NAMES bzip2 STATIC_INSTALL_INTERFACE_LIBS BZip2::BZip2)

if(${BZip2_SOURCE} STREQUAL "SYSTEM"
AND NOT bzip2_PC_FOUND
Expand Down Expand Up @@ -3289,7 +3335,9 @@ if(ARROW_WITH_UTF8PROC)
# https://github.com/microsoft/vcpkg/issues/39176
list(APPEND utf8proc_resolve_dependency_args REQUIRED_VERSION "2.2.0")
endif()
resolve_dependency(${utf8proc_resolve_dependency_args})
resolve_dependency(${utf8proc_resolve_dependency_args}
STATIC_INSTALL_INTERFACE_LIBS
utf8proc::utf8proc)
endif()

function(build_cares)
Expand Down Expand Up @@ -3636,14 +3684,14 @@ if(ARROW_WITH_OPENTELEMETRY)
# cURL is required whether we build from source or use an existing installation
# (OTel's cmake files do not call find_curl for you)
find_curl()
resolve_dependency(opentelemetry-cpp)
set(ARROW_OPENTELEMETRY_LIBS
opentelemetry-cpp::trace
opentelemetry-cpp::logs
opentelemetry-cpp::otlp_http_log_record_exporter
opentelemetry-cpp::ostream_log_record_exporter
opentelemetry-cpp::ostream_span_exporter
opentelemetry-cpp::otlp_http_exporter)
resolve_dependency(opentelemetry-cpp STATIC_INSTALL_INTERFACE_LIBS ARROW_OPENTELEMETRY_LIBS)
get_target_property(OPENTELEMETRY_INCLUDE_DIR opentelemetry-cpp::api
INTERFACE_INCLUDE_DIRECTORIES)
message(STATUS "Found OpenTelemetry headers: ${OPENTELEMETRY_INCLUDE_DIR}")
Expand Down Expand Up @@ -3811,7 +3859,9 @@ if(ARROW_WITH_GOOGLE_CLOUD_CPP)
# curl is required on all platforms. We always use system curl to
# avoid conflict.
find_curl()
resolve_dependency(google_cloud_cpp_storage PC_PACKAGE_NAMES google_cloud_cpp_storage)
resolve_dependency(google_cloud_cpp_storage
PC_PACKAGE_NAMES google_cloud_cpp_storage
STATIC_INSTALL_INTERFACE_LIBS google-cloud-cpp::storage)
get_target_property(google_cloud_cpp_storage_INCLUDE_DIR google-cloud-cpp::storage
INTERFACE_INCLUDE_DIRECTORIES)
message(STATUS "Found google-cloud-cpp::storage headers: ${google_cloud_cpp_storage_INCLUDE_DIR}"
Expand Down Expand Up @@ -4057,7 +4107,7 @@ function(build_orc)
endfunction()

if(ARROW_ORC)
resolve_dependency(orc HAVE_ALT TRUE)
resolve_dependency(orc HAVE_ALT TRUE STATIC_INSTALL_INTERFACE_LIBS orc::orc)
if(ORC_VENDORED)
set(ARROW_ORC_VERSION ${ARROW_ORC_BUILD_VERSION})
else()
Expand Down Expand Up @@ -4260,7 +4310,13 @@ if(ARROW_S3)
HAVE_ALT
TRUE
REQUIRED_VERSION
1.11.0)
1.11.0
STATIC_INSTALL_INTERFACE_LIBS
aws-cpp-sdk-identity-management
aws-cpp-sdk-sts
aws-cpp-sdk-cognito-identity
aws-cpp-sdk-s3
aws-cpp-sdk-core)

message(STATUS "Found AWS SDK headers: ${AWSSDK_INCLUDE_DIR}")
message(STATUS "Found AWS SDK libraries: ${AWSSDK_LINK_LIBRARIES}")
Expand Down
97 changes: 4 additions & 93 deletions cpp/src/arrow/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,107 +31,18 @@ set(ARROW_SHARED_PRIVATE_LINK_LIBS)

# Libraries to link with exported libarrow.{so,a}.
set(ARROW_SHARED_INSTALL_INTERFACE_LIBS)
set(ARROW_STATIC_INSTALL_INTERFACE_LIBS)

if(ARROW_GCS)
if(google_cloud_cpp_storage_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS google-cloud-cpp::storage)
endif()
endif()

if(ARROW_USE_OPENSSL)
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_OPENSSL_LIBS})
endif()

if(ARROW_WITH_BROTLI)
if(Brotli_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_BROTLI_LIBS})
endif()
endif()

if(ARROW_WITH_BZ2)
if(BZip2_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS BZip2::BZip2)
endif()
endif()

if(ARROW_WITH_LZ4)
if(lz4_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS LZ4::lz4)
endif()
endif()

if(ARROW_WITH_SNAPPY)
if(Snappy_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${Snappy_TARGET})
endif()
endif()

if(ARROW_WITH_ZLIB)
if(ZLIB_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ZLIB::ZLIB)
endif()
if(NOT DEFINED ARROW_STATIC_INSTALL_INTERFACE_LIBS)
set(ARROW_STATIC_INSTALL_INTERFACE_LIBS)
endif()

if(ARROW_WITH_ZSTD)
if(zstd_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_ZSTD_LIBZSTD})
endif()
endif()

if(ARROW_ORC)
if(orc_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS orc::orc)
endif()
endif()

if(ARROW_USE_GLOG)
if(glog_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS glog::glog)
endif()
endif()

if(ARROW_S3)
if(AWSSDK_SOURCE STREQUAL "SYSTEM")
list(APPEND
ARROW_STATIC_INSTALL_INTERFACE_LIBS
aws-cpp-sdk-identity-management
aws-cpp-sdk-sts
aws-cpp-sdk-cognito-identity
aws-cpp-sdk-s3
aws-cpp-sdk-core)
elseif(AWSSDK_SOURCE STREQUAL "BUNDLED")
if(UNIX)
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl)
endif()
endif()
if(ARROW_S3 AND AWSSDK_SOURCE STREQUAL "BUNDLED" AND UNIX)
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl)
endif()

if(ARROW_WITH_OPENTELEMETRY)
if(opentelemetry_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_OPENTELEMETRY_LIBS})
endif()
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl)
endif()

if(ARROW_WITH_UTF8PROC)
if(utf8proc_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS utf8proc::utf8proc)
endif()
endif()

if(ARROW_WITH_RE2)
if(re2_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS re2::re2)
endif()
endif()

if(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME STREQUAL "Arrow")
if(Protobuf_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_PROTOBUF_LIBPROTOBUF})
endif()
endif()

if(ARROW_ENABLE_THREADING)
list(APPEND ARROW_SHARED_PRIVATE_LINK_LIBS Threads::Threads)
list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS Threads::Threads)
Expand Down
7 changes: 1 addition & 6 deletions cpp/src/arrow/flight/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,7 @@ if(APPLE AND ARROW_USE_OPENSSL)
list(APPEND ARROW_FLIGHT_LINK_LIBS ${ARROW_OPENSSL_LIBS})
endif()

set(ARROW_FLIGHT_STATIC_INSTALL_INTERFACE_LIBS Arrow::arrow_static)
if(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME STREQUAL "ArrowFlight")
if(Protobuf_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_FLIGHT_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_PROTOBUF_LIBPROTOBUF})
endif()
endif()
list(INSERT ARROW_FLIGHT_STATIC_INSTALL_INTERFACE_LIBS 0 Arrow::arrow_static)

set(ARROW_FLIGHT_TEST_LINKAGE "${ARROW_TEST_LINKAGE}")
if(Protobuf_USE_STATIC_LIBS)
Expand Down