diff options
Diffstat (limited to 'cmake/modules/BuildOpentelemetry.cmake')
-rw-r--r-- | cmake/modules/BuildOpentelemetry.cmake | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/cmake/modules/BuildOpentelemetry.cmake b/cmake/modules/BuildOpentelemetry.cmake new file mode 100644 index 000000000..ba2edaa09 --- /dev/null +++ b/cmake/modules/BuildOpentelemetry.cmake @@ -0,0 +1,85 @@ +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 "${PROJECT_SOURCE_DIR}/src/jaegertracing/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 + -DCMAKE_BUILD_TYPE=Release + -DWITH_EXAMPLES=OFF) + + 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/libopentelemetry_http_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/) + # 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(WITH_SYSTEM_BOOST) + list(APPEND opentelemetry_CMAKE_ARGS -DBOOST_ROOT=${BOOST_ROOT}) + else() + list(APPEND dependencies Boost) + list(APPEND opentelemetry_CMAKE_ARGS -DBoost_INCLUDE_DIR=${CMAKE_BINARY_DIR}/boost/include) + endif() + + include(ExternalProject) + ExternalProject_Add(opentelemetry-cpp + 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/libopentelemetry_http_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_include_dir}) + add_library(opentelemetry::libopentelemetry INTERFACE IMPORTED) + add_dependencies(opentelemetry::libopentelemetry opentelemetry-cpp) + set_target_properties( + opentelemetry::libopentelemetry + PROPERTIES + INTERFACE_LINK_LIBRARIES "${opentelemetry_deps}" + INTERFACE_INCLUDE_DIRECTORIES "${opentelemetry_include_dir}") +endfunction() |