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 )