Skip to content

Commit cc938d8

Browse files
committed
build gRPC from source
1 parent e35da44 commit cc938d8

File tree

2 files changed

+79
-33
lines changed

2 files changed

+79
-33
lines changed

CMakeLists.txt

Lines changed: 78 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,15 @@ if(WITH_OTLP_GRPC)
131131
set(GRPC_INSTALL_LIB_DIR ${GRPC_INSTALL_DIR}/lib)
132132

133133
set(PATCHES_DIR ${CMAKE_SOURCE_DIR}/patches)
134-
if(APPLE)
135-
set(patch_command git apply ${PATCHES_DIR}/grpc-mac.patch)
136-
else()
137-
set(patch_command "")
134+
if(WIN32)
135+
set(GRPC_PATCH_CMD "")
136+
set(GRPC_SHARED "-DBUILD_SHARED_LIBS=OFF")
137+
elseif(APPLE)
138+
set(GRPC_PATCH_CMD git apply ${PATCHES_DIR}/grpc-mac.patch)
139+
set(GRPC_SHARED "-DBUILD_SHARED_LIBS=ON")
140+
else() # Linux
141+
set(GRPC_PATCH_CMD "")
142+
set(GRPC_SHARED "-DBUILD_SHARED_LIBS=ON")
138143
endif()
139144

140145
include(ExternalProject)
@@ -144,18 +149,39 @@ if(WITH_OTLP_GRPC)
144149
GIT_TAG ${GRPC_GIT_TAG}
145150
PREFIX ${GRPC_PREFIX}
146151
UPDATE_DISCONNECTED 1
147-
PATCH_COMMAND ${patch_command}
148-
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} -DBUILD_SHARED_LIBS=ON -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_CROSSCOMPILING=OFF -DgRPC_ZLIB_PROVIDER=package -DgRPC_ABSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
152+
PATCH_COMMAND ${GRPC_PATCH_CMD}
153+
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} ${GRPC_SHARED} -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_CROSSCOMPILING=OFF -DgRPC_ZLIB_PROVIDER=package -DgRPC_ABSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
149154
INSTALL_DIR ${GRPC_INSTALL_DIR}
150155
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${GRPC_INSTALL_DIR} --config $<CONFIG>
151156
)
152157

153158
if(UNIX AND NOT APPLE AND NOT CYGWIN)
154159
# needed for running protoc as part of the opentelemetry-cpp build
155-
set(GRPC_LD_LIBRARY_PATH_ENV "LD_LIBRARY_PATH=${GRPC_INSTALL_LIB_DIR}")
160+
set(GRPC_LD_LIBRARY_PATH_ENV "-E env LD_LIBRARY_PATH=${GRPC_INSTALL_LIB_DIR}")
156161
endif()
157162

158-
set(GRPC_LINK_LIBRARIES ${GRPC_INSTALL_LIB_DIR}/libgrpc++${CMAKE_SHARED_LIBRARY_SUFFIX})
163+
if(WIN32)
164+
set(GRPC_LINK_LIBRARIES ${GRPC_INSTALL_LIB_DIR}/address_sorting.lib
165+
${GRPC_INSTALL_LIB_DIR}/gpr.lib
166+
${GRPC_INSTALL_LIB_DIR}/grpc++.lib
167+
${GRPC_INSTALL_LIB_DIR}/grpc++_alts.lib
168+
${GRPC_INSTALL_LIB_DIR}/grpc++_error_details.lib
169+
${GRPC_INSTALL_LIB_DIR}/grpc++_reflection.lib
170+
${GRPC_INSTALL_LIB_DIR}/grpc++_unsecure.lib
171+
${GRPC_INSTALL_LIB_DIR}/grpc.lib
172+
${GRPC_INSTALL_LIB_DIR}/grpc_authorization_provider.lib
173+
${GRPC_INSTALL_LIB_DIR}/grpc_plugin_support.lib
174+
${GRPC_INSTALL_LIB_DIR}/grpc_unsecure.lib
175+
${GRPC_INSTALL_LIB_DIR}/grpcpp_channelz.lib
176+
${GRPC_INSTALL_LIB_DIR}/upb_base_lib.lib
177+
${GRPC_INSTALL_LIB_DIR}/upb_json_lib.lib
178+
${GRPC_INSTALL_LIB_DIR}/upb_mem_lib.lib
179+
${GRPC_INSTALL_LIB_DIR}/upb_message_lib.lib
180+
${GRPC_INSTALL_LIB_DIR}/upb_textformat_lib.lib
181+
${GRPC_INSTALL_LIB_DIR}/utf8_range_lib.lib)
182+
else()
183+
set(GRPC_LINK_LIBRARIES ${GRPC_INSTALL_LIB_DIR}/libgrpc++${CMAKE_SHARED_LIBRARY_SUFFIX})
184+
endif()
159185
endif()
160186

