[llvm] d6d3000 - [CMake][WinMsvc] Fix user passed compiler/linker flags

Yuanfang Chen via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 7 16:35:20 PST 2022


Author: Yuanfang Chen
Date: 2022-01-07T16:34:56-08:00
New Revision: d6d3000a2f6d88ac73e5d4da4005ceadec788a9a

URL: https://github.com/llvm/llvm-project/commit/d6d3000a2f6d88ac73e5d4da4005ceadec788a9a
DIFF: https://github.com/llvm/llvm-project/commit/d6d3000a2f6d88ac73e5d4da4005ceadec788a9a.diff

LOG: [CMake][WinMsvc] Fix user passed compiler/linker flags

Users could pass flags by environment variables like CFLAGS/CXXFLAGS/LDFLAGS
or by using CMAKE_<LANG>_FLAGS_INIT/CMAKE_<t>_LINKER_FLAGS_INIT. So this
toolchain file should append to INIT flags instead. Otherwise, user
flags would be discarded here by assigning to CMAKE_<LANG>_FLAGS
directly.

Reviewed By: smeenai, mstorsjo

Differential Revision: https://reviews.llvm.org/D116709

Added: 
    

Modified: 
    llvm/cmake/platforms/WinMsvc.cmake

Removed: 
    


################################################################################
diff  --git a/llvm/cmake/platforms/WinMsvc.cmake b/llvm/cmake/platforms/WinMsvc.cmake
index 9a50788941828..d30701a318584 100644
--- a/llvm/cmake/platforms/WinMsvc.cmake
+++ b/llvm/cmake/platforms/WinMsvc.cmake
@@ -84,6 +84,7 @@
 # up a VFS overlay for the SDK headers and case-correcting symlinks for the
 # libraries when running on a case-sensitive filesystem.
 
+include_guard(GLOBAL)
 
 # When configuring CMake with a toolchain file against a top-level CMakeLists.txt,
 # it will actually run CMake many times, once for each small test program used to
@@ -251,6 +252,8 @@ list(APPEND _CTF_NATIVE_DEFAULT "-DCMAKE_ASM_COMPILER=${LLVM_NATIVE_TOOLCHAIN}/b
 list(APPEND _CTF_NATIVE_DEFAULT "-DCMAKE_C_COMPILER=${LLVM_NATIVE_TOOLCHAIN}/bin/clang")
 list(APPEND _CTF_NATIVE_DEFAULT "-DCMAKE_CXX_COMPILER=${LLVM_NATIVE_TOOLCHAIN}/bin/clang++")
 
+# These flags are used during build time. So if CFLAGS/CXXFLAGS/LDFLAGS is set
+# for the target, makes sure these are unset during build time.
 set(CROSS_TOOLCHAIN_FLAGS_NATIVE "${_CTF_NATIVE_DEFAULT}" CACHE STRING "")
 
 set(COMPILE_FLAGS
@@ -277,18 +280,8 @@ if(case_sensitive_filesystem)
 endif()
 
 string(REPLACE ";" " " COMPILE_FLAGS "${COMPILE_FLAGS}")
-
-# We need to preserve any flags that were passed in by the user. However, we
-# can't append to CMAKE_C_FLAGS and friends directly, because toolchain files
-# will be re-invoked on each reconfigure and therefore need to be idempotent.
-# The assignments to the _INITIAL cache variables don't use FORCE, so they'll
-# only be populated on the initial configure, and their values won't change
-# afterward.
-set(_CMAKE_C_FLAGS_INITIAL "${CMAKE_C_FLAGS}" CACHE STRING "")
-set(CMAKE_C_FLAGS "${_CMAKE_C_FLAGS_INITIAL} ${COMPILE_FLAGS}" CACHE STRING "" FORCE)
-
-set(_CMAKE_CXX_FLAGS_INITIAL "${CMAKE_CXX_FLAGS}" CACHE STRING "")
-set(CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS_INITIAL} ${COMPILE_FLAGS}" CACHE STRING "" FORCE)
+string(APPEND CMAKE_C_FLAGS_INIT " ${COMPILE_FLAGS}")
+string(APPEND CMAKE_CXX_FLAGS_INIT " ${COMPILE_FLAGS}")
 
 set(LINK_FLAGS
     # Prevent CMake from attempting to invoke mt.exe. It only recognizes the slashed form and not the dashed form.
@@ -312,16 +305,9 @@ if(case_sensitive_filesystem)
 endif()
 
 string(REPLACE ";" " " LINK_FLAGS "${LINK_FLAGS}")
-
-# See explanation for compiler flags above for the _INITIAL variables.
-set(_CMAKE_EXE_LINKER_FLAGS_INITIAL "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "")
-set(CMAKE_EXE_LINKER_FLAGS "${_CMAKE_EXE_LINKER_FLAGS_INITIAL} ${LINK_FLAGS}" CACHE STRING "" FORCE)
-
-set(_CMAKE_MODULE_LINKER_FLAGS_INITIAL "${CMAKE_MODULE_LINKER_FLAGS}" CACHE STRING "")
-set(CMAKE_MODULE_LINKER_FLAGS "${_CMAKE_MODULE_LINKER_FLAGS_INITIAL} ${LINK_FLAGS}" CACHE STRING "" FORCE)
-
-set(_CMAKE_SHARED_LINKER_FLAGS_INITIAL "${CMAKE_SHARED_LINKER_FLAGS}" CACHE STRING "")
-set(CMAKE_SHARED_LINKER_FLAGS "${_CMAKE_SHARED_LINKER_FLAGS_INITIAL} ${LINK_FLAGS}" CACHE STRING "" FORCE)
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${LINK_FLAGS}")
+string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${LINK_FLAGS}")
+string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${LINK_FLAGS}")
 
 # CMake populates these with a bunch of unnecessary libraries, which requires
 # extra case-correcting symlinks and what not. Instead, let projects explicitly


        


More information about the llvm-commits mailing list