1- cmake_minimum_required (VERSION 3.0 .0)
1+ cmake_minimum_required (VERSION 3.7 .0)
22
33cmake_policy (SET CMP0074 NEW)
44
5- set (CLIENT_PROJECT_NAME otel-matlab)
65
7- project (${CLIENT_PROJECT_NAME} VERSION 0.1.0)
6+ # ###########################
7+ # vcpkg
8+ # ###########################
9+
10+ include (FetchContent)
11+
12+ # check if VCPKG_ROOT is defined, which should point to an existing installation
13+ if (DEFINED ENV{VCPKG_ROOT})
14+ # Autodetect vcpkg toolchain
15+ if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)
16+ string (REPLACE "\\ " "/" CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT} /scripts/buildsystems/vcpkg.cmake" )
17+ endif ()
18+ else ()
19+ # VCPKG_ROOT not defined, get it using FetchContent
20+
21+ if (DEFINED VCPKG_PREFIX})
22+ # download location specified
23+ string (REPLACE "\\ " "/" VCPKG_PREFIX "${VCPKG_PREFIX} " )
24+ else ()
25+ set (VCPKG_PREFIX ${CMAKE_BINARY_DIR} /vcpkg)
26+ endif ()
27+
28+ # On Mac, there is a conflict between libcurl and the version in MATLAB, so
29+ # use libcurl as a shared library and load the MATLAB version at runtime
30+ if (APPLE )
31+ # run uname -m to determine whether arm64 or x86_64
32+ exec_program (uname ARGS -m OUTPUT_VARIABLE MAC_HOST_SYSTEM)
33+ set (VCPKG_OTEL_TRIPLET ${MAC_HOST_SYSTEM} -osx-otel-matlab)
34+ set (VCPKG_OVERLAY_TRIPLETS ${CMAKE_SOURCE_DIR} /cmake/vcpkg_triplets)
35+ set (VCPKG_TARGET_TRIPLET ${VCPKG_OTEL_TRIPLET} )
36+ endif ()
37+
38+ set (VCPKG_FETCH_CONTENT_NAME vcpkg)
39+ set (VCPKG_GIT_REPOSITORY "https://github.com/microsoft/vcpkg.git" )
40+ set (VCPKG_GIT_TAG "9edb1b8" )
41+ FetchContent_Declare(
42+ ${VCPKG_FETCH_CONTENT_NAME}
43+ GIT_REPOSITORY ${VCPKG_GIT_REPOSITORY}
44+ GIT_TAG ${VCPKG_GIT_TAG}
45+ PREFIX ${VCPKG_PREFIX}
46+ UPDATE_DISCONNECTED 1
47+ )
48+
49+ FetchContent_MakeAvailable(
50+ ${VCPKG_FETCH_CONTENT_NAME}
51+ )
52+
53+ FetchContent_GetProperties(${VCPKG_FETCH_CONTENT_NAME} )
54+ string (REPLACE "\\ " "/" CMAKE_TOOLCHAIN_FILE "${vcpkg_SOURCE_DIR} /scripts/buildsystems/vcpkg.cmake" )
55+
56+ endif ()
57+
58+ if (NOT DEFINED VCPKG_INSTALLED_DIR)
59+ set (DVCPKG_INSTALLED_DIR ${CMAKE_BINARY_DIR} /vcpkg_installed)
60+ endif ()
861
962# ######################################
1063# Options
@@ -15,9 +68,29 @@ option(WITH_OTLP_GRPC "Whether to include the OTLP gRPC exporter" OFF)
1568if (NOT WITH_OTLP_HTTP AND NOT WITH_OTLP_GRPC)
1669 message (FATAL_ERROR "At least one of WITH_OTLP_HTTP and WITH_OTLP_GRPC must be ON" )
1770endif ()
71+ if (APPLE )
72+ option (SKIP_OTEL_CPP_PATCH "Whether to skip patching OpenTelemetry-cpp" OFF )
73+ endif ()
74+
75+ # set vcpkg features depending on specified options
76+ set (VCPKG_MANIFEST_FEATURES "" ) # start with empty
77+ if (WITH_OTLP_HTTP)
78+ set (VCPKG_MANIFEST_FEATURES ${VCPKG_MANFIEST_FEATURES} "otlp-http" )
79+ endif ()
80+ if (WITH_OTLP_GRPC)
81+ set (VCPKG_MANIFEST_FEATURES ${VCPKG_MANIFEST_FEATURES} "otlp-grpc" )
82+ endif ()
83+
84+ # ######################################
85+ # Project Declaration
86+ # ######################################
87+
88+ set (CLIENT_PROJECT_NAME otel-matlab)
89+
90+ project (${CLIENT_PROJECT_NAME} VERSION 0.1.0)
1891
1992# ######################################
20- # libmexclass FetchContent Configuration
93+ # libmexclass
2194# ######################################
2295
2396set (LIBMEXCLASS_FETCH_CONTENT_NAME libmexclass)
@@ -28,7 +101,6 @@ set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "77f3d72")
28101
29102set (LIBMEXCLASS_FETCH_CONTENT_SOURCE_SUBDIR "libmexclass/cpp" )
30103
31- include (FetchContent)
32104FetchContent_Declare(
33105 ${LIBMEXCLASS_FETCH_CONTENT_NAME}
34106 GIT_REPOSITORY ${LIBMEXCLASS_FETCH_CONTENT_GIT_REPOSITORY}
@@ -39,15 +111,59 @@ FetchContent_MakeAvailable(
39111 ${LIBMEXCLASS_FETCH_CONTENT_NAME}
40112)
41113
114+
115+ # ###########################
116+ # OpenTelemetry-cpp
117+ # ###########################
118+
119+ if (DEFINED OTEL_CPP_INSTALLED_DIR)
120+ # OTEL_CPP_INSTALLED_DIR should point to an installed location of OpenTelemetry-cpp
121+ string (REPLACE "\\ " "/" OTEL_CPP_PREFIX ${OTEL_CPP_INSTALLED_DIR} )
122+ else ()
123+ # No installed location supplied. Fetch it as an external project
124+ include (ExternalProject)
125+ set (OTEL_CPP_PROJECT_NAME opentelemetry-cpp)
126+ set (OTEL_CPP_GIT_REPOSITORY "https://github.com/open-telemetry/opentelemetry-cpp.git" )
127+ set (OTEL_CPP_GIT_TAG "11d5d9e" )
128+
129+ if (DEFINED OTEL_CPP_PREFIX)
130+ string (REPLACE "\\ " "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX} )
131+ else ()
132+ set (OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR} /otel-cpp)
133+ endif ()
134+
135+ if (WITH_OTLP_GRPC)
136+ set (OTEL_CPP_CXX_STANDARD 14) # Abseil requires at least Cxx14
137+ else ()
138+ set (OTEL_CPP_CXX_STANDARD 11)
139+ endif ()
140+
141+ if (NOT APPLE OR SKIP_OTEL_CPP_PATCH)
142+ set (patch_command "" )
143+ else ()
144+ set (patch_command git apply ${CMAKE_SOURCE_DIR} /otel-cpp.patch)
145+ endif ()
146+
147+ ExternalProject_Add(
148+ ${OTEL_CPP_PROJECT_NAME}
149+ GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
150+ GIT_TAG ${OTEL_CPP_GIT_TAG}
151+ PREFIX ${OTEL_CPP_PREFIX}
152+ UPDATE_DISCONNECTED 1
153+ PATCH_COMMAND ${patch_command}
154+ 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}
155+ INSTALL_DIR ${OTEL_CPP_PREFIX}
156+ INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX}
157+ )
158+ endif ()
159+
42160# ###########################
43161# OpenTelemetry Proxy Library
44162# ###########################
45163
46164
47165set (OPENTELEMETRY_PROXY_LIBRARY_NAME "OtelMatlabProxy" )
48166
49- # Specify location for find_package to locate opentelemetry-cpp-config.cmake
50- find_package (opentelemetry-cpp CONFIG REQUIRED)
51167find_package (Protobuf REQUIRED)
52168find_package (nlohmann_json REQUIRED)
53169if (WIN32 )
@@ -73,24 +189,28 @@ endif()
73189set (TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/trace/include )
74190set (CONTEXT_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/context/include )
75191set (BAGGAGE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/baggage/include )
192+ set (COMMON_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/common/include )
76193set (TRACE_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /sdk/trace/include )
194+ set (COMMON_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /sdk/common/include )
77195set (OTLP_EXPORTER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /exporters/otlp/include )
78- set (OPENTELEMETRY_PROXY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${TRACE_API_INCLUDE_DIR} ${CONTEXT_API_INCLUDE_DIR} ${BAGGAGE_API_INCLUDE_DIR} ${TRACE_SDK_INCLUDE_DIR} ${OTLP_EXPORTER_INCLUDE_DIR} ${OPENTELEMETRY_CPP_INCLUDE_DIRS} )
196+ set (OPENTELEMETRY_PROXY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${TRACE_API_INCLUDE_DIR} ${CONTEXT_API_INCLUDE_DIR} ${BAGGAGE_API_INCLUDE_DIR} ${COMMON_API_INCLUDE_DIR} ${ TRACE_SDK_INCLUDE_DIR} ${COMMON_SDK_INCLUDE_DIR} ${ OTLP_EXPORTER_INCLUDE_DIR} ${OTEL_CPP_PREFIX} / include )
79197
80198set (OPENTELEMETRY_PROXY_FACTORY_CLASS_NAME OtelMatlabProxyFactory)
81199set (OPENTELEMETRY_PROXY_FACTORY_SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
82200set (TRACE_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/trace/src)
83201set (CONTEXT_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/context/src)
84202set (BAGGAGE_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/baggage/src)
203+ set (COMMON_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /api/common/src)
85204set (TRACE_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /sdk/trace/src)
205+ set (COMMON_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /sdk/common/src)
86206set (OTLP_EXPORTER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /exporters/otlp/src)
87207set (OPENTELEMETRY_PROXY_SOURCES
88208 ${OPENTELEMETRY_PROXY_FACTORY_SOURCES_DIR} /${OPENTELEMETRY_PROXY_FACTORY_CLASS_NAME} .cpp
89209 ${TRACE_API_SOURCE_DIR} /TracerProviderProxy.cpp
90210 ${TRACE_API_SOURCE_DIR} /TracerProxy.cpp
91211 ${TRACE_API_SOURCE_DIR} /SpanProxy.cpp
92212 ${TRACE_API_SOURCE_DIR} /SpanContextProxy.cpp
93- ${TRACE_API_SOURCE_DIR } /attribute.cpp
213+ ${COMMON_API_SOURCE_DIR } /attribute.cpp
94214 ${CONTEXT_API_SOURCE_DIR} /TextMapPropagatorProxy.cpp
95215 ${CONTEXT_API_SOURCE_DIR} /CompositePropagatorProxy.cpp
96216 ${CONTEXT_API_SOURCE_DIR} /TextMapCarrierProxy.cpp
@@ -99,7 +219,8 @@ set(OPENTELEMETRY_PROXY_SOURCES
99219 ${TRACE_SDK_SOURCE_DIR} /TracerProviderProxy.cpp
100220 ${TRACE_SDK_SOURCE_DIR} /SimpleSpanProcessorProxy.cpp
101221 ${TRACE_SDK_SOURCE_DIR} /BatchSpanProcessorProxy.cpp
102- ${TRACE_SDK_SOURCE_DIR} /ParentBasedSamplerProxy.cpp)
222+ ${TRACE_SDK_SOURCE_DIR} /ParentBasedSamplerProxy.cpp
223+ ${COMMON_SDK_SOURCE_DIR} /resource .cpp)
103224if (WITH_OTLP_HTTP)
104225 set (OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
105226 ${OTLP_EXPORTER_SOURCE_DIR} /OtlpHttpSpanExporterProxy.cpp)
@@ -132,16 +253,50 @@ if(WITH_OTLP_GRPC)
132253 endif ()
133254endif ()
134255
135- target_compile_options (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_MACROS} )
256+ # On Windows, suppress a compiler warning about deprecation of result_of
257+ if (WIN32 )
258+ set (CUSTOM_CXX_FLAGS -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING)
259+ else ()
260+ set (CUSTOM_CXX_FLAGS "" )
261+ endif ()
262+
263+ if (WIN32 )
264+ set (OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX} )
265+ else ()
266+ set (OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} )
267+ endif ()
268+
269+ target_compile_options (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_MACROS} ${CUSTOM_CXX_FLAGS} )
136270
137271# link against OpenTelemetry-cpp libraries and their dependencies
138- target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_CPP_LIBRARIES} )
272+ target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_common${CMAKE_STATIC_LIBRARY_SUFFIX}
273+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_otlp_recordable${CMAKE_STATIC_LIBRARY_SUFFIX}
274+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_SHARED_LIBRARY_PREFIX} opentelemetry_proto${OTEL_PROTO_LIBRARY_SUFFIX}
275+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_resources${CMAKE_STATIC_LIBRARY_SUFFIX}
276+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX}
277+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX}
278+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX}
279+ ${Protobuf_LIBRARIES} )
280+ if (WITH_OTLP_HTTP)
281+ target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX}
282+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX}
283+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX}
284+ ${CURL_LIBRARIES} )
285+ endif ()
286+ if (WITH_OTLP_GRPC)
287+ target_link_libraries (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc${CMAKE_STATIC_LIBRARY_SUFFIX}
288+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_STATIC_LIBRARY_PREFIX} opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX}
289+ ${OTEL_CPP_PREFIX} /lib/${CMAKE_SHARED_LIBRARY_PREFIX} opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX}
290+ gRPC::grpc++
291+ absl::synchronization)
292+ endif ()
139293
140294# On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols
141295if (UNIX AND NOT APPLE AND NOT CYGWIN )
142296 set (OPENTELEMETRY_PROXY_LINK_OPTIONS -Wl,--whole-archive
143- "${OPENTELEMETRY_CPP_LIBRARY_DIRS} /libopentelemetry_trace.a"
144- "${OPENTELEMETRY_CPP_LIBRARY_DIRS} /libopentelemetry_common.a"
297+ "${OTEL_CPP_PREFIX} /lib/libopentelemetry_trace.a"
298+ "${OTEL_CPP_PREFIX} /lib/libopentelemetry_common.a"
299+ "${OTEL_CPP_PREFIX} /lib/libopentelemetry_otlp_recordable.a"
145300 ${ABSL_LIBRARIES}
146301 ${UPB_LIBRARIES} -Wl,--no -whole-archive)
147302 target_link_options (${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS} )
@@ -178,11 +333,13 @@ if(WIN32)
178333 ${OPENSSL_RUNTIME}
179334 ${RE2_RUNTIME} )
180335 endif ()
181- elseif (UNIX AND NOT APPLE AND NOT CYGWIN )
182- FILE (GLOB OTEL_CPP_RUNTIME ${OPENTELEMETRY_CPP_LIBRARY_DIRS} /*.so)
183- set (OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OTEL_CPP_RUNTIME} )
184- elseif (APPLE )
185- FILE (GLOB OTEL_CPP_RUNTIME ${OPENTELEMETRY_CPP_LIBRARY_DIRS} /*.dylib)
336+ elseif (UNIX AND NOT CYGWIN )
337+ if (WITH_OTLP_GRPC)
338+ set (OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX} /lib/libopentelemetry_proto${CMAKE_SHARED_LIBRARY_SUFFIX}
339+ ${OTEL_CPP_PREFIX} /lib/libopentelemetry_proto_grpc${CMAKE_SHARED_LIBRARY_SUFFIX} )
340+ else ()
341+ set (OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX} /lib/libopentelemetry_proto${CMAKE_SHARED_LIBRARY_SUFFIX} )
342+ endif ()
186343 set (OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OTEL_CPP_RUNTIME} )
187344endif ()
188345
@@ -215,7 +372,7 @@ libmexclass_client_install(
215372set (TRACE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /api/trace/+opentelemetry)
216373set (CONTEXT_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /api/context/+opentelemetry)
217374set (BAGGAGE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /api/baggage/+opentelemetry)
218- set (UTILS_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /api/utils /+opentelemetry)
375+ set (COMMON_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /api/common /+opentelemetry)
219376set (TRACE_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /sdk/trace/+opentelemetry)
220377set (DEFAULT_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m)
221378set (OTLP_HTTP_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m)
@@ -226,7 +383,7 @@ set(OTLP_EXPORTERS_DIR +opentelemetry/+exporters/+otlp)
226383install (DIRECTORY ${TRACE_API_MATLAB_SOURCES} DESTINATION .)
227384install (DIRECTORY ${CONTEXT_API_MATLAB_SOURCES} DESTINATION .)
228385install (DIRECTORY ${BAGGAGE_API_MATLAB_SOURCES} DESTINATION .)
229- install (DIRECTORY ${UTILS_API_MATLAB_SOURCES } DESTINATION .)
386+ install (DIRECTORY ${COMMON_API_MATLAB_SOURCES } DESTINATION .)
230387install (DIRECTORY ${TRACE_SDK_MATLAB_SOURCES} DESTINATION .)
231388install (FILES ${DEFAULT_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR} )
232389if (WITH_OTLP_HTTP)
0 commit comments