Back to home page

EIC code displayed by LXR

 
 

    


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

0001 # SPDX-License-Identifier: LGPL-3.0-or-later
0002 # Copyright (C) 2022 Whitney Armstrong, Sylvester Joosten, Wouter Deconinck
0003 
0004 cmake_minimum_required(VERSION 3.12)
0005 
0006 project(EDM4EIC
0007   LANGUAGES CXX)
0008 
0009 SET( ${PROJECT_NAME}_VERSION_MAJOR 8 )
0010 SET( ${PROJECT_NAME}_VERSION_MINOR 10 )
0011 SET( ${PROJECT_NAME}_VERSION_PATCH 0 )
0012 SET( ${PROJECT_NAME}_VERSION  "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}" )
0013 
0014 # Verify that schema version in edm4eic.yaml matches project version
0015 # Schema version is defined as 10000*major + 100*minor + patch
0016 # (two digits per component, so each component may range from 0 to 99)
0017 file(READ "${CMAKE_CURRENT_SOURCE_DIR}/edm4eic.yaml" EDM4EIC_YAML_CONTENT)
0018 string(REGEX MATCH "schema_version:[ \t]*([0-9]+)" SCHEMA_VERSION_MATCH "${EDM4EIC_YAML_CONTENT}")
0019 if(SCHEMA_VERSION_MATCH)
0020   set(SCHEMA_VERSION ${CMAKE_MATCH_1})
0021   math(EXPR EXPECTED_SCHEMA_VERSION "${${PROJECT_NAME}_VERSION_MAJOR} * 10000 + ${${PROJECT_NAME}_VERSION_MINOR} * 100 + ${${PROJECT_NAME}_VERSION_PATCH}")
0022   if(NOT SCHEMA_VERSION EQUAL EXPECTED_SCHEMA_VERSION)
0023     message(FATAL_ERROR
0024       "Schema version mismatch: edm4eic.yaml has schema_version=${SCHEMA_VERSION}, "
0025       "but CMakeLists.txt version ${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH} "
0026       "requires schema_version=${EXPECTED_SCHEMA_VERSION}. "
0027       "Please update schema_version in edm4eic.yaml to match the project version.")
0028   endif()
0029 else()
0030   message(WARNING "Could not find schema_version in edm4eic.yaml")
0031 endif()
0032 
0033 # C++ standard
0034 set(CMAKE_CXX_STANDARD_MIN 20)
0035 set(CMAKE_CXX_STANDARD 20 CACHE STRING "Set the C++ standard to be used")
0036 if(CMAKE_CXX_STANDARD LESS CMAKE_CXX_STANDARD_MIN)
0037   message(
0038     FATAL_ERROR
0039     "Unsupported C++ standard: ${CMAKE_CXX_STANDARD} (at least ${CMAKE_CXX_STANDARD_MIN} required)"
0040   )
0041 endif()
0042 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0043 set(CMAKE_CXX_EXTENSIONS OFF)
0044 
0045 #--- Declare options -----------------------------------------------------------
0046 option(BUILD_DATA_MODEL "Run podio class generator yaml file" ON)
0047 
0048 if(APPLE)
0049   set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
0050 endif(APPLE)
0051 
0052 include(GNUInstallDirs)
0053 
0054 include(CTest)
0055 
0056 # podio has SameMajorVersion compatibility
0057 find_package(podio 1.2 REQUIRED)
0058 include_directories(${podio_INCLUDE_DIR})
0059 
0060 # EDM4hep has SameMajorVersion compatibility so we try to find 1.0 first and
0061 # fall back to the minimum version in case we canot find that
0062 find_package(EDM4HEP 1.0)
0063 if (NOT EDM4HEP_FOUND)
0064   find_package(EDM4HEP 0.10.3 REQUIRED)
0065 endif()
0066 
0067 list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
0068 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
0069 find_package(ROOT 6 REQUIRED COMPONENTS Core RIO Tree)
0070 include(${ROOT_USE_FILE})
0071 
0072 PODIO_GENERATE_DATAMODEL(edm4eic edm4eic.yaml headers sources
0073   UPSTREAM_EDM edm4hep:${EDM4HEP_DATA_DIR}/edm4hep.yaml
0074   IO_BACKEND_HANDLERS ${PODIO_IO_HANDLERS}
0075   OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
0076   )
0077 
0078 PODIO_ADD_DATAMODEL_CORE_LIB(edm4eic "${headers}" "${sources}"
0079   OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
0080 )
0081 # It's our responsibility to link to upstream datamodel
0082 target_link_libraries(edm4eic PUBLIC EDM4HEP::edm4hep)
0083 
0084 PODIO_ADD_ROOT_IO_DICT(edm4eicDict edm4eic "${headers}" src/selection.xml
0085   OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
0086 )
0087 
0088 if(TARGET edm4eicDict)
0089   add_library(edm4eic::edm4eicDict ALIAS edm4eicDict)
0090 endif()
0091 
0092 add_subdirectory(utils)
0093 add_subdirectory(test)
0094 
0095 list(APPEND EDM4EIC_INSTALL_LIBS edm4eic)
0096 if(TARGET edm4eicDict)
0097   list(APPEND EDM4EIC_INSTALL_LIBS edm4eicDict)
0098 endif()
0099 
0100 if(PODIO_ENABLE_ARROW)
0101   PODIO_ADD_ARROW(edm4eic "${headers}" "${sources}")
0102   message(STATUS "Building and installing the Arrow component since podio supports it")
0103   add_library(EDM4EIC::edm4eicPodioArrow ALIAS edm4eicPodioArrow)
0104   list(APPEND EDM4EIC_INSTALL_LIBS edm4eicPodioArrow)
0105 endif()
0106 
0107 install(TARGETS ${EDM4EIC_INSTALL_LIBS}
0108   EXPORT ${PROJECT_NAME}Targets
0109   RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
0110   LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
0111   PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/edm4eic"
0112   COMPONENT dev)
0113 
0114 if(TARGET edm4eicDict)
0115   install(FILES
0116     "${PROJECT_BINARY_DIR}/edm4eicDictDict.rootmap"
0117     DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev)
0118 endif()
0119 
0120 install(FILES
0121   edm4eic.yaml
0122   DESTINATION "${CMAKE_INSTALL_DATADIR}/edm4eic" COMPONENT dev)
0123 
0124 if(TARGET edm4eicDict)
0125   install(FILES
0126     "${PROJECT_BINARY_DIR}/libedm4eicDict_rdict.pcm"
0127     DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev)
0128 endif()
0129 
0130 # -------------------------
0131 # install class documentation
0132 
0133 file(RELATIVE_PATH CMAKE_CURRENT_BINARY_RELATIVE_DIR
0134   ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
0135 configure_file(
0136   ${CMAKE_SOURCE_DIR}/docs/Doxyfile.in
0137   ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
0138   @ONLY)
0139 
0140 option(GENERATE_DOCS "Generate the doxygen base API reference" ON)
0141 
0142 if (GENERATE_DOCS)
0143   find_package(Doxygen COMPONENTS dot)
0144   if(DOXYGEN_FOUND)
0145     add_custom_target(docs ALL
0146       DEPENDS edm4eic.yaml ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
0147       COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
0148       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0149       COMMENT "Generating API documentation with Doxygen"
0150     VERBATIM)
0151   else()
0152     message(STATUS "Doxygen not found; no documentation will be built.")
0153   endif()
0154 endif()
0155 
0156 # -------------------------
0157 # add version files
0158 
0159 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/EDM4eicVersion.h.in
0160                ${CMAKE_CURRENT_BINARY_DIR}/EDM4eicVersion.h )
0161 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/EDM4eicVersion.h
0162   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/edm4eic )
0163 
0164 # -------------------------
0165 # install library config
0166 include(CMakePackageConfigHelpers)
0167 
0168 # Install and export targets
0169 install(EXPORT ${PROJECT_NAME}Targets
0170   FILE ${PROJECT_NAME}Targets.cmake
0171   NAMESPACE ${PROJECT_NAME}::
0172   DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
0173   )
0174 
0175 set(TARGETS_INSTALL_PATH "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake")
0176 
0177 configure_package_config_file(
0178   cmake/${PROJECT_NAME}Config.cmake.in
0179   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
0180   INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
0181   PATH_VARS TARGETS_INSTALL_PATH
0182   )
0183 
0184 write_basic_package_version_file(
0185   ${PROJECT_NAME}ConfigVersion.cmake
0186   VERSION ${${PROJECT_NAME}_VERSION}
0187   COMPATIBILITY AnyNewerVersion
0188   )
0189 
0190 install(FILES
0191   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
0192   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
0193   DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
0194   )