summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Mumford <cmumford@google.com>2019-10-01 13:00:35 -0700
committerChris Mumford <cmumford@chromium.org>2019-10-01 13:03:19 -0700
commit370d532a00581ca79c87af7d7811e56de0ca52a8 (patch)
tree010b8cbcb2f08837f01fe3d717b0ed281a0b0e96
parent45ee61579c1eb3accd6c88c922ec468dd61beea8 (diff)
downloadleveldb-370d532a00581ca79c87af7d7811e56de0ca52a8.tar.gz
Using CMake's check_cxx_compiler_flag to check support for -Wthread-safety.
Previously used check_cxx_source_compiles to attempt a build to determine support for clang thread safety checks. This change is to support static analysis of the leveldb source by lgtm.com (using Semmle). It failed to build with the following error: ``` [2019-07-04 22:29:58] [build] c++: error: unrecognized command line option ‘-Wthread-safety’; did you mean ‘-fthread-jumps’? [2019-07-04 22:30:02] [build] make[2]: *** [CMakeFiles/leveldb.dir/build.make:66: CMakeFiles/leveldb.dir/db/builder.cc.o] Error 1 ``` PiperOrigin-RevId: 272275528
-rw-r--r--CMakeLists.txt21
1 files changed, 4 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 13ebbc9..a65afbf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -73,25 +73,12 @@ else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-include(CheckCXXSourceCompiles)
-
# Test whether -Wthread-safety is available. See
# https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
-# -Werror is necessary because unknown attributes only generate warnings.
-set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
-list(APPEND CMAKE_REQUIRED_FLAGS -Werror -Wthread-safety)
-check_cxx_source_compiles("
-struct __attribute__((lockable)) Lock {
- void Acquire() __attribute__((exclusive_lock_function()));
- void Release() __attribute__((unlock_function()));
-};
-struct ThreadSafeType {
- Lock lock_;
- int data_ __attribute__((guarded_by(lock_)));
-};
-int main() { return 0; }
-" HAVE_CLANG_THREAD_SAFETY)
-set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+include(CheckCXXCompilerFlag)
+check_cxx_compiler_flag(-Wthread-safety HAVE_CLANG_THREAD_SAFETY)
+
+include(CheckCXXSourceCompiles)
# Test whether C++17 __has_include is available.
check_cxx_source_compiles("