Skip to content

Commit 218e8f7

Browse files
committed
conan package install support. DockerFile that uses conan to install all dependencies
1 parent b189f7e commit 218e8f7

File tree

5 files changed

+202
-7
lines changed

5 files changed

+202
-7
lines changed

.devcontainer/Dockerfile.conan

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Copyright The OpenTelemetry Authors
2+
# SPDX-License-Identifier: Apache-2.0
3+
FROM ubuntu:24.04
4+
5+
RUN apt update && apt install -y \
6+
build-essential \
7+
ca-certificates \
8+
wget \
9+
cmake \
10+
git \
11+
sudo \
12+
nano \
13+
pkg-config \
14+
ninja-build \
15+
clang-format \
16+
clang-tidy \
17+
python3-pip
18+
19+
RUN pip install conan --break-system-packages
20+
21+
ARG USER_UID=1000
22+
ARG USER_GID=1000
23+
ARG USER_NAME=devuser
24+
ENV USER_NAME=devuser
25+
ENV USER_UID=${USER_UID}
26+
ENV USER_GID=${USER_GID}
27+
ENV INSTALL_PACKAGES=
28+
ENV IS_CONTAINER_BUILD=true
29+
30+
COPY ./.devcontainer/customize_container.sh /tmp/opentelemetry_cpp/devcontainer/customize_container.sh
31+
RUN /tmp/opentelemetry_cpp/devcontainer/customize_container.sh
32+
USER devuser
33+
34+
RUN conan profile detect --force
35+
36+
ARG CONAN_FILE=conanfile_stable.txt
37+
ARG CONAN_BUILD_TYPE=Debug
38+
ARG CXX_STANDARD=17
39+
WORKDIR /home/devuser/conan
40+
COPY ./install/conan/ .
41+
42+
RUN conan install ./${CONAN_FILE} --build=missing -s build_type=${CONAN_BUILD_TYPE}
43+
ENV CMAKE_TOOLCHAIN_FILE=/home/devuser/conan/build/${CONAN_BUILD_TYPE}/generators/conan_toolchain.cmake
44+
ENV CXX_STANDARD=${CXX_STANDARD}
45+
ENV BUILD_TYPE=${CONAN_BUILD_TYPE}
46+
ENV CONAN_FILE=${CONAN_FILE}
47+
48+
WORKDIR /workspaces/opentelemetry-cpp
49+
50+
ENTRYPOINT []
51+
52+
CMD ["/bin/bash"]

ci/do_ci.sh

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,28 @@ BAZEL_MACOS_TEST_OPTIONS="$BAZEL_MACOS_OPTIONS --test_output=errors"
8383

8484
BAZEL_STARTUP_OPTIONS="--output_user_root=$HOME/.cache/bazel"
8585