161187
# ######################################
@@ -249,35 +275,56 @@ if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)
249275

250276
set(PATCHES_DIR ${CMAKE_SOURCE_DIR}/patches)
251277
if(SKIP_OTEL_CPP_PATCH)
252-
set(patch_comand "")
278+
set(OTEL_CPP_PATCH_CMD "")
253279
elseif(WIN32)
254280
# Windows patch to add a preprocessor definition _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR
255281
# See https://github.com/mathworks/OpenTelemetry-Matlab/issues/130
256-
set(patch_command git apply ${PATCHES_DIR}/otel-cpp-windows.patch)
282+
set(OTEL_CPP_PATCH_CMD git apply ${PATCHES_DIR}/otel-cpp-windows.patch)
257283
elseif(APPLE)
258284
# Mac patch to fix a linker issue when including gRPC exporter
259-
set(patch_command git apply ${PATCHES_DIR}/otel-cpp-mac.patch)
285+
set(OTEL_CPP_PATCH_CMD git apply ${PATCHES_DIR}/otel-cpp-mac.patch)
260286
else()
261-
set(patch_command "")
287+
set(OTEL_CPP_PATCH_CMD "")
288+
endif()
289+
290+
if(WIN32)
291+
# Windows use the default build command
292+
# Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284
293+
# Renable examples after pulling in the fix
294+
ExternalProject_Add(
295+
${OTEL_CPP_PROJECT_NAME}
296+
GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
297+
GIT_TAG ${OTEL_CPP_GIT_TAG}
298+
PREFIX ${OTEL_CPP_PREFIX}
299+
UPDATE_DISCONNECTED 1
300+
PATCH_COMMAND ${OTEL_CPP_PATCH_CMD}
301+
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} -DgRPC_DIR=${GRPC_INSTALL_LIB_DIR}/cmake/grpc -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -DWITH_OTLP_FILE=${WITH_OTLP_FILE} -DWITH_EXAMPLES=OFF -DBUILD_TESTING=OFF -DWITH_BENCHMARK=OFF -DOPENTELEMETRY_INSTALL=ON -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_CXX_STANDARD=${OTEL_CPP_CXX_STANDARD} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
302+
BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
303+
INSTALL_DIR ${OTEL_CPP_PREFIX}
304+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $<CONFIG>
305+
)
306+
else()
307+
# Non-Windows use a custom build command
308+
# Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284
309+
# Renable examples after pulling in the fix
310+
ExternalProject_Add(
311+
${OTEL_CPP_PROJECT_NAME}
312+
GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
313+
GIT_TAG ${OTEL_CPP_GIT_TAG}
314+
PREFIX ${OTEL_CPP_PREFIX}
315+
UPDATE_DISCONNECTED 1
316+
PATCH_COMMAND ${OTEL_CPP_PATCH_CMD}
317+
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} -DgRPC_DIR=${GRPC_INSTALL_LIB_DIR}/cmake/grpc -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -DWITH_OTLP_FILE=${WITH_OTLP_FILE} -DWITH_EXAMPLES=OFF -DBUILD_TESTING=OFF -DWITH_BENCHMARK=OFF -DOPENTELEMETRY_INSTALL=ON -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_CXX_STANDARD=${OTEL_CPP_CXX_STANDARD} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
318+
BUILD_COMMAND ${CMAKE_COMMAND} ${GRPC_LD_LIBRARY_PATH_ENV} ${CMAKE_MAKE_PROGRAM}
319+
BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
320+
INSTALL_DIR ${OTEL_CPP_PREFIX}
321+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $<CONFIG>
322+
)
262323
endif()
263324

