Warning, /acts/cmake/ActsCompilerOptions.cmake is written in an unsupported language. File is not indexed.
0001 # Acts compiler flags
0002 if(NOT CMAKE_BUILD_TYPE)
0003 set(CMAKE_BUILD_TYPE
0004 RelWithDebInfo
0005 CACHE STRING
0006 "Build type configuration"
0007 FORCE
0008 )
0009 message(STATUS "Setting default build type: ${CMAKE_BUILD_TYPE}")
0010 endif()
0011
0012 set(cxx_flags
0013 "-Wall -Wextra -Wpedantic -Wshadow -Wzero-as-null-pointer-constant -Wold-style-cast -Woverloaded-virtual"
0014 )
0015
0016 # Add assertions to standard libraries
0017 if(ACTS_FORCE_ASSERTIONS)
0018 set(cxx_flags "${cxx_flags} -D_GLIBCXX_ASSERTIONS -D_LIBCPP_DEBUG")
0019 endif()
0020
0021 # This adds some useful conversion checks like float-to-bool, float-to-int, etc.
0022 # However, at the moment this is only added to clang builds, since GCC's -Wfloat-conversion
0023 # is much more aggressive and also triggers on e.g., double-to-float
0024 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
0025 set(cxx_flags "${cxx_flags} -Wfloat-conversion")
0026 # __COUNTER__ is classified as a C2y extension in Clang 22+.
0027 # Third-party generated code (podio, Boost.Test, etc.) relies on it.
0028 include(CheckCXXCompilerFlag)
0029 check_cxx_compiler_flag("-Wno-c2y-extensions" _acts_has_wno_c2y)
0030 if(_acts_has_wno_c2y)
0031 set(cxx_flags "${cxx_flags} -Wno-c2y-extensions")
0032 endif()
0033 endif()
0034
0035 # -Wnull-dereference gets applied to -isystem includes in GCC13,
0036 # which causes lots of warnings in code we have no control over
0037 if(
0038 CMAKE_CXX_COMPILER_ID MATCHES "Clang"
0039 OR (
0040 CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
0041 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 12
0042 )
0043 )
0044 set(cxx_flags "${cxx_flags} -Wnull-dereference")
0045 endif()
0046
0047 set(ACTS_CXX_STANDARD 20)
0048 set(ACTS_CXX_STANDARD_FEATURE cxx_std_20)
0049 if(DEFINED CMAKE_CXX_STANDARD)
0050 if(${CMAKE_CXX_STANDARD} GREATER_EQUAL 20)
0051 set(ACTS_CXX_STANDARD ${CMAKE_CXX_STANDARD})
0052 set(ACTS_CXX_STANDARD_FEATURE "cxx_std_${CMAKE_CXX_STANDARD}")
0053 else()
0054 message(
0055 SEND_ERROR
0056 "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}, but ACTS requires C++ >=20"
0057 )
0058 endif()
0059 endif()
0060
0061 message(STATUS "C++ standard: ${ACTS_CXX_STANDARD}")
0062
0063 if(ACTS_ENABLE_CPU_PROFILING OR ACTS_ENABLE_MEMORY_PROFILING)
0064 message(STATUS "Added debug symbol compile flag")
0065 set(cxx_flags "${cxx_flags} ${CMAKE_CXX_FLAGS_DEBUG_INIT}")
0066 endif()
0067
0068 # assign to global CXX flags
0069 set(CMAKE_CXX_FLAGS "${cxx_flags} ${CMAKE_CXX_FLAGS}")
0070 message(STATUS "Using compiler flags: ${CMAKE_CXX_FLAGS}")
0071
0072 # do not scan for C++ modules
0073 set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
0074
0075 # silence warning about missing RPATH on Mac OSX
0076 set(CMAKE_MACOSX_RPATH 1)
0077
0078 # bake where we found external dependencies, if they
0079 # were not in the default library directories
0080 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
0081
0082 message(CHECK_START "Checking C++20 std::format support")
0083 try_compile(
0084 HAVE_STDFORMAT
0085 SOURCES ${PROJECT_SOURCE_DIR}/cmake/src/format.cpp
0086 CXX_STANDARD 20
0087 )
0088
0089 if(NOT HAVE_STDFORMAT)
0090 message(CHECK_FAIL "missing")
0091 message(
0092 SEND_ERROR
0093 "C++20 std::format support is required, "
0094 "but not available in this compiler"
0095 )
0096 else()
0097 message(CHECK_PASS "ok")
0098 endif()