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 6 )
0010 SET( ${PROJECT_NAME}_VERSION_MINOR 0 )
0011 SET( ${PROJECT_NAME}_VERSION_PATCH 1 )
0012 SET( ${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}" )
0013
0014 # C++ standard
0015 set(CMAKE_CXX_STANDARD 17 CACHE STRING "Set the C++ standard to be used")
0016 if(NOT CMAKE_CXX_STANDARD MATCHES "17|20")
0017 message(FATAL_ERROR "Unsupported C++ standard: ${CMAKE_CXX_STANDARD}")
0018 endif()
0019 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0020 set(CMAKE_CXX_EXTENSIONS OFF)
0021
0022 #--- Declare options -----------------------------------------------------------
0023 option(BUILD_DATA_MODEL "Run podio class generator yaml file" ON)
0024
0025 if(APPLE)
0026 set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
0027 endif(APPLE)
0028
0029 include(GNUInstallDirs)
0030
0031 find_package(podio 0.15 REQUIRED)
0032 include_directories(${podio_INCLUDE_DIR})
0033
0034 find_package(EDM4HEP 0.10.3 REQUIRED)
0035
0036 list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
0037 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
0038 find_package(ROOT 6 REQUIRED COMPONENTS Core RIO Tree)
0039 include(${ROOT_USE_FILE})
0040
0041 PODIO_GENERATE_DATAMODEL(edm4eic edm4eic.yaml headers sources
0042 UPSTREAM_EDM edm4hep:${EDM4HEP_DATA_DIR}/edm4hep.yaml
0043 IO_BACKEND_HANDLERS ${PODIO_IO_HANDLERS}
0044 OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
0045 )
0046
0047 PODIO_ADD_DATAMODEL_CORE_LIB(edm4eic "${headers}" "${sources}"
0048 OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
0049 )
0050 # It's our responsibility to link to upstream datamodel
0051 target_link_libraries(edm4eic PUBLIC EDM4HEP::edm4hep)
0052
0053 PODIO_ADD_ROOT_IO_DICT(edm4eicDict edm4eic "${headers}" src/selection.xml
0054 OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
0055 )
0056
0057 add_library(edm4eic::edm4eicDict ALIAS edm4eicDict )
0058
0059 list(APPEND EDM4EIC_INSTALL_LIBS edm4eic edm4eicDict)
0060
0061 add_subdirectory(utils)
0062 add_subdirectory(test)
0063
0064 install(TARGETS ${EDM4EIC_INSTALL_LIBS}
0065 EXPORT ${PROJECT_NAME}Targets
0066 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
0067 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
0068 PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/edm4eic"
0069 COMPONENT dev)
0070
0071 install(FILES
0072 "${PROJECT_BINARY_DIR}/edm4eicDictDict.rootmap"
0073 DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev)
0074
0075 install(FILES
0076 edm4eic.yaml
0077 DESTINATION "${CMAKE_INSTALL_DATADIR}/edm4eic" COMPONENT dev)
0078
0079 install(FILES
0080 "${PROJECT_BINARY_DIR}/libedm4eicDict_rdict.pcm"
0081 DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev)
0082
0083 # -------------------------
0084 # install class documentation
0085
0086 file(RELATIVE_PATH CMAKE_CURRENT_BINARY_RELATIVE_DIR
0087 ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
0088 configure_file(
0089 ${CMAKE_SOURCE_DIR}/docs/Doxyfile.in
0090 ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
0091 @ONLY)
0092
0093 find_package(Doxygen COMPONENTS dot)
0094 if(DOXYGEN_FOUND)
0095 add_custom_target(docs ALL
0096 DEPENDS edm4eic.yaml ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
0097 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
0098 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0099 COMMENT "Generating API documentation with Doxygen"
0100 VERBATIM)
0101 else()
0102 message(STATUS "Doxygen not found; no documentation will be built.")
0103 endif()
0104
0105 # -------------------------
0106 # add version files
0107
0108 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/EDM4eicVersion.h.in
0109 ${CMAKE_CURRENT_BINARY_DIR}/EDM4eicVersion.h )
0110 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/EDM4eicVersion.h
0111 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/edm4eic )
0112
0113 # -------------------------
0114 # install library config
0115 include(CMakePackageConfigHelpers)
0116
0117 # Install and export targets
0118 install(EXPORT ${PROJECT_NAME}Targets
0119 FILE ${PROJECT_NAME}Targets.cmake
0120 NAMESPACE ${PROJECT_NAME}::
0121 DESTINATION lib/${PROJECT_NAME}
0122 )
0123
0124 set(TARGETS_INSTALL_PATH lib/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake)
0125
0126 configure_package_config_file(
0127 cmake/${PROJECT_NAME}Config.cmake.in
0128 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
0129 INSTALL_DESTINATION lib/${PROJECT_NAME}
0130 PATH_VARS TARGETS_INSTALL_PATH
0131 )
0132
0133 write_basic_package_version_file(
0134 ${PROJECT_NAME}ConfigVersion.cmake
0135 VERSION ${${PROJECT_NAME}_VERSION}
0136 COMPATIBILITY AnyNewerVersion
0137 )
0138
0139 install(FILES
0140 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
0141 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
0142 DESTINATION lib/${PROJECT_NAME}
0143 )