Files
geant4/source/externals/ptl/CMakeLists.txt
T
2020-12-04 12:30:43 +01:00

169 lines
6.1 KiB
CMake

################################################################################
# cmake settings
#
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Add allocation export symbol for the PLT module
add_definitions(-DPTL_ALLOC_EXPORT)
cmake_policy(SET CMP0048 NEW)
cmake_policy(SET CMP0042 NEW)
# Check if project is being used directly or via add_subdirectory
set(PTL_MASTER_PROJECT ON)
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(PTL_MASTER_PROJECT OFF)
endif()
################################################################################
# version
#
file(READ "${CMAKE_CURRENT_LIST_DIR}/VERSION" VERSION_STRING LIMIT_COUNT 1)
string(REGEX REPLACE "(\n|\r)" "" VERSION_STRING "${VERSION_STRING}")
string(REGEX REPLACE "[A-Za-z].*" "" VERSION_STRING "${VERSION_STRING}")
set(PTL_VERSION "${VERSION_STRING}")
################################################################################
# project
#
project(PTL LANGUAGES C CXX VERSION ${PTL_VERSION})
if(NOT PTL_MASTER_PROJECT)
unset(${PROJECT_NAME}_C_FLAGS CACHE)
unset(${PROJECT_NAME}_CXX_FLAGS CACHE)
endif()
set(CMAKE_DIRECTORY_LABELS "PTL")
################################################################################
#
#
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules ${CMAKE_MODULE_PATH})
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME development)
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE Release CACHE STRING "CMake build type" FORCE)
endif()
################################################################################
include(MacroUtilities)
#include(Options)
include(Compilers)
include(GNUInstallDirs)
include(ProjectSettings)
include(BuildSettings)
include(Packages)
include(ClangFormat)
################################################################################
# PTL source
################################################################################
cmake_policy(SET CMP0053 NEW)
################################################################################
# #
# General #
# #
################################################################################
if(PTL_USE_TBB)
list(APPEND ${PROJECT_NAME}_DEFINITIONS PTL_USE_TBB)
endif()
# libraries to install
set(INSTALL_LIBRARIES )
#------------------------------------------------------------------------------#
# Locate sources and headers for this project
# - headers are included so they will show up in IDEs
file(GLOB_RECURSE ptl_headers ${CMAKE_CURRENT_LIST_DIR}/include/PTL/*.hh
${CMAKE_CURRENT_LIST_DIR}/include/PTL/*.icc)
file(GLOB_RECURSE ptl_sources ${CMAKE_CURRENT_LIST_DIR}/src/*.cc)
get_property(PTL_INTERFACE_LIBRARIES GLOBAL PROPERTY ${PROJECT_NAME}_INTERFACE_LIBRARIES)
export(TARGETS ${PTL_INTERFACE_LIBRARIES} FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-interface.cmake)
################################################################################
# #
# PTL Library #
# #
################################################################################
if(BUILD_SHARED_LIBS)
build_library(VERSION
TYPE SHARED
TARGET_NAME ptl-shared
OUTPUT_NAME G4ptl
SOURCES ${ptl_headers} ${ptl_sources}
EXTRA_ARGS POSITION_INDEPENDENT_CODE ON
WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_link_libraries(ptl-shared PUBLIC ptl-external-packages)
target_link_libraries(ptl-shared PRIVATE ptl-external-libraries ptl-compile-options)
target_include_directories(ptl-shared PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
list(APPEND INSTALL_LIBRARIES ptl-shared)
export(TARGETS ptl-shared FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-shared.cmake)
endif()
if(BUILD_STATIC_LIBS)
build_library(
TYPE STATIC
TARGET_NAME ptl-static
OUTPUT_NAME $<IF:$<PLATFORM_ID:Windows>,G4ptl-static,G4ptl>
SOURCES ${ptl_headers} ${ptl_sources}
EXTRA_ARGS POSITION_INDEPENDENT_CODE ON)
target_link_libraries(ptl-static PUBLIC ptl-external-packages)
target_link_libraries(ptl-static PRIVATE ptl-external-libraries ptl-compile-options)
target_include_directories(ptl-static PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
list(APPEND INSTALL_LIBRARIES ptl-static)
export(TARGETS ptl-static FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}-static.cmake)
endif()
################################################################################
# #
# Installation #
# #
################################################################################
# Install the targets and export libraries
install(TARGETS ${INSTALL_LIBRARIES}
EXPORT ${PROJECT_NAME}Targets
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT development
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT runtime
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime)
# install export
install(EXPORT ${PROJECT_NAME}Targets
NAMESPACE PTL::
DESTINATION ${CMAKE_INSTALL_CONFIGDIR}
COMPONENT development)
# headers
install(FILES ${ptl_headers}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/PTL
COMPONENT development)
# set
set(PTL_BUILT_LIBRARIES "${INSTALL_LIBRARIES}" CACHE INTERNAL "Built libraries" FORCE)
################################################################################
# Installation and info
################################################################################
include(ConfigurePackage)
if(PTL_MASTER_PROJECT)
print_features()
endif()