[llvm] beff86e - Build libSupport with -Werror=global-constructors (NFC)
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 26 16:08:49 PDT 2021
Author: Mehdi Amini
Date: 2021-07-26T23:06:15Z
New Revision: beff86e8ff429f11da6fe37efde86d22ea636ed5
URL: https://github.com/llvm/llvm-project/commit/beff86e8ff429f11da6fe37efde86d22ea636ed5
DIFF: https://github.com/llvm/llvm-project/commit/beff86e8ff429f11da6fe37efde86d22ea636ed5.diff
LOG: Build libSupport with -Werror=global-constructors (NFC)
Ensure that libSupport does not carry any static global initializer.
libSupport can be embedded in use cases where we don't want to load all
cl::opt unless we want to parse the command line.
ManagedStatic can be used to enable lazy-initialization of globals.
The -Werror=global-constructors is only added on platform that have
support for the flag and for which std::mutex does not have a global
destructor. This is ensured by having CMake trying to compile a file
with a global mutex before adding the flag to libSupport.
Added:
Modified:
llvm/lib/Support/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt
index 2242b0ec60ab..014b4a2caf15 100644
--- a/llvm/lib/Support/CMakeLists.txt
+++ b/llvm/lib/Support/CMakeLists.txt
@@ -1,5 +1,26 @@
include(GetLibraryName)
+# Ensure that libSupport does not carry any static global initializer.
+# libSupport can be embedded in use cases where we don't want to load all
+# cl::opt unless we want to parse the command line.
+# ManagedStatic can be used to enable lazy-initialization of globals.
+# We don't use `add_flag_if_supported` as instead of compiling an empty file we
+# check if the current platform is able to compile global std::mutex with this
+# flag (Linux can, Darwin can't for example).
+check_cxx_compiler_flag("-Werror=global-constructors" HAS_WERROR_GLOBAL_CTORS)
+if (HAS_WERROR_GLOBAL_CTORS)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=global-constructors")
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <mutex>
+ static std::mutex TestGlobalCtorDtor;
+ static std::recursive_mutex TestGlobalCtorDtor2;
+ int main() { (void)TestGlobalCtorDtor; (void)TestGlobalCtorDtor2; return 0;}
+ " LLVM_HAS_NOGLOBAL_CTOR_MUTEX)
+ if (NOT LLVM_HAS_NOGLOBAL_CTOR_MUTEX)
+ string(REPLACE "-Werror=global-constructors" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
+ endif()
+endif()
+
if(LLVM_ENABLE_ZLIB)
set(imported_libs ZLIB::ZLIB)
endif()
More information about the llvm-commits
mailing list