diff options
-rw-r--r-- | cmake/benchmark.cmake | 5 | ||||
-rw-r--r-- | cmake/cares.cmake | 5 | ||||
-rw-r--r-- | cmake/gflags.cmake | 14 | ||||
-rw-r--r-- | cmake/protobuf.cmake | 13 | ||||
-rw-r--r-- | cmake/zlib.cmake | 15 | ||||
-rw-r--r-- | templates/CMakeLists.txt.template | 35 |
6 files changed, 51 insertions, 36 deletions
diff --git a/cmake/benchmark.cmake b/cmake/benchmark.cmake index c6284225a3..753dc0696f 100644 --- a/cmake/benchmark.cmake +++ b/cmake/benchmark.cmake @@ -20,14 +20,17 @@ if("${gRPC_BENCHMARK_PROVIDER}" STREQUAL "module") add_subdirectory(${BENCHMARK_ROOT_DIR} third_party/benchmark) if(TARGET benchmark) set(_gRPC_BENCHMARK_LIBRARIES benchmark) + set(_gRPC_BENCHMARK_INCLUDE_DIR "${BENCHMARK_ROOT_DIR}/include") endif() else() message(WARNING "gRPC_BENCHMARK_PROVIDER is \"module\" but BENCHMARK_ROOT_DIR is wrong") endif() elseif("${gRPC_BENCHMARK_PROVIDER}" STREQUAL "package") - find_package(benchmark) + find_package(benchmark REQUIRED) if(TARGET benchmark::benchmark) set(_gRPC_BENCHMARK_LIBRARIES benchmark::benchmark) + # extract the include dir from target's properties + get_target_property(_gRPC_BENCHMARK_INCLUDE_DIR benchmark::benchmark INTERFACE_INCLUDE_DIRECTORIES) endif() set(_gRPC_FIND_BENCHMARK "if(NOT benchmark_FOUND)\n find_package(benchmark)\nendif()") endif() diff --git a/cmake/cares.cmake b/cmake/cares.cmake index 521cf52e77..53d7582f6f 100644 --- a/cmake/cares.cmake +++ b/cmake/cares.cmake @@ -18,11 +18,13 @@ if("${gRPC_CARES_PROVIDER}" STREQUAL "module") endif() set(CARES_SHARED OFF CACHE BOOL "disable shared library") set(CARES_STATIC ON CACHE BOOL "link cares statically") - set(CARES_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/cares/cares") add_subdirectory(third_party/cares/cares) + if(TARGET c-ares) set(_gRPC_CARES_LIBRARIES c-ares) + set(_gRPC_CARES_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/cares/cares" "${CMAKE_CURRENT_BINARY_DIR}/third_party/cares/cares") endif() + if(gRPC_INSTALL) message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_CARES_PROVIDER is \"module\"") set(gRPC_INSTALL FALSE) @@ -31,6 +33,7 @@ elseif("${gRPC_CARES_PROVIDER}" STREQUAL "package") find_package(c-ares REQUIRED CONFIG) if(TARGET c-ares::cares) set(_gRPC_CARES_LIBRARIES c-ares::cares) + set(_gRPC_CARES_INCLUDE_DIR ${c-ares_INCLUDE_DIR}) endif() set(_gRPC_FIND_CARES "if(NOT c-ares_FOUND)\n find_package(c-ares CONFIG)\nendif()") endif() diff --git a/cmake/gflags.cmake b/cmake/gflags.cmake index 1864bda357..f86a141c1d 100644 --- a/cmake/gflags.cmake +++ b/cmake/gflags.cmake @@ -17,17 +17,19 @@ if("${gRPC_GFLAGS_PROVIDER}" STREQUAL "module") set(GFLAGS_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gflags) endif() if(EXISTS "${GFLAGS_ROOT_DIR}/CMakeLists.txt") - add_subdirectory(${GFLAGS_ROOT_DIR} third_party/gflags) - if(TARGET gflags_static) - set(_gRPC_GFLAGS_LIBRARIES gflags_static) - endif() + add_subdirectory(${GFLAGS_ROOT_DIR} third_party/gflags) + if(TARGET gflags_static) + set(_gRPC_GFLAGS_LIBRARIES gflags_static) + set(_gRPC_GFLAGS_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include") + endif() else() - message(WARNING "gRPC_GFLAGS_PROVIDER is \"module\" but GFLAGS_ROOT_DIR is wrong") + message(WARNING "gRPC_GFLAGS_PROVIDER is \"module\" but GFLAGS_ROOT_DIR is wrong") endif() elseif("${gRPC_GFLAGS_PROVIDER}" STREQUAL "package") - find_package(gflags) + find_package(gflags REQUIRED) if(TARGET gflags::gflags) set(_gRPC_GFLAGS_LIBRARIES gflags::gflags) + set(_gRPC_GFLAGS_INCLUDE_DIR ${GFLAGS_INCLUDE_DIR}) endif() set(_gRPC_FIND_GFLAGS "if(NOT gflags_FOUND)\n find_package(gflags)\nendif()") endif() diff --git a/cmake/protobuf.cmake b/cmake/protobuf.cmake index e2206a2319..fccabd455a 100644 --- a/cmake/protobuf.cmake +++ b/cmake/protobuf.cmake @@ -27,7 +27,7 @@ if("${gRPC_PROTOBUF_PROVIDER}" STREQUAL "module") if(NOT PROTOBUF_ROOT_DIR) set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/protobuf) endif() - set(PROTOBUF_WELLKNOWN_IMPORT_DIR ${PROTOBUF_ROOT_DIR}/src) + if(EXISTS "${PROTOBUF_ROOT_DIR}/cmake/CMakeLists.txt") set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries") add_subdirectory(${PROTOBUF_ROOT_DIR}/cmake third_party/protobuf) @@ -41,6 +41,9 @@ if("${gRPC_PROTOBUF_PROVIDER}" STREQUAL "module") set(_gRPC_PROTOBUF_PROTOC protoc) set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>) endif() + set(_gRPC_PROTOBUF_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}") + # For well-known .proto files distributed with protobuf + set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src") else() message(WARNING "gRPC_PROTOBUF_PROVIDER is \"module\" but PROTOBUF_ROOT_DIR is wrong") endif() @@ -58,8 +61,11 @@ elseif("${gRPC_PROTOBUF_PROVIDER}" STREQUAL "package") endif() if(TARGET protobuf::libprotoc) set(_gRPC_PROTOBUF_PROTOC_LIBRARIES protobuf::libprotoc) + # extract the include dir from target's properties + get_target_property(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR protobuf::libprotoc INTERFACE_INCLUDE_DIRECTORIES) else() set(_gRPC_PROTOBUF_PROTOC_LIBRARIES ${PROTOBUF_PROTOC_LIBRARIES}) + set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIRS}) endif() if(TARGET protobuf::protoc) set(_gRPC_PROTOBUF_PROTOC protobuf::protoc) @@ -68,10 +74,7 @@ elseif("${gRPC_PROTOBUF_PROVIDER}" STREQUAL "package") set(_gRPC_PROTOBUF_PROTOC ${PROTOBUF_PROTOC_EXECUTABLE}) set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}) endif() + set(_gRPC_PROTOBUF_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIRS}) set(_gRPC_FIND_PROTOBUF "if(NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND)\n find_package(Protobuf ${gRPC_PROTOBUF_PACKAGE_TYPE})\nendif()") endif() - if(PROTOBUF_FOUND) - include_directories(${PROTOBUF_INCLUDE_DIRS}) - endif() - set(PROTOBUF_WELLKNOWN_IMPORT_DIR /usr/local/include) endif() diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index 16cd9e66d5..4a9d2f011b 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -16,15 +16,15 @@ if("${gRPC_ZLIB_PROVIDER}" STREQUAL "module") if(NOT ZLIB_ROOT_DIR) set(ZLIB_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zlib) endif() - set(ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}") if(EXISTS "${ZLIB_ROOT_DIR}/CMakeLists.txt") - # TODO(jtattermusch): workaround for https://github.com/madler/zlib/issues/218 - include_directories(${ZLIB_INCLUDE_DIR}) + # TODO(jtattermusch): workaround for https://github.com/madler/zlib/issues/218 + include_directories("${ZLIB_ROOT_DIR}") + add_subdirectory(${ZLIB_ROOT_DIR} third_party/zlib) - add_subdirectory(${ZLIB_ROOT_DIR} third_party/zlib) - if(TARGET zlibstatic) - set(_gRPC_ZLIB_LIBRARIES zlibstatic) - endif() + if(TARGET zlibstatic) + set(_gRPC_ZLIB_LIBRARIES zlibstatic) + set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib") + endif() else() message(WARNING "gRPC_ZLIB_PROVIDER is \"module\" but ZLIB_ROOT_DIR is wrong") endif() @@ -35,5 +35,6 @@ if("${gRPC_ZLIB_PROVIDER}" STREQUAL "module") elseif("${gRPC_ZLIB_PROVIDER}" STREQUAL "package") find_package(ZLIB REQUIRED) set(_gRPC_ZLIB_LIBRARIES ${ZLIB_LIBRARIES}) + set(_gRPC_ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIRS}) set(_gRPC_FIND_ZLIB "if(NOT ZLIB_FOUND)\n find_package(ZLIB)\nendif()") endif() diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template index 8de0ccde82..de0f2eb328 100644 --- a/templates/CMakeLists.txt.template +++ b/templates/CMakeLists.txt.template @@ -48,7 +48,10 @@ deps.append("${_gRPC_CARES_LIBRARIES}") deps.append("${_gRPC_ALLTARGETS_LIBRARIES}") for d in target_dict.get('deps', []): - deps.append(d) + if d == 'benchmark': + deps.append("${_gRPC_BENCHMARK_LIBRARIES}") + else: + deps.append(d) if target_dict.build == 'test' and target_dict.language == 'c++': deps.append("${_gRPC_GFLAGS_LIBRARIES}") return deps @@ -90,6 +93,10 @@ set(gRPC_INSTALL <%text>${gRPC_INSTALL_default}</%text> CACHE BOOL "Generate installation target: gRPC_ZLIB_PROVIDER, gRPC_CARES_PROVIDER, gRPC_SSL_PROVIDER and gRPC_PROTOBUF_PROVIDER must all be \"package\"") + # Providers for third-party dependencies (gRPC_*_PROVIDER properties): + # "module": build the dependency using sources from git submodule (under third_party) + # "package": use cmake's find_package functionality to locate a pre-installed dependency + set(gRPC_ZLIB_PROVIDER "module" CACHE STRING "Provider of zlib library") set_property(CACHE gRPC_ZLIB_PROVIDER PROPERTY STRINGS "module" "package") @@ -190,7 +197,7 @@ return() endif() - set(_protobuf_include_path -I . -I <%text>${PROTOBUF_WELLKNOWN_IMPORT_DIR}</%text>) + set(_protobuf_include_path -I . -I <%text>${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}</%text>) foreach(FIL <%text>${ARGN}</%text>) get_filename_component(ABS_FIL <%text>${FIL}</%text> ABSOLUTE) get_filename_component(FIL_WE <%text>${FIL}</%text> NAME_WE) @@ -346,13 +353,11 @@ PUBLIC <%text>$<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include></%text> PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text> PRIVATE <%text>${_gRPC_SSL_INCLUDE_DIR}</%text> - PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src - PRIVATE <%text>${ZLIB_INCLUDE_DIR}</%text> - PRIVATE <%text>${BENCHMARK}</%text>/include - PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib - PRIVATE <%text>${CARES_INCLUDE_DIR}</%text> - PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/cares/cares - PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include + PRIVATE <%text>${_gRPC_PROTOBUF_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_ZLIB_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_BENCHMARK_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_CARES_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_GFLAGS_INCLUDE_DIR}</%text> % if lib.build in ['test', 'private'] and lib.language == 'c++': PRIVATE third_party/googletest/googletest/include PRIVATE third_party/googletest/googletest @@ -417,13 +422,11 @@ PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text> PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/include PRIVATE <%text>${_gRPC_SSL_INCLUDE_DIR}</%text> - PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src - PRIVATE <%text>${BENCHMARK_ROOT_DIR}</%text>/include - PRIVATE <%text>${ZLIB_ROOT_DIR}</%text> - PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib - PRIVATE <%text>${CARES_INCLUDE_DIR}</%text> - PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/cares/cares - PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include + PRIVATE <%text>${_gRPC_PROTOBUF_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_ZLIB_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_BENCHMARK_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_CARES_INCLUDE_DIR}</%text> + PRIVATE <%text>${_gRPC_GFLAGS_INCLUDE_DIR}</%text> % if tgt.build in ['test', 'private'] and tgt.language == 'c++': PRIVATE third_party/googletest/googletest/include PRIVATE third_party/googletest/googletest |