Skip to content
This repository was archived by the owner on Dec 8, 2021. It is now read-only.

Commit 2d636ed

Browse files
authored
ci: make super build configuration more consistent (#107)
Some CMake configuration options were not consistently used in the super build, including `CMAKE_BUILD_TYPE`, `BUILD_SHARED_LIBS`, `CMAKE_CXX_COMPILER`, and `CMAKE_C_COMPILER`. In this change I refactored all of these parameters to a function and pass them to each sub-project. I also made some cosmetic changes as I am planning to use these files as templates for all the other repositories.
1 parent 38cf1df commit 2d636ed

File tree

10 files changed

+60
-72
lines changed

10 files changed

+60
-72
lines changed

ci/kokoro/docker/build.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ elif [[ "${BUILD_NAME}" = "ubsan" ]]; then
103103
in_docker_script="ci/kokoro/docker/build-in-docker-bazel.sh"
104104
elif [[ "${BUILD_NAME}" = "cmake-super" ]]; then
105105
export CMAKE_SOURCE_DIR="super"
106+
export BUILD_TYPE=Release
107+
export CMAKE_FLAGS=-DBUILD_SHARED_LIBS=ON
106108
# Note that the integration tests are run by default. This is the opposite of
107109
# what spanner does where RUN_INTEGRATION_TESTS is explicitly set to yes.
108110
export RUN_INTEGRATION_TESTS="no"

super/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,15 @@ include(external/googleapis)
2828
include(external/googletest)
2929

3030
include(ExternalProjectHelper)
31-
set_external_project_prefix_vars()
32-
3331
set_external_project_build_parallel_level(PARALLEL)
32+
set_external_project_vars()
3433

35-
set(GOOGLE_CLOUD_CPP_DEPENDENCIES_LIST grpc_project googleapis_project
36-
googletest_project)
34+
set(GOOGLE_CLOUD_CPP_DEPENDENCIES_LIST grpc-project googleapis-project
35+
googletest-project)
3736

3837
include(ExternalProject)
3938
ExternalProject_Add(
40-
google_cloud_cpp_project
39+
google-cloud-cpp-project
4140
DEPENDS ${GOOGLE_CLOUD_CPP_DEPENDENCIES_LIST}
4241
EXCLUDE_FROM_ALL OFF
4342
PREFIX "${CMAKE_BINARY_DIR}/build/google-cloud-cpp"
@@ -46,7 +45,7 @@ ExternalProject_Add(
4645
SOURCE_DIR
4746
"${GOOGLE_CLOUD_CPP_ROOT}"
4847
LIST_SEPARATOR |
49-
CMAKE_ARGS -G${CMAKE_GENERATOR}
48+
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
5049
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
5150
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
5251
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>

super/ExternalProjectHelper.cmake

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function (set_external_project_build_parallel_level var_name)
4343
endif ()
4444
endfunction ()
4545

46-
function (set_external_project_prefix_vars)
46+
function (set_external_project_vars)
4747
set(GOOGLE_CLOUD_CPP_INSTALL_RPATH "<INSTALL_DIR>/lib;<INSTALL_DIR>/lib64")
4848

4949
# On Linux, using an RPATH that is neither an absolute or relative path is
@@ -54,6 +54,17 @@ function (set_external_project_prefix_vars)
5454
"\\\$ORIGIN/../lib;\\\$ORIGIN/../lib64")
5555
endif ()
5656

57+
set(GOOGLE_CLOUD_CPP_PREFIX_PATH
58+
"${CMAKE_PREFIX_PATH}" "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
59+
"<INSTALL_DIR>")
60+
61+
set(GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS
62+
${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
63+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
64+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
65+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
66+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS})
67+
5768
# When passing a semi-colon delimited list to ExternalProject_Add, we need
5869
# to escape the semi-colon. Quoting does not work and escaping the semi-
5970
# colon does not seem to work (see https://reviews.llvm.org/D40257). A
@@ -64,15 +75,17 @@ function (set_external_project_prefix_vars)
6475
# character in CMake.
6576
string(REPLACE ";" "|" GOOGLE_CLOUD_CPP_INSTALL_RPATH
6677
"${GOOGLE_CLOUD_CPP_INSTALL_RPATH}")
67-
68-
set(GOOGLE_CLOUD_CPP_PREFIX_PATH "${CMAKE_PREFIX_PATH};<INSTALL_DIR>")
6978
string(REPLACE ";" "|" GOOGLE_CLOUD_CPP_PREFIX_PATH
7079
"${GOOGLE_CLOUD_CPP_PREFIX_PATH}")
7180

81+
set(GOOGLE_CLOUD_CPP_INSTALL_RPATH
82+
"${GOOGLE_CLOUD_CPP_INSTALL_RPATH}"
83+
PARENT_SCOPE)
7284
set(GOOGLE_CLOUD_CPP_PREFIX_PATH
7385
"${GOOGLE_CLOUD_CPP_PREFIX_PATH}"
7486
PARENT_SCOPE)
75-
set(GOOGLE_CLOUD_CPP_PREFIX_RPATH
76-
"${GOOGLE_CLOUD_CPP_PREFIX_RPATH}"
87+
set(GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS
88+
"${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}"
7789
PARENT_SCOPE)
90+
7891
endfunction ()

super/external/c-ares.cmake

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
include(ExternalProjectHelper)
1818

19-
if (NOT TARGET c_ares_project)
19+
if (NOT TARGET c-ares-project)
2020
# Give application developers a hook to configure the version and hash
2121
# downloaded from GitHub.
2222
set(GOOGLE_CLOUD_CPP_C_ARES_URL
@@ -25,23 +25,20 @@ if (NOT TARGET c_ares_project)
2525
"62dd12f0557918f89ad6f5b759f0bf4727174ae9979499f5452c02be38d9d3e8")
2626

2727
set_external_project_build_parallel_level(PARALLEL)
28-
29-
set_external_project_prefix_vars()
28+
set_external_project_vars()
3029

3130
include(ExternalProject)
3231
ExternalProject_Add(
33-
c_ares_project
32+
c-ares-project
3433
EXCLUDE_FROM_ALL ON
3534
PREFIX "${CMAKE_BINARY_DIR}/external/c-ares"
3635
INSTALL_DIR "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
3736
URL ${GOOGLE_CLOUD_CPP_C_ARES_URL}
3837
URL_HASH SHA256=${GOOGLE_CLOUD_CPP_C_ARES_SHA256}
3938
LIST_SEPARATOR |
40-
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
41-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
42-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
43-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
39+
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
4440
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
41+
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
4542
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
4643
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> ${PARALLEL}
4744
LOG_DOWNLOAD ON

super/external/googleapis.cmake

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ find_package(Threads REQUIRED)
1919

2020
include(external/grpc)
2121

22-
if (NOT TARGET googleapis_project)
22+
if (NOT TARGET googleapis-project)
2323
# Give application developers a hook to configure the version and hash
2424
# downloaded from GitHub.
2525
set(GOOGLE_CLOUD_CPP_GOOGLEAPIS_URL
@@ -28,13 +28,12 @@ if (NOT TARGET googleapis_project)
2828
"f1443a10c545114b19fe9dc352568cb03b588813b12cc5db8780b64ae9a09ce1")
2929

3030
set_external_project_build_parallel_level(PARALLEL)
31-
32-
set_external_project_prefix_vars()
31+
set_external_project_vars()
3332

3433
include(ExternalProject)
3534
ExternalProject_Add(
36-
googleapis_project
37-
DEPENDS grpc_project
35+
googleapis-project
36+
DEPENDS grpc-project
3837
EXCLUDE_FROM_ALL ON
3938
PREFIX "${CMAKE_BINARY_DIR}/external/googleapis"
4039
INSTALL_DIR "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
@@ -44,14 +43,10 @@ if (NOT TARGET googleapis_project)
4443
CONFIGURE_COMMAND
4544
${CMAKE_COMMAND}
4645
-G${CMAKE_GENERATOR}
47-
${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
48-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
49-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
50-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
51-
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
52-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
46+
${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
5347
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
5448
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
49+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
5550
-H<SOURCE_DIR>
5651
-B<BINARY_DIR>
5752
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> ${PARALLEL}

super/external/googletest.cmake

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
include(ExternalProjectHelper)
1818

19-
if (NOT TARGET googletest_project)
19+
if (NOT TARGET googletest-project)
2020
# Give application developers a hook to configure the version and hash
2121
# downloaded from GitHub.
2222
set(GOOGLE_CLOUD_CPP_GOOGLETEST_URL
@@ -25,24 +25,20 @@ if (NOT TARGET googletest_project)
2525
"9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb")
2626

2727
set_external_project_build_parallel_level(PARALLEL)
28-
29-
set_external_project_prefix_vars()
28+
set_external_project_vars()
3029

3130
include(ExternalProject)
3231
ExternalProject_Add(
33-
googletest_project
32+
googletest-project
3433
EXCLUDE_FROM_ALL ON
3534
PREFIX "${CMAKE_BINARY_DIR}/external/googletest"
3635
INSTALL_DIR "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
3736
URL ${GOOGLE_CLOUD_CPP_GOOGLETEST_URL}
3837
URL_HASH SHA256=${GOOGLE_CLOUD_CPP_GOOGLETEST_SHA256}
3938
LIST_SEPARATOR |
40-
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
41-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
42-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
43-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
44-
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
39+
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
4540
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
41+
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
4642
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
4743
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> ${PARALLEL}
4844
LOG_DOWNLOAD ON

super/external/grpc.cmake

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ include(external/c-ares)
1919
include(external/ssl)
2020
include(external/protobuf)
2121

22-
if (NOT TARGET grpc_project)
22+
if (NOT TARGET grpc-project)
2323
# Give application developers a hook to configure the version and hash
2424
# downloaded from GitHub.
2525
set(GOOGLE_CLOUD_CPP_GRPC_URL
@@ -28,27 +28,22 @@ if (NOT TARGET grpc_project)
2828
"c84b3fa140fcd6cce79b3f9de6357c5733a0071e04ca4e65ba5f8d306f10f033")
2929

3030
set_external_project_build_parallel_level(PARALLEL)
31-
32-
set_external_project_prefix_vars()
31+
set_external_project_vars()
3332

3433
include(ExternalProject)
3534
ExternalProject_Add(
36-
grpc_project
37-
DEPENDS c_ares_project protobuf_project ssl_project
35+
grpc-project
36+
DEPENDS c-ares-project protobuf-project ssl-project
3837
EXCLUDE_FROM_ALL ON
3938
PREFIX "${CMAKE_BINARY_DIR}/external/grpc"
4039
INSTALL_DIR "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
4140
URL ${GOOGLE_CLOUD_CPP_GRPC_URL}
4241
URL_HASH SHA256=${GOOGLE_CLOUD_CPP_GRPC_SHA256}
4342
LIST_SEPARATOR |
44-
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
45-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
46-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
47-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
48-
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
43+
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
4944
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
50-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
5145
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
46+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
5247
-DgRPC_BUILD_TESTS=OFF
5348
-DgRPC_ZLIB_PROVIDER=package
5449
-DgRPC_SSL_PROVIDER=package

super/external/protobuf.cmake

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ find_package(Threads REQUIRED)
1919
include(ExternalProjectHelper)
2020
include(external/zlib)
2121

22-
if (NOT TARGET protobuf_project)
22+
if (NOT TARGET protobuf-project)
2323
# Give application developers a hook to configure the version and hash
2424
# downloaded from GitHub.
2525
set(GOOGLE_CLOUD_CPP_PROTOBUF_URL
@@ -28,13 +28,12 @@ if (NOT TARGET protobuf_project)
2828
"98e615d592d237f94db8bf033fba78cd404d979b0b70351a9e5aaff725398357")
2929

3030
set_external_project_build_parallel_level(PARALLEL)
31-
32-
set_external_project_prefix_vars()
31+
set_external_project_vars()
3332

3433
include(ExternalProject)
3534
ExternalProject_Add(
36-
protobuf_project
37-
DEPENDS zlib_project
35+
protobuf-project
36+
DEPENDS zlib-project
3837
EXCLUDE_FROM_ALL ON
3938
PREFIX "${CMAKE_BINARY_DIR}/external/protobuf"
4039
INSTALL_DIR "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
@@ -44,14 +43,10 @@ if (NOT TARGET protobuf_project)
4443
CONFIGURE_COMMAND
4544
${CMAKE_COMMAND}
4645
-G${CMAKE_GENERATOR}
47-
${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
48-
-DCMAKE_BUILD_TYPE=Debug
49-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
50-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
51-
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
52-
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
46+
${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
5347
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
5448
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
49+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
5550
# Protobuf installs using `CMAKE_INSTALL_LIBDIR`, as it should,
5651
# which expands to `lib` or `lib64`. But hard-codes RPATH to
5752
# `$ORIGIN/../lib`, so change the default `LIBDIR` to something that

super/external/ssl.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
# limitations under the License.
1515
# ~~~
1616

17-
if (NOT TARGET ssl_project)
17+
if (NOT TARGET ssl-project)
1818
# For OpenSSL we don't really support external projects. OpenSSL build
1919
# system is notoriously finicky. Use vcpkg on Windows, or install OpenSSL
2020
# using your operating system packages instead.
2121
#
2222
# This file is here to simplify the definition of external projects, such as
2323
# curl and gRPC, that depend on a SSL library.
24-
add_custom_target(ssl_project)
2524
find_package(OpenSSL REQUIRED)
25+
add_custom_target(ssl-project)
2626
endif ()

super/external/zlib.cmake

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# limitations under the License.
1515
# ~~~
1616

17-
if (NOT TARGET zlib_project)
17+
if (NOT TARGET zlib-project)
1818
# Give application developers a hook to configure the version and hash
1919
# downloaded from GitHub.
2020
set(GOOGLE_CLOUD_CPP_ZLIB_URL
@@ -23,24 +23,20 @@ if (NOT TARGET zlib_project)
2323
"629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff")
2424

2525
set_external_project_build_parallel_level(PARALLEL)
26-
27-
set_external_project_prefix_vars()
26+
set_external_project_vars()
2827

2928
include(ExternalProject)
3029
ExternalProject_Add(
31-
zlib_project
30+
zlib-project
3231
EXCLUDE_FROM_ALL ON
3332
PREFIX "${CMAKE_BINARY_DIR}/external/zlib"
3433
INSTALL_DIR "${GOOGLE_CLOUD_CPP_EXTERNAL_PREFIX}"
3534
URL ${GOOGLE_CLOUD_CPP_ZLIB_URL}
3635
URL_HASH SHA256=${GOOGLE_CLOUD_CPP_ZLIB_SHA256}
3736
LIST_SEPARATOR |
38-
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CCACHE}
39-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
40-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
41-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
42-
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
37+
CMAKE_ARGS ${GOOGLE_CLOUD_CPP_EXTERNAL_PROJECT_CMAKE_FLAGS}
4338
-DCMAKE_PREFIX_PATH=${GOOGLE_CLOUD_CPP_PREFIX_PATH}
39+
-DCMAKE_INSTALL_RPATH=${GOOGLE_CLOUD_CPP_INSTALL_RPATH}
4440
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
4541
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> ${PARALLEL}
4642
LOG_DOWNLOAD ON

0 commit comments

Comments
 (0)