Back to home page

EIC code displayed by LXR

 
 

    


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()