Skip to content
Snippets Groups Projects
CMakeLists.txt 2.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • Whitney Armstrong's avatar
    Whitney Armstrong committed
    cmake_minimum_required(VERSION 3.8)
    project(EICD 
    
      VERSION 1.1.0
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
      LANGUAGES CXX)
    
    #--- Declare options -----------------------------------------------------------
    
    option(BUILD_DATA_MODEL "Run podio class generator yaml file" ON)
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    
    if(APPLE)
      set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
    endif(APPLE)
    
    
    
    find_package(podio 0.11.0 REQUIRED)
    include_directories(${podio_INCLUDE_DIR})
    
    
    #include(cmake/root.cmake)
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
    set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
    
    find_package(ROOT REQUIRED COMPONENTS Core RIO Tree)
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    include(${ROOT_USE_FILE})
    
    
    PODIO_GENERATE_DATAMODEL(eicd eic_data.yaml headers sources OUTPUT_FOLDER ${CMAKE_CURRENT_BINARY_DIR})
    
    add_library(eicd SHARED
      ${sources}
      )
    
    target_link_libraries(eicd
    
      PUBLIC podio::podio
    
      PUBLIC ROOT::Core
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
      )
    
    target_include_directories(eicd
      PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
      $<INSTALL_INTERFACE:include>)
    
    target_compile_features(eicd
      PUBLIC cxx_auto_type
      PUBLIC cxx_trailing_return_types
      PRIVATE cxx_variadic_templates
      PRIVATE cxx_std_17)
    
    PODIO_GENERATE_DICTIONARY(eicd ${headers} 
      SELECTION ${CMAKE_CURRENT_BINARY_DIR}/src/selection.xml
      OPTIONS --library ${CMAKE_SHARED_LIBRARY_PREFIX}eicd${CMAKE_SHARED_LIBRARY_SUFFIX}
    
    set_target_properties(eicd-dictgen PROPERTIES EXCLUDE_FROM_ALL TRUE)
    target_sources(eicd PRIVATE eicd.cxx)
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    
    
    add_subdirectory(source)
    
    
    
    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/eicd
      DESTINATION include
      FILES_MATCHING PATTERN *.h
      )
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    
    
    install(TARGETS eicd
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
      EXPORT ${PROJECT_NAME}Targets
    
      LIBRARY DESTINATION lib
      ARCHIVE DESTINATION lib
      RUNTIME DESTINATION bin
      INCLUDES DESTINATION include
      )
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    
    
    install(FILES
      "${PROJECT_BINARY_DIR}/eicdDict.rootmap"
      "${PROJECT_BINARY_DIR}/libeicd_rdict.pcm"
      DESTINATION lib)
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    
    
    add_custom_target( doc_doxygen #ALL 
      COMMAND doxygen ${CMAKE_SOURCE_DIR}/docs/Doxyfile
      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
      COMMENT "Generating API documentation with Doxygen"
      VERBATIM )
    
    
    Whitney Armstrong's avatar
    Whitney Armstrong committed
    # -------------------------
    # install library config
    include(CMakePackageConfigHelpers)
    
    # Install and export targets
    install(EXPORT ${PROJECT_NAME}Targets
      FILE ${PROJECT_NAME}Targets.cmake
      NAMESPACE EICD::
      DESTINATION lib/EICD
      )
    
    set(TARGETS_INSTALL_PATH lib/EICD/EICDTargets.cmake)
    
    configure_package_config_file(
      cmake/EICDConfig.cmake.in  
      ${CMAKE_CURRENT_BINARY_DIR}/EICDConfig.cmake
      INSTALL_DESTINATION lib/EICD
      PATH_VARS TARGETS_INSTALL_PATH
      )
    
    write_basic_package_version_file("EICDConfigVersion.cmake"
      VERSION ${VERSION}
      COMPATIBILITY SameMajorVersion
      )
    
    install(FILES
      ${CMAKE_CURRENT_BINARY_DIR}/EICDConfig.cmake
      ${CMAKE_CURRENT_BINARY_DIR}/EICDConfigVersion.cmake
      DESTINATION lib/EICD
      )