From fb9f24eaee4c57d09ec0dca32abff840b39f7c7e Mon Sep 17 00:00:00 2001 From: Gil Date: Fri, 13 Jul 2018 11:09:44 -0700 Subject: Convert googletest and nanopb CMake builds to add_subdirectory (#1522) * Add a download-only boringssl ExternalProject Match boringssl version to grpc submodule version Note: not yet in use * Split grpc into separate download and build tasks This allows other external targets to download into the gRPC source tree before grpc is actually built. * Convert grpc to an http download * Build googletest with add_subdirectory Also: * Revert library-name modifications in the abseil-cpp build * Move abseil-cpp add_subdirectory build into place * Build nanopb with add_subdirectory * Force nanopb first to work around ODR violations This is a temporary work-around for b/111328563. --- Firestore/CMakeLists.txt | 43 +++++++++++++++++--- Firestore/Protos/CMakeLists.txt | 7 ---- .../src/firebase/firestore/local/CMakeLists.txt | 4 +- .../src/firebase/firestore/nanopb/CMakeLists.txt | 4 +- .../src/firebase/firestore/remote/CMakeLists.txt | 4 +- Firestore/third_party/abseil-cpp/CMakeLists.txt | 12 +++--- cmake/FindGMock.cmake | 47 ---------------------- cmake/external/googletest.cmake | 6 +-- cmake/external/nanopb.cmake | 12 ++---- cmake/utils.cmake | 12 ++++++ 10 files changed, 71 insertions(+), 80 deletions(-) delete mode 100644 cmake/FindGMock.cmake diff --git a/Firestore/CMakeLists.txt b/Firestore/CMakeLists.txt index eb9744b..cbcd49d 100644 --- a/Firestore/CMakeLists.txt +++ b/Firestore/CMakeLists.txt @@ -42,16 +42,49 @@ if(APPLE) 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) +# Googletest +add_subdirectory( + ${FIREBASE_BINARY_DIR}/src/googletest + ${FIREBASE_BINARY_DIR}/src/googletest-build + EXCLUDE_FROM_ALL +) +add_alias(GTest::GTest gtest) +add_alias(GTest::Main gtest_main) +add_alias(GMock::GMock gmock) + + +# Abseil-cpp +add_subdirectory( + third_party/abseil-cpp +) + + +# nanopb +set(nanopb_BUILD_GENERATOR ON CACHE BOOL "Enable the nanopb generator") +set(nanopb_PROTOC_PATH ${NANOPB_PROTOC_BIN} CACHE STRING "Protoc location") +add_subdirectory( + ${FIREBASE_BINARY_DIR}/src/nanopb + ${FIREBASE_BINARY_DIR}/src/nanopb-build + EXCLUDE_FROM_ALL +) + +target_compile_definitions( + protobuf-nanopb + PUBLIC -DPB_FIELD_16BIT +) + +target_include_directories( + protobuf-nanopb + INTERFACE $ +) + + +enable_testing() include(CompilerSetup) # Superbuild installed results diff --git a/Firestore/Protos/CMakeLists.txt b/Firestore/Protos/CMakeLists.txt index fdf45e7..214c15f 100644 --- a/Firestore/Protos/CMakeLists.txt +++ b/Firestore/Protos/CMakeLists.txt @@ -53,13 +53,6 @@ cc_library( protobuf-nanopb ) -target_compile_definitions( - 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 diff --git a/Firestore/core/src/firebase/firestore/local/CMakeLists.txt b/Firestore/core/src/firebase/firestore/local/CMakeLists.txt index 5a47187..f1c65c4 100644 --- a/Firestore/core/src/firebase/firestore/local/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/local/CMakeLists.txt @@ -22,6 +22,9 @@ cc_library( local_serializer.h local_serializer.cc DEPENDS + # TODO(b/111328563) Force nanopb first to work around ODR violations + protobuf-nanopb + LevelDB::LevelDB absl_strings firebase_firestore_model @@ -29,5 +32,4 @@ cc_library( firebase_firestore_protos_nanopb firebase_firestore_remote firebase_firestore_util - protobuf-nanopb ) diff --git a/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt b/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt index fd34c2e..0471b1c 100644 --- a/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt @@ -21,7 +21,9 @@ cc_library( writer.h writer.cc DEPENDS + # TODO(b/111328563) Force nanopb first to work around ODR violations + protobuf-nanopb + firebase_firestore_util firebase_firestore_protos_nanopb - protobuf-nanopb ) diff --git a/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt b/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt index a2bdbe2..af62ab1 100644 --- a/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/remote/CMakeLists.txt @@ -22,10 +22,12 @@ cc_library( serializer.h serializer.cc DEPENDS + # TODO(b/111328563) Force nanopb first to work around ODR violations + protobuf-nanopb + firebase_firestore_model firebase_firestore_nanopb firebase_firestore_protos_nanopb firebase_firestore_util grpc::grpc - protobuf-nanopb ) diff --git a/Firestore/third_party/abseil-cpp/CMakeLists.txt b/Firestore/third_party/abseil-cpp/CMakeLists.txt index 4b939fa..7318cd3 100644 --- a/Firestore/third_party/abseil-cpp/CMakeLists.txt +++ b/Firestore/third_party/abseil-cpp/CMakeLists.txt @@ -76,14 +76,14 @@ endif() ## check targets if(BUILD_TESTING) - check_target(GTest::GTest) - check_target(GTest::Main) - check_target(GMock::GMock) + check_target(gtest) + check_target(gtest_main) + check_target(gmock) list(APPEND ABSL_TEST_COMMON_LIBRARIES - GTest::GTest - GTest::Main - GMock::GMock + gtest_main + gtest + gmock ${CMAKE_THREAD_LIBS_INIT} ) endif() diff --git a/cmake/FindGMock.cmake b/cmake/FindGMock.cmake deleted file mode 100644 index 76ce227..0000000 --- a/cmake/FindGMock.cmake +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2018 Google -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -include(FindPackageHandleStandardArgs) - -find_path( - GMOCK_INCLUDE_DIR gmock/gmock.h - HINTS ${FIREBASE_INSTALL_DIR}/include -) - -find_library( - GMOCK_LIBRARY - NAMES gmock - HINTS ${FIREBASE_INSTALL_DIR}/lib -) - -find_package_handle_standard_args( - gmock - DEFAULT_MSG - GMOCK_INCLUDE_DIR - GMOCK_LIBRARY -) - -if(GMOCK_FOUND) - set(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR}) - set(GMOCK_LIBRARIES ${GMOCK_LIBRARY}) - - if (NOT TARGET GMock::GMock) - add_library(GMock::GMock UNKNOWN IMPORTED) - set_target_properties( - GMock::GMock PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIRS} - IMPORTED_LOCATION ${GMOCK_LIBRARY} - ) - endif() -endif(GMOCK_FOUND) diff --git a/cmake/external/googletest.cmake b/cmake/external/googletest.cmake index e2ebafc..32e9a39 100644 --- a/cmake/external/googletest.cmake +++ b/cmake/external/googletest.cmake @@ -28,8 +28,8 @@ ExternalProject_Add( PREFIX ${PROJECT_BINARY_DIR} - CMAKE_CACHE_ARGS - -DCMAKE_INSTALL_PREFIX:STRING=${FIREBASE_INSTALL_DIR} - + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" TEST_COMMAND "" ) diff --git a/cmake/external/nanopb.cmake b/cmake/external/nanopb.cmake index b341c36..50faa06 100644 --- a/cmake/external/nanopb.cmake +++ b/cmake/external/nanopb.cmake @@ -23,8 +23,6 @@ set(NANOPB_PROTOC_BIN ${FIREBASE_INSTALL_DIR}/bin/protoc) ExternalProject_Add( nanopb - DEPENDS - protobuf DOWNLOAD_DIR ${FIREBASE_DOWNLOAD_DIR} URL https://github.com/nanopb/nanopb/archive/nanopb-0.3.9.1.tar.gz @@ -32,12 +30,8 @@ ExternalProject_Add( PREFIX ${PROJECT_BINARY_DIR} - CMAKE_ARGS - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX:STRING=${FIREBASE_INSTALL_DIR} - -DBUILD_SHARED_LIBS:BOOL=OFF - -Dnanopb_BUILD_GENERATOR:BOOL=ON - -Dnanopb_PROTOC_PATH:STRING=${NANOPB_PROTOC_BIN} - + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" TEST_COMMAND "" ) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 1c3cbd6..7d32624 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -89,3 +89,15 @@ function(add_objc_flags target) ) endif() endfunction() + +# add_alias(alias_target actual_target) +# +# Adds a library alias target `alias_target` if it does not already exist, +# aliasing to the given `actual_target` target. This allows library dependencies +# to be specified uniformly in terms of the targets found in various +# find_package modules even if the library is being built internally. +function(add_alias ALIAS_TARGET ACTUAL_TARGET) + if(NOT TARGET ${ALIAS_TARGET}) + add_library(${ALIAS_TARGET} ALIAS ${ACTUAL_TARGET}) + endif() +endfunction() -- cgit v1.2.3