]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cmake: replace opentracing-cpp with opentelemetry-cpp
authorDeepika Upadhyay <dupadhya@redhat.com>
Wed, 20 Oct 2021 08:02:51 +0000 (08:02 +0000)
committerDeepika Upadhyay <dupadhya@redhat.com>
Wed, 24 Nov 2021 14:29:18 +0000 (19:59 +0530)
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 <dupadhya@redhat.com>
cmake/modules/BuildJaeger.cmake
cmake/modules/BuildOpenTracing.cmake [deleted file]
cmake/modules/BuildOpentelemetry.cmake [new file with mode: 0644]
src/CMakeLists.txt

index 6a65a6bb42bd33c1874e3c83addc88a6f950bc38..5f48857fed8e65e29f4d9067bccc927a37c1c7bd 100644 (file)
@@ -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<package>.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 (file)
index 07a1ea4..0000000
+++ /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 <BINARY_DIR> --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 (file)
index 0000000..f08c14e
--- /dev/null
@@ -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 <BINARY_DIR> --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()
index 1e32e4029b84541cea7e06c79fb5a0461a7f248b..d4f4b5b0907f9d3e5f995368beb280e97046b0b0 100644 (file)
@@ -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)