Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F11221287
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
View Options
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fa7e948..5183f87 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,282 +1,283 @@
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
+cmake_policy(SET CMP0074 NEW) # use <PackageName>_ROOT variables
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project("HEJ" VERSION 2.2.2 LANGUAGES C CXX)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
## User settings
include(CMakeDependentOption)
option(INCLUDE_QCDloop "Include QCDloop if detected" TRUE)
option(INCLUDE_HighFive "Include HighFive if detected" TRUE)
option(INCLUDE_HepMC "Include HepMC version 2 if detected" TRUE)
option(INCLUDE_HepMC3 "Include HepMC version 3 if detected" TRUE)
option(INCLUDE_ROOT "Include ROOT if detected" TRUE)
# Only skip rivet if we both HepMC 2 & 3 are excluded, since we don't know which
# HepMC version rivet needs
CMAKE_DEPENDENT_OPTION(INCLUDE_rivet "Include rivet if detected" TRUE
"INCLUDE_HepMC OR INCLUDE_HepMC3" TRUE)
option(BUILD_EXAMPLES "Build examples" FALSE)
option(TEST_ALL "Run additional (longer) tests" FALSE)
option(TEST_COVERAGE "Generate test coverage with \"gcovr\"" FALSE)
option(RUN_CLANG_TIDY "Run clang tidy" FALSE)
option(WITH_CCACHE "Build with ccache" FALSE)
# Set a default build type if none was specified
include(DefaultBuildType)
## Global flags for the compiler (all warnings)
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
elseif (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX /EHsc")
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
## enable ccache
if(WITH_CCACHE)
find_program(CCACHE_FOUND ccache)
if(NOT CCACHE_FOUND)
message(FATAL_ERROR "ccache not found, but requested. Please deactivate WITH_CCACHE")
endif()
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
endif()
## Get current git working branch and abbreviated commit if run inside a git repository
include(GitInfo)
## download FORM submodule
# from https://cliutils.gitlab.io/modern-cmake/chapters/projects/submodule.html
if(IS_GIT_REPO)
option(GIT_SUBMODULE "Check submodules during build" ON)
if(GIT_SUBMODULE
AND NOT EXISTS "${PROJECT_SOURCE_DIR}/current_generator/form/Makefile.am")
message(STATUS "Submodule update")
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMOD_RESULT)
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
endif()
endif()
endif()
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/current_generator/form/Makefile.am")
message(FATAL_ERROR "FORM was not downloaded! Please update git-submodules and try again.")
endif()
## target directories for install
set(INSTALL_INCLUDE_DIR_BASE include)
set(INSTALL_INCLUDE_DIR ${INSTALL_INCLUDE_DIR_BASE}/HEJ)
set(INSTALL_BIN_DIR bin)
set(INSTALL_LIB_DIR lib)
set(INSTALL_CONFIG_DIR lib/cmake/HEJ)
## find dependencies
find_package(CLHEP 2.3 REQUIRED)
find_package(fastjet REQUIRED)
find_package(LHAPDF 6 REQUIRED)
## Amend unintuitive behaviour of FindBoost.cmake
## Priority of BOOST_ROOT over BOOSTROOT matches FindBoost.cmake
## at least for cmake 3.12
if(DEFINED BOOST_ROOT)
message("BOOST_ROOT set - only looking for Boost in ${BOOST_ROOT}")
set(Boost_NO_BOOST_CMAKE ON)
elseif(DEFINED BOOSTROOT)
message("BOOSTROOT set - only looking for Boost in ${BOOSTROOT}")
set(Boost_NO_BOOST_CMAKE ON)
endif()
find_package(Boost REQUIRED COMPONENTS iostreams)
find_package(yaml-cpp) # requiring yaml does not work with fedora
if(INCLUDE_HepMC)
find_package(HepMC 2 EXACT)
else()
message(STATUS "Skipping HepMC")
endif()
if(INCLUDE_HepMC3)
## version 3.1: Finding version not possible in 3.1.1, see HepMC3 git 29e7a6c3
find_package(HepMC3 QUIET) # suppress CMake warning if HepMC3 not available
## print standard message
find_package_handle_standard_args( HepMC3
FOUND_VAR
HepMC3_FOUND
REQUIRED_VARS
HEPMC3_INCLUDE_DIR
HEPMC3_LIBRARIES
# VERSION_VAR
# HEPMC3_VERSION
)
else()
message(STATUS "Skipping HepMC3")
endif()
if(INCLUDE_rivet)
find_package(rivet)
if(rivet_FOUND)
if(rivet_USE_HEPMC3 AND NOT HepMC3_FOUND)
message(FATAL_ERROR "Rivet was compiled with HepMC version 3, "
"but HepMC3 was not found!")
elseif(NOT rivet_USE_HEPMC3 AND NOT HepMC_FOUND)
message(FATAL_ERROR "Rivet was compiled with HepMC version 2, "
"but HepMC2 was not found!")
endif()
endif()
else()
message(STATUS "Skipping rivet")
endif()
if(INCLUDE_QCDloop)
find_package(QCDloop 2)
else()
message(STATUS "Skipping QCDloop")
endif()
if(INCLUDE_ROOT)
# Don't print "Skipping ROOT" for default option (EXCLUDE_ROOT=TRUE)
find_package(ROOT 6.14) # root targets are broken before 6.14
find_package_handle_standard_args( ROOT
FOUND_VAR
ROOT_FOUND
REQUIRED_VARS
ROOT_INCLUDE_DIRS
ROOT_LIBRARIES
VERSION_VAR
ROOT_VERSION
)
endif()
if(INCLUDE_HighFive)
find_package(HighFive QUIET)
find_package_handle_standard_args( HighFive CONFIG_MODE )
else()
message(STATUS "Skipping HighFive")
endif()
include(RepairTargets) # more reliable cmake targets
## Save dependencies for templates
set(HEJ_BUILD_WITH_HepMC2 ${HepMC_FOUND})
set(HEJ_BUILD_WITH_HepMC3 ${HepMC3_FOUND})
set(HEJ_BUILD_WITH_RIVET ${rivet_FOUND})
if(rivet_FOUND AND rivet_VERSION VERSION_LESS 3)
set(HEJ_USE_RIVET2 TRUE)
endif()
set(HEJ_BUILD_WITH_QCDLOOP ${QCDloop_FOUND})
set(HEJ_BUILD_WITH_HDF5 ${HighFive_FOUND})
## Template files
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Templates/Version.hh.in
include/HEJ/Version.hh @ONLY )
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Templates/ConfigFlags.hh.in
include/HEJ/ConfigFlags.hh @ONLY )
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Templates/HEJ-config.cc.in
src/bin/HEJ-config.cc @ONLY )
# Generate CMake config file
include(CMakePackageConfigHelpers)
configure_package_config_file(
cmake/Templates/hej-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CONFIG_DIR}/hej-config.cmake
INSTALL_DESTINATION ${INSTALL_CONFIG_DIR}
PATH_VARS INSTALL_INCLUDE_DIR_BASE INSTALL_LIB_DIR
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CONFIG_DIR}/hej-config-version.cmake
COMPATIBILITY SameMajorVersion
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CONFIG_DIR}/hej-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CONFIG_DIR}/hej-config-version.cmake
DESTINATION ${INSTALL_CONFIG_DIR})
## shortcut for HEJ specific includes
set(HEJ_INCLUDE_DIR
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
)
# Add test coverage
if (TEST_COVERAGE AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) )
include(CodeCoverage)
APPEND_COVERAGE_COMPILER_FLAGS()
set(COVERAGE_GCOVR_EXCLUDES "${PROJECT_SOURCE_DIR}/include/LHEF/*"
"${PROJECT_SOURCE_DIR}/include/cxxopts.hpp"
"${PROJECT_SOURCE_DIR}/t/*"
"${PROJECT_BINARY_DIR}/*")
SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML(
NAME ctest_coverage
EXECUTABLE ctest
)
endif()
add_subdirectory(current_generator)
## create main HEJ library
add_subdirectory(src)
## define executable
add_executable(HEJ_main src/bin/HEJ.cc)
set_target_properties(HEJ_main PROPERTIES OUTPUT_NAME "HEJ")
## link libraries
target_link_libraries(HEJ_main HEJ)
add_executable(HEJ-config src/bin/HEJ-config.cc)
target_include_directories(HEJ-config PRIVATE ${HEJ_INCLUDE_DIR})
file(GLOB hej_headers
${CMAKE_CURRENT_SOURCE_DIR}/include/HEJ/*.hh
${PROJECT_BINARY_DIR}/include/HEJ/*.hh
)
file(GLOB hej_detail_headers ${CMAKE_CURRENT_SOURCE_DIR}/include/HEJ/detail/*.hh)
file(GLOB lhef_headers ${CMAKE_CURRENT_SOURCE_DIR}/include/LHEF/*.h)
install(FILES ${hej_headers} DESTINATION ${INSTALL_INCLUDE_DIR})
install(FILES ${hej_detail_headers} DESTINATION ${INSTALL_INCLUDE_DIR}/detail/)
install(FILES ${lhef_headers} DESTINATION ${INSTALL_INCLUDE_DIR_BASE}/LHEF/)
install(TARGETS HEJ_main HEJ-config DESTINATION ${INSTALL_BIN_DIR})
## tests (prevent testing if current project is a subproject)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
## advanced version of enable_testing()
## adds "BUILD_TESTING" option to deactivate testing
include(CTest)
if(BUILD_TESTING)
set(BUILD_EXAMPLES TRUE) # examples needed for testing
set(include_tests TRUE)
endif()
endif()
## build examples
if(BUILD_EXAMPLES)
message(STATUS "Adding examples")
add_subdirectory(examples)
endif()
## build tests
if(include_tests)
message(STATUS "Adding tests")
add_subdirectory(t)
endif()
add_subdirectory(doc)
## Clang-tidy
if(RUN_CLANG_TIDY)
find_program(
CLANG_TIDY_EXE
NAMES "clang-tidy"
DOC "Path to clang-tidy executable" )
if(NOT CLANG_TIDY_EXE)
message(FATAL_ERROR "clang-tidy not found, but requested. Please deactivate RUN_CLANG_TIDY" )
else()
set_target_properties(
HEJ
PROPERTIES CXX_CLANG_TIDY
"${CLANG_TIDY_EXE};-header-filter=${CMAKE_SOURCE_DIR}/include/HEJ;-fix;--fix-errors" )
endif()
endif()
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, May 14, 10:11 AM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5094925
Default Alt Text
(9 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment