diff options
author | Jan Tattermusch <jtattermusch@google.com> | 2018-10-02 11:18:54 +0200 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@google.com> | 2018-10-02 11:18:54 +0200 |
commit | 08125f7af0da0e3b45bc9212b09b0dff23fd499c (patch) | |
tree | 657fea297992b33bfcab746f7155a0eba0533b24 /templates | |
parent | e04a819c12ce19ef4f5b6be63504136c89ac2fa4 (diff) |
cmake: prevent C core from depending on libstdc++
Diffstat (limited to 'templates')
-rw-r--r-- | templates/CMakeLists.txt.template | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template index 2a514ed7b6..aec1624acd 100644 --- a/templates/CMakeLists.txt.template +++ b/templates/CMakeLists.txt.template @@ -164,6 +164,17 @@ set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf") endif() + if (_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC) + # C core has C++ source code, but should not depend on libstc++ (for better portability). + # We need to use a few tricks to convince cmake to do that. + # https://stackoverflow.com/questions/15058403/how-to-stop-cmake-from-linking-against-libstdc + set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") + # Exceptions and RTTI must be off to avoid dependency on libstdc++ + set(_gRPC_CORE_NOSTDCXX_FLAGS -fno-exceptions -fno-rtti) + else() + set(_gRPC_CORE_NOSTDCXX_FLAGS "") + endif() + include(cmake/zlib.cmake) include(cmake/cares.cmake) include(cmake/protobuf.cmake) @@ -403,7 +414,14 @@ PRIVATE <%text>${_gRPC_PROTO_GENS_DIR}</%text> % endif ) - + % if lib.language in ['c', 'csharp']: + # avoid dependency on libstdc++ + if (_gRPC_CORE_NOSTDCXX_FLAGS) + set_target_properties(${lib.name} PROPERTIES LINKER_LANGUAGE C) + # only use the flags for C++ source files + target_compile_options(${lib.name} PRIVATE <%text>$<$<COMPILE_LANGUAGE:CXX>:${_gRPC_CORE_NOSTDCXX_FLAGS}></%text>) + endif() + % endif % if len(get_deps(lib)) > 0: target_link_libraries(${lib.name} % for dep in get_deps(lib): @@ -492,6 +510,14 @@ ${dep} % endfor ) + + % if tgt.language in ['c', 'csharp']: + # avoid dependency on libstdc++ + if (_gRPC_CORE_NOSTDCXX_FLAGS) + set_target_properties(${tgt.name} PROPERTIES LINKER_LANGUAGE C) + target_compile_options(${tgt.name} PRIVATE <%text>$<$<COMPILE_LANGUAGE:CXX>:${_gRPC_CORE_NOSTDCXX_FLAGS}></%text>) + endif() + % endif % endif </%def> |