Files
geant4/source/externals/ptl/cmake/Modules/PTLBuildSettings.cmake
2022-12-09 14:43:28 +01:00

145 lines
5.0 KiB
CMake

# PTL Build Settings and Options
include(PTLCMakeUtilities)
include(CheckCXXCompilerFlag)
# -------------------------------------------------------------------------------------- #
#
# Build Type(s)
#
# -------------------------------------------------------------------------------------- #
set(__ptl_default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(
STATUS
"Forcing PTL CMAKE_BUILD_TYPE to '${__ptl_default_build_type}' as none was specified"
)
set(CMAKE_BUILD_TYPE
"${__ptl_default_build_type}"
CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel"
"RelWithDebInfo")
endif()
# -------------------------------------------------------------------------------------- #
#
# Output Directories for build products
#
# -------------------------------------------------------------------------------------- #
# If master project, set the output directory (critical on Windows and Xcode) Otherwise we
# leave this at the discretion of the parent project
#
if(PTL_MASTER_PROJECT)
set(_BIN_DIR ${PROJECT_BINARY_DIR})
if(WIN32)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${_BIN_DIR}/outputs/runtime)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${_BIN_DIR}/outputs/library)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_BIN_DIR}/outputs/archive)
else()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${_BIN_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${_BIN_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${_BIN_DIR})
endif()
endif()
# -------------------------------------------------------------------------------------- #
#
# Library types
#
# -------------------------------------------------------------------------------------- #
ptl_add_option(BUILD_STATIC_LIBS "Build static library" ON)
ptl_add_option(BUILD_SHARED_LIBS "Build shared library" ON)
if(NOT "${CMAKE_PROJECT_NAME}" STREQUAL "${PROJECT_NAME}")
ptl_add_option(BUILD_OBJECT_LIBS "Build object library (only valid as subproject)"
OFF)
set(PTL_EXCLUDE_FROM_ALL EXCLUDE_FROM_ALL)
set(PTL_BUILD_LIBS_ERROR_DESC
"BUILD_STATIC_LIBS, BUILD_SHARED_LIBS, and BUILD_OBJECT_LIBS are all OFF")
else()
set(BUILD_OBJECT_LIBS OFF)
set(PTL_EXCLUDE_FROM_ALL)
set(PTL_BUILD_LIBS_ERROR_DESC
"Neither BUILD_STATIC_LIBS nor BUILD_SHARED_LIBS are set")
endif()
if((NOT BUILD_SHARED_LIBS)
AND (NOT BUILD_STATIC_LIBS)
AND (NOT BUILD_OBJECT_LIBS))
message(FATAL_ERROR "${PTL_BUILD_LIBS_ERROR_DESC}. One must be ON")
endif()
# -------------------------------------------------------------------------------------- #
#
# C/C++ Standard and Flags
#
# -------------------------------------------------------------------------------------- #
if(WIN32)
set(CMAKE_CXX_STANDARD
14
CACHE STRING "C++ STL standard")
else()
set(CMAKE_CXX_STANDARD
11
CACHE STRING "C++ STL standard")
endif()
ptl_message_on_change(CMAKE_CXX_STANDARD "Building PTL with CMAKE_CXX_STANDARD")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Add allocation export symbol for the PTL module Should this be a
# target_compile_definition?
add_compile_definitions(PTL_ALLOC_EXPORT)
# -------------------------------------------------------------------------------------- #
#
# Testing/Profiling Options
#
# -------------------------------------------------------------------------------------- #
# Coverage compile/link settings See also:
# https://discourse.cmake.org/t/best-practice-for-multi-config-build-options/2049
ptl_add_option(PTL_USE_COVERAGE "Enable code coverage" OFF)
if(PTL_USE_COVERAGE)
if((NOT CMAKE_BUILD_TYPE STREQUAL "Debug") AND (NOT CMAKE_CONFIGURATION_TYPES))
message(
WARNING
"PTL_USE_COVERAGE is ON, but the build mode is not 'Debug': coverage testing will be disabled."
)
set(PTL_USE_COVERAGE
OFF
CACHE BOOL "Enable code coverage (disabled)" FORCE)
else()
include(PTLCoverage)
endif()
endif()
# Sanitizer compile/link flags See also:
# https://discourse.cmake.org/t/best-practice-for-multi-config-build-options/2049
ptl_add_option(PTL_USE_SANITIZER "Enable -fsanitize=<type>" OFF)
if(PTL_USE_SANITIZER)
set(__ptl_sanitizer_type_default "thread")
if(PTL_SANITIZER_TYPE)
set(__ptl_sanitizer_type_default "${PTL_SANITIZER_TYPE}")
endif()
set(PTL_SANITIZER_TYPE
"${__ptl_sanitizer_type_default}"
CACHE STRING "Sanitizer type (-fsanitize=<type>)")
set_property(CACHE PTL_SANITIZER_TYPE PROPERTY STRINGS "thread" "address" "undefined")
ptl_message_on_change(PTL_SANITIZER_TYPE "Building PTL with sanitizer type")
include(PTLSanitize)
endif()
# Clang Tooling
if(PTL_MASTER_PROJECT)
include(PTLFormatting)
endif()
ptl_add_option(PTL_USE_CLANG_TIDY "Enable running clang-tidy on sources" OFF)
if(PTL_USE_CLANG_TIDY)
include(PTLLinting)
endif()