aboutsummaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorsilvanshade <[email protected]>2025-04-24 10:25:26 -0600
committerHenrik Gaßmann <[email protected]>2025-04-30 09:30:01 +0200
commite447201e25092b26a3af9eb012f2d497b52fb536 (patch)
tree7140a87e549d2b7f5daa030fee28c71b7b81bad1 /c
parentcd6e3e4dd9a9518be45ef742606462ddfb0f3cfd (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.txt20
-rw-r--r--c/cmake/BLAKE3/Utils.cmake21
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()