aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt14
-rw-r--r--cmake/msvc_static_runtime.cmake14
-rw-r--r--templates/CMakeLists.txt.template15
3 files changed, 23 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 41d677d4d2..1adf092f9b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -87,10 +87,11 @@ if(WIN32)
set(_gRPC_PLATFORM_WINDOWS ON)
endif()
+set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
+
if (MSVC)
+ include(cmake/msvc_static_runtime.cmake)
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
- add_definitions(/wd4464 /wd4623 /wd4668 /wd4701 /wd4702 /wd4777 /wd5027)
# needed to compile protobuf
add_definitions(/wd4065 /wd4506)
# TODO(jtattermusch): revisit C4267 occurrences throughout the code
@@ -3321,7 +3322,7 @@ target_link_libraries(qps
endif (gRPC_BUILD_TESTS)
-add_library(grpc_csharp_ext
+add_library(grpc_csharp_ext SHARED
src/csharp/ext/grpc_csharp_ext.c
)
@@ -10830,13 +10831,6 @@ endif (gRPC_BUILD_TESTS)
-if (gRPC_INSTALL)
- install(EXPORT gRPCTargets
- DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
- NAMESPACE gRPC::
- )
-endif()
-
foreach(_config gRPCConfig gRPCConfigVersion)
configure_file(tools/cmake/${_config}.cmake.in
${_config}.cmake @ONLY)
diff --git a/cmake/msvc_static_runtime.cmake b/cmake/msvc_static_runtime.cmake
new file mode 100644
index 0000000000..5a31ab3d24
--- /dev/null
+++ b/cmake/msvc_static_runtime.cmake
@@ -0,0 +1,14 @@
+option(gRPC_MSVC_STATIC_RUNTIME "Link with static msvc runtime libraries" OFF)
+
+if(gRPC_MSVC_STATIC_RUNTIME)
+ # switch from dynamic to static linking of msvcrt
+ foreach(flag_var
+ CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+ CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+
+ if(${flag_var} MATCHES "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif(${flag_var} MATCHES "/MD")
+ endforeach(flag_var)
+endif()
+
diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template
index b034763fb0..444fb6a2dc 100644
--- a/templates/CMakeLists.txt.template
+++ b/templates/CMakeLists.txt.template
@@ -129,11 +129,13 @@
if(WIN32)
set(_gRPC_PLATFORM_WINDOWS ON)
endif()
+
+ ## Some libraries are shared even with BUILD_SHARED_LIBRARIES=OFF
+ set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
if (MSVC)
+ include(cmake/msvc_static_runtime.cmake)
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
- add_definitions(/wd4464 /wd4623 /wd4668 /wd4701 /wd4702 /wd4777 /wd5027)
# needed to compile protobuf
add_definitions(/wd4065 /wd4506)
# TODO(jtattermusch): revisit C4267 occurrences throughout the code
@@ -428,7 +430,7 @@
% endfor
<%def name="cc_library(lib)">
- add_library(${lib.name}
+ add_library(${lib.name}${' SHARED' if lib.get('dll', None) == 'only' else ''}
% for src in lib.src:
% if not proto_re.match(src):
${src}
@@ -552,13 +554,6 @@
endif()
</%def>
- if (gRPC_INSTALL)
- install(EXPORT gRPCTargets
- DESTINATION <%text>${CMAKE_INSTALL_CMAKEDIR}</%text>
- NAMESPACE gRPC::
- )
- endif()
-
foreach(_config gRPCConfig gRPCConfigVersion)
configure_file(tools/cmake/<%text>${_config}</%text>.cmake.in
<%text>${_config}</%text>.cmake @ONLY)