86-
CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=Debug)
87-
if [ ! -z "${CXX_STANDARD}" ]; then
88-
CMAKE_OPTIONS=(${CMAKE_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")
86+
if [[ "${BUILD_TYPE}" =~ ^(Debug|Release|RelWithDebInfo|MinSizeRel)$ ]]; then
87+
CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=${BUILD_TYPE})
8988
else
90-
CMAKE_OPTIONS=(${CMAKE_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=14")
89+
CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=Debug)
9190
fi
9291

92+
if [ -n "${CXX_STANDARD}" ]; then
93+
CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")
94+
else
95+
CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD=14")
96+
fi
97+
98+
CMAKE_OPTIONS+=("-DCMAKE_CXX_STANDARD_REQUIRED=ON")
99+
CMAKE_OPTIONS+=("-DCMAKE_CXX_EXTENSIONS=OFF")
100+
101+
if [ -n "$CMAKE_TOOLCHAIN_FILE" ]; then
102+
echo "CMAKE_TOOLCHAIN_FILE is set to: $CMAKE_TOOLCHAIN_FILE"
103+
CMAKE_OPTIONS+=("-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE")
104+
fi
105+
106+
echo "CMAKE_OPTIONS: ${CMAKE_OPTIONS[@]}"
107+
93108
export CTEST_OUTPUT_ON_FAILURE=1
94109

95110
if [[ "$1" == "cmake.test" ]]; then
@@ -242,10 +257,23 @@ elif [[ "$1" == "cmake.opentracing_shim.test" ]]; then
242257
make test
243258
make install
244259
export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"
260+
CMAKE_OPTIONS_STRING=$(IFS=" "; echo "${CMAKE_OPTIONS[*]}")
261+
EXPECTED_COMPONENTS=(
262+
"api"
263+
"sdk"
264+
"ext_common"
265+
"ext_http_curl"
266+
"exporters_in_memory"
267+
"exporters_ostream"
268+
"shims_opentracing"
269+
)
270+
EXPECTED_COMPONENTS_STRING=$(IFS=\;; echo "${EXPECTED_COMPONENTS[*]}")
245271
cmake -S "${SRC_DIR}/install/test/cmake" \
246272
-B "${BUILD_DIR}/install_test" \
273+
"${CMAKE_OPTIONS[@]}" \
247274
"-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \
248-
"-DCOMPONENTS_TO_TEST=shims_opentracing"
275+
"-DINSTALL_TEST_CMAKE_OPTIONS=${CMAKE_OPTIONS_STRING}" \
276+
"-DINSTALL_TEST_COMPONENTS=${EXPECTED_COMPONENTS}"
249277
ctest --test-dir "${BUILD_DIR}/install_test" --output-on-failure
250278
exit 0
251279
elif [[ "$1" == "cmake.c++20.test" ]]; then
@@ -423,14 +451,29 @@ elif [[ "$1" == "cmake.do_not_install.test" ]]; then
423451
cd exporters/otlp && make test
424452
exit 0
425453
elif [[ "$1" == "cmake.install.test" ]]; then
454+
if [[ -n "${BUILD_SHARED_LIBS}" && "${BUILD_SHARED_LIBS}" == "ON" ]]; then
455+
CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=ON")
456+
echo "BUILD_SHARED_LIBS is set to: ON"
457+
else
458+
CMAKE_OPTIONS+=("-DBUILD_SHARED_LIBS=OFF")
459+
echo "BUILD_SHARED_LIBS is set to: OFF"
460+
fi
461+
CMAKE_OPTIONS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
462+
426463
cd "${BUILD_DIR}"
427464
rm -rf *
428465
rm -rf ${INSTALL_TEST_DIR}/*
466+
429467
cmake "${CMAKE_OPTIONS[@]}" \
430468
-DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \
431-
-DWITH_ABSEIL=ON \
469+
-DWITH_ABI_VERSION_1=OFF \
470+
-DWITH_ABI_VERSION_2=ON \
471+
-DWITH_ABSEIL=OFF \
432472
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
433473
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
474+
-DWITH_THREAD_INSTRUMENTATION_PREVIEW=ON \
475+
-DWITH_OTLP_GRPC_SSL_MTLS_PREVIEW=ON \
476+
-DWITH_OTLP_RETRY_PREVIEW=ON \
434477
-DWITH_OTLP_GRPC=ON \
435478
-DWITH_OTLP_HTTP=ON \
436479
-DWITH_OTLP_FILE=ON \
@@ -439,15 +482,40 @@ elif [[ "$1" == "cmake.install.test" ]]; then
439482
-DWITH_PROMETHEUS=ON \
440483
-DWITH_ZIPKIN=ON \
441484
-DWITH_ELASTICSEARCH=ON \
485+
-DWITH_EXAMPLES=ON \
442486
-DOPENTELEMETRY_INSTALL=ON \
443487
"${SRC_DIR}"
488+
444489
make -j $(nproc)
490+
make test
445491
make install
446492
export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"
493+
494+
CMAKE_OPTIONS_STRING=$(IFS=" "; echo "${CMAKE_OPTIONS[*]}")
495+
496+
EXPECTED_COMPONENTS=(
497+
"api"
498+
"sdk"
499+
"ext_common"
500+
"ext_http_curl"
501+
"exporters_in_memory"
502+
"exporters_ostream"
503+
"exporters_otlp_common"
504+
"exporters_otlp_file"
505+
"exporters_otlp_grpc"
506+
"exporters_otlp_http"
507+
"exporters_prometheus"
508+
"exporters_elasticsearch"
509+
"exporters_zipkin"
510+
)
511+
EXPECTED_COMPONENTS_STRING=$(IFS=\;; echo "${EXPECTED_COMPONENTS[*]}")
512+
447513
cmake -S "${SRC_DIR}/install/test/cmake" \
448514
-B "${BUILD_DIR}/install_test" \
515+
"${CMAKE_OPTIONS[@]}" \
449516
"-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \
450-
"-DCOMPONENTS_TO_TEST=api;sdk;ext_common;ext_http_curl;exporters_in_memory;exporters_ostream;exporters_otlp_common;exporters_otlp_file;exporters_otlp_grpc;exporters_otlp_http;exporters_prometheus;exporters_elasticsearch;exporters_zipkin"
517+
"-DINSTALL_TEST_CMAKE_OPTIONS=${CMAKE_OPTIONS_STRING}" \
518+
"-DINSTALL_TEST_COMPONENTS=${EXPECTED_COMPONENTS_STRING}"
451519
ctest --test-dir "${BUILD_DIR}/install_test" --output-on-failure
452520
exit 0
453521
elif [[ "$1" == "cmake.test_example_plugin" ]]; then

ci/setup_grpc.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ if [[ $build_internal_abseil_cpp -ne 0 ]]; then
101101

102102
ABSEIL_CPP_BUILD_OPTIONS=(
103103
-DCMAKE_BUILD_TYPE=Release
104+
-DCMAKE_CXX_STANDARD=${std_version}
104105
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
105106
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
106107
)
@@ -117,6 +118,14 @@ GRPC_BUILD_OPTIONS=(
117118
-DgRPC_INSTALL=ON
118119
-DCMAKE_CXX_STANDARD=${std_version}
119120
-DgRPC_BUILD_TESTS=OFF
121+
-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF
122+
-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF
123+
-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF
124+
-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF
125+
-DgRPC_BUILD_GRPC_JAVA_PLUGIN=OFF
126+
-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF
127+
-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
128+
-DgRPC_BUILD_GRPCPP_OTEL_PLUGIN=OFF
120129
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
121130
-DCMAKE_PREFIX_PATH=$INSTALL_DIR
122131
)

install/conan/conanfile_latest.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[requires]
2+
zlib/1.3.1
3+
libcurl/8.5.0
4+
abseil/20240116.2
5+
protobuf/5.27.0
6+
grpc/1.69.0
7+
nlohmann_json/3.11.3
8+
prometheus-cpp/1.3.0
9+
10+
[options]
11+
grpc/*:fPIC=True
12+
grpc/*:shared=False
13+
grpc/*:csharp_plugin=False
14+
grpc/*:node_plugin=False
15+
grpc/*:objective_c_plugin=False
16+
grpc/*:php_plugin=False
17+
grpc/*:python_plugin=False
18+
grpc/*:ruby_plugin=False
19+
protobuf/*:fPIC=True
20+
protobuf/*:shared=False
21+
abseil/*:fPIC=True
22+
abseil/*:shared=False
23+
24+
[test_requires]
25+
gtest/1.14.0
26+
benchmark/1.9.1
27+
28+
[generators]
29+
CMakeToolchain
30+
CMakeDeps
31+
32+
[layout]
33+
cmake_layout

install/conan/conanfile_stable.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[requires]
2+
zlib/1.2.13
3+
libcurl/8.5.0
4+
abseil/20230125.3
5+
protobuf/3.21.12
6+
grpc/1.54.3
7+
nlohmann_json/3.11.3
8+
prometheus-cpp/1.3.0
9+
10+
[options]
11+
grpc/*:fPIC=True
12+
grpc/*:shared=False
13+
grpc/*:csharp_plugin=False
14+
grpc/*:node_plugin=False
15+
grpc/*:objective_c_plugin=False
16+
grpc/*:php_plugin=False
17+
grpc/*:python_plugin=False
18+
grpc/*:ruby_plugin=False
19+
protobuf/*:fPIC=True
20+
protobuf/*:shared=False
21+
abseil/*:fPIC=True
22+
abseil/*:shared=False
23+
24+
[test_requires]
25+
gtest/1.14.0
26+
benchmark/1.9.1
27+
28+
[generators]
29+
CMakeToolchain
30+
CMakeDeps
31+
32+
[layout]
33+
cmake_layout

0 commit comments

Comments
 (0)