diff options
| author | silvanshade <[email protected]> | 2025-04-24 10:25:26 -0600 |
|---|---|---|
| committer | Henrik Gaßmann <[email protected]> | 2025-04-30 09:30:01 +0200 |
| commit | e447201e25092b26a3af9eb012f2d497b52fb536 (patch) | |
| tree | 7140a87e549d2b7f5daa030fee28c71b7b81bad1 /c | |
| parent | cd6e3e4dd9a9518be45ef742606462ddfb0f3cfd (diff) | |
Relax Clang frontend variant detection
This allows Clang frontend variant detection to work better in more
scenarios such as when compiling with cross-compilers with platform
prefixes.
Diffstat (limited to 'c')
| -rw-r--r-- | c/CMakeLists.txt | 20 | ||||
| -rw-r--r-- | c/cmake/BLAKE3/Utils.cmake | 21 |
2 files changed, 25 insertions, 16 deletions
diff --git a/c/CMakeLists.txt b/c/CMakeLists.txt index e999345..0bb972e 100644 --- a/c/CMakeLists.txt +++ b/c/CMakeLists.txt @@ -23,6 +23,7 @@ option(BLAKE3_FETCH_TBB "Allow fetching oneTBB from GitHub if not found on syste include(CTest) include(FeatureSummary) include(GNUInstallDirs) +include(BLAKE3/Utils) add_subdirectory(dependencies) @@ -263,32 +264,19 @@ if(BLAKE3_USE_TBB) set(APPEND BLAKE3_CXX_STANDARD_FLAGS_GNU -std=c++20) set(APPEND BLAKE3_CXX_STANDARD_FLAGS_MSVC /std:c++20) endif() + set(BLAKE3_CXXFLAGS_GNU "-fno-exceptions;-fno-rtti;${BLAKE3_CXX_STANDARD_FLAGS_GNU}" CACHE STRING "C++ flags used for compiling private BLAKE3 library components with GNU-like compiler frontends.") set(BLAKE3_CXXFLAGS_MSVC "/EHs-c-;/GR-;${BLAKE3_CXX_STANDARD_FLAGS_MSVC}" CACHE STRING "C++ flags used for compiling private BLAKE3 library components with MSVC-like compiler frontends.") - # Get the C++ compiler name without extension - get_filename_component(BLAKE3_CMAKE_CXX_COMPILER_NAME "${CMAKE_CXX_COMPILER}" NAME_WE) - # Strip any trailing versioning from the C++ compiler name - string(REGEX MATCH "^(clang\\+\\+|clang-cl)" BLAKE3_CMAKE_CXX_COMPILER_NAME "${BLAKE3_CMAKE_CXX_COMPILER_NAME}") - # TODO: Simplify with CMAKE_CXX_COMPILER_FRONTEND_VARIANT once min CMake version is 3.14. - if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_GNU}>) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if(BLAKE3_CMAKE_CXX_COMPILER_NAME STREQUAL "clang++") - target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_GNU}>) - elseif(BLAKE3_CMAKE_CXX_COMPILER_NAME STREQUAL "clang-cl") - target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_MSVC}>) - endif() - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(BLAKE3_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU") target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_GNU}>) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + elseif(BLAKE3_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") target_compile_options(blake3 PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${BLAKE3_CXXFLAGS_MSVC}>) endif() # Undefine scratch variables unset(BLAKE3_CXX_STANDARD_FLAGS_GNU) unset(BLAKE3_CXX_STANDARD_FLAGS_MSVC) - unset(BLAKE3_CMAKE_CXX_COMPILER_NAME) unset(BLAKE3_CXXFLAGS_GNU) unset(BLAKE3_CXXFLAGS_MSVC) endif() diff --git a/c/cmake/BLAKE3/Utils.cmake b/c/cmake/BLAKE3/Utils.cmake new file mode 100644 index 0000000..7cadf84 --- /dev/null +++ b/c/cmake/BLAKE3/Utils.cmake @@ -0,0 +1,21 @@ +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.10) + include_guard(GLOBAL) +endif() + +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) + set(BLAKE3_CXX_COMPILER_FRONTEND_VARIANT ${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}) +else() + # Get the C++ compiler name without extension + get_filename_component(BLAKE3_CMAKE_CXX_COMPILER_NAME "${CMAKE_CXX_COMPILER}" NAME_WE) + # Strip any trailing versioning from the C++ compiler name + string(REGEX MATCH "^.*(clang\\+\\+|clang-cl)" BLAKE3_CMAKE_CXX_COMPILER_NAME "${BLAKE3_CMAKE_CXX_COMPILER_NAME}") + # Guess the frontend variant from the C++ compiler name + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND BLAKE3_CMAKE_CXX_COMPILER_NAME STREQUAL "clang-cl") + set(BLAKE3_CXX_COMPILER_FRONTEND_VARIANT "MSVC") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(BLAKE3_CXX_COMPILER_FRONTEND_VARIANT "MSVC") + else() + set(BLAKE3_CXX_COMPILER_FRONTEND_VARIANT "GNU") + endif() + unset(BLAKE3_CMAKE_CXX_COMPILER_NAME) +endif() |
