[PATCH] D19895: cmake: Introduce TEST_SUITE_C_FLAGS, TEST_SUITE_CXX_FLAGS, etc.

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue May 3 18:10:30 PDT 2016


MatzeB created this revision.
MatzeB added reviewers: cmatthews, kristof.beyls, jmolloy.
MatzeB added a subscriber: llvm-commits.
MatzeB set the repository for this revision to rL LLVM.
Herald added a subscriber: mcrosier.

Intuitively one would use CMAKE_C_FLAGS, CMAKE_CXX_FLAGS and
CMAKE_EXE_LINKER_FLAGS to inject custom flags into the build. However
this clashes with the use of cmake cache files which want to add flags as well.
A user specifying CMAKE_C_FLAGS would (accidentally) override the flags set by the cache files.

The solution here is to introduce a new set of flags called
TEST_SUITE_C_FLAGS, TEST_SUITE_CXX_FLAGS and TEST_SUITE_EXE_LINKER_FLAGS
as a means for users to specify additional flags. This way the flags
will not override the settings from the cache file.

In order to educate users to use the new flags a warning message is
displayed if CMAKE_C_FLAGS is set.

Repository:
  rL LLVM

http://reviews.llvm.org/D19895

Files:
  CMakeLists.txt
  cmake/caches/util/arch_flags.cmake

Index: cmake/caches/util/arch_flags.cmake
===================================================================
--- cmake/caches/util/arch_flags.cmake
+++ cmake/caches/util/arch_flags.cmake
@@ -2,3 +2,5 @@
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_FLAGS}" CACHE STRING "")
 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${ARCH_FLAGS}" CACHE STRING "")
 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ARCH_FLAGS}" CACHE STRING "")
+# Silence the warning in the toplevel CMakeLists.txt.
+set(EXPECTED_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "")
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -12,13 +12,33 @@
 mark_as_advanced(CMAKE_INSTALL_PREFIX)
 # On the other hand we often want to switch compiler or cflags
 mark_as_advanced(CLEAR CMAKE_C_COMPILER CMAKE_CXX_COMPILER CMAKE_LINKER
-  CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL
+  CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL
   CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
-  CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL
+  CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL
   CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
-  CMAKE_EXE_LINKER_FLAGS CMAKE_EXE_LINKER_FLAGS_DEBUG
-  CMAKE_EXE_LINKER_FLAGS_MINSIZEREL CMAKE_EXE_LINKER_FLAGS_RELEASE
-  CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO)
+  CMAKE_EXE_LINKER_FLAGS_DEBUG CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+  CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO)
+
+# Encourage people to use TEST_SUITE_C_FLAGS/TEST_SUITE_CXX_FLAGS so
+# CMAKE_C_FLAGS can be used exclusively by -C cachefiles for specifying
+# target flags without the user accidentally overriding them.
+set(EXPECTED_CMAKE_C_FLAGS "" CACHE STRING
+    "Allows cache files to disable the CMAKE_C_FLAGS warning message")
+mark_as_advanced(EXPECTED_CMAKE_C_FLAGS)
+if(NOT "${CMAKE_C_FLAGS}" STREQUAL "${EXPECTED_CMAKE_C_FLAGS}")
+  message(WARNING "
+Specifying CMAKE_C_FLAGS, CMAKE_CXX_FLAGS, \
+CMAKE_EXE_LINKER_FLAGS is discouraged. Use TEST_SUITE_C_FLAGS, \
+TEST_SUITE_CXX_FLAGS and TEST_SUITE_EXE_LINKER_FLAGS instead.\
+")
+endif()
+mark_as_advanced(CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS)
+set(TEST_SUITE_C_FLAGS "" CACHE STRING "Flags used by the C compiler.")
+set(TEST_SUITE_CXX_FLAGS "${TEST_SUITE_C_FLAGS}" CACHE STRING "Flags used by the C++ compiler.")
+set(TEST_SUITE_EXE_LINKER_FLAGS "" CACHE STRING "Flags used by the linker.")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TEST_SUITE_C_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TEST_SUITE_CXX_FLAGS}")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${TEST_SUITE_EXE_LINKER_FLAGS}")
 
 project(test-suite C CXX)
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19895.56084.patch
Type: text/x-patch
Size: 2756 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160504/6e3129cf/attachment.bin>


More information about the llvm-commits mailing list