264-
# Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284
265-
# Renable examples after pulling in the fix
266-
ExternalProject_Add(
267-
${OTEL_CPP_PROJECT_NAME}
268-
GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
269-
GIT_TAG ${OTEL_CPP_GIT_TAG}
270-
PREFIX ${OTEL_CPP_PREFIX}
271-
UPDATE_DISCONNECTED 1
272-
PATCH_COMMAND ${patch_command}
273-
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH} -DgRPC_DIR=${GRPC_INSTALL_LIB_DIR}/cmake/grpc -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -DWITH_OTLP_FILE=${WITH_OTLP_FILE} -DWITH_EXAMPLES=OFF -DBUILD_TESTING=OFF -DWITH_BENCHMARK=OFF -DOPENTELEMETRY_INSTALL=ON -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_CXX_STANDARD=${OTEL_CPP_CXX_STANDARD} -DVCPKG_INSTALLED_DIR=${VCPKG_INSTALLED_DIR} ${TRIPLET_DEFINITIONS}
274-
BUILD_COMMAND ${CMAKE_COMMAND} -E env ${GRPC_LD_LIBRARY_PATH_ENV} ${CMAKE_MAKE_PROGRAM}
275-
BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
276-
INSTALL_DIR ${OTEL_CPP_PREFIX}
277-
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $<CONFIG>
278-
)
279325
endif()
280326

327+
281328
# ###########################
282329
# OpenTelemetry Proxy Library
283330
# ###########################
@@ -428,12 +475,13 @@ if(WIN32)
428475
endif()
429476

430477
# link against OpenTelemetry-cpp libraries and their dependencies
431-
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY})
478+
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} protobuf::libprotobuf ${Matlab_MEX_LIBRARY})
432479
if(WITH_OTLP_HTTP)
433480
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES})
434481
endif()
435482
if(WITH_OTLP_GRPC)
436-
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${GRPC_LINK_LIBRARIES} absl::synchronization)
483+
set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${GRPC_LINK_LIBRARIES} absl::synchronization
484+
absl::random_random ZLIB::ZLIB re2::re2 c-ares::cares OpenSSL::SSL OpenSSL::Crypto)
437485
endif()
438486

439487
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES})
@@ -458,10 +506,8 @@ if(WIN32)
458506
# runtime dependent libraries
459507
# The TARGET_FILE generator command is somehow returning the .lib file instead of .dll for Protobuf and Zlib.
460508
# As a result, we have to hardcode those library names instead.
461-
set(PROTOBUF_DLL $<$<CONFIG:Debug>:libprotobufd.dll>$<$<CONFIG:Release>:libprotobuf.dll>)
462509
set(ZLIB_DLL $<$<CONFIG:Debug>:zlibd1.dll>$<$<CONFIG:Release>:zlib1.dll>)
463-
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES $<TARGET_FILE_DIR:protobuf::libprotobuf>/../bin/${PROTOBUF_DLL}
464-
$<TARGET_FILE_DIR:ZLIB::ZLIB>/../bin/${ZLIB_DLL})
510+
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES $<TARGET_FILE_DIR:ZLIB::ZLIB>/../bin/${ZLIB_DLL})
465511

466512
if(WITH_OTLP_HTTP)
467513
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES}

cmake/vcpkg_triplets/x64-windows-otel-matlab.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ set(VCPKG_TARGET_ARCHITECTURE x64)
22
set(VCPKG_CRT_LINKAGE dynamic)
33
# Conflict with abseil_dll.dll used by Simulink. cares.dll and re2.dll are also shipped with MATLAB.
44
# Use static libraries to avoid conflict.
5-
if(${PORT} MATCHES "(abseil|c-ares|re2)")
5+
if(${PORT} MATCHES "(protobuf|abseil|c-ares|re2)")
66
set(VCPKG_LIBRARY_LINKAGE static)
77
else()
88
set(VCPKG_LIBRARY_LINKAGE dynamic)

0 commit comments

Comments
 (0)