From 7fc953fc6ffa69d159c0523d3902d867fe8c0ca5 Mon Sep 17 00:00:00 2001 From: Gil Date: Wed, 11 Jul 2018 15:55:36 -0700 Subject: Firestore CMake cleanup (#1510) * Pull out sanitizer options into a separate file * Reorder packages * Remove the extra "external/$target" directory from PREFIX Instead of BINARY_DIR/external/foo/src/foo the contents will be in BINARY_DIR/src/foo. * Make libprotobuf-nanopb targets line up with nanopb's CMakeLists.txt * Fix CMake style --- Firestore/CMakeLists.txt | 58 ++++++++---------------------------------------- 1 file changed, 9 insertions(+), 49 deletions(-) (limited to 'Firestore/CMakeLists.txt') diff --git a/Firestore/CMakeLists.txt b/Firestore/CMakeLists.txt index c74313c..eb9744b 100644 --- a/Firestore/CMakeLists.txt +++ b/Firestore/CMakeLists.txt @@ -15,48 +15,6 @@ cmake_minimum_required(VERSION 2.8.11) project(firestore C CXX) -option(WITH_ASAN "Build with Address Sanitizer" OFF) -# TODO(varconst): msan -# Memory sanitizer is more complicated: -# - it requires all dependencies to be compiled with msan enabled (see -# https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo); -# - AppleClang doesn't support it. -option(WITH_TSAN "Build with Thread Sanitizer (mutually exculsive with other sanitizers)" OFF) -option(WITH_UBSAN "Build with Undefined Behavior sanitizer" OFF) - -macro(add_to_compile_and_link_flags flag) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}") -endmacro() - -if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if(WITH_ASAN) - add_to_compile_and_link_flags("-fsanitize=address") - endif() - - if(WITH_TSAN) - if(WITH_ASAN OR WITH_UBSAN) - message(FATAL_ERROR "Cannot combine TSan with other santizers") - endif() - add_to_compile_and_link_flags("-fsanitize=thread") - endif() - - if(WITH_UBSAN) - add_to_compile_and_link_flags("-fsanitize=undefined") - endif() - - if (WITH_ASAN OR WITH_TSAN OR WITH_UBSAN) - # Recommended to "get nicer stack traces in error messages" - # TODO(varconst): double-check that TSan actually needs this flag (it's - # explicitly recommended in the docs for ASan and UBSan) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") - endif() -else() - if(WITH_ASAN OR WITH_TSAN OR WITH_UBSAN) - message(FATAL_ERROR "Only Clang and GCC support sanitizers") - endif() -endif() - set(FIREBASE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/..) # CMAKE_INSTALL_PREFIX should be passed in to this build so that it can find @@ -75,19 +33,21 @@ set(FIREBASE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) set(FIREBASE_BINARY_DIR ${PROJECT_BINARY_DIR}/..) list(INSERT CMAKE_MODULE_PATH 0 ${FIREBASE_SOURCE_DIR}/cmake) +include(SanitizerOptions) include(utils) -find_package(GTest REQUIRED) -find_package(GMock REQUIRED) -find_package(LevelDB REQUIRED) -find_package(Nanopb REQUIRED) -find_package(Protobuf REQUIRED) -find_package(GRPC REQUIRED) +# External packages if(APPLE) - find_package(GoogleUtilities REQUIRED) find_package(FirebaseCore REQUIRED) + find_package(GoogleUtilities REQUIRED) endif() +find_package(GMock REQUIRED) +find_package(GRPC REQUIRED) +find_package(GTest REQUIRED) +find_package(LevelDB REQUIRED) +find_package(Nanopb REQUIRED) +find_package(Protobuf REQUIRED) enable_testing() add_subdirectory(third_party/abseil-cpp) -- cgit v1.2.3