Warning, /irt/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)
0002
0003 project(IRT2
0004 VERSION 2.1.0
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
0016 #----------------------------------------------------------------------------
0017 # dependencies
0018
0019 list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
0020 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
0021 find_package(ROOT 6 REQUIRED COMPONENTS Core EG Hist MathCore RIO Tree)
0022 include(${ROOT_USE_FILE})
0023
0024 #----------------------------------------------------------------------------
0025 # flags
0026
0027 include(GNUInstallDirs) # standard GNU installation
0028 include(CheckCXXCompilerFlag)
0029
0030 set(CMAKE_CXX_FLAGS "-std=c++0x")
0031
0032 check_cxx_compiler_flag(-std=c++17 HAVE_FLAG_STD_CXX17)
0033 if(HAVE_FLAG_STD_CXX17)
0034 # Have -std=c++17, use it;
0035 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
0036 else()
0037 check_cxx_compiler_flag(-std=c++11 HAVE_FLAG_STD_CXX11)
0038 if(HAVE_FLAG_STD_CXX11)
0039 # Have -std=c++11, use it;
0040 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
0041 endif()
0042 endif()
0043
0044 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-vla-cxx-extension")
0045
0046 #----------------------------------------------------------------------------
0047 # IRT library
0048
0049 # headers
0050 include_directories(
0051 ${PROJECT_SOURCE_DIR}/include
0052 ${ROOT_INCLUDE_DIRS}
0053
0054 # For now assume that newly installed edm4eic::(CherenkovPID, ...) event structures are available
0055 # in the same place where IRT is supposed to be installed;
0056 ${CMAKE_INSTALL_PREFIX}/include
0057
0058 # Help ePIC installation find json.hpp if needed;
0059 #/opt/local/include
0060 )
0061 file(GLOB HEADERS ${PROJECT_SOURCE_DIR}/include/*.h)
0062 list(FILTER HEADERS EXCLUDE REGEX "LinkDef\\.h$")
0063
0064 #if(DEFINED EICRECON)
0065 # set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEICRECON")
0066 #endif()
0067
0068 # sources
0069 set(IRT_SRC
0070 ${PROJECT_SOURCE_DIR}/source/ParametricSurface.cc
0071 ${PROJECT_SOURCE_DIR}/source/SphericalSurface.cc
0072 ${PROJECT_SOURCE_DIR}/source/ToricSurface.cc
0073 ${PROJECT_SOURCE_DIR}/source/CylindricalSurface.cc
0074 ${PROJECT_SOURCE_DIR}/source/ConicalSurface.cc
0075 ${PROJECT_SOURCE_DIR}/source/FlatSurface.cc
0076 ${PROJECT_SOURCE_DIR}/source/IRT.cc
0077 ${PROJECT_SOURCE_DIR}/source/ChargedParticle.cc
0078 ${PROJECT_SOURCE_DIR}/source/CherenkovRadiator.cc
0079
0080 ${PROJECT_SOURCE_DIR}/source/DigitizedHit.cc
0081 ${PROJECT_SOURCE_DIR}/source/GeantImport.cc
0082 #${PROJECT_SOURCE_DIR}/source/Configuration.cc
0083 ${PROJECT_SOURCE_DIR}/source/Calibration.cc
0084 ${PROJECT_SOURCE_DIR}/source/Digitization.cc
0085 ${PROJECT_SOURCE_DIR}/source/ReconstructionFactory.cc
0086 )
0087 if(IRT_ROOT_IO)
0088 set(IRT_DICT G__${CMAKE_PROJECT_NAME})
0089 list(APPEND IRT_SRC ${IRT_DICT}.cxx)
0090 endif()
0091
0092 # library target
0093 add_library(${CMAKE_PROJECT_NAME} SHARED ${IRT_SRC} )
0094 target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wall -Wno-misleading-indentation)
0095 if(NOT IRT_ROOT_IO)
0096 # disable calling of `ClassDef` etc. if not generating ROOT dictionary
0097 message(STATUS "NOTE: disabling ROOT dictionary generation")
0098 target_compile_definitions(${CMAKE_PROJECT_NAME} PUBLIC DISABLE_ROOT_IO)
0099 endif()
0100 target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
0101 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
0102 $<INSTALL_INTERFACE:include>
0103 )
0104
0105 # ROOT I/O dictionary generation
0106 if(IRT_ROOT_IO)
0107 set(IRT_ROOTMAP
0108 ${CMAKE_CURRENT_BINARY_DIR}/lib${CMAKE_PROJECT_NAME}_rdict.pcm
0109 ${CMAKE_CURRENT_BINARY_DIR}/lib${CMAKE_PROJECT_NAME}.rootmap
0110 )
0111 root_generate_dictionary(${IRT_DICT} ${HEADERS} LINKDEF include/irtLinkDef.h)
0112 endif()
0113
0114 # linking
0115 target_link_libraries(${CMAKE_PROJECT_NAME} ROOT::Core ROOT::EG ROOT::Hist ROOT::RIO ROOT::MathCore ROOT::Tree)
0116
0117 #----------------------------------------------------------------------------
0118 # optional targets
0119
0120 if(EVALUATION)
0121 add_subdirectory(evaluation)
0122 endif()
0123
0124 if(DELPHES)
0125 add_subdirectory(delphes)
0126 endif()
0127
0128 #----------------------------------------------------------------------------
0129 # installation
0130
0131 install(FILES
0132 ${HEADERS}
0133 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}
0134 )
0135 install(TARGETS ${CMAKE_PROJECT_NAME}
0136 EXPORT ${CMAKE_PROJECT_NAME}Targets
0137 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
0138 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
0139 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
0140 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}
0141 )
0142 if(IRT_ROOT_IO)
0143 install(FILES
0144 ${IRT_ROOTMAP}
0145 DESTINATION ${CMAKE_INSTALL_LIBDIR}
0146 )
0147 endif()
0148
0149 #----------------------------------------------------------------------------
0150 # package config
0151
0152 include(CMakePackageConfigHelpers)
0153
0154 install(EXPORT ${CMAKE_PROJECT_NAME}Targets
0155 FILE ${CMAKE_PROJECT_NAME}Targets.cmake
0156 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}
0157 )
0158
0159 set(TARGETS_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}/${CMAKE_PROJECT_NAME}Targets.cmake)
0160
0161 configure_package_config_file(
0162 cmake/${CMAKE_PROJECT_NAME}Config.cmake.in
0163 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
0164 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}
0165 PATH_VARS CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_LIBDIR TARGETS_INSTALL_PATH
0166 )
0167
0168 write_basic_package_version_file(
0169 "${CMAKE_PROJECT_NAME}ConfigVersion.cmake"
0170 VERSION ${VERSION}
0171 COMPATIBILITY SameMajorVersion
0172 )
0173
0174 install(FILES
0175 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
0176 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
0177 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}
0178 )
0179