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 ++++------------------ Firestore/Protos/CMakeLists.txt | 16 +++--- .../src/firebase/firestore/local/CMakeLists.txt | 2 +- .../src/firebase/firestore/nanopb/CMakeLists.txt | 2 +- .../src/firebase/firestore/remote/CMakeLists.txt | 2 +- 5 files changed, 20 insertions(+), 60 deletions(-) (limited to 'Firestore') 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) diff --git a/Firestore/Protos/CMakeLists.txt b/Firestore/Protos/CMakeLists.txt index b347a61..fdf45e7 100644 --- a/Firestore/Protos/CMakeLists.txt +++ b/Firestore/Protos/CMakeLists.txt @@ -50,19 +50,19 @@ cc_library( nanopb/google/type/latlng.pb.c nanopb/google/type/latlng.nanopb.h DEPENDS - nanopb + protobuf-nanopb ) target_compile_definitions( - firebase_firestore_protos_nanopb PUBLIC - -DPB_FIELD_16BIT + firebase_firestore_protos_nanopb + PUBLIC -DPB_FIELD_16BIT ) # TODO(rsgowman): this may be worth moving into cc_library, possibly via an # INCLUDE_DIRS or similar. target_include_directories( - firebase_firestore_protos_nanopb PUBLIC - ${FIREBASE_SOURCE_DIR}/Firestore/Protos/nanopb + firebase_firestore_protos_nanopb + PUBLIC ${FIREBASE_SOURCE_DIR}/Firestore/Protos/nanopb ) # libprotobuf based generated protos. Expected only to be used in test (as @@ -102,10 +102,10 @@ cc_library( target_include_directories( firebase_firestore_protos_libprotobuf PUBLIC - ${FIREBASE_SOURCE_DIR}/Firestore/Protos/cpp + ${FIREBASE_SOURCE_DIR}/Firestore/Protos/cpp ) set_target_properties( - firebase_firestore_protos_libprotobuf PROPERTIES - COMPILE_FLAGS "-Wno-unused-parameter" + firebase_firestore_protos_libprotobuf + PROPERTIES COMPILE_FLAGS "-Wno-unused-parameter" ) diff --git a/Firestore/core/src/firebase/firestore/local/CMakeLists.txt b/Firestore/core/src/firebase/firestore/local/CMakeLists.txt index 3e009bb..5a47187 100644 --- a/Firestore/core/src/firebase/firestore/local/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/local/CMakeLists.txt @@ -29,5 +29,5 @@ cc_library( firebase_firestore_protos_nanopb firebase_firestore_remote firebase_firestore_util - nanopb + protobuf-nanopb ) diff --git a/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt b/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt index 82ffb65..fd34c2e 100644 --- a/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt @@ -23,5 +23,5 @@ cc_library( DEPENDS firebase_firestore_util firebase_firestore_protos_nanopb - nanopb + protobuf-nanopb ) diff --git a/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt b/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt index 0ef0b7c..a2bdbe2 100644 --- a/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt @@ -27,5 +27,5 @@ cc_library( firebase_firestore_protos_nanopb firebase_firestore_util grpc::grpc - nanopb + protobuf-nanopb ) -- cgit v1.2.3