Skip to content
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
af81ddd
add cmake components to group targets
dbarker Dec 23, 2024
bd6685d
fix markdown lint errors
dbarker Dec 23, 2024
4cef852
fix default case to include all components in the package
dbarker Dec 23, 2024
80a3cb3
remove unused opentelemetry_ext dependency from the otlp grpc client
dbarker Dec 24, 2024
6d6c2c9
the ext target is used by the grpc client but can be private
dbarker Jan 8, 2025
d2d2608
Merge branch 'main' into feature_add_cmake_package_components
dbarker Jan 8, 2025
7ade45b
Merge branch 'main' into feature_add_cmake_package_components
dbarker Feb 10, 2025
74d5f74
adds the COMPONENT name to export sets, file sets, and installs. Brea…
dbarker Feb 17, 2025
96e2e96
add missing copyright and license statements. Set LD_LIBRARY path to …
dbarker Feb 17, 2025
d3d171c
update the cmake_install_test runner image to ubuntu 24.04 to pull in…
dbarker Feb 17, 2025
5dadf7a
fix gihub workflow yaml to use correct syntacx for accessing env vars
dbarker Feb 17, 2025
d3d0db7
set the install path in the run statement
dbarker Feb 17, 2025
56e6654
Merge branch 'main' into feature_add_cmake_package_components
dbarker Feb 17, 2025
ca4a507
move cmake install tests to a top level install dir. Clean up comment…
dbarker Feb 18, 2025
e239be7
set -E when calling the install scripts
dbarker Feb 18, 2025
8cefb13
Merge branch 'main' into feature_add_cmake_package_components
owent Feb 19, 2025
0392f48
Merge branch 'main' into feature_add_cmake_package_components
dbarker Feb 24, 2025
60a21af
make nlohmann_json a build time dependency only for otlp file and otl…
dbarker Mar 6, 2025
a6aaede
Merge remote-tracking branch 'origin/main' into feature_add_cmake_pac…
dbarker Mar 6, 2025
66088b1
format fix
dbarker Mar 6, 2025
50aee21
fix markdown table alignment. Add changelog entry
dbarker Mar 7, 2025
2a8f682
Merge remote-tracking branch 'origin/main' into feature_add_cmake_pac…
dbarker Mar 25, 2025
28be5f9
windows components install tests
dbarker Mar 24, 2025
b189f7e
record thirdparty dependency versions on install. Use module search m…
dbarker Mar 24, 2025
218e8f7
conan package install support. DockerFile that uses conan to install …
dbarker Mar 24, 2025
7299995
update install.md with the version
dbarker Mar 25, 2025
b028914
add curl link to zipkin test
dbarker Mar 25, 2025
d2a423e
fix opentracing and dll test in ci scripts. add opentracing to the co…
dbarker Mar 25, 2025
0591dba
add build config messages to the main cmake file
dbarker Mar 25, 2025
89c2acb
move cmake install test to a separate gitlab workflow
dbarker Mar 25, 2025
70c3232
fix shellcheck error
dbarker Mar 25, 2025
cefd815
Merge remote-tracking branch 'origin/main' into feature_add_cmake_pac…
dbarker Mar 31, 2025
2863321
upgrade 20.04 cmake install test runner to 22.04
dbarker Mar 31, 2025
594d158
Merge remote-tracking branch 'origin/main' into feature_add_cmake_pac…
dbarker Apr 2, 2025
560a374
pin cmake version in the cmake install test workflow
dbarker Apr 2, 2025
3c1f8e7
remove abseil as a public dependency. update install notes on how to …
dbarker Apr 2, 2025
98cc8cf
fix format issues
dbarker Apr 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -550,8 +550,11 @@ jobs:
./ci/do_ci.sh cmake.exporter.otprotocol.shared_libs.with_static_grpc.test

