diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 8d90430..3e8b4e5 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -15,14 +15,16 @@ jobs: uses: actions/checkout@v3 with: path: opentelemetry-matlab + - name: Install ninja-build + run: sudo apt-get install ninja-build - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: products: MATLAB_Compiler - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab run: | - cd opentelemetry-matlab - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Run tests env: @@ -46,8 +48,8 @@ jobs: with: products: MATLAB_Compiler - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab run: | - cd opentelemetry-matlab cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Run tests @@ -67,14 +69,16 @@ jobs: uses: actions/checkout@v3 with: path: opentelemetry-matlab + - name: Install ninja-build + run: brew install ninja - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: products: MATLAB_Compiler - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab run: | - cd opentelemetry-matlab - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Run tests env: diff --git a/.github/workflows/publish_mltbx.yml b/.github/workflows/publish_mltbx.yml index 072010e..6f39e46 100644 --- a/.github/workflows/publish_mltbx.yml +++ b/.github/workflows/publish_mltbx.yml @@ -15,14 +15,16 @@ jobs: uses: actions/checkout@v3 with: path: opentelemetry-matlab + - name: Install ninja-build + run: sudo apt-get install ninja-build - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: products: MATLAB_Compiler - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab run: | - cd opentelemetry-matlab - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Compress into single artifact working-directory: ${{ github.workspace }} @@ -46,8 +48,8 @@ jobs: with: products: MATLAB_Compiler - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab run: | - cd opentelemetry-matlab cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Compress into single artifact @@ -67,14 +69,16 @@ jobs: uses: actions/checkout@v3 with: path: opentelemetry-matlab + - name: Install ninja-build + run: brew install ninja - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: products: MATLAB_Compiler - name: Build OpenTelemetry-Matlab + working-directory: opentelemetry-matlab run: | - cd opentelemetry-matlab - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} + cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWITH_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=${{ env.OPENTELEMETRY_MATLAB_INSTALL }} cmake --build build --config Release --target install - name: Compress into single artifact working-directory: ${{ github.workspace }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d50cb8..d12a423 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,22 +122,55 @@ FetchContent_MakeAvailable( # OpenTelemetry-cpp # ########################### +# Determine OTEL_CPP_PREFIX if(DEFINED OTEL_CPP_INSTALLED_DIR) - # OTEL_CPP_INSTALLED_DIR should point to an installed location of OpenTelemetry-cpp + # Set OTEL_CPP_INSTALLED_DIR to use a pre-installed OpenTelemetry-cpp + # It should point to the installed location string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_INSTALLED_DIR}) +elseif(DEFINED OTEL_CPP_PREFIX) + # Set OTEL_CPP_PREFIX to specify an install location of the automatically + # downloaded and built OpenTelemetry-cpp, instead of using the default + # location with the build directory. This can preserve the OpenTelemetry-cpp + # install even if the build directory is removed. + string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX}) else() + set(OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR}/otel-cpp) +endif() + +if(WIN32) + set(OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) +else() + set(OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) +endif() + +set(OTEL_CPP_LIBRARIES ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_common${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_otlp_recordable${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto${OTEL_PROTO_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_resources${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}) +if(WITH_OTLP_HTTP) + set(OTEL_CPP_LIBRARIES ${OTEL_CPP_LIBRARIES} ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX}) +endif() +if(WITH_OTLP_GRPC) + set(OTEL_CPP_LIBRARIES ${OTEL_CPP_LIBRARIES} ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX} + ${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX}) +endif() + +if(NOT DEFINED OTEL_CPP_INSTALLED_DIR) # No installed location supplied. Fetch it as an external project include(ExternalProject) set(OTEL_CPP_PROJECT_NAME opentelemetry-cpp) set(OTEL_CPP_GIT_REPOSITORY "https://github.com/open-telemetry/opentelemetry-cpp.git") set(OTEL_CPP_GIT_TAG "a799f4a") - if(DEFINED OTEL_CPP_PREFIX) - string(REPLACE "\\" "/" OTEL_CPP_PREFIX ${OTEL_CPP_PREFIX}) - else() - set(OTEL_CPP_PREFIX ${CMAKE_BINARY_DIR}/otel-cpp) - endif() - set(OTEL_CPP_CXX_STANDARD 14) if(NOT APPLE OR SKIP_OTEL_CPP_PATCH) @@ -154,6 +187,7 @@ else() UPDATE_DISCONNECTED 1 PATCH_COMMAND ${patch_command} 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} + BUILD_BYPRODUCTS ${OTEL_CPP_LIBRARIES} INSTALL_DIR ${OTEL_CPP_PREFIX} INSTALL_COMMAND ${CMAKE_COMMAND} --install . --prefix ${OTEL_CPP_PREFIX} ) @@ -259,6 +293,10 @@ libmexclass_client_add_proxy_library( INCLUDE_DIRS ${OPENTELEMETRY_PROXY_INCLUDE_DIRS} ) +if(NOT DEFINED OTEL_CPP_INSTALLED_DIR) + add_dependencies(${OPENTELEMETRY_PROXY_LIBRARY_NAME} ${OTEL_CPP_PROJECT_NAME}) +endif() + # Additional compiler flags for HTTP/gRPC exporters if(WITH_OTLP_HTTP) if(WIN32) @@ -281,42 +319,23 @@ if(WIN32) set(CUSTOM_CXX_FLAGS -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING) # pass in version number set(OTLP_MACROS ${OTLP_MACROS} /DOTEL_MATLAB_VERSION="${OTEL_MATLAB_VERSION}") - set(OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) else() set(CUSTOM_CXX_FLAGS "") set(OTLP_MACROS ${OTLP_MACROS} "-D OTEL_MATLAB_VERSION=\"${OTEL_MATLAB_VERSION}\"") - set(OTEL_PROTO_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) endif() target_compile_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_MACROS} ${CUSTOM_CXX_FLAGS}) # link against OpenTelemetry-cpp libraries and their dependencies -set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_common${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_otlp_recordable${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto${OTEL_PROTO_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_resources${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX} - ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY}) +set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OTEL_CPP_LIBRARIES} ${Protobuf_LIBRARIES} ${Matlab_MEX_LIBRARY}) if(WITH_OTLP_HTTP) - set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_LINK_LIBRARIES} ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX} - ${CURL_LIBRARIES}) + set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} ${CURL_LIBRARIES}) endif() if(WITH_OTLP_GRPC) - set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_LINK_LIBRARIES} ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX} - ${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX} - gRPC::grpc++ - absl::synchronization) + set(OPENTELEMETRY_PROXY_LINK_LIBRARIES ${OPENTELEMETRY_PROXY_LINK_LIBRARIES} gRPC::grpc++ absl::synchronization) endif() -target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTEL_CPP_LINK_LIBRARIES}) +target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES}) # On Linux, when linking with certain static libraries, need to force include entire archive to avoid the linker mistakenly leaving out symbols if(UNIX AND NOT APPLE AND NOT CYGWIN) diff --git a/examples/context_propagation/CMakeLists.txt b/examples/context_propagation/CMakeLists.txt index 48693a5..03a07a0 100644 --- a/examples/context_propagation/CMakeLists.txt +++ b/examples/context_propagation/CMakeLists.txt @@ -2,9 +2,10 @@ # C++ target set(CONTEXTPROP_EXAMPLE_TARGET contextprop_example_client) add_executable(${CONTEXTPROP_EXAMPLE_TARGET} cpp/client.cc) +add_dependencies(${CONTEXTPROP_EXAMPLE_TARGET} ${OTEL_CPP_PROJECT_NAME}) target_include_directories(${CONTEXTPROP_EXAMPLE_TARGET} PRIVATE ${OTEL_CPP_PREFIX}/include) -target_link_libraries(${CONTEXTPROP_EXAMPLE_TARGET} PRIVATE ${OTEL_CPP_LINK_LIBRARIES}) +target_link_libraries(${CONTEXTPROP_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES}) if(UNIX AND NOT APPLE AND NOT CYGWIN) target_link_options(${CONTEXTPROP_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) elseif(APPLE) diff --git a/examples/webread/CMakeLists.txt b/examples/webread/CMakeLists.txt index 1e29012..320d09a 100644 --- a/examples/webread/CMakeLists.txt +++ b/examples/webread/CMakeLists.txt @@ -1,9 +1,10 @@ set(WEBREAD_EXAMPLE_TARGET webread_example_server) add_executable(${WEBREAD_EXAMPLE_TARGET} cpp/server.cc) +add_dependencies(${WEBREAD_EXAMPLE_TARGET} ${OTEL_CPP_PROJECT_NAME}) target_include_directories(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OTEL_CPP_PREFIX}/include) -target_link_libraries(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OTEL_CPP_LINK_LIBRARIES}) +target_link_libraries(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_LIBRARIES}) if(UNIX AND NOT APPLE AND NOT CYGWIN) target_link_options(${WEBREAD_EXAMPLE_TARGET} PRIVATE ${OPENTELEMETRY_PROXY_LINK_OPTIONS}) elseif(APPLE)