Skip to content

Commit 001cbb0

Browse files
authored
Build opentelemetry-cpp if not present (#99)
1 parent 02f1565 commit 001cbb0

File tree

3 files changed

+106
-19
lines changed

3 files changed

+106
-19
lines changed

exporters/fluentd/CMakeLists.txt

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,18 @@ project(opentelemetry-fluentd)
1818

1919
add_definitions(-DHAVE_CONSOLE_LOG)
2020
add_definitions(-DENABLE_LOGS_PREVIEW)
21-
find_package(opentelemetry-cpp REQUIRED)
21+
22+
find_package(opentelemetry-cpp QUIET)
23+
if(opentelemetry_cpp_FOUND)
24+
message("Using external opentelemetry-cpp")
25+
else()
26+
include(cmake/opentelemetry-cpp.cmake)
27+
build_opentelemetry()
28+
set(OPENTELEMETRY_CPP_INCLUDE_DIRS "")
29+
set(OPENTELEMETRY_CPP_LIBRARIES "opentelemetry::libopentelemetry")
30+
message("\nopentelemetry-cpp package was not found. Cloned from github")
31+
endif()
32+
2233
find_package(nlohmann_json QUIET)
2334
set(nlohmann_json_clone FALSE)
2435
if(nlohmann_json_FOUND)
@@ -41,7 +52,8 @@ target_link_libraries(
4152
opentelemetry_exporter_fluentd_trace
4253
PUBLIC ${OPENTELEMETRY_CPP_LIBRARIES}
4354
INTERFACE nlohmann_json::nlohmann_json)
44-
set_target_properties(opentelemetry_exporter_fluentd_trace PROPERTIES EXPORT_NAME trace)
55+
set_target_properties(opentelemetry_exporter_fluentd_trace
56+
PROPERTIES EXPORT_NAME trace)
4557

4658
# create fluentd logs exporter
4759

@@ -53,14 +65,17 @@ target_link_libraries(
5365
opentelemetry_exporter_fluentd_logs
5466
PUBLIC ${OPENTELEMETRY_CPP_LIBRARIES}
5567
INTERFACE nlohmann_json::nlohmann_json)
56-
set_target_properties(opentelemetry_exporter_fluentd_logs PROPERTIES EXPORT_NAME logs)
68+
set_target_properties(opentelemetry_exporter_fluentd_logs PROPERTIES EXPORT_NAME
69+
logs)
5770

5871
if(nlohmann_json_clone)
59-
add_dependencies(opentelemetry_exporter_fluentd_trace nlohmann_json::nlohmann_json)
60-
add_dependencies(opentelemetry_exporter_fluentd_logs nlohmann_json::nlohmann_json)
72+
add_dependencies(opentelemetry_exporter_fluentd_trace
73+
nlohmann_json::nlohmann_json)
74+
add_dependencies(opentelemetry_exporter_fluentd_logs
75+
nlohmann_json::nlohmann_json)
6176
include_directories(${PROJECT_BINARY_DIR}/include)
6277
endif()
63-
78+
6479
add_subdirectory(example)
6580

6681
install(
@@ -124,8 +139,8 @@ if(BUILD_TESTING)
124139
opentelemetry_exporter_fluentd_logs)
125140

126141
if(nlohmann_json_clone)
127-
add_dependencies(fluentd_recordable_logs_test nlohmann_json::nlohmann_json)
128-
endif()
142+
add_dependencies(fluentd_recordable_logs_test nlohmann_json::nlohmann_json)
143+
endif()
129144

130145
gtest_add_tests(
131146
TARGET fluentd_recordable_logs_test
@@ -137,20 +152,21 @@ endif() # BUILD_TESTING
137152
include(GNUInstallDirs)
138153
include(CMakePackageConfigHelpers)
139154

140-
set(OPENTELEMETRY_CPP_FLUENTD_VERSION, "0.1.0")
155+
set(OPENTELEMETRY_CPP_FLUENTD_VERSION "1.1.1")
141156
set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
142157
configure_package_config_file(
143-
"${CMAKE_CURRENT_LIST_DIR}/cmake/opentelemetry-cpp-fluentd-config.cmake.in"
144-
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake"
145-
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
146-
#PATH_VARS OPENTELEMETRY_CPP_FLUENTD_VERSION PROJECT_NAME INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR
147-
PATH_VARS PROJECT_NAME INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR
148-
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
158+
"${CMAKE_CURRENT_LIST_DIR}/cmake/opentelemetry-cpp-fluentd-config.cmake.in"
159+
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake"
160+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
161+
# PATH_VARS OPENTELEMETRY_CPP_FLUENTD_VERSION PROJECT_NAME INCLUDE_INSTALL_DIR
162+
# CMAKE_INSTALL_LIBDIR
163+
PATH_VARS PROJECT_NAME INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR
164+
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
149165

150166
# Write version file for find_packages(opentelemetry-cpp-fluentd CONFIG)
151167
write_basic_package_version_file(
152168
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake"
153-
VERSION ${OPENTELEMETRY_VERSION}
169+
VERSION ${OPENTELEMETRY_CPP_FLUENTD_VERSION}
154170
COMPATIBILITY ExactVersion)
155171

156172
install(
@@ -165,4 +181,3 @@ export(
165181
NAMESPACE "${PROJECT_NAME}::"
166182
FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-target.cmake"
167183
)
168-
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
if("${opentelemetry-cpp-tag}" STREQUAL "")
2+
set(opentelemetry-cpp-tag "v1.1.1")
3+
endif()
4+
function(target_create _target _lib)
5+
add_library(${_target} STATIC IMPORTED)
6+
set_target_properties(
7+
${_target} PROPERTIES IMPORTED_LOCATION
8+
"${opentelemetry_BINARY_DIR}/${_lib}")
9+
endfunction()
10+
11+
function(build_opentelemetry)
12+
set(opentelemetry_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/opentelemetry-cpp")
13+
set(opentelemetry_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/opentelemetry-cpp")
14+
set(opentelemetry_cpp_targets opentelemetry_trace opentelemetry_logs http_client_curl )
15+
set(opentelemetry_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
16+
-DWITH_LOGS_PREVIEW=ON
17+
-DBUILD_TESTING=OFF
18+
-DWITH_EXAMPLES=OFF)
19+
20+
set(opentelemetry_libs
21+
${opentelemetry_BINARY_DIR}/sdk/src/trace/libopentelemetry_trace.a
22+
${opentelemetry_BINARY_DIR}/sdk/src/logs/libopentelemetry_logs.a
23+
${opentelemetry_BINARY_DIR}/sdk/src/resource/libopentelemetry_resources.a
24+
${opentelemetry_BINARY_DIR}/sdk/src/common/libopentelemetry_common.a
25+
${opentelemetry_BINARY_DIR}/ext/src/http/client/curl/libhttp_client_curl.a
26+
${CURL_LIBRARIES}
27+
)
28+
29+
set(opentelemetry_include_dir ${opentelemetry_SOURCE_DIR}/api/include/
30+
${opentelemetry_SOURCE_DIR}/ext/include/
31+
${opentelemetry_SOURCE_DIR}/sdk/include/
32+
)
33+
34+
include_directories(SYSTEM ${opentelemetry_include_dir})
35+
36+
set(opentelemetry_deps opentelemetry_trace opentelemetry_logs opentelemetry_resources opentelemetry_common
37+
http_client_curl
38+
${CURL_LIBRARIES})
39+
40+
set(make_cmd ${CMAKE_COMMAND} --build <BINARY_DIR> --target
41+
${opentelemetry_cpp_targets})
42+
43+
include(ExternalProject)
44+
ExternalProject_Add(
45+
opentelemetry-cpp
46+
GIT_REPOSITORY https://github.com/open-telemetry/opentelemetry-cpp.git
47+
GIT_TAG "${opentelemetry-cpp-tag}"
48+
GIT_SHALLOW 1
49+
GIT_SUBMODULES "third_party/opentelemetry-proto"
50+
SOURCE_DIR ${opentelemetry_SOURCE_DIR}
51+
PREFIX "opentelemetry-cpp"
52+
CMAKE_ARGS ${opentelemetry_CMAKE_ARGS}
53+
BUILD_COMMAND ${make_cmd}
54+
BINARY_DIR ${opentelemetry_BINARY_DIR}
55+
INSTALL_COMMAND ""
56+
BUILD_BYPRODUCTS ${opentelemetry_libs}
57+
DEPENDS ${dependencies}
58+
LOG_BUILD ON)
59+
60+
target_create("opentelemetry_trace" "sdk/src/trace/libopentelemetry_trace.a")
61+
target_create("opentelemetry_logs" "sdk/src/logs/libopentelemetry_logs.a")
62+
target_create("opentelemetry_resources"
63+
"sdk/src/resource/libopentelemetry_resources.a")
64+
target_create("opentelemetry_common"
65+
"sdk/src/common/libopentelemetry_common.a")
66+
target_create("http_client_curl"
67+
"ext/src/http/client/curl/libhttp_client_curl.a")
68+
add_library(opentelemetry::libopentelemetry INTERFACE IMPORTED)
69+
add_dependencies(opentelemetry::libopentelemetry opentelemetry-cpp)
70+
set_target_properties(
71+
opentelemetry::libopentelemetry
72+
PROPERTIES
73+
INTERFACE_LINK_LIBRARIES "${opentelemetry_deps}")
74+
endfunction()

exporters/fluentd/example/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
find_package(opentelemetry-cpp REQUIRED)
2-
31
include_directories(${CMAKE_SOURCE_DIR}/exporters/fluentd/include)
42

53
add_library(foo_library_trace trace/foo_library/foo_library.cc)

0 commit comments

Comments
 (0)