Skip to content

Commit 55ddd9a

Browse files
committed
Use fetchcontent to obtain vcpkg
1 parent 8e1fe70 commit 55ddd9a

File tree

4 files changed

+115
-60
lines changed

4 files changed

+115
-60
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: 101 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,52 @@ 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+
set(VCPKG_FETCH_CONTENT_NAME vcpkg)
29+
set(VCPKG_GIT_REPOSITORY "https://github.com/microsoft/vcpkg.git")
30+
set(VCPKG_GIT_TAG "9edb1b8")
31+
FetchContent_Declare(
32+
${VCPKG_FETCH_CONTENT_NAME}
33+
GIT_REPOSITORY ${VCPKG_GIT_REPOSITORY}
34+
GIT_TAG ${VCPKG_GIT_TAG}
35+
PREFIX ${VCPKG_PREFIX}
36+
UPDATE_DISCONNECTED 1
37+
)
38+
39+
FetchContent_MakeAvailable(
40+
${VCPKG_FETCH_CONTENT_NAME}
41+
)
42+
43+
FetchContent_GetProperties(${VCPKG_FETCH_CONTENT_NAME})
44+
string(REPLACE "\\" "/" CMAKE_TOOLCHAIN_FILE "${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake")
45+
46+
endif()
47+
48+
if(NOT DEFINED VCPKG_INSTALLED_DIR)
49+
set(DVCPKG_INSTALLED_DIR ${CMAKE_BINARY_DIR}/vcpkg_installed)
50+
endif()
1351

1452
# ######################################
1553
# Options
@@ -24,8 +62,25 @@ if(APPLE)
2462
option(SKIP_OTEL_CPP_PATCH "Whether to skip patching OpenTelemetry-cpp" OFF)
2563
endif()
2664

65+
# set vcpkg features depending on specified options
66+
set(VCPKG_MANIFEST_FEATURES "") # start with empty
67+
if(WITH_OTLP_HTTP)
68+
set(VCPKG_MANIFEST_FEATURES ${VCPKG_MANFIEST_FEATURES} "otlp-http")
69+
endif()
70+
if(WITH_OTLP_GRPC)
71+
set(VCPKG_MANIFEST_FEATURES ${VCPKG_MANIFEST_FEATURES} "otlp-grpc")
72+
endif()
73+
2774
# ######################################
28-
# libmexclass FetchContent Configuration
75+
# Project Declaration
76+
# ######################################
77+
78+
set(CLIENT_PROJECT_NAME otel-matlab)
79+
80+
project(${CLIENT_PROJECT_NAME} VERSION 0.1.0)
81+
82+
# ######################################
83+
# libmexclass
2984
# ######################################
3085

3186
set(LIBMEXCLASS_FETCH_CONTENT_NAME libmexclass)
@@ -36,7 +91,6 @@ set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "77f3d72")
3691

3792
set(LIBMEXCLASS_FETCH_CONTENT_SOURCE_SUBDIR "libmexclass/cpp")
3893

39-
include(FetchContent)
4094
FetchContent_Declare(
4195
${LIBMEXCLASS_FETCH_CONTENT_NAME}
4296
GIT_REPOSITORY ${LIBMEXCLASS_FETCH_CONTENT_GIT_REPOSITORY}
@@ -47,44 +101,52 @@ FetchContent_MakeAvailable(
47101
${LIBMEXCLASS_FETCH_CONTENT_NAME}
48102
)
49103

104+
50105
# ###########################
51106
# OpenTelemetry-cpp
52107
# ###########################
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")
57108

58-
if(DEFINED OTEL_CPP_PREFIX)
59-
string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX})
109+
if(DEFINED OTEL_CPP_INSTALLED_DIR)
110+
# OTEL_CPP_INSTALLED_DIR should point to an installed location of OpenTelemetry-cpp
111+
string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_INSTALLED_DIR})
60112
else()
61-
set(OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR}/otel-cpp)
113+
# No installed location supplied. Fetch it as an external project
114+
include(ExternalProject)
115+
set(OTEL_CPP_PROJECT_NAME opentelemetry-cpp)
116+
set(OTEL_CPP_GIT_REPOSITORY "https://github.com/open-telemetry/opentelemetry-cpp.git")
117+
set(OTEL_CPP_GIT_TAG "11d5d9e")
118+
119+
if(DEFINED OTEL_CPP_PREFIX)
120+
string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX})
121+
else()
122+
set(OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR}/otel-cpp)
123+
endif()
124+
125+
if(WITH_OTLP_GRPC)
126+
set(OTEL_CPP_CXX_STANDARD 14) # Abseil requires at least Cxx14
127+
else()
128+
set(OTEL_CPP_CXX_STANDARD 11)
129+
endif()
130+
131+
if(NOT APPLE OR SKIP_OTEL_CPP_PATCH)
132+
set(patch_command "")
133+
else()
134+
set(patch_command git apply ${CMAKE_SOURCE_DIR}/otel-cpp.patch)
135+
endif()
136+
137+
ExternalProject_Add(
138+
${OTEL_CPP_PROJECT_NAME}
139+
GIT_REPOSITORY ${OTEL_CPP_GIT_REPOSITORY}
140+
GIT_TAG ${OTEL_CPP_GIT_TAG}
141+
PREFIX ${OTEL_CPP_PREFIX}
142+
UPDATE_DISCONNECTED 1
143+
PATCH_COMMAND ${patch_command}
144+
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}
145+
INSTALL_DIR ${OTEL_CPP_PREFIX}
146+
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX}
147+
)
62148
endif()
63149

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-
88150
# ###########################
89151
# OpenTelemetry Proxy Library
90152
# ###########################

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

vcpkg.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
],
8+
"features": {
9+
"otlp-http": {"description": "Otlp HTTP Exporter", "dependencies": ["curl", "nlohmann-json"]},
10+
"otlp-grpc": {"description": "Otlp gRPC Exporter", "dependencies": ["grpc", "abseil", "c-ares", "re2", "openssl", "upb"]}
11+
}
12+
}

0 commit comments

Comments
 (0)