aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gil <mcg@google.com>2018-07-13 11:09:44 -0700
committerGravatar GitHub <noreply@github.com>2018-07-13 11:09:44 -0700
commitfb9f24eaee4c57d09ec0dca32abff840b39f7c7e (patch)
tree95bde20bd905b2a2647ff60c09435526070cac9a
parent855a7665aef505db456aa1c6f1cb9ea2b68056da (diff)
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.
-rw-r--r--Firestore/CMakeLists.txt43
-rw-r--r--Firestore/Protos/CMakeLists.txt7
-rw-r--r--Firestore/core/src/firebase/firestore/local/CMakeLists.txt4
-rw-r--r--Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt4
-rw-r--r--Firestore/core/src/firebase/firestore/remote/CMakeLists.txt4
-rw-r--r--Firestore/third_party/abseil-cpp/CMakeLists.txt12
-rw-r--r--cmake/FindGMock.cmake47
-rw-r--r--cmake/external/googletest.cmake6
-rw-r--r--cmake/external/nanopb.cmake12
-rw-r--r--cmake/utils.cmake12
10 files changed, 71 insertions, 80 deletions
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 $<BUILD_INTERFACE:${FIREBASE_BINARY_DIR}/src/nanopb>
+)
+
+
+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()