cmake_install_test:
name: CMake install test (with abseil)
runs-on: ubuntu-20.04
name: CMake install test
runs-on: ubuntu-24.04
env:
INSTALL_TEST_DIR: '/home/runner/install_test'
CXX_STANDARD: '17'
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -560,12 +563,21 @@ jobs:
run: |
sudo -E ./ci/setup_googletest.sh
sudo -E ./ci/setup_ci_environment.sh
- name: run cmake install (with abseil)
- name: install dependencies
env:
ABSEIL_CPP_VERSION: '20230125.3'
PROTOBUF_VERSION: '23.3'
GRPC_VERSION: 'v1.55.0'
run: |
sudo -E ./ci/install_abseil.sh
sudo -E ./ci/install_protobuf.sh
sudo -E ./ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf -p abseil
- name: build and test
run: |
sudo ./ci/install_abseil.sh
./ci/do_ci.sh cmake.install.test
- name: verify packages
run: |
export PKG_CONFIG_PATH=$INSTALL_TEST_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
./ci/verify_packages.sh

plugin_test:
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ Increment the:
* [DEVCONTAINER] Support customization and run as non-root user
[#3270](https://github.com/open-telemetry/opentelemetry-cpp/pull/3270)

* [INSTALL] Add support for cmake components to the package
[#3270](https://github.com/open-telemetry/opentelemetry-cpp/pull/3220)

Important changes:

* [SDK] Support OTEL_SDK_DISABLED environment variable
Expand Down
32 changes: 17 additions & 15 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,8 @@ if(WITH_PROMETHEUS)
endif()
endif()

message(STATUS "Building WITH_ABSEIL=${WITH_ABSEIL}")

if(WITH_ABSEIL)
if(NOT TARGET absl::strings)
find_package(absl CONFIG REQUIRED)
Expand Down Expand Up @@ -779,35 +781,35 @@ if(OPENTELEMETRY_INSTALL)
# Write config file for find_packages(opentelemetry-cpp CONFIG)
set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/cmake/opentelemetry-cpp-config.cmake.in"
"${CMAKE_CURRENT_LIST_DIR}/cmake/templates/opentelemetry-cpp-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
PATH_VARS OPENTELEMETRY_ABI_VERSION_NO OPENTELEMETRY_VERSION PROJECT_NAME
INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR)

# Write version file for find_packages(opentelemetry-cpp CONFIG)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake"
VERSION ${OPENTELEMETRY_VERSION}
COMPATIBILITY ExactVersion)

# Write the "BUILT_WITH_<dependency" flags for use in the
# opentelemetry-cpp-config.cmake
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/thirdparty-built-with-flags.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/thirdparty-built-with-flags.cmake"
@ONLY)

install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")

# Export all components
export(
EXPORT "${PROJECT_NAME}-target"
NAMESPACE "${PROJECT_NAME}::"
FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-target.cmake"
)
install(
EXPORT "${PROJECT_NAME}-target"
NAMESPACE "${PROJECT_NAME}::"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
"${CMAKE_CURRENT_BINARY_DIR}/thirdparty-built-with-flags.cmake"
"${CMAKE_CURRENT_LIST_DIR}/cmake/component-definitions.cmake"
"${CMAKE_CURRENT_LIST_DIR}/cmake/thirdparty-dependency-definitions.cmake"
"${CMAKE_CURRENT_LIST_DIR}/cmake/find-package-support-functions.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
COMPONENT cmake-config)

