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