]> git.proxmox.com Git - ceph.git/blob - ceph/cmake/modules/BuildOpentelemetry.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / cmake / modules / BuildOpentelemetry.cmake
1 function(target_create _target _lib)
2 add_library(${_target} STATIC IMPORTED)
3 set_target_properties(
4 ${_target} PROPERTIES IMPORTED_LOCATION
5 "${opentelemetry_BINARY_DIR}/${_lib}")
6 endfunction()
7
8 function(build_opentelemetry)
9 set(opentelemetry_SOURCE_DIR "${PROJECT_SOURCE_DIR}/src/jaegertracing/opentelemetry-cpp")
10 set(opentelemetry_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/opentelemetry-cpp")
11 set(opentelemetry_cpp_targets opentelemetry_trace opentelemetry_exporter_jaeger_trace)
12 set(opentelemetry_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
13 -DWITH_JAEGER=ON
14 -DBUILD_TESTING=OFF
15 -DCMAKE_BUILD_TYPE=Release
16 -DWITH_EXAMPLES=OFF)
17
18 set(opentelemetry_libs
19 ${opentelemetry_BINARY_DIR}/sdk/src/trace/libopentelemetry_trace.a
20 ${opentelemetry_BINARY_DIR}/sdk/src/resource/libopentelemetry_resources.a
21 ${opentelemetry_BINARY_DIR}/sdk/src/common/libopentelemetry_common.a
22 ${opentelemetry_BINARY_DIR}/exporters/jaeger/libopentelemetry_exporter_jaeger_trace.a
23 ${opentelemetry_BINARY_DIR}/ext/src/http/client/curl/libopentelemetry_http_client_curl.a
24 ${CURL_LIBRARIES}
25 )
26 set(opentelemetry_include_dir ${opentelemetry_SOURCE_DIR}/api/include/
27 ${opentelemetry_SOURCE_DIR}/exporters/jaeger/include/
28 ${opentelemetry_SOURCE_DIR}/ext/include/
29 ${opentelemetry_SOURCE_DIR}/sdk/include/)
30 # TODO: add target based propogation
31 set(opentelemetry_deps opentelemetry_trace opentelemetry_resources opentelemetry_common
32 opentelemetry_exporter_jaeger_trace http_client_curl
33 ${CURL_LIBRARIES})
34
35 if(CMAKE_MAKE_PROGRAM MATCHES "make")
36 # try to inherit command line arguments passed by parent "make" job
37 set(make_cmd $(MAKE) ${opentelemetry_cpp_targets})
38 else()
39 set(make_cmd ${CMAKE_COMMAND} --build <BINARY_DIR> --target
40 ${opentelemetry_cpp_targets})
41 endif()
42
43 if(WITH_SYSTEM_BOOST)
44 list(APPEND opentelemetry_CMAKE_ARGS -DBOOST_ROOT=${BOOST_ROOT})
45 else()
46 list(APPEND dependencies Boost)
47 list(APPEND opentelemetry_CMAKE_ARGS -DBoost_INCLUDE_DIR=${CMAKE_BINARY_DIR}/boost/include)
48 endif()
49
50 include(ExternalProject)
51 ExternalProject_Add(opentelemetry-cpp
52 SOURCE_DIR ${opentelemetry_SOURCE_DIR}
53 PREFIX "opentelemetry-cpp"
54 CMAKE_ARGS ${opentelemetry_CMAKE_ARGS}
55 BUILD_COMMAND ${make_cmd}
56 BINARY_DIR ${opentelemetry_BINARY_DIR}
57 INSTALL_COMMAND ""
58 BUILD_BYPRODUCTS ${opentelemetry_libs}
59 DEPENDS ${dependencies}
60 LOG_BUILD ON)
61
62 # CMake doesn't allow to add a list of libraries to the import property, hence
63 # we create individual targets and link their libraries which finally
64 # interfaces to opentelemetry target
65 target_create("opentelemetry_trace" "sdk/src/trace/libopentelemetry_trace.a")
66 target_create("opentelemetry_resources"
67 "sdk/src/resource/libopentelemetry_resources.a")
68 target_create("opentelemetry_common"
69 "sdk/src/common/libopentelemetry_common.a")
70 target_create("opentelemetry_exporter_jaeger_trace"
71 "exporters/jaeger/libopentelemetry_exporter_jaeger_trace.a")
72 target_create("http_client_curl"
73 "ext/src/http/client/curl/libopentelemetry_http_client_curl.a")
74
75 # will do all linking and path setting fake include path for
76 # interface_include_directories since this happens at build time
77 file(MAKE_DIRECTORY ${opentelemetry_include_dir})
78 add_library(opentelemetry::libopentelemetry INTERFACE IMPORTED)
79 add_dependencies(opentelemetry::libopentelemetry opentelemetry-cpp)
80 set_target_properties(
81 opentelemetry::libopentelemetry
82 PROPERTIES
83 INTERFACE_LINK_LIBRARIES "${opentelemetry_deps}"
84 INTERFACE_INCLUDE_DIRECTORIES "${opentelemetry_include_dir}")
85 endfunction()