[llvm] [LLVM][CMake][NFC] Use generator expression to separate CXXFLAGS (PR #173869)
Alexis Engelke via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 29 06:32:30 PST 2025
https://github.com/aengelke created https://github.com/llvm/llvm-project/pull/173869
This avoids looking at the individual sources for mixed C/C++ libraries.
The previous code was written ~2014. Generator expressions were added in CMake 3.3 (2015). We currently require CMake 3.20 and therefore can rely on more modern features.
Apart from simplifying the code, this is preliminary work to make more use of pre-compiled headers (#173868).
>From 2ed0f3165c893c32ac4e992ae271f8d454d96a71 Mon Sep 17 00:00:00 2001
From: Alexis Engelke <engelke at in.tum.de>
Date: Mon, 29 Dec 2025 13:12:47 +0000
Subject: [PATCH] [LLVM][CMake][NFC] Use generator expression to separate
CXXFLAGS
This avoids looking at the individual sources for mixed C/C++ libraries.
The previous code was written ~2014. Generator expressions were added in
CMake 3.3 (2015). We currently require CMake 3.20 and therefore can rely
on more modern features.
---
llvm/cmake/modules/AddLLVM.cmake | 56 ++++++++------------------------
1 file changed, 14 insertions(+), 42 deletions(-)
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 2480d7373d1a3..18c0ac7015efa 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -20,12 +20,7 @@ function(get_subproject_title outvar)
endfunction(get_subproject_title)
function(llvm_update_compile_flags name)
- get_property(sources TARGET ${name} PROPERTY SOURCES)
- if("${sources}" MATCHES "\\.c(;|$)")
- set(update_src_props ON)
- endif()
-
- list(APPEND LLVM_COMPILE_CFLAGS " ${LLVM_COMPILE_FLAGS}")
+ set(LLVM_COMPILE_CXXFLAGS "")
# LLVM_REQUIRES_EH is an internal flag that individual targets can use to
# force EH
@@ -35,22 +30,22 @@ function(llvm_update_compile_flags name)
set(LLVM_REQUIRES_RTTI ON)
endif()
if(MSVC)
- list(APPEND LLVM_COMPILE_FLAGS "/EHsc")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "/EHsc")
endif()
else()
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
- list(APPEND LLVM_COMPILE_FLAGS "-fno-exceptions")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-exceptions")
if(LLVM_ENABLE_UNWIND_TABLES)
- list(APPEND LLVM_COMPILE_FLAGS "-funwind-tables")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-funwind-tables")
else()
- list(APPEND LLVM_COMPILE_FLAGS "-fno-unwind-tables")
- list(APPEND LLVM_COMPILE_FLAGS "-fno-asynchronous-unwind-tables")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-unwind-tables")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-asynchronous-unwind-tables")
endif()
elseif(MSVC)
list(APPEND LLVM_COMPILE_DEFINITIONS _HAS_EXCEPTIONS=0)
- list(APPEND LLVM_COMPILE_FLAGS "/EHs-c-")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "/EHs-c-")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
- list(APPEND LLVM_COMPILE_FLAGS "-qnoeh")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-qnoeh")
endif()
endif()
@@ -61,41 +56,18 @@ function(llvm_update_compile_flags name)
set(LLVM_CONFIG_HAS_RTTI NO CACHE INTERNAL "")
list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_RTTI=0)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
- list(APPEND LLVM_COMPILE_FLAGS "-fno-rtti")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-fno-rtti")
elseif (MSVC)
- list(APPEND LLVM_COMPILE_FLAGS "/GR-")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "/GR-")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL")
- list(APPEND LLVM_COMPILE_FLAGS "-qnortti")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "-qnortti")
endif ()
elseif(MSVC)
- list(APPEND LLVM_COMPILE_FLAGS "/GR")
- endif()
-
- # Assume that;
- # - LLVM_COMPILE_FLAGS is list.
- # - PROPERTY COMPILE_FLAGS is string.
- string(REPLACE ";" " " target_compile_flags " ${LLVM_COMPILE_FLAGS}")
- string(REPLACE ";" " " target_compile_cflags " ${LLVM_COMPILE_CFLAGS}")
-
- if(update_src_props)
- foreach(fn ${sources})
- get_filename_component(suf ${fn} EXT)
- if("${suf}" STREQUAL ".cpp")
- set_property(SOURCE ${fn} APPEND_STRING PROPERTY
- COMPILE_FLAGS "${target_compile_flags}")
- endif()
- if("${suf}" STREQUAL ".c")
- set_property(SOURCE ${fn} APPEND_STRING PROPERTY
- COMPILE_FLAGS "${target_compile_cflags}")
- endif()
- endforeach()
- else()
- # Update target props, since all sources are C++.
- set_property(TARGET ${name} APPEND_STRING PROPERTY
- COMPILE_FLAGS "${target_compile_flags}")
+ list(APPEND LLVM_COMPILE_CXXFLAGS "/GR")
endif()
- set_property(TARGET ${name} APPEND PROPERTY COMPILE_DEFINITIONS ${LLVM_COMPILE_DEFINITIONS})
+ target_compile_options(${name} PRIVATE ${LLVM_COMPILE_FLAGS} $<$<COMPILE_LANGUAGE:CXX>:${LLVM_COMPILE_CXXFLAGS}>)
+ target_compile_definitions(${name} PRIVATE ${LLVM_COMPILE_DEFINITIONS})
endfunction()
function(add_llvm_symbol_exports target_name export_file)
More information about the llvm-commits
mailing list