@@ -2,14 +2,62 @@ cmake_minimum_required(VERSION 3.7.0)
22
33cmake_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 ()
95
10- set (CLIENT_PROJECT_NAME otel-matlab)
6+ # ###########################
7+ # vcpkg
8+ # ###########################
119
12- project (${CLIENT_PROJECT_NAME} VERSION 0.1.0)
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 ()
1361
1462# ######################################
1563# Options
@@ -24,8 +72,25 @@ if(APPLE)
2472 option (SKIP_OTEL_CPP_PATCH "Whether to skip patching OpenTelemetry-cpp" OFF )
2573endif ()
2674
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+
2784# ######################################
28- # libmexclass FetchContent Configuration
85+ # Project Declaration
86+ # ######################################
87+
88+ set (CLIENT_PROJECT_NAME otel-matlab)
89+
90+ project (${CLIENT_PROJECT_NAME} VERSION 0.1.0)
91+
92+ # ######################################
93+ # libmexclass
2994# ######################################
3095
3196set (LIBMEXCLASS_FETCH_CONTENT_NAME libmexclass)
@@ -36,7 +101,6 @@ set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "77f3d72")
36101
37102set (LIBMEXCLASS_FETCH_CONTENT_SOURCE_SUBDIR "libmexclass/cpp" )
38103
39- include (FetchContent)
40104FetchContent_Declare(
41105 ${LIBMEXCLASS_FETCH_CONTENT_NAME}
42106 GIT_REPOSITORY ${LIBMEXCLASS_FETCH_CONTENT_GIT_REPOSITORY}
@@ -47,44 +111,52 @@ FetchContent_MakeAvailable(
47111 ${LIBMEXCLASS_FETCH_CONTENT_NAME}
48112)
49113
114+
50115# ###########################
51116# OpenTelemetry-cpp
52117# ###########################
53- include (ExternalProject)
54- set (OTEL_CPP_PROJECT_NAME opentelemetry-cpp)
55- set (OTEL_CPP_GIT_REPOSITORY "https://github.com/open-telemetry/opentelemetry-cpp.git" )
56- set (OTEL_CPP_GIT_TAG "11d5d9e" )
57118
58- if (DEFINED OTEL_CPP_PREFIX)
59- string (REPLACE "\\ " "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX} )
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} )
60122else ()
61- set (OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR} /otel-cpp)
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+ )
62158endif ()
63159
64- if (WITH_OTLP_GRPC)
65- set (OTEL_CPP_CXX_STANDARD 14) # Abseil requires at least Cxx14
66- else ()
67- set (OTEL_CPP_CXX_STANDARD 11)
68- endif ()
69-
70- if (NOT APPLE OR SKIP_OTEL_CPP_PATCH)
71- set (patch_command "" )
72- else ()
73- set (patch_command git apply ${CMAKE_SOURCE_DIR} /otel-cpp.patch)
74- endif ()
75-
76- ExternalProject_Add(
77- ${OTEL_CPP_PROJECT_NAME}
78- GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
79- GIT_TAG ${OTEL_CPP_GIT_TAG}
80- PREFIX ${OTEL_CPP_PREFIX}
81- UPDATE_DISCONNECTED 1
82- PATCH_COMMAND ${patch_command}
83- 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}
84- INSTALL_DIR ${OTEL_CPP_PREFIX}
85- INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX}
86- )
87-
88160# ###########################
89161# OpenTelemetry Proxy Library
90162# ###########################
0 commit comments