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