@@ -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 ()
159185endif ()
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- )
279325endif ()
280326
327+
281328# ###########################
282329# OpenTelemetry Proxy Library
283330# ###########################
@@ -428,12 +475,13 @@ if(WIN32)
428475endif ()
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} )
432479if (WITH_OTLP_HTTP)
433480 set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES} )
434481endif ()
435482if (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)
437485endif ()
438486
439487target_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}
0 commit comments