Skip to content

Commit a28e450

Browse files
authored
Merge pull request #15 from mathworks/merge_1_3_0_changes
Merge 1 3 0 changes
2 parents 5588c3e + f47cccf commit a28e450

File tree

7 files changed

+160
-63
lines changed

7 files changed

+160
-63
lines changed

.github/workflows/build.yml

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,14 @@ jobs:
99
OPENTELEMETRY_CPP_INSTALL: "${{ github.workspace }}/otel_cpp_install"
1010
OPENTELEMETRY_MATLAB_INSTALL: "${{ github.workspace }}/otel_matlab_install"
1111
OPENTELEMETRY_COLLECTOR_INSTALL: "${{ github.workspace }}/otelcol"
12-
VCPKG_ROOT: "${{ github.workspace }}/vcpkg"
1312
SYSTEM_LIBSTDCPP_PATH: "/usr/lib/x86_64-linux-gnu/libstdc++.so.6"
1413
steps:
1514
- name: Download OpenTelemetry-Matlab source
1615
uses: actions/checkout@v3
1716
with:
1817
path: opentelemetry-matlab
19-
- name: Download vcpkg
20-
uses: actions/checkout@v3
21-
with:
22-
repository: microsoft/vcpkg
23-
path: vcpkg
2418
- name: Install MATLAB
2519
uses: matlab-actions/setup-matlab@v1
26-
- name: Install vcpkg packages
27-
run: |
28-
cd vcpkg
29-
./bootstrap-vcpkg.sh
30-
./vcpkg install curl nlohmann-json protobuf zlib
3120
- name: Download OpenTelemetry Collector binary
3221
run: |
3322
mkdir otelcol && cd otelcol

CMakeLists.txt

Lines changed: 111 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,62 @@ 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()
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)
2573
endif()
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

3196
set(LIBMEXCLASS_FETCH_CONTENT_NAME libmexclass)
@@ -36,7 +101,6 @@ set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "77f3d72")
36101

37102
set(LIBMEXCLASS_FETCH_CONTENT_SOURCE_SUBDIR "libmexclass/cpp")
38103

39-
include(FetchContent)
40104
FetchContent_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})
60122
else()
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+
)
62158
endif()
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
# ###########################

README.md

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,14 @@ Installation instructions
2121
Before proceeding, ensure that the below products are installed:
2222
* [MATLAB](https://www.mathworks.com/products/matlab.html)
2323

24-
1. Download [vcpkg](https://vcpkg.io). Install the following packages:
25-
- curl
26-
- nlohmann-json
27-
- protobuf
28-
- zlib
29-
30-
2. Set VCPKG_ROOT environment variable to point to installed location of vcpkg.
31-
32-
3. Download, Build and install OpenTelemetry MATLAB
24+
1. Download, Build and install OpenTelemetry MATLAB
3325
```
3426
cd <opentelemetry-matlab-root>
3527
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=<opentelemetry-matlab-installdir>
3628
cmake --build build --config Release --target install
3729
3830
```
39-
4. Download [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector-releases/releases). You can just obtain a pre-built binary for your platform.
31+
2. Download [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector-releases/releases). You can just obtain a pre-built binary for your platform.
4032

4133
## Getting Started
4234
1. Start OpenTelemetry Collector
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
set(VCPKG_TARGET_ARCHITECTURE arm64)
2+
set(VCPKG_CRT_LINKAGE dynamic)
3+
if(${PORT} MATCHES "(curl|zlib)")
4+
set(VCPKG_LIBRARY_LINKAGE dynamic)
5+
else()
6+
set(VCPKG_LIBRARY_LINKAGE static)
7+
endif()
8+
9+
set(VCPKG_CMAKE_SYSTEM_NAME Darwin)
10+
set(VCPKG_OSX_ARCHITECTURES arm64)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
set(VCPKG_TARGET_ARCHITECTURE x64)
2+
set(VCPKG_CRT_LINKAGE dynamic)
3+
if(${PORT} MATCHES "(curl|zlib)")
4+
set(VCPKG_LIBRARY_LINKAGE dynamic)
5+
else()
6+
set(VCPKG_LIBRARY_LINKAGE static)
7+
endif()
8+
9+
set(VCPKG_CMAKE_SYSTEM_NAME Darwin)
10+
set(VCPKG_OSX_ARCHITECTURES x86_64)

test/commonSetupOnce.m

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,20 @@ function commonSetupOnce(testCase)
2020
testCase.ListPid = @(name)"tasklist /fi ""IMAGENAME eq " + name + ".exe""";
2121
testCase.ReadPidList = @(file)readtable(file, "VariableNamingRule", "preserve", "NumHeaderLines", 3, "MultipleDelimsAsOne", true, "Delimiter", " ");
2222
testCase.ExtractPid = @(table)table.Var2;
23-
windows_killroot = string(getenv("WINDOWS_KILL_INSTALL"));
24-
assert(~isempty(windows_killroot), "WINDOWS_KILL_INSTALL environment must be defined.")
25-
testCase.Sigint = @(id)fullfile(windows_killroot,"windows-kill") + " -SIGINT " + id;
23+
windows_killroot = getenv("WINDOWS_KILL_INSTALL");
24+
windows_killname = "windows-kill";
25+
if isempty(windows_killroot)
26+
% windows_kill not pre-installed
27+
windows_kill_url = "https://github.com/ElyDotDev/windows-kill/releases/download/1.1.4";
28+
windows_kill_zipfilename = "windows-kill_x64_1.1.4_lib_release";
29+
windows_killroot = fullfile(tempdir, windows_kill_zipfilename);
30+
31+
% look for it in tempdir, download and install if it doesn't exist
32+
if ~exist(fullfile(windows_killroot, windows_killname + ".exe"),"file")
33+
unzip(fullfile(windows_kill_url, windows_kill_zipfilename + ".zip"), tempdir);
34+
end
35+
end
36+
testCase.Sigint = @(id)fullfile(windows_killroot,windows_killname) + " -SIGINT " + id;
2637
testCase.Sigterm = @(id)"taskkill /F /pid " + id;
2738
elseif isunix && ~ismac
2839
testCase.ListPid = @(name)"ps -C " + name;

vcpkg.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "opentelemetry-matlab",
3+
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
4+
"dependencies": [
5+
"protobuf",
6+
"zlib",
7+
"nlohmann-json"
8+
],
9+
"features": {
10+
"otlp-http": {"description": "Otlp HTTP Exporter", "dependencies": ["curl"]},
11+
"otlp-grpc": {"description": "Otlp gRPC Exporter", "dependencies": ["grpc", "abseil", "c-ares", "re2", "openssl", "upb"]}
12+
}
13+
}

0 commit comments

Comments
 (0)