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