Back to home page

EIC code displayed by LXR

 
 

    


Warning, /irt/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)
0002 
0003 project(IRT2
0004   VERSION 2.1.3
0005   LANGUAGES CXX
0006 )
0007 
0008 cmake_policy(SET CMP0079 NEW) # allow `target_link_libraries` from any dir
0009 
0010 #----------------------------------------------------------------------------
0011 # options
0012 option(EVALUATION  "Build evaluation programs"                          OFF)
0013 option(DELPHES     "Delphes card production"                            ON)
0014 option(IRT_ROOT_IO "Generate dictionary for ROOT I/O of libIRT objects" ON)
0015 option(JSON_EXPORT "Be able to export calibrations in JSON format"      OFF)
0016 
0017 # Sanitizer options (TSAN is mutually exclusive with ASAN/UBSAN)
0018 include(CMakeDependentOption)
0019 option(USE_TSAN "Enable Thread Sanitizer" OFF)
0020 cmake_dependent_option(USE_ASAN "Enable Address Sanitizer" OFF "NOT USE_TSAN" OFF)
0021 cmake_dependent_option(USE_UBSAN "Enable Undefined Behavior Sanitizer" OFF "NOT USE_TSAN" OFF)
0022 
0023 #----------------------------------------------------------------------------
0024 # dependencies
0025 
0026 list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
0027 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
0028 find_package(ROOT 6 REQUIRED COMPONENTS Core EG Hist MathCore RIO Tree)
0029 include(${ROOT_USE_FILE})
0030 
0031 #----------------------------------------------------------------------------
0032 # flags
0033 
0034 include(GNUInstallDirs) # standard GNU installation
0035 include(CheckCXXCompilerFlag)
0036 
0037 set(CMAKE_CXX_FLAGS "-std=c++0x")
0038 
0039 check_cxx_compiler_flag(-std=c++17 HAVE_FLAG_STD_CXX17)
0040 if(HAVE_FLAG_STD_CXX17)
0041   # Have -std=c++17, use it;    
0042   set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
0043 else()
0044   check_cxx_compiler_flag(-std=c++11 HAVE_FLAG_STD_CXX11)
0045   if(HAVE_FLAG_STD_CXX11)
0046     # Have -std=c++11, use it;  
0047     set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
0048   endif()
0049 endif()
0050 
0051 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-vla-cxx-extension")
0052     
0053 # Thread Sanitizer
0054 if(USE_TSAN)
0055   message(STATUS "Building with Thread Sanitizer enabled")
0056   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -g -O1 -fno-omit-frame-pointer")
0057   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
0058   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=thread")
0059 endif()
0060 
0061 # Address Sanitizer
0062 if(USE_ASAN)
0063   message(STATUS "Building with Address Sanitizer enabled")
0064   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g -O1 -fno-omit-frame-pointer")
0065   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
0066   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
0067 endif()
0068 
0069 # Undefined Behavior Sanitizer
0070 if(USE_UBSAN)
0071   message(STATUS "Building with Undefined Behavior Sanitizer enabled")
0072   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -g -O1 -fno-omit-frame-pointer")
0073   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
0074   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=undefined")
0075 endif()
0076 
0077 #----------------------------------------------------------------------------
0078 # IRT library
0079 
0080 # headers
0081 include_directories(
0082   ${PROJECT_SOURCE_DIR}/include 
0083   ${ROOT_INCLUDE_DIRS}
0084 
0085   # For now assume that newly installed edm4eic::(CherenkovPID, ...) event structures are available 
0086   # in the same place where IRT is supposed to be installed;
0087   ${CMAKE_INSTALL_PREFIX}/include
0088 )
0089 file(GLOB HEADERS ${PROJECT_SOURCE_DIR}/include/*.h)
0090 list(FILTER HEADERS EXCLUDE REGEX "LinkDef\\.h$")
0091 
0092 #if(DEFINED EICRECON)
0093 #   set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEICRECON")
0094 #endif()
0095 
0096 # sources
0097 set(IRT_SRC
0098   ${PROJECT_SOURCE_DIR}/source/CherenkovDetector.cc
0099   ${PROJECT_SOURCE_DIR}/source/CherenkovDetectorCollection.cc
0100   
0101   ${PROJECT_SOURCE_DIR}/source/ParametricSurface.cc
0102   ${PROJECT_SOURCE_DIR}/source/SphericalSurface.cc
0103   ${PROJECT_SOURCE_DIR}/source/ToricSurface.cc
0104   ${PROJECT_SOURCE_DIR}/source/CylindricalSurface.cc
0105   ${PROJECT_SOURCE_DIR}/source/ConicalSurface.cc
0106   ${PROJECT_SOURCE_DIR}/source/FlatSurface.cc
0107   ${PROJECT_SOURCE_DIR}/source/IRT.cc
0108   ${PROJECT_SOURCE_DIR}/source/ChargedParticle.cc
0109   ${PROJECT_SOURCE_DIR}/source/CherenkovRadiator.cc
0110 
0111   ${PROJECT_SOURCE_DIR}/source/DigitizedHit.cc
0112   ${PROJECT_SOURCE_DIR}/source/GeantImport.cc
0113   #${PROJECT_SOURCE_DIR}/source/Configuration.cc
0114   ${PROJECT_SOURCE_DIR}/source/Calibration.cc
0115   ${PROJECT_SOURCE_DIR}/source/Digitization.cc
0116   ${PROJECT_SOURCE_DIR}/source/ReconstructionFactory.cc
0117 )
0118 if(IRT_ROOT_IO)
0119   set(IRT_DICT G__${CMAKE_PROJECT_NAME})
0120   list(APPEND IRT_SRC ${IRT_DICT}.cxx)
0121 endif()
0122 
0123 # library target
0124 add_library(${CMAKE_PROJECT_NAME} SHARED ${IRT_SRC} )
0125 target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wall -Wno-misleading-indentation)
0126 if(NOT IRT_ROOT_IO)
0127   # disable calling of `ClassDef` etc. if not generating ROOT dictionary
0128   message(STATUS "NOTE: disabling ROOT dictionary generation")
0129   target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC DISABLE_ROOT_IO)
0130 endif()
0131 IF(JSON_EXPORT)
0132   message(STATUS "NOTE: JSON_EXPORT enabled")
0133   set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJSON_EXPORT")
0134   find_package(nlohmann_json 3.11.3 REQUIRED)
0135 ENDIF()
0136 target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
0137   $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
0138   $<INSTALL_INTERFACE:include>
0139 )
0140 
0141 # ROOT I/O dictionary generation
0142 if(IRT_ROOT_IO)
0143   set(IRT_ROOTMAP
0144     ${CMAKE_CURRENT_BINARY_DIR}/lib${CMAKE_PROJECT_NAME}_rdict.pcm
0145     ${CMAKE_CURRENT_BINARY_DIR}/lib${CMAKE_PROJECT_NAME}.rootmap
0146   )
0147   root_generate_dictionary(${IRT_DICT} ${HEADERS} LINKDEF include/irtLinkDef.h)
0148 endif()
0149 
0150 # linking
0151 if(JSON_EXPORT)
0152   target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC ROOT::Core ROOT::EG ROOT::Hist ROOT::RIO ROOT::MathCore ROOT::Tree PRIVATE nlohmann_json::nlohmann_json)
0153 else()
0154   target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC ROOT::Core ROOT::EG ROOT::Hist ROOT::RIO ROOT::MathCore ROOT::Tree)
0155 endif()
0156 #----------------------------------------------------------------------------
0157 # optional targets
0158 
0159 if(EVALUATION)
0160   add_subdirectory(evaluation)
0161 endif()
0162 
0163 if(DELPHES)
0164   add_subdirectory(delphes)
0165 endif()
0166 
0167 #----------------------------------------------------------------------------
0168 # installation
0169 
0170 install(FILES
0171   ${HEADERS}
0172   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}
0173 )
0174 install(TARGETS ${CMAKE_PROJECT_NAME}
0175   EXPORT ${CMAKE_PROJECT_NAME}Targets
0176   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
0177   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
0178   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
0179   INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}
0180 )
0181 if(IRT_ROOT_IO)
0182   install(FILES
0183     ${IRT_ROOTMAP}
0184     DESTINATION ${CMAKE_INSTALL_LIBDIR}
0185   )
0186 endif()
0187 
0188 #----------------------------------------------------------------------------
0189 # package config
0190 
0191 include(CMakePackageConfigHelpers)
0192 
0193 install(EXPORT ${CMAKE_PROJECT_NAME}Targets
0194   FILE ${CMAKE_PROJECT_NAME}Targets.cmake
0195   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}
0196 )
0197 
0198 set(TARGETS_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}/${CMAKE_PROJECT_NAME}Targets.cmake)
0199 
0200 configure_package_config_file(
0201   cmake/${CMAKE_PROJECT_NAME}Config.cmake.in
0202   ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
0203   INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}
0204   PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR TARGETS_INSTALL_PATH
0205 )
0206 
0207 write_basic_package_version_file(
0208   "${CMAKE_PROJECT_NAME}ConfigVersion.cmake"
0209   VERSION ${VERSION}
0210   COMPATIBILITY SameMajorVersion
0211 )
0212 
0213 install(FILES
0214   ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
0215   ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
0216   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}
0217 )
0218