From 7634bd4da5d98a94ff0832afa40e4a51262f11ce Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Tue, 14 Apr 2026 01:50:51 +0000 Subject: [PATCH 1/4] Build third-party dependencies with ninja and default to release. Install release version of dependencies in the devcontainer. Clean up third party release file --- .devcontainer/Dockerfile.dev | 7 +++++-- ci/install_thirdparty.sh | 32 ++++++++++++++++++++++++++------ ci/setup_ci_environment.sh | 1 + third_party_release | 1 - 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/.devcontainer/Dockerfile.dev b/.devcontainer/Dockerfile.dev index fec4e16c6a..9f7d64fb76 100644 --- a/.devcontainer/Dockerfile.dev +++ b/.devcontainer/Dockerfile.dev @@ -8,8 +8,10 @@ ARG USER_GID=1000 ARG INSTALL_PACKAGES= ARG CXX_STANDARD=17 +ARG BUILD_TYPE=RelWithDebInfo ENV CXX_STANDARD=${CXX_STANDARD} +ENV BUILD_TYPE=${BUILD_TYPE} COPY ci /opt/ci @@ -42,6 +44,7 @@ ENV USER_GID=${USER_GID} ENV IS_CONTAINER_BUILD=true COPY install /opt/install +COPY third_party_release /opt/third_party_release COPY ./.devcontainer/customize_container.sh /tmp/opentelemetry_cpp/devcontainer/customize_container.sh RUN /tmp/opentelemetry_cpp/devcontainer/customize_container.sh RUN apt install -y npm && npm install -g markdownlint-cli@0.44.0 @@ -49,8 +52,8 @@ RUN apt install -y npm && npm install -g markdownlint-cli@0.44.0 USER devuser WORKDIR /workspaces/opentelemetry-cpp -RUN cd /opt && bash ci/install_thirdparty.sh --install-dir /home/devuser/third-party/install-stable --tags-file install/cmake/third_party_stable -ENV CMAKE_PREFIX_PATH=/home/devuser/third-party/install-stable +RUN cd /opt && CMAKE_BUILD_TYPE=Release bash ci/install_thirdparty.sh --install-dir /home/devuser/third-party/install --tags-file third_party_release +ENV CMAKE_PREFIX_PATH=/home/devuser/third-party/install ENTRYPOINT [] diff --git a/ci/install_thirdparty.sh b/ci/install_thirdparty.sh index 7c23bcbb2b..b9faac8730 100755 --- a/ci/install_thirdparty.sh +++ b/ci/install_thirdparty.sh @@ -69,20 +69,39 @@ if [ -z "${CXX_STANDARD}" ]; then CXX_STANDARD=17 fi +if [[ "${BUILD_TYPE}" =~ ^(Debug|Release|RelWithDebInfo|MinSizeRel)$ ]]; then + CMAKE_BUILD_TYPE="${BUILD_TYPE}" +else + CMAKE_BUILD_TYPE=Release +fi + THIRDPARTY_BUILD_DIR="/tmp/otel-cpp-third-party-build" +CMAKE_OPTIONS=( + "-DCMAKE_INSTALL_PREFIX=${THIRDPARTY_INSTALL_DIR}" + "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" + "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}" + "-DOTELCPP_THIRDPARTY_TAGS_FILE=${THIRDPARTY_TAGS_FILE}" + "-DOTELCPP_PROTO_PATH=${OTELCPP_PROTO_PATH}" + "-DOTELCPP_THIRDPARTY_INSTALL_LIST=${THIRDPARTY_PACKAGES}" +) +CMAKE_BUILD_ARGS=(--clean-first --parallel "$(nproc)") + +if [[ "${OTELCPP_CMAKE_VERBOSE_BUILD:-OFF}" =~ ^(1|ON|on|TRUE|true|YES|yes)$ ]]; then + CMAKE_BUILD_ARGS+=(--verbose) +fi + +if command -v ninja >/dev/null 2>&1; then + CMAKE_OPTIONS+=("-G" "Ninja") +fi if [ -d "${THIRDPARTY_BUILD_DIR}" ]; then rm -rf "${THIRDPARTY_BUILD_DIR}" fi cmake -S "${SRC_DIR}/install/cmake" -B "${THIRDPARTY_BUILD_DIR}" \ - "-DCMAKE_INSTALL_PREFIX=${THIRDPARTY_INSTALL_DIR}" \ - "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}" \ - "-DOTELCPP_THIRDPARTY_TAGS_FILE=${THIRDPARTY_TAGS_FILE}" \ - "-DOTELCPP_PROTO_PATH=${OTELCPP_PROTO_PATH}" \ - "-DOTELCPP_THIRDPARTY_INSTALL_LIST=${THIRDPARTY_PACKAGES}" + "${CMAKE_OPTIONS[@]}" -cmake --build "${THIRDPARTY_BUILD_DIR}" --clean-first -j"$(nproc)" +cmake --build "${THIRDPARTY_BUILD_DIR}" "${CMAKE_BUILD_ARGS[@]}" if [ "${THIRDPARTY_INSTALL_DIR}" = "/usr/local" ]; then ldconfig @@ -92,4 +111,5 @@ echo "Third-party packages installed successfully." echo "-- THIRDPARTY_INSTALL_DIR: ${THIRDPARTY_INSTALL_DIR}" echo "-- THIRDPARTY_TAGS_FILE: ${THIRDPARTY_TAGS_FILE}" echo "-- THIRDPARTY_PACKAGES: ${THIRDPARTY_PACKAGES:-all}" +echo "-- CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" echo "-- CXX_STANDARD: ${CXX_STANDARD}" diff --git a/ci/setup_ci_environment.sh b/ci/setup_ci_environment.sh index 794f2e490f..568f70f98f 100755 --- a/ci/setup_ci_environment.sh +++ b/ci/setup_ci_environment.sh @@ -6,6 +6,7 @@ set -e apt-get update apt-get install --no-install-recommends --no-install-suggests -y \ + ninja-build \ build-essential \ ca-certificates \ wget \ diff --git a/third_party_release b/third_party_release index 6cbb4ee570..c2a32e157d 100644 --- a/third_party_release +++ b/third_party_release @@ -26,4 +26,3 @@ opentelemetry-proto=v1.8.0 opentracing-cpp=v1.6.0 prometheus-cpp=v1.3.0 ryml=v0.10.0 -vcpkg=2024.02.14 From 318b40de4f1fc7080787af447057cfa57980ea37 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Mon, 13 Apr 2026 22:35:08 -0400 Subject: [PATCH 2/4] install thirdparty script changed to accept build type by command line --- ci/install_thirdparty.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ci/install_thirdparty.sh b/ci/install_thirdparty.sh index b9faac8730..2245a19523 100755 --- a/ci/install_thirdparty.sh +++ b/ci/install_thirdparty.sh @@ -6,10 +6,11 @@ set -e usage() { - echo "Usage: $0 --install-dir [--tags-file ] [--packages \";\"]" + echo "Usage: $0 --install-dir [--tags-file ] [--packages \";\"] [--build-type ]" echo " --install-dir Path where third-party packages will be installed (required)" echo " --tags-file File containing tags for third-party packages (optional)" echo " --packages \";;...\" Semicolon-separated list of packages to build (optional). Default installs all third-party packages." + echo " --build-type Build type for third-party packages (optional). Valid: Debug|Release|RelWithDebInfo|MinSizeRel. Default: Release" echo " -h, --help Show this help message" } @@ -17,6 +18,7 @@ THIRDPARTY_TAGS_FILE="" THIRDPARTY_PACKAGES="" SRC_DIR="$(pwd)" THIRDPARTY_INSTALL_DIR="" +BUILD_TYPE="" while [[ $# -gt 0 ]]; do case $1 in @@ -47,6 +49,15 @@ while [[ $# -gt 0 ]]; do THIRDPARTY_PACKAGES="$2" shift 2 ;; + --build-type) + if [ -z "$2" ] || [[ "$2" == --* ]]; then + echo "Error: --build-type requires a value" >&2 + usage + exit 1 + fi + BUILD_TYPE="$2" + shift 2 + ;; -h|--help) usage exit 0 @@ -113,3 +124,4 @@ echo "-- THIRDPARTY_TAGS_FILE: ${THIRDPARTY_TAGS_FILE}" echo "-- THIRDPARTY_PACKAGES: ${THIRDPARTY_PACKAGES:-all}" echo "-- CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" echo "-- CXX_STANDARD: ${CXX_STANDARD}" +echo "-- CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" From 54f9e3fc67f44b48bf234d773a9a5ceac8d6a332 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Tue, 14 Apr 2026 04:29:29 +0000 Subject: [PATCH 3/4] Only set the third party build type in the devcontainer --- .devcontainer/Dockerfile.dev | 6 +++--- ci/install_thirdparty.sh | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile.dev b/.devcontainer/Dockerfile.dev index 9f7d64fb76..5b1ddbb11e 100644 --- a/.devcontainer/Dockerfile.dev +++ b/.devcontainer/Dockerfile.dev @@ -8,10 +8,10 @@ ARG USER_GID=1000 ARG INSTALL_PACKAGES= ARG CXX_STANDARD=17 -ARG BUILD_TYPE=RelWithDebInfo +ARG THIRD_PARTY_BUILD_TYPE=Release ENV CXX_STANDARD=${CXX_STANDARD} -ENV BUILD_TYPE=${BUILD_TYPE} +ENV THIRD_PARTY_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE} COPY ci /opt/ci @@ -52,7 +52,7 @@ RUN apt install -y npm && npm install -g markdownlint-cli@0.44.0 USER devuser WORKDIR /workspaces/opentelemetry-cpp -RUN cd /opt && CMAKE_BUILD_TYPE=Release bash ci/install_thirdparty.sh --install-dir /home/devuser/third-party/install --tags-file third_party_release +RUN cd /opt && bash ci/install_thirdparty.sh --install-dir /home/devuser/third-party/install --build-type ${THIRD_PARTY_BUILD_TYPE} --tags-file third_party_release ENV CMAKE_PREFIX_PATH=/home/devuser/third-party/install ENTRYPOINT [] diff --git a/ci/install_thirdparty.sh b/ci/install_thirdparty.sh index 2245a19523..11e63c2040 100755 --- a/ci/install_thirdparty.sh +++ b/ci/install_thirdparty.sh @@ -124,4 +124,3 @@ echo "-- THIRDPARTY_TAGS_FILE: ${THIRDPARTY_TAGS_FILE}" echo "-- THIRDPARTY_PACKAGES: ${THIRDPARTY_PACKAGES:-all}" echo "-- CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" echo "-- CXX_STANDARD: ${CXX_STANDARD}" -echo "-- CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" From 9cba35f580d7a7d0003a3bf6ccbbd2d7aa7f8312 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Tue, 14 Apr 2026 18:45:09 +0000 Subject: [PATCH 4/4] address review feedback --- ci/install_thirdparty.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ci/install_thirdparty.sh b/ci/install_thirdparty.sh index 11e63c2040..9b95c2e9f8 100755 --- a/ci/install_thirdparty.sh +++ b/ci/install_thirdparty.sh @@ -83,6 +83,9 @@ fi if [[ "${BUILD_TYPE}" =~ ^(Debug|Release|RelWithDebInfo|MinSizeRel)$ ]]; then CMAKE_BUILD_TYPE="${BUILD_TYPE}" else + if [ -n "${BUILD_TYPE}" ]; then + echo "Warning: invalid --build-type '${BUILD_TYPE}', defaulting to Release" >&2 + fi CMAKE_BUILD_TYPE=Release fi @@ -95,11 +98,13 @@ CMAKE_OPTIONS=( "-DOTELCPP_PROTO_PATH=${OTELCPP_PROTO_PATH}" "-DOTELCPP_THIRDPARTY_INSTALL_LIST=${THIRDPARTY_PACKAGES}" ) -CMAKE_BUILD_ARGS=(--clean-first --parallel "$(nproc)") +CMAKE_BUILD_ARGS=(--clean-first --parallel) -if [[ "${OTELCPP_CMAKE_VERBOSE_BUILD:-OFF}" =~ ^(1|ON|on|TRUE|true|YES|yes)$ ]]; then +shopt -s nocasematch +if [[ "${OTELCPP_CMAKE_VERBOSE_BUILD:-OFF}" =~ ^(1|ON|TRUE|YES)$ ]]; then CMAKE_BUILD_ARGS+=(--verbose) fi +shopt -u nocasematch if command -v ninja >/dev/null 2>&1; then CMAKE_OPTIONS+=("-G" "Ninja")