Back to home page

EIC code displayed by LXR

 
 

    


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)