# 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,
-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
-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
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()
+++ /dev/null
-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()
--- /dev/null
+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()
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)