Skip to content

Commit 461f05c

Browse files
committed
Enable building OpenTelemetry-cpp as an external project
1 parent 81b0a1a commit 461f05c

File tree

1 file changed

+55
-9
lines changed

1 file changed

+55
-9
lines changed

CMakeLists.txt

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
cmake_minimum_required(VERSION 3.0.0)
1+
cmake_minimum_required(VERSION 3.7.0)
22

33
cmake_policy(SET CMP0074 NEW)
44

5+
# Autodetect vcpkg toolchain from VCPKG_ROOT environment variable
6+
if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
7+
string(REPLACE "\\" "/" CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
8+
endif()
9+
510
set(CLIENT_PROJECT_NAME otel-matlab)
611

712
project(${CLIENT_PROJECT_NAME} VERSION 0.1.0)
@@ -39,15 +44,36 @@ FetchContent_MakeAvailable(
3944
${LIBMEXCLASS_FETCH_CONTENT_NAME}
4045
)
4146

47+
# ###########################
48+
# OpenTelemetry-cpp
49+
# ###########################
50+
include(ExternalProject)
51+
set(OTEL_CPP_PROJECT_NAME opentelemetry-cpp)
52+
set(OTEL_CPP_GIT_REPOSITORY "https://github.com/open-telemetry/opentelemetry-cpp.git")
53+
set(OTEL_CPP_GIT_TAG "11d5d9e")
54+
55+
if(DEFINED OTEL_CPP_PREFIX)
56+
string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX})
57+
else()
58+
set(OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR}/otel-cpp)
59+
endif()
60+
ExternalProject_Add(
61+
${OTEL_CPP_PROJECT_NAME}
62+
GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
63+
GIT_TAG ${OTEL_CPP_GIT_TAG}
64+
PREFIX ${OTEL_CPP_PREFIX}
65+
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}
66+
INSTALL_DIR ${OTEL_CPP_PREFIX}
67+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX}
68+
)
69+
4270
# ###########################
4371
# OpenTelemetry Proxy Library
4472
# ###########################
4573

4674

4775
set(OPENTELEMETRY_PROXY_LIBRARY_NAME "OtelMatlabProxy")
4876

49-
# Specify location for find_package to locate opentelemetry-cpp-config.cmake
50-
find_package(opentelemetry-cpp CONFIG REQUIRED)
5177
find_package(Protobuf REQUIRED)
5278
find_package(nlohmann_json REQUIRED)
5379
if(WIN32)
@@ -77,7 +103,7 @@ set(COMMON_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/common/include)
77103
set(TRACE_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/include)
78104
set(COMMON_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/include)
79105
set(OTLP_EXPORTER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/include)
80-
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} ${OPENTELEMETRY_CPP_INCLUDE_DIRS})
106+
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)
81107

82108
set(OPENTELEMETRY_PROXY_FACTORY_CLASS_NAME OtelMatlabProxyFactory)
83109
set(OPENTELEMETRY_PROXY_FACTORY_SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR})
@@ -140,13 +166,33 @@ endif()
140166
target_compile_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_MACROS})
141167

142168
# link against OpenTelemetry-cpp libraries and their dependencies
143-
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_CPP_LIBRARIES})
169+
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_PREFIX}/lib/opentelemetry_common${CMAKE_LINK_LIBRARY_SUFFIX}
170+
${OTEL_CPP_PREFIX}/lib/opentelemetry_otlp_recordable${CMAKE_LINK_LIBRARY_SUFFIX}
171+
${OTEL_CPP_PREFIX}/lib/opentelemetry_proto${CMAKE_LINK_LIBRARY_SUFFIX}
172+
${OTEL_CPP_PREFIX}/lib/opentelemetry_resources${CMAKE_LINK_LIBRARY_SUFFIX}
173+
${OTEL_CPP_PREFIX}/lib/opentelemetry_trace${CMAKE_LINK_LIBRARY_SUFFIX}
174+
${OTEL_CPP_PREFIX}/lib/opentelemetry_version${CMAKE_LINK_LIBRARY_SUFFIX}
175+
${OTEL_CPP_PREFIX}/lib/opentelemetry_logs${CMAKE_LINK_LIBRARY_SUFFIX}
176+
${Protobuf_LIBRARIES})
177+
if(WITH_OTLP_HTTP)
178+
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_PREFIX}/lib/opentelemetry_exporter_otlp_http${CMAKE_LINK_LIBRARY_SUFFIX}
179+
${OTEL_CPP_PREFIX}/lib/opentelemetry_exporter_otlp_http_client${CMAKE_LINK_LIBRARY_SUFFIX}
180+
${OTEL_CPP_PREFIX}/lib/opentelemetry_http_client_curl${CMAKE_LINK_LIBRARY_SUFFIX}
181+
${CURL_LIBRARIES})
182+
endif()
183+
if(WITH_OTLP_GRPC)
184+
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_PREFIX}/lib/opentelemetry_exporter_otlp_grpc${CMAKE_LINK_LIBRARY_SUFFIX}
185+
${OTEL_CPP_PREFIX}/lib/opentelemetry_exporter_otlp_grpc_client${CMAKE_LINK_LIBRARY_SUFFIX}
186+
${OTEL_CPP_PREFIX}/lib/opentelemetry_proto_grpc${CMAKE_LINK_LIBRARY_SUFFIX}
187+
gRPC::grpc++
188+
absl::synchronization)
189+
endif()
144190

145191
# On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols
146192
if(UNIX AND NOT APPLE AND NOT CYGWIN)
147193
set(OPENTELEMETRY_PROXY_LINK_OPTIONS -Wl,--whole-archive
148-
"${OPENTELEMETRY_CPP_LIBRARY_DIRS}/libopentelemetry_trace.a"
149-
"${OPENTELEMETRY_CPP_LIBRARY_DIRS}/libopentelemetry_common.a"
194+
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_trace.a"
195+
"${OTEL_CPP_PREFIX}/lib/libopentelemetry_common.a"
150196
${ABSL_LIBRARIES}
151197
${UPB_LIBRARIES} -Wl,--no-whole-archive)
152198
target_link_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS})
@@ -184,10 +230,10 @@ if(WIN32)
184230
${RE2_RUNTIME})
185231
endif()
186232
elseif(UNIX AND NOT APPLE AND NOT CYGWIN)
187-
FILE(GLOB OTEL_CPP_RUNTIME ${OPENTELEMETRY_CPP_LIBRARY_DIRS}/*.so)
233+
FILE(GLOB OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX}/lib/*.so)
188234
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OTEL_CPP_RUNTIME})
189235
elseif(APPLE)
190-
FILE(GLOB OTEL_CPP_RUNTIME ${OPENTELEMETRY_CPP_LIBRARY_DIRS}/*.dylib)
236+
FILE(GLOB OTEL_CPP_RUNTIME ${OTEL_CPP_PREFIX}/lib/*.dylib)
191237
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OTEL_CPP_RUNTIME})
192238
endif()
193239

0 commit comments

Comments
 (0)