if(BUILD_PACKAGE)
include(cmake/package.cmake)
Expand Down
68 changes: 68 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,74 @@ target_include_directories(foo PRIVATE ${OPENTELEMETRY_CPP_INCLUDE_DIRS})
target_link_libraries(foo PRIVATE ${OPENTELEMETRY_CPP_LIBRARIES})
```

#### Using opentelemetry-cpp package components

> **Note:** `opentelemetry-cpp` CMake package components were introduced in `v.TODO`.
> **Status:** [`Development`](https://opentelemetry.io/docs/specs/otel/document-status/)

The `opentelemetry-cpp` package includes components to enable selective inclusion
of its CMake targets and their dependencies using the `COMPONENTS` argument to
`find_package`. The following example illustrates using this feature to include
and link the `api` header only target to an instrumented `foo_lib` while only including
and linking the `sdk` and `otlp_grpc_exporter` targets to the `foo_app`.

```cmake
# foo_lib/CMakeLists.txt
find_package(opentelemetry-cpp CONFIG REQUIRED COMPONENTS api)
add_library(foo_lib foo.cpp)
target_link_libraries(foo_lib PRIVATE opentelemetry-cpp::api)
```

```cmake
# foo_app/CMakeLists.txt
find_package(opentelemetry-cpp CONFIG REQUIRED COMPONENTS api sdk exporters_otlp_grpc)
add_executable(foo_app main.cpp)
target_link_libraries(foo_app PRIVATE foo_lib opentelemetry-cpp::api opentelemetry-cpp::sdk opentelemetry-cpp::otlp_grpc_exporter )
```

The following table provides the mapping between components and targets. Components
and targets available in the installation depends on the opentelemetry-cpp package
build configuration.

| Component | Targets |
|----------------------------|--------------------------------------------------------------------------------------------------|
| **api** | opentelemetry-cpp::api |
| **sdk** | opentelemetry-cpp::sdk |
| | opentelemetry-cpp::version |
| | opentelemetry-cpp::common |
| | opentelemetry-cpp::resources |
| | opentelemetry-cpp::trace |
| | opentelemetry-cpp::metrics |
| | opentelemetry-cpp::logs |
| **ext_common** | opentelemetry-cpp::ext |
| **ext_http_curl** | opentelemetry-cpp::http_client_curl |
| **ext_dll** | opentelemetry-cpp::opentelemetry_cpp |
| **exporters_in_memory** | opentelemetry-cpp::in_memory_span_exporter |
| | opentelemetry-cpp::in_memory_metric_exporter |
| **exporters_ostream** | opentelemetry-cpp::ostream_log_record_exporter |
| | opentelemetry-cpp::ostream_metrics_exporter |
| | opentelemetry-cpp::ostream_span_exporter |
| **exporters_otlp_common** | opentelemetry-cpp::proto |
| | opentelemetry-cpp::otlp_recordable |
| **exporters_otlp_file** | opentelemetry-cpp::otlp_file_client |
| | opentelemetry-cpp::otlp_file_exporter |
| | opentelemetry-cpp::otlp_file_log_record_exporter |
| | opentelemetry-cpp::otlp_file_metric_exporter |
| **exporters_otlp_grpc** | opentelemetry-cpp::proto_grpc |
| | opentelemetry-cpp::otlp_grpc_client |
| | opentelemetry-cpp::otlp_grpc_exporter |
| | opentelemetry-cpp::otlp_grpc_log_record_exporter |
| | opentelemetry-cpp::otlp_grpc_metrics_exporter |
| **exporters_otlp_http** | opentelemetry-cpp::otlp_http_client |
| | opentelemetry-cpp::otlp_http_exporter |
| | opentelemetry-cpp::otlp_http_log_record_exporter |
| | opentelemetry-cpp::otlp_http_metric_exporter |
| **exporters_prometheus** | opentelemetry-cpp::prometheus_exporter |
| **exporters_elasticsearch**| opentelemetry-cpp::elasticsearch_log_record_exporter |
| **exporters_etw** | opentelemetry-cpp::etw_exporter |
| **exporters_zipkin** | opentelemetry-cpp::zipkin_trace_exporter |
| **shims_opentracing** | opentelemetry-cpp::opentracing_shim |

## Build instructions using Bazel

NOTE: Experimental, and not supported for all the components. Make sure the
Expand Down
12 changes: 10 additions & 2 deletions api/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,25 @@ set_target_properties(opentelemetry_api PROPERTIES EXPORT_NAME api)
if(OPENTELEMETRY_INSTALL)
install(
TARGETS opentelemetry_api
EXPORT "${PROJECT_NAME}-target"
EXPORT "${PROJECT_NAME}-api-target"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT api)

install(
DIRECTORY include/opentelemetry
DESTINATION include
COMPONENT api
FILES_MATCHING
PATTERN "*.h")

install(
EXPORT "${PROJECT_NAME}-api-target"
FILE "${PROJECT_NAME}-api-target.cmake"
NAMESPACE "${PROJECT_NAME}::"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
COMPONENT api)

unset(TARGET_DEPS)
endif()

Expand Down
33 changes: 30 additions & 3 deletions ci/do_ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ function run_benchmarks
mkdir -p "${BUILD_DIR}"
[ -z "${PLUGIN_DIR}" ] && export PLUGIN_DIR=$HOME/plugin
mkdir -p "${PLUGIN_DIR}"
[ -z "${INSTALL_TEST_DIR}" ] && export INSTALL_TEST_DIR=$HOME/install_test
mkdir -p "${INSTALL_TEST_DIR}"

MAKE_COMMAND="make -k -j \$(nproc)"

Expand Down Expand Up @@ -230,12 +232,21 @@ elif [[ "$1" == "cmake.abseil.test" ]]; then
elif [[ "$1" == "cmake.opentracing_shim.test" ]]; then
cd "${BUILD_DIR}"
rm -rf *
rm -rf ${INSTALL_TEST_DIR}/*
cmake "${CMAKE_OPTIONS[@]}" \
-DCMAKE_CXX_FLAGS="-Werror -Wno-error=redundant-move $CXXFLAGS" \
-DWITH_OPENTRACING=ON \
-DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \
"${SRC_DIR}"
make -j $(nproc)
make test
make install
export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"
cmake -S "${SRC_DIR}/install/test/cmake" \
-B "${BUILD_DIR}/install_test" \
"-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \
"-DCOMPONENTS_TO_TEST=shims_opentracing"
ctest --test-dir "${BUILD_DIR}/install_test" --output-on-failure
exit 0
elif [[ "$1" == "cmake.c++20.test" ]]; then
cd "${BUILD_DIR}"
Expand Down Expand Up @@ -414,14 +425,30 @@ elif [[ "$1" == "cmake.do_not_install.test" ]]; then
elif [[ "$1" == "cmake.install.test" ]]; then
cd "${BUILD_DIR}"
rm -rf *
rm -rf ${INSTALL_TEST_DIR}/*
cmake "${CMAKE_OPTIONS[@]}" \
-DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} \
-DWITH_ABSEIL=ON \
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
-DWITH_ABSEIL=ON \
-DWITH_OTLP_GRPC=ON \
-DWITH_OTLP_HTTP=ON \
-DWITH_OTLP_FILE=ON \
-DWITH_OTLP_HTTP_COMPRESSION=ON \
-DWITH_HTTP_CLIENT_CURL=ON \
-DWITH_PROMETHEUS=ON \
-DWITH_ZIPKIN=ON \
-DWITH_ELASTICSEARCH=ON \
-DOPENTELEMETRY_INSTALL=ON \
"${SRC_DIR}"
make -j $(nproc)
sudo make install
make install
export LD_LIBRARY_PATH="${INSTALL_TEST_DIR}/lib:$LD_LIBRARY_PATH"
cmake -S "${SRC_DIR}/install/test/cmake" \
-B "${BUILD_DIR}/install_test" \
"-DCMAKE_PREFIX_PATH=${INSTALL_TEST_DIR}" \
"-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"
ctest --test-dir "${BUILD_DIR}/install_test" --output-on-failure
exit 0
elif [[ "$1" == "cmake.test_example_plugin" ]]; then
# Build the plugin
Expand Down
Loading
Loading