From 2749ab06357d697b9b1a602dbc067dddb176063a Mon Sep 17 00:00:00 2001 From: Deepika Upadhyay Date: Wed, 20 Oct 2021 08:02:51 +0000 Subject: [PATCH] cmake: replace opentracing-cpp with opentelemetry-cpp we build and use targets needed for jaeger to work with opentelemetry referring: https://github.com/open-telemetry/opentelemetry-cpp/blob/main/examples/jaeger/CMakeLists.txt right now we need a patch for using thrift from distro packages, hence we are using GIT_FETCH based externalProject method, for development purpose, which will be replace by more reliable method in future. NOTE: phase 1, still needs to be tested. Signed-off-by: Deepika Upadhyay --- cmake/modules/BuildJaeger.cmake | 17 +++-- cmake/modules/BuildOpenTracing.cmake | 36 ----------- cmake/modules/BuildOpentelemetry.cmake | 87 ++++++++++++++++++++++++++ src/CMakeLists.txt | 17 ++--- 4 files changed, 98 insertions(+), 59 deletions(-) delete mode 100644 cmake/modules/BuildOpenTracing.cmake create mode 100644 cmake/modules/BuildOpentelemetry.cmake diff --git a/cmake/modules/BuildJaeger.cmake b/cmake/modules/BuildJaeger.cmake index 6a65a6bb42bd3..5f48857fed8e6 100644 --- a/cmake/modules/BuildJaeger.cmake +++ b/cmake/modules/BuildJaeger.cmake @@ -1,12 +1,10 @@ # This module builds Jaeger after it's dependencies are installed and discovered -# opentracing: is built using cmake/modules/Buildopentracing.cmake +# opentelemetry: is built using cmake/modules/BuildOpentelemetry.cmake # Thrift: found using cmake/modules/Findthrift.cmake (not by default) # yaml-cpp, nlhomann-json: are installed locally and then discovered using # Find.cmake # Boost Libraries: uses ceph build boost cmake/modules/BuildBoost.cmake -include(BuildOpenTracing) - # will do all linking and path setting function(set_library_properties_for_external_project _target _lib) # Manually create the directory, it will be created as part of the build, @@ -41,7 +39,7 @@ function(build_jaeger) -DCMAKE_PREFIX_PATH="${CMAKE_BINARY_DIR}/external;${CMAKE_BINARY_DIR}/boost" -DCMAKE_INSTALL_RPATH=${CMAKE_BINARY_DIR}/external -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE - -DOpenTracing_DIR=${CMAKE_SOURCE_DIR}/src/jaegertracing/opentracing-cpp + -DOpentelemetry_DIR=${CMAKE_SOURCE_DIR}/src/jaegertracing/opentelemetry-cpp -Dnlohmann_json_DIR=/usr/lib -DCMAKE_FIND_ROOT_PATH=${CMAKE_BINARY_DIR}/external -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external @@ -49,15 +47,16 @@ function(build_jaeger) -DBoost_INCLUDE_DIRS=${CMAKE_BINARY_DIR}/boost/include -DBOOST_ROOT=${CMAKE_BINARY_DIR}/boost -Dthrift_HOME=${CMAKE_BINARY_DIR}/external - -DOpenTracing_HOME=${CMAKE_BINARY_DIR}/external) + -DOpentelemetry_HOME=${CMAKE_BINARY_DIR}/external) # build these libraries along with jaeger - set(dependencies opentracing) + set(dependencies opentelemetry-cpp) if(NOT WITH_SYSTEM_BOOST) list(APPEND dependencies Boost) endif() - include(BuildOpenTracing) - build_opentracing() + + include(BuildOpentelemetry) + build_opentelemetry() if(CMAKE_MAKE_PROGRAM MATCHES "make") # try to inherit command line arguments passed by parent "make" job @@ -81,8 +80,6 @@ function(build_jaeger) BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/external/lib/libjaegertracing.so LOG_BUILD ON) - set_library_properties_for_external_project(opentracing::libopentracing - opentracing) set_library_properties_for_external_project(jaegertracing::libjaegertracing jaegertracing) endfunction() diff --git a/cmake/modules/BuildOpenTracing.cmake b/cmake/modules/BuildOpenTracing.cmake deleted file mode 100644 index 07a1ea44d1c05..0000000000000 --- a/cmake/modules/BuildOpenTracing.cmake +++ /dev/null @@ -1,36 +0,0 @@ -function(build_opentracing) - set(opentracing_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/jaegertracing/opentracing-cpp") - set(opentracing_BINARY_DIR "${CMAKE_BINARY_DIR}/external/opentracing-cpp") - - set(opentracing_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON - -DBUILD_MOCKTRACER=OFF - -DENABLE_LINTING=OFF - -DBUILD_STATIC_LIBS=OFF - -DBUILD_TESTING=OFF - -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external - -DCMAKE_INSTALL_RPATH=${CMAKE_BINARY_DIR}/external - -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE - -DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/external/lib - -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/external) - - if(CMAKE_MAKE_PROGRAM MATCHES "make") - # try to inherit command line arguments passed by parent "make" job - set(make_cmd $(MAKE) opentracing) - else() - set(make_cmd ${CMAKE_COMMAND} --build --target opentracing) - endif() - set(install_cmd DESTDIR= ${CMAKE_MAKE_PROGRAM} install) - - include(ExternalProject) - ExternalProject_Add(opentracing - SOURCE_DIR ${opentracing_SOURCE_DIR} - UPDATE_COMMAND "" - INSTALL_DIR "external" - PREFIX "external/opentracing-cpp" - CMAKE_ARGS ${opentracing_CMAKE_ARGS} - BUILD_IN_SOURCE 1 - BUILD_COMMAND ${make_cmd} - INSTALL_COMMAND ${install_cmd} - BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/external/lib/libopentracing.so - LOG_BUILD ON) -endfunction() diff --git a/cmake/modules/BuildOpentelemetry.cmake b/cmake/modules/BuildOpentelemetry.cmake new file mode 100644 index 0000000000000..f08c14ecf7f96 --- /dev/null +++ b/cmake/modules/BuildOpentelemetry.cmake @@ -0,0 +1,87 @@ +function(target_create _target _lib) + add_library(${_target} STATIC IMPORTED) + set_target_properties( + ${_target} PROPERTIES IMPORTED_LOCATION + "${opentelemetry_BINARY_DIR}/${_lib}") +endfunction() + +function(build_opentelemetry) + set(opentelemetry_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/opentelemetry-cpp") + set(opentelemetry_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/opentelemetry-cpp") + set(opentelemetry_cpp_targets opentelemetry_trace opentelemetry_exporter_jaeger_trace) + set(opentelemetry_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DWITH_JAEGER=ON + -DBUILD_TESTING=OFF + -DWITH_EXAMPLES=OFF + -DBoost_INCLUDE_DIRS=${CMAKE_BINARY_DIR}/boost/include) + + set(opentelemetry_libs + ${opentelemetry_BINARY_DIR}/sdk/src/trace/libopentelemetry_trace.a + ${opentelemetry_BINARY_DIR}/sdk/src/resource/libopentelemetry_resources.a + ${opentelemetry_BINARY_DIR}/sdk/src/common/libopentelemetry_common.a + ${opentelemetry_BINARY_DIR}/exporters/jaeger/libopentelemetry_exporter_jaeger_trace.a + ${opentelemetry_BINARY_DIR}/ext/src/http/client/curl/libhttp_client_curl.a + ${CURL_LIBRARIES} + ) + set(opentelemetry_include_dir ${opentelemetry_SOURCE_DIR}/api/include/ + ${opentelemetry_SOURCE_DIR}/exporters/jaeger/include/ + ${opentelemetry_SOURCE_DIR}/ext/include/ + ${opentelemetry_SOURCE_DIR}/sdk/include/) + include_directories(SYSTEM ${opentelemetry_include_dir}) + # TODO: add target based propogation + set(opentelemetry_deps opentelemetry_trace opentelemetry_resources opentelemetry_common + opentelemetry_exporter_jaeger_trace http_client_curl + ${CURL_LIBRARIES}) + + if(CMAKE_MAKE_PROGRAM MATCHES "make") + # try to inherit command line arguments passed by parent "make" job + set(make_cmd $(MAKE) ${opentelemetry_cpp_targets}) + else() + set(make_cmd ${CMAKE_COMMAND} --build --target + ${opentelemetry_cpp_targets}) + endif() + + if(NOT WITH_SYSTEM_BOOST) + list(APPEND dependencies Boost) + endif() + + include(ExternalProject) + ExternalProject_Add( + opentelemetry-cpp + GIT_REPOSITORY https://github.com/ideepika/opentelemetry-cpp.git + GIT_TAG wip-ceph + GIT_SHALLOW 1 + SOURCE_DIR ${opentelemetry_SOURCE_DIR} + PREFIX "opentelemetry-cpp" + CMAKE_ARGS ${opentelemetry_CMAKE_ARGS} + BUILD_COMMAND ${make_cmd} + BINARY_DIR ${opentelemetry_BINARY_DIR} + INSTALL_COMMAND "" + BUILD_BYPRODUCTS ${opentelemetry_libs} + DEPENDS ${dependencies} + LOG_BUILD ON) + + # CMake doesn't allow to add a list of libraries to the import property, hence + # we create individual targets and link their libraries which finally + # interfaces to opentelemetry target + target_create("opentelemetry_trace" "sdk/src/trace/libopentelemetry_trace.a") + target_create("opentelemetry_resources" + "sdk/src/resource/libopentelemetry_resources.a") + target_create("opentelemetry_common" + "sdk/src/common/libopentelemetry_common.a") + target_create("opentelemetry_exporter_jaeger_trace" + "exporters/jaeger/libopentelemetry_exporter_jaeger_trace.a") + target_create("http_client_curl" + "ext/src/http/client/curl/libhttp_client_curl.a") + + # will do all linking and path setting fake include path for + # interface_include_directories since this happens at build time + file(MAKE_DIRECTORY + "${opentelemetry_BINARY_DIR}/opentelemetry-cpp/exporters/jaeger/include") + add_library(opentelemetry::libopentelemetry INTERFACE IMPORTED) + add_dependencies(opentelemetry::libopentelemetry opentelemetry-cpp) + set_target_properties( + opentelemetry::libopentelemetry + PROPERTIES + INTERFACE_LINK_LIBRARIES "${opentelemetry_deps}") +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1e32e4029b845..d4f4b5b0907f9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -429,22 +429,13 @@ add_dependencies(common-objs legacy-option-headers) if(WITH_JAEGER) find_package(thrift 0.13.0 REQUIRED) - find_package(yaml-cpp 0.6.0 REQUIRED) - include(BuildJaeger) - list(APPEND jaeger_base - opentracing::libopentracing - jaegertracing::libjaegertracing) - - build_jaeger() - - include_directories(${CMAKE_BINARY_DIR}/external/include) - # for testing jaeger build - add_custom_target(jaeger_base DEPENDS ${jaeger_base}) - add_library(jaeger-base INTERFACE) + include(BuildOpentelemetry) + build_opentelemetry() + set(jaeger_base opentelemetry::libopentelemetry thrift::libthrift) add_dependencies(common-objs ${jaeger_base}) target_link_libraries(jaeger-base INTERFACE yaml-cpp::yaml-cpp - opentracing::libopentracing + opentelemetry::libopentelemetry thrift::libthrift jaegertracing::libjaegertracing) -- 2.39.5