@@ -111,7 +111,78 @@ if(NOT DEFINED OTEL_MATLAB_VERSION)
111111 set (OTEL_MATLAB_VERSION 0.0.0) # set to an invalid default if not defined
112112endif ()
113113
114- project (${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX)
114+ project (${CLIENT_PROJECT_NAME} VERSION ${OTEL_MATLAB_VERSION} LANGUAGES CXX C)
115+
116+ if (APPLE )
117+ set (CMAKE_INSTALL_RPATH @loader_path)
118+ elseif (UNIX )
119+ set (CMAKE_INSTALL_RPATH "$ORIGIN" )
120+ endif ()
121+
122+ # ###########################
123+ # gRPC
124+ # ###########################
125+ if (WITH_OTLP_GRPC)
126+ set (GRPC_PACKAGE_NAME gRPC)
127+ set (GRPC_GIT_REPOSITORY "https://github.com/grpc/grpc.git" )
128+ set (GRPC_GIT_TAG "4795c5e" )
129+ set (GRPC_PREFIX ${CMAKE_BINARY_DIR} /gRPC)
130+ set (GRPC_INSTALL_DIR ${GRPC_PREFIX} /install )
131+ set (GRPC_INSTALL_LIB_DIR ${GRPC_INSTALL_DIR} /lib)
132+
133+ set (PATCHES_DIR ${CMAKE_SOURCE_DIR} /patches)
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" )
143+ endif ()
144+
145+ include (ExternalProject)
146+ ExternalProject_Add(
147+ ${GRPC_PACKAGE_NAME}
148+ GIT_REPOSITORY ${GRPC_GIT_REPOSITORY}
149+ GIT_TAG ${GRPC_GIT_TAG}
150+ PREFIX ${GRPC_PREFIX}
151+ UPDATE_DISCONNECTED 1
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}
154+ INSTALL_DIR ${GRPC_INSTALL_DIR}
155+ INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${GRPC_INSTALL_DIR} --config $<CONFIG>
156+ )
157+
158+ if (UNIX AND NOT APPLE AND NOT CYGWIN )
159+ # needed for running protoc as part of the opentelemetry-cpp build
160+ set (GRPC_LD_LIBRARY_PATH_ENV "LD_LIBRARY_PATH=${GRPC_INSTALL_LIB_DIR} " )
161+ endif ()
162+
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 ()
185+ endif ()
115186
116187# ######################################
117188# libmexclass
@@ -204,34 +275,56 @@ if(NOT DEFINED OTEL_CPP_INSTALLED_DIR)
204275
205276 set (PATCHES_DIR ${CMAKE_SOURCE_DIR} /patches)
206277 if (SKIP_OTEL_CPP_PATCH)
207- set (patch_comand "" )
278+ set (OTEL_CPP_PATCH_CMD "" )
208279 elseif (WIN32 )
209280 # Windows patch to add a preprocessor definition _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR
210281 # See https://github.com/mathworks/OpenTelemetry-Matlab/issues/130
211- 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)
212283 elseif (APPLE )
213284 # Mac patch to fix a linker issue when including gRPC exporter
214- 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)
215286 else ()
216- set (patch_command "" )
287+ set (OTEL_CPP_PATCH_CMD "" )
288+ endif ()
289+
290+ if (WIN32 OR APPLE )
291+ # Windows and Mac 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+ # Linux 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} -E env ${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+ )
217323 endif ()
218324
219- # Note: examples are temporarily turned off (-DWITH_EXAMPLES=OFF) due to a build issue that is now fixed in #3284
220- # Renable examples after pulling in the fix
221- ExternalProject_Add(
222- ${OTEL_CPP_PROJECT_NAME}
223- GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
224- GIT_TAG ${OTEL_CPP_GIT_TAG}
225- PREFIX ${OTEL_CPP_PREFIX}
226- UPDATE_DISCONNECTED 1
227- PATCH_COMMAND ${patch_command}
228- 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} -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}
229- BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
230- INSTALL_DIR ${OTEL_CPP_PREFIX}
231- INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} --config $<CONFIG>
232- )
233325endif ()
234326
327+
235328# ###########################
236329# OpenTelemetry Proxy Library
237330# ###########################
@@ -251,15 +344,10 @@ if(WITH_OTLP_HTTP)
251344endif ()
252345
253346if (WITH_OTLP_GRPC)
254- find_package (gRPC REQUIRED)
255347 find_package (absl REQUIRED)
256348 find_package (c-ares REQUIRED)
257349 find_package (re2 REQUIRED)
258- if (WIN32 )
259- find_package (openssl REQUIRED)
260- elseif (UNIX AND NOT APPLE AND NOT CYGWIN )
261- find_package (upb REQUIRED)
262- endif ()
350+ find_package (OpenSSL REQUIRED COMPONENTS SSL Crypto)
263351endif ()
264352
265353set (TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/trace/include )
@@ -385,12 +473,13 @@ if(WIN32)
385473endif ()
386474
387475# link against OpenTelemetry-cpp libraries and their dependencies
388- set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY} )
476+ set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} protobuf::libprotobuf ${Matlab_MEX_LIBRARY} )
389477if (WITH_OTLP_HTTP)
390478 set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES} )
391479endif ()
392480if (WITH_OTLP_GRPC)
393- set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} gRPC::grpc++ absl::synchronization)
481+ set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${GRPC_LINK_LIBRARIES} absl::synchronization
482+ absl::random_random ZLIB::ZLIB re2::re2 c-ares::cares OpenSSL::SSL OpenSSL::Crypto)
394483endif ()
395484
396485target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} )
@@ -402,8 +491,7 @@ if(UNIX AND NOT APPLE AND NOT CYGWIN)
402491 "${OTEL_CPP_PREFIX} /lib/libopentelemetry_logs.a"
403492 "${OTEL_CPP_PREFIX} /lib/libopentelemetry_common.a"
404493 "${OTEL_CPP_PREFIX} /lib/libopentelemetry_otlp_recordable.a"
405- ${ABSL_LIBRARIES}
406- ${UPB_LIBRARIES} -Wl,--no -whole-archive)
494+ ${ABSL_LIBRARIES} -Wl,--no -whole-archive)
407495 target_link_options (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS} )
408496elseif (APPLE )
409497 set_target_properties (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@executable_path" )
@@ -412,14 +500,13 @@ endif()
412500# Use C++17
413501target_compile_features (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE cxx_std_17)
414502
503+ # runtime dependent libraries
504+ # gRPC runtime libraries for non-Windows are listed further below in the installation section
415505if (WIN32 )
416- # runtime dependent libraries
417- # The TARGET_FILE generator command is somehow returning the .lib file instead of .dll for Protobuf and Zlib.
506+ # The TARGET_FILE generator command is somehow returning the .lib file instead of .dll for Zlib.
418507 # As a result, we have to hardcode those library names instead.
419- set (PROTOBUF_DLL $<$<CONFIG:Debug>:libprotobufd.dll>$<$<CONFIG:Release>:libprotobuf.dll>)
420508 set (ZLIB_DLL $<$<CONFIG:Debug>:zlibd1.dll>$<$<CONFIG:Release>:zlib1.dll>)
421- set (OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES $<TARGET_FILE_DIR:protobuf::libprotobuf>/../bin/${PROTOBUF_DLL}
422- $<TARGET_FILE_DIR:ZLIB::ZLIB>/../bin/${ZLIB_DLL} )
509+ set (OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES $<TARGET_FILE_DIR:ZLIB::ZLIB>/../bin/${ZLIB_DLL} )
423510
424511 if (WITH_OTLP_HTTP)
425512 set (OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES}
@@ -438,7 +525,7 @@ if(WIN32)
438525else ()
439526 set (OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX} /lib/libopentelemetry_proto${CMAKE_SHARED_LIBRARY_SUFFIX} )
440527 if (WITH_OTLP_GRPC)
441- set (OTEL_CPP_RUNTIME ${OTEL_CPP_RUNTIME}
528+ set (OTEL_CPP_RUNTIME ${OTEL_CPP_RUNTIME}
442529 ${OTEL_CPP_PREFIX} /lib/libopentelemetry_proto_grpc${CMAKE_SHARED_LIBRARY_SUFFIX} )
443530 endif ()
444531 if (APPLE )
@@ -539,6 +626,13 @@ install(FILES ${OTLP_MISC_FILES} DESTINATION .)
539626# Install dependent runtime libraries
540627set (LIBMEXCLASS_PROXY_INSTALLED_DIR +libmexclass/+proxy)
541628install (FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR} )
629+ if (UNIX AND WITH_OTLP_GRPC)
630+ install (DIRECTORY ${GRPC_INSTALL_LIB_DIR} / DESTINATION ${LIBMEXCLASS_PROXY_INSTALLED_DIR}
631+ FILES_MATCHING
632+ PATTERN "*.*"
633+ PATTERN "cmake" EXCLUDE
634+ PATTERN "pkgconfig" EXCLUDE )
635+ endif ()
542636
543637# ##############################
544638# Subdirectories
0 commit comments