Skip to content
Snippets Groups Projects
Commit 438c0b57 authored by Jan Tattermusch's avatar Jan Tattermusch
Browse files

add convenience cmake targets

parent bd0b0546
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
...@@ -59,15 +59,27 @@ ...@@ -59,15 +59,27 @@
deps.append("${_gRPC_PROTOBUF_PROTOC_LIBRARIES}") deps.append("${_gRPC_PROTOBUF_PROTOC_LIBRARIES}")
if target_dict.get('secure', False): if target_dict.get('secure', False):
deps.append("${_gRPC_SSL_LIBRARIES}") deps.append("${_gRPC_SSL_LIBRARIES}")
if target_dict['name'] in ['grpc++', 'grpc++_unsecure', 'grpc++_codegen_lib']: if target_dict.language == 'c++':
deps.append("${_gRPC_PROTOBUF_LIBRARIES}") deps.append("${_gRPC_PROTOBUF_LIBRARIES}")
elif target_dict['name'] in ['grpc']: if target_dict['name'] in ['grpc']:
deps.append("${_gRPC_ZLIB_LIBRARIES}") deps.append("${_gRPC_ZLIB_LIBRARIES}")
deps.append("${_gRPC_ALLTARGETS_LIBRARIES}")
for d in target_dict.get('deps', []): for d in target_dict.get('deps', []):
deps.append(d) deps.append(d)
if target_dict.build == 'test' and target_dict.language == 'c++': if target_dict.build == 'test' and target_dict.language == 'c++':
deps.append("${_gRPC_GFLAGS_LIBRARIES}") deps.append("${_gRPC_GFLAGS_LIBRARIES}")
return deps return deps
def get_platforms_condition_begin(platforms):
if all(platform in platforms for platform in ['linux', 'mac', 'posix', 'windows']):
return ''
cond = ' OR '.join(['_gRPC_PLATFORM_%s' % platform.upper() for platform in platforms])
return 'if(%s)\n' % cond
def get_platforms_condition_end(platforms):
if not get_platforms_condition_begin(platforms):
return ''
return 'endif()\n'
%> %>
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
...@@ -100,8 +112,24 @@ ...@@ -100,8 +112,24 @@
set(gRPC_GFLAGS_PROVIDER "module" CACHE STRING "Provider of gflags library") set(gRPC_GFLAGS_PROVIDER "module" CACHE STRING "Provider of gflags library")
set_property(CACHE gRPC_GFLAGS_PROVIDER PROPERTY STRINGS "module" "package") set_property(CACHE gRPC_GFLAGS_PROVIDER PROPERTY STRINGS "module" "package")
set(gRPC_BENCHMARK_PROVIDER "module" CACHE STRING "Provider of benchmark library")
set_property(CACHE gRPC_BENCHMARK_PROVIDER PROPERTY STRINGS "module" "package")
set(gRPC_USE_PROTO_LITE OFF CACHE BOOL "Use the protobuf-lite library") set(gRPC_USE_PROTO_LITE OFF CACHE BOOL "Use the protobuf-lite library")
if(UNIX)
if(<%text>${CMAKE_SYSTEM_NAME}</%text> MATCHES "Linux")
set(_gRPC_PLATFORM_LINUX ON)
elseif(<%text>${CMAKE_SYSTEM_NAME}</%text> MATCHES "Darwin")
set(_gRPC_PLATFORM_MAC ON)
else()
set(_gRPC_PLATFORM_POSIX ON)
endif()
endif()
if(WIN32)
set(_gRPC_PLATFORM_WINDOWS ON)
endif()
if (MSVC) if (MSVC)
add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS) add_definitions(-D_WIN32_WINNT=0x600 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS)
# needed to compile boringssl # needed to compile boringssl
...@@ -189,6 +217,7 @@ ...@@ -189,6 +217,7 @@
set(BORINGSSL_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/boringssl) set(BORINGSSL_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/boringssl)
endif() endif()
if(EXISTS "<%text>${BORINGSSL_ROOT_DIR}</%text>/CMakeLists.txt") if(EXISTS "<%text>${BORINGSSL_ROOT_DIR}</%text>/CMakeLists.txt")
set(OPENSSL_NO_ASM ON) # make boringssl buildable with Visual Studio
add_subdirectory(<%text>${BORINGSSL_ROOT_DIR}</%text> third_party/boringssl) add_subdirectory(<%text>${BORINGSSL_ROOT_DIR}</%text> third_party/boringssl)
if(TARGET ssl) if(TARGET ssl)
set(_gRPC_SSL_LIBRARIES ssl) set(_gRPC_SSL_LIBRARIES ssl)
...@@ -223,12 +252,36 @@ ...@@ -223,12 +252,36 @@
endif() endif()
set(_gRPC_FIND_GFLAGS "if(NOT gflags_FOUND)\n find_package(gflags)\nendif()") set(_gRPC_FIND_GFLAGS "if(NOT gflags_FOUND)\n find_package(gflags)\nendif()")
endif() endif()
if("<%text>${gRPC_BENCHMARK_PROVIDER}</%text>" STREQUAL "module")
if(NOT BENCHMARK_ROOT_DIR)
set(BENCHMARK_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/benchmark)
endif()
if(EXISTS "<%text>${BENCHMARK_ROOT_DIR}</%text>/CMakeLists.txt")
add_subdirectory(<%text>${BENCHMARK_ROOT_DIR}</%text> third_party/benchmark)
if(TARGET benchmark)
set(_gRPC_BENCHMARK_LIBRARIES benchmark)
endif()
else()
message(WARNING "gRPC_BENCHMARK_PROVIDER is \"module\" but BENCHMARK_ROOT_DIR is wrong")
endif()
elseif("<%text>${gRPC_BENCHMARK_PROVIDER}</%text>" STREQUAL "package")
find_package(benchmark)
if(TARGET benchmark::benchmark)
set(_gRPC_BENCHMARK_LIBRARIES benchmark::benchmark)
endif()
set(_gRPC_FIND_BENCHMARK "if(NOT benchmark_FOUND)\n find_package(benchmark)\nendif()")
endif()
if(NOT MSVC) if(NOT MSVC)
set(CMAKE_C_FLAGS "<%text>${CMAKE_C_FLAGS}</%text> -std=c11") set(CMAKE_C_FLAGS "<%text>${CMAKE_C_FLAGS}</%text> -std=c99")
set(CMAKE_CXX_FLAGS "<%text>${CMAKE_CXX_FLAGS}</%text> -std=c++11") set(CMAKE_CXX_FLAGS "<%text>${CMAKE_CXX_FLAGS}</%text> -std=c++11")
endif() endif()
if(UNIX)
set(_gRPC_ALLTARGETS_LIBRARIES dl rt m pthread)
endif()
if(WIN32 AND MSVC) if(WIN32 AND MSVC)
set(_gRPC_BASELIB_LIBRARIES wsock32 ws2_32) set(_gRPC_BASELIB_LIBRARIES wsock32 ws2_32)
endif() endif()
...@@ -287,9 +340,63 @@ ...@@ -287,9 +340,63 @@
endforeach() endforeach()
endfunction() endfunction()
add_custom_target(plugins
DEPENDS
% for tgt in targets:
% if tgt.build == 'protoc':
${tgt.name}
% endif
% endfor
)
add_custom_target(tools_c
DEPENDS
% for tgt in targets:
% if tgt.build == 'tool' and not tgt.language == 'c++':
${tgt.name}
% endif
% endfor
)
add_custom_target(tools_cxx
DEPENDS
% for tgt in targets:
% if tgt.build == 'tool' and tgt.language == 'c++':
${tgt.name}
% endif
% endfor
)
add_custom_target(tools
DEPENDS tools_c tools_cxx)
if (gRPC_BUILD_TESTS)
add_custom_target(buildtests_c)
% for tgt in targets:
% if tgt.build == 'test' and not tgt.language == 'c++' and not tgt.get('external_deps', None) and not tgt.boringssl:
${get_platforms_condition_begin(tgt.platforms)}\
add_dependencies(buildtests_c ${tgt.name})
${get_platforms_condition_end(tgt.platforms)}\
% endif
% endfor
add_custom_target(buildtests_cxx)
% for tgt in targets:
% if tgt.build == 'test' and tgt.language == 'c++' and not tgt.get('external_deps', None) and not tgt.boringssl:
${get_platforms_condition_begin(tgt.platforms)}\
add_dependencies(buildtests_cxx ${tgt.name})
${get_platforms_condition_end(tgt.platforms)}\
% endif
% endfor
add_custom_target(buildtests
DEPENDS buildtests_c buildtests_cxx)
endif (gRPC_BUILD_TESTS)
% for lib in libs: % for lib in libs:
% if lib.build in ["all", "protoc", "tool", "test", "private"] and lib.language in ['c', 'c++']: % if lib.build in ["all", "protoc", "tool", "test", "private"] and not lib.boringssl:
% if not lib.get('build_system', []) or 'cmake' in lib.get('build_system', []): % if not lib.get('build_system', []) or 'cmake' in lib.get('build_system', []):
% if not lib.name in ['benchmark', 'z']: # we build these using CMake instead
% if lib.build in ["test", "private"]: % if lib.build in ["test", "private"]:
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
${cc_library(lib)} ${cc_library(lib)}
...@@ -300,17 +407,22 @@ ...@@ -300,17 +407,22 @@
% endif % endif
% endif % endif
% endif % endif
% endif
% endfor % endfor
% for tgt in targets: % for tgt in targets:
% if tgt.build in ["all", "protoc", "tool", "test", "private"] and tgt.language in ['c', 'c++']: % if tgt.build in ["all", "protoc", "tool", "test", "private"] and not tgt.boringssl:
% if tgt.build in ["test", "private"]: % if tgt.build in ["test", "private"]:
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
${get_platforms_condition_begin(tgt.platforms)}\
${cc_binary(tgt)} ${cc_binary(tgt)}
${get_platforms_condition_end(tgt.platforms)}\
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
% else: % else:
${get_platforms_condition_begin(tgt.platforms)}\
${cc_binary(tgt)} ${cc_binary(tgt)}
${cc_install(tgt)} ${cc_install(tgt)}
${get_platforms_condition_end(tgt.platforms)}\
% endif % endif
% endif % endif
% endfor % endfor
...@@ -343,13 +455,14 @@ ...@@ -343,13 +455,14 @@
PRIVATE <%text>${BORINGSSL_ROOT_DIR}</%text>/include PRIVATE <%text>${BORINGSSL_ROOT_DIR}</%text>/include
PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src
PRIVATE <%text>${ZLIB_INCLUDE_DIR}</%text> PRIVATE <%text>${ZLIB_INCLUDE_DIR}</%text>
PRIVATE <%text>${BENCHMARK}</%text>/include
PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib
PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include
% if lib.build in ['test', 'private'] and lib.language == 'c++': % if lib.build in ['test', 'private'] and lib.language == 'c++':
PRIVATE third_party/googletest/include PRIVATE third_party/googletest/include
PRIVATE third_party/googletest PRIVATE third_party/googletest
% endif % endif
% if any(proto_re.match(src) for src in lib.src): % if lib.language == 'c++':
PRIVATE <%text>${_gRPC_PROTO_GENS_DIR}</%text> PRIVATE <%text>${_gRPC_PROTO_GENS_DIR}</%text>
% endif % endif
) )
...@@ -380,18 +493,34 @@ ...@@ -380,18 +493,34 @@
<%def name="cc_binary(tgt)"> <%def name="cc_binary(tgt)">
add_executable(${tgt.name} add_executable(${tgt.name}
% for src in tgt.src: % for src in tgt.src:
% if not proto_re.match(src):
${src} ${src}
% else:
${proto_replace_ext(src, '.pb.cc')}
${proto_replace_ext(src, '.grpc.pb.cc')}
${proto_replace_ext(src, '.pb.h')}
${proto_replace_ext(src, '.grpc.pb.h')}
% endif
% endfor % endfor
% if tgt.build == 'test' and tgt.language == 'c++': % if tgt.build == 'test' and tgt.language == 'c++':
third_party/googletest/src/gtest-all.cc third_party/googletest/src/gtest-all.cc
% endif % endif
) )
% for src in tgt.src:
% if proto_re.match(src):
protobuf_generate_grpc_cpp(
${src}
)
% endif
% endfor
target_include_directories(${tgt.name} target_include_directories(${tgt.name}
PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text> PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>
PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/include PRIVATE <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/include
PRIVATE <%text>${BORINGSSL_ROOT_DIR}</%text>/include PRIVATE <%text>${BORINGSSL_ROOT_DIR}</%text>/include
PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src
PRIVATE <%text>${BENCHMARK_ROOT_DIR}</%text>/include
PRIVATE <%text>${ZLIB_ROOT_DIR}</%text> PRIVATE <%text>${ZLIB_ROOT_DIR}</%text>
PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib
PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include
...@@ -399,6 +528,9 @@ ...@@ -399,6 +528,9 @@
PRIVATE third_party/googletest/include PRIVATE third_party/googletest/include
PRIVATE third_party/googletest PRIVATE third_party/googletest
% endif % endif
% if tgt.language == 'c++':
PRIVATE <%text>${_gRPC_PROTO_GENS_DIR}</%text>
% endif
) )
% if len(get_deps(tgt)) > 0: % if len(get_deps(tgt)) > 0:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment