@@ -122,22 +122,55 @@ FetchContent_MakeAvailable(
122122# OpenTelemetry-cpp
123123# ###########################
124124
125+ # Determine OTEL_CPP_PREFIX
125126if (DEFINED OTEL_CPP_INSTALLED_DIR)
126- # OTEL_CPP_INSTALLED_DIR should point to an installed location of OpenTelemetry-cpp
127+ # Set OTEL_CPP_INSTALLED_DIR to use a pre-installed OpenTelemetry-cpp
128+ # It should point to the installed location
127129 string (REPLACE "\\ " "/" OTEL_CPP_PREFIX ${OTEL_CPP_INSTALLED_DIR} )
130+ elseif (DEFINED OTEL_CPP_PREFIX)
131+ # Set OTEL_CPP_PREFIX to specify an install location of the automatically
132+ # downloaded and built OpenTelemetry-cpp, instead of using the default
133+ # location with the build directory. This can preserve the OpenTelemetry-cpp
134+ # install even if the build directory is removed.
135+ string (REPLACE "\\ " "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX} )
128136else ()
137+ set (OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR} /otel-cpp)
138+ endif ()
139+
140+ if (WIN32 )
141+ set (OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX} )
142+ else ()
143+ set (OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} )
144+ endif ()
145+
146+ set (OTEL_CPP_LIBRARIES ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_common${CMAKE_STATIC_LIBRARY_SUFFIX}
147+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_otlp_recordable${CMAKE_STATIC_LIBRARY_SUFFIX}
148+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_SHARED_LIBRARY_PREFIX} opentelemetry_proto${OTEL_PROTO_LIBRARY_SUFFIX}
149+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_resources${CMAKE_STATIC_LIBRARY_SUFFIX}
150+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX}
151+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX}
152+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX}
153+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX} )
154+ if (WITH_OTLP_HTTP)
155+ set (OTEL_CPP_LIBRARIES ${OTEL_CPP_LIBRARIES} ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX}
156+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX}
157+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX}
158+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX} )
159+ endif ()
160+ if (WITH_OTLP_GRPC)
161+ set (OTEL_CPP_LIBRARIES ${OTEL_CPP_LIBRARIES} ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc${CMAKE_STATIC_LIBRARY_SUFFIX}
162+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX}
163+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
164+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_SHARED_LIBRARY_PREFIX} opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX} )
165+ endif ()
166+
167+ if (NOT DEFINED OTEL_CPP_INSTALLED_DIR)
129168 # No installed location supplied. Fetch it as an external project
130169 include (ExternalProject)
131170 set (OTEL_CPP_PROJECT_NAME opentelemetry-cpp)
132171 set (OTEL_CPP_GIT_REPOSITORY "https://github.com/open-telemetry/opentelemetry-cpp.git" )
133172 set (OTEL_CPP_GIT_TAG "a799f4a" )
134173
135- if (DEFINED OTEL_CPP_PREFIX)
136- string (REPLACE "\\ " "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX} )
137- else ()
138- set (OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR} /otel-cpp)
139- endif ()
140-
141174 set (OTEL_CPP_CXX_STANDARD 14)
142175
143176 if (NOT APPLE OR SKIP_OTEL_CPP_PATCH)
@@ -154,6 +187,7 @@ else()
154187 UPDATE_DISCONNECTED 1
155188 PATCH_COMMAND ${patch_command}
156189 CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DWITH_OTLP_HTTP=${WITH_OTLP_HTTP} -DWITH_OTLP_GRPC=${WITH_OTLP_GRPC} -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}
190+ BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES}
157191 INSTALL_DIR ${OTEL_CPP_PREFIX}
158192 INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX}
159193 )
@@ -259,6 +293,10 @@ libmexclass_client_add_proxy_library(
259293 INCLUDE_DIRS ${OPENTELEMETRY_PROXY_INCLUDE_DIRS}
260294)
261295
296+ if (NOT DEFINED OTEL_CPP_INSTALLED_DIR)
297+ add_dependencies (${OPENTELEMETRY_PROXY_LIBRARY_NAME} ${OTEL_CPP_PROJECT_NAME} )
298+ endif ()
299+
262300# Additional compiler flags for HTTP/gRPC exporters
263301if (WITH_OTLP_HTTP)
264302 if (WIN32 )
@@ -281,42 +319,23 @@ if(WIN32)
281319 set (CUSTOM_CXX_FLAGS -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING)
282320 # pass in version number
283321 set (OTLP_MACROS ${OTLP_MACROS} /DOTEL_MATLAB_VERSION="${OTEL_MATLAB_VERSION} " )
284- set (OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX} )
285322else ()
286323 set (CUSTOM_CXX_FLAGS "" )
287324 set (OTLP_MACROS ${OTLP_MACROS} "-D OTEL_MATLAB_VERSION=\" ${OTEL_MATLAB_VERSION} \" " )
288- set (OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} )
289325endif ()
290326
291327target_compile_options (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_MACROS} ${CUSTOM_CXX_FLAGS} )
292328
293329# link against OpenTelemetry-cpp libraries and their dependencies
294- set (OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_common${CMAKE_STATIC_LIBRARY_SUFFIX}
295- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_otlp_recordable${CMAKE_STATIC_LIBRARY_SUFFIX}
296- ${OTEL_CPP_PREFIX} /lib/${CMAKE_SHARED_LIBRARY_PREFIX} opentelemetry_proto${OTEL_PROTO_LIBRARY_SUFFIX}
297- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_resources${CMAKE_STATIC_LIBRARY_SUFFIX}
298- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX}
299- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX}
300- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX}
301- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
302- ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY} )
330+ set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY} )
303331if (WITH_OTLP_HTTP)
304- set (OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_LINK_LIBRARIES} ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX}
305- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX}
306- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX}
307- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX}
308- ${CURL_LIBRARIES} )
332+ set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES} )
309333endif ()
310334if (WITH_OTLP_GRPC)
311- set (OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_LINK_LIBRARIES} ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc${CMAKE_STATIC_LIBRARY_SUFFIX}
312- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX}
313- ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
314- ${OTEL_CPP_PREFIX} /lib/${CMAKE_SHARED_LIBRARY_PREFIX} opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX}
315- gRPC::grpc++
316- absl::synchronization)
335+ set (OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} gRPC::grpc++ absl::synchronization)
317336endif ()
318337
319- target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_LINK_LIBRARIES } )
338+ target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES } )
320339
321340# On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols
322341if (UNIX AND NOT APPLE AND NOT CYGWIN )
0 commit comments