aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gil <mcg@google.com>2018-07-11 19:32:24 -0700
committerGravatar GitHub <noreply@github.com>2018-07-11 19:32:24 -0700
commit49f2493e14cd68ecc0e08ad2d9fc75739e419a3b (patch)
tree1efb74a4526545ce5514cbe4d5a0a778ed1adbae
parent09c75c4fb8269d74ccfdfaccb36ea9f7519efdb5 (diff)
Convert the gRPC external build to use an HTTP download (#1520)
* Add a download-only boringssl ExternalProject Match boringssl version to grpc submodule version * 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
-rw-r--r--cmake/ExternalProjectFlags.cmake71
-rw-r--r--cmake/external/boringssl.cmake46
-rw-r--r--cmake/external/grpc.cmake45
3 files changed, 76 insertions, 86 deletions
diff --git a/cmake/ExternalProjectFlags.cmake b/cmake/ExternalProjectFlags.cmake
deleted file mode 100644
index ed4db2c..0000000
--- a/cmake/ExternalProjectFlags.cmake
+++ /dev/null
@@ -1,71 +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(CMakeParseArguments)
-
-# Assemble the git-related arguments to an external project making use of the
-# latest features where available but avoiding them when run under CMake
-# versions that don't support them.
-#
-# The complete set of git-related arguments are stored as a list in the
-# variable named by RESULT_VAR in the calling scope.
-#
-# Currently this handles:
-# * GIT_SUBMODULES -- added on CMake 3.0 or later. Earlier CMakes will
-# check out all submodules.
-# * GIT_SHALLOW -- added by default on CMake 3.6 or later. Disable by passing
-# GIT_SHALLOW OFF
-# * GIT_PROGRESS -- added by default on CMake 3.8 or later. Disable by
-# passing GIT_PROGRESS OFF
-function(ExternalProject_GitSource RESULT_VAR)
- # Parse arguments
- set(options "")
- set(single_value GIT_REPOSITORY GIT_TAG GIT_PROGRESS GIT_SHALLOW)
- set(multi_value GIT_SUBMODULES)
- cmake_parse_arguments(EP "${options}" "${single_value}" "${multi_value}" ${ARGN})
-
- set(
- result
- GIT_REPOSITORY ${EP_GIT_REPOSITORY}
- GIT_TAG ${EP_GIT_TAG}
- ${EP_UNPARSED_ARGUMENTS}
- )
-
- # CMake 3.0 added support for constraining the set of submodules to clone
- if(NOT (CMAKE_VERSION VERSION_LESS "3.0") AND EP_GIT_SUBMODULES)
- list(APPEND result GIT_SUBMODULES ${EP_GIT_SUBMODULES})
- endif()
-
- # CMake 3.6 added support for shallow git clones. Use a shallow clone if
- # available
- if(NOT (CMAKE_VERSION VERSION_LESS "3.6"))
- if(NOT EP_GIT_SHALLOW)
- set(EP_GIT_SHALLOW ON)
- endif()
-
- list(APPEND result GIT_SHALLOW ${EP_GIT_SHALLOW})
- endif()
-
- # CMake 3.8 added support for showing progress for large downloads
- if(NOT (CMAKE_VERSION VERSION_LESS "3.8"))
- if(NOT EP_GIT_PROGRESS)
- set(EP_GIT_PROGRESS ON)
- endif()
-
- list(APPEND result GIT_PROGRESS ${EP_GIT_PROGRESS})
- endif()
-
- set(${RESULT_VAR} ${result} PARENT_SCOPE)
-
-endfunction()
diff --git a/cmake/external/boringssl.cmake b/cmake/external/boringssl.cmake
new file mode 100644
index 0000000..4463ba8
--- /dev/null
+++ b/cmake/external/boringssl.cmake
@@ -0,0 +1,46 @@
+# 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(ExternalProject)
+
+if(TARGET boringssl)
+ return()
+endif()
+
+# This ExternalProject unpacks itself inside the gRPC source tree. CMake clears
+# the SOURCE_DIR when unpacking so this must come after grpc despite the fact
+# that grpc logically depends upon this.
+
+# This matches grpc at v1.8.3:
+# https://github.com/grpc/grpc/tree/v1.8.3/third_party
+set(commit be2ee342d3781ddb954f91f8a7e660c6f59e87e5)
+
+ExternalProject_Add(
+ boringssl
+ DEPENDS
+ grpc-download
+
+ DOWNLOAD_DIR ${FIREBASE_DOWNLOAD_DIR}
+ DOWNLOAD_NAME boringssl-${commit}.tar.gz
+ URL https://github.com/google/boringssl/archive/${commit}.tar.gz
+ URL_HASH SHA256=8b9f399b8948ab36d51b5b979b208fdf4197e244a516e08d3ed3a9fbb387d463
+
+ PREFIX ${PROJECT_BINARY_DIR}
+ SOURCE_DIR ${PROJECT_BINARY_DIR}/src/grpc/third_party/boringssl
+
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ""
+ TEST_COMMAND ""
+)
diff --git a/cmake/external/grpc.cmake b/cmake/external/grpc.cmake
index d35eb15..310d238 100644
--- a/cmake/external/grpc.cmake
+++ b/cmake/external/grpc.cmake
@@ -13,7 +13,6 @@
# limitations under the License.
include(ExternalProject)
-include(ExternalProjectFlags)
include(external/c-ares)
include(external/protobuf)
include(external/zlib)
@@ -30,14 +29,10 @@ if(GRPC_ROOT)
endif()
set(
- GIT_SUBMODULES
- third_party/boringssl
-)
-
-set(
CMAKE_ARGS
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DBUILD_SHARED_LIBS:BOOL=OFF
+ -DgRPC_INSTALL:BOOL=OFF
-DgRPC_BUILD_TESTS:BOOL=OFF
# TODO(rsgowman): We're currently building nanopb twice; once via grpc, and
@@ -105,23 +100,43 @@ if(ZLIB_FOUND)
endif()
-ExternalProject_GitSource(
- GRPC_GIT
- GIT_REPOSITORY "https://github.com/grpc/grpc.git"
- GIT_TAG "v1.8.3"
- GIT_SUBMODULES ${GIT_SUBMODULES}
-)
-
ExternalProject_Add(
- grpc
+ grpc-download
DEPENDS
c-ares
protobuf
zlib
- ${GRPC_GIT}
+ DOWNLOAD_DIR ${FIREBASE_DOWNLOAD_DIR}
+ DOWNLOAD_NAME grpc-1.8.3.tar.gz
+ URL https://github.com/grpc/grpc/archive/v1.8.3.tar.gz
+ URL_HASH SHA256=c14bceddc6475a09927a815811a8161cdfa7acb445262835da6bc24da9842c92
+
+ PREFIX ${PROJECT_BINARY_DIR}
+ SOURCE_DIR ${PROJECT_BINARY_DIR}/src/grpc
+
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ TEST_COMMAND ""
+ INSTALL_COMMAND ""
+)
+
+# gRPC depends upon these projects, so from an IWYU point of view should
+# include these files. Unfortunately gRPC's build requires these to be
+# subdirectories in its own source tree and CMake's ExternalProject download
+# step clears the source tree so these must be declared to depend upon the grpc
+# target. ExternalProject dependencies must already exist when declared so
+# these must come after the ExternalProject_Add block above.
+include(external/boringssl)
+
+ExternalProject_Add(
+ grpc
+ DEPENDS
+ boringssl
+ grpc-download
PREFIX ${PROJECT_BINARY_DIR}
+ SOURCE_DIR ${PROJECT_BINARY_DIR}/src/grpc
CMAKE_ARGS
${CMAKE_ARGS}