Warning, /acts/Plugins/Arrow/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 acts_add_library(
0002 PluginArrow
0003 src/ArrowUtil.cpp
0004 ACTS_INCLUDE_FOLDER include/ActsPlugins
0005 )
0006
0007 target_include_directories(
0008 ActsPluginArrow
0009 PUBLIC
0010 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
0011 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
0012 )
0013
0014 # Pick static or shared arrow/parquet based on ACTS_ARROW_ISOLATED and
0015 # publish the choice as two INTERFACE targets (Acts::ArrowLinkage and
0016 # Acts::ParquetLinkage) that consumers reference without caring which
0017 # underlying target they forward to. This library is the sole arrow-hosting
0018 # .dylib in ACTS: code that uses arrow directly is donated in via OBJECT
0019 # libraries from Examples/Io/{Parquet,Arrow}. The OBJECT-absorption layout
0020 # does not depend on the isolation toggle.
0021 #
0022 # Include dirs are explicitly mirrored onto the INTERFACE targets (not just
0023 # the link libraries) so downstream uses of INTERFACE_INCLUDE_DIRECTORIES
0024 # resolve without relying on transitive extraction.
0025 if(ACTS_ARROW_ISOLATED)
0026 set(_acts_arrow_impl Arrow::arrow_static)
0027 set(_acts_parquet_impl Parquet::parquet_static)
0028 set(_acts_dataset_impl ArrowDataset::arrow_dataset_static)
0029 else()
0030 set(_acts_arrow_impl Arrow::arrow_shared)
0031 set(_acts_parquet_impl Parquet::parquet_shared)
0032 set(_acts_dataset_impl ArrowDataset::arrow_dataset_shared)
0033 endif()
0034 add_library(ActsArrowLinkage INTERFACE)
0035 add_library(Acts::ArrowLinkage ALIAS ActsArrowLinkage)
0036 target_link_libraries(ActsArrowLinkage INTERFACE ${_acts_arrow_impl})
0037 target_include_directories(
0038 ActsArrowLinkage
0039 SYSTEM
0040 INTERFACE
0041 $<TARGET_PROPERTY:${_acts_arrow_impl},INTERFACE_INCLUDE_DIRECTORIES>
0042 )
0043 add_library(ActsParquetLinkage INTERFACE)
0044 add_library(Acts::ParquetLinkage ALIAS ActsParquetLinkage)
0045 target_link_libraries(ActsParquetLinkage INTERFACE ${_acts_parquet_impl})
0046 target_include_directories(
0047 ActsParquetLinkage
0048 SYSTEM
0049 INTERFACE
0050 $<TARGET_PROPERTY:${_acts_parquet_impl},INTERFACE_INCLUDE_DIRECTORIES>
0051 )
0052 add_library(ActsDatasetLinkage INTERFACE)
0053 add_library(Acts::DatasetLinkage ALIAS ActsDatasetLinkage)
0054 target_link_libraries(ActsDatasetLinkage INTERFACE ${_acts_dataset_impl})
0055 target_include_directories(
0056 ActsDatasetLinkage
0057 SYSTEM
0058 INTERFACE
0059 $<TARGET_PROPERTY:${_acts_dataset_impl},INTERFACE_INCLUDE_DIRECTORIES>
0060 )
0061 # ActsPluginArrow PRIVATE-links these aliases, so CMake requires them to be
0062 # in the same export set for install(EXPORT ActsPluginArrowTargets).
0063 install(
0064 TARGETS ActsArrowLinkage ActsParquetLinkage ActsDatasetLinkage
0065 EXPORT ActsPluginArrowTargets
0066 )
0067
0068 target_link_libraries(
0069 ActsPluginArrow
0070 PUBLIC Acts::Core
0071 PRIVATE Acts::ArrowLinkage Acts::ParquetLinkage Acts::DatasetLinkage
0072 )
0073
0074 # Propagate arrow/parquet headers to direct consumers. The linkage itself
0075 # stays PRIVATE on ActsPluginArrow so the archives (isolated mode) or
0076 # libarrow/libparquet DT_NEEDED (shared mode) stay confined to this .dylib
0077 # and don't leak into downstream targets' link lines.
0078 target_include_directories(
0079 ActsPluginArrow
0080 SYSTEM
0081 PUBLIC
0082 $<TARGET_PROPERTY:Acts::ArrowLinkage,INTERFACE_INCLUDE_DIRECTORIES>
0083 $<TARGET_PROPERTY:Acts::ParquetLinkage,INTERFACE_INCLUDE_DIRECTORIES>
0084 $<TARGET_PROPERTY:Acts::DatasetLinkage,INTERFACE_INCLUDE_DIRECTORIES>
0085 )
0086
0087 if(ACTS_ARROW_ISOLATED)
0088 # Isolate arrow's symbols from every other arrow consumer in the same
0089 # process (e.g. pyarrow's bundled libarrow) so they cannot collide under
0090 # any dlopen mode, including Linux RTLD_GLOBAL (e.g. with PyROOT). Three
0091 # layers of defense, in order of authority:
0092 #
0093 # 1. Compile-time visibility: -fvisibility=hidden and
0094 # -fvisibility-inlines-hidden mean .o files only mark symbols visible
0095 # when explicitly annotated (ACTS_ARROW_EXPORT on the public API).
0096 # 2. Archive hiding: load_hidden (macOS) / --exclude-libs,ALL (Linux)
0097 # strip symbols that came from arrow/parquet's static archives
0098 # regardless of how they were emitted.
0099 # 3. Export allowlist: -exported_symbols_list (macOS) / --version-script
0100 # (Linux) drops any symbol whose mangled name doesn't match the
0101 # *Acts* pattern. Final authority at link time; catches anything
0102 # the first two layers missed (e.g. ARROW_EXPORT-marked template
0103 # instantiations in our own TUs).
0104 set_target_properties(
0105 ActsPluginArrow
0106 PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN YES
0107 )
0108
0109 if(APPLE)
0110 target_link_options(
0111 ActsPluginArrow
0112 PRIVATE
0113 "LINKER:-load_hidden,$<TARGET_FILE:Arrow::arrow_static>"
0114 "LINKER:-load_hidden,$<TARGET_FILE:Parquet::parquet_static>"
0115 "LINKER:-load_hidden,$<TARGET_FILE:ArrowDataset::arrow_dataset_static>"
0116 "LINKER:-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/cmake/exported_symbols.txt"
0117 )
0118 else()
0119 target_link_options(
0120 ActsPluginArrow
0121 PRIVATE
0122 "LINKER:--exclude-libs,ALL"
0123 "LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/cmake/exported_symbols.ld"
0124 )
0125 endif()
0126 endif()
0127
0128 acts_compile_headers(PluginArrow GLOB include/**/*.hpp)