Skip to content
This repository was archived by the owner on Aug 30, 2022. It is now read-only.

Commit 359979c

Browse files
authored
Add plugin build (#82)
Signed-off-by: Isaac Hier <[email protected]>
1 parent 41c772c commit 359979c

File tree

8 files changed

+163
-27
lines changed

8 files changed

+163
-27
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

CMakeLists.txt

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/toolchain.cmake"
66
CACHE FILEPATH
77
"Toolchain to use for building this package and dependencies")
88

9+
set(HUNTER_CONFIGURATION_TYPES "Release;Debug" CACHE STRING
10+
"Configuration types used when building Hunter dependencies")
11+
912
include(CMakeDependentOption)
1013
include(HunterGate)
1114
HunterGate(
@@ -25,7 +28,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
2528
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field")
2629
endif()
2730

28-
set(CMAKE_EXPORT_COMPILE_COMMANDS true)
31+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
2932

3033
if(HUNTER_ENABLED)
3134
set(hunter_config "CONFIG")
@@ -70,9 +73,12 @@ list(APPEND package_deps nlohmann_json)
7073

7174
option(JAEGERTRACING_COVERAGE "Build with coverage" $ENV{COVERAGE})
7275
option(JAEGERTRACING_BUILD_CROSSDOCK "Build crossdock" $ENV{CROSSDOCK})
76+
if(NOT JAEGERTRACING_BUILD_CROSSDOCK)
77+
set(no_crossdock ON)
78+
endif()
7379
cmake_dependent_option(
7480
JAEGERTRACING_WITH_YAML_CPP "Use yaml-cpp to parse config files" ON
75-
"NOT JAEGERTRACING_BUILD_CROSSDOCK" ON)
81+
"no_crossdock" ON)
7682

7783
if(JAEGERTRACING_WITH_YAML_CPP)
7884
hunter_add_package(yaml-cpp)
@@ -104,18 +110,18 @@ if(JAEGERTRACING_BUILD_CROSSDOCK)
104110
set(CROSSDOCK_SRC crossdock/Server.cpp)
105111
add_executable(crossdock ${CROSSDOCK_SRC})
106112
target_include_directories(crossdock PUBLIC
107-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/crossdock>)
108-
target_link_libraries(crossdock PUBLIC jaegertracing-static)
113+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/crossdock>)
114+
target_link_libraries(crossdock PUBLIC ${JAEGERTRACING_LIB})
109115

110116
set(JAEGER_CROSSDOCK_URL
111117
"https://raw.githubusercontent.com/jaegertracing/jaeger/master/docker-compose/\
112118
jaeger-docker-compose.yml")
113119
file(DOWNLOAD ${JAEGER_CROSSDOCK_URL}
114-
"${PROJECT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml")
120+
"${CMAKE_CURRENT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml")
115121
find_program(DOCKER_COMPOSE_EXE docker-compose REQUIRED)
116122
set(DOCKER_COMPOSE_CMD ${DOCKER_COMPOSE_EXE}
117-
-f ${PROJECT_SOURCE_DIR}/crossdock/docker-compose.yml
118-
-f ${PROJECT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml)
123+
-f ${CMAKE_CURRENT_SOURCE_DIR}/crossdock/docker-compose.yml
124+
-f ${CMAKE_CURRENT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml)
119125
add_custom_target(crossdock-kill
120126
COMMAND ${DOCKER_COMPOSE_CMD} kill
121127
COMMAND ${DOCKER_COMPOSE_CMD} rm --force)
@@ -134,6 +140,7 @@ endif()
134140

135141
set(SRC
136142
src/jaegertracing/Config.cpp
143+
src/jaegertracing/DynamicLoad.cpp
137144
src/jaegertracing/LogRecord.cpp
138145
src/jaegertracing/Logging.cpp
139146
src/jaegertracing/Reference.cpp
@@ -143,7 +150,6 @@ set(SRC
143150
src/jaegertracing/TraceID.cpp
144151
src/jaegertracing/Tracer.cpp
145152
src/jaegertracing/TracerFactory.cpp
146-
src/jaegertracing/DynamicLoad.cpp
147153
src/jaegertracing/Transport.cpp
148154
src/jaegertracing/UDPTransport.cpp
149155
src/jaegertracing/baggage/BaggageSetter.cpp
@@ -228,28 +234,54 @@ set(SRC
228234
src/jaegertracing/utils/UDPClient.cpp
229235
src/jaegertracing/utils/YAML.cpp)
230236

231-
add_library(jaegertracing SHARED ${SRC})
232-
target_include_directories(jaegertracing PUBLIC
233-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
234-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>)
235-
target_link_libraries(jaegertracing ${LIBS})
236-
set_target_properties(jaegertracing PROPERTIES
237-
VERSION ${PROJECT_VERSION}
238-
SOVERSION ${PROJECT_VERSION_MAJOR})
237+
function(add_lib_deps lib)
238+
target_include_directories(${lib} PUBLIC
239+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
240+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>)
241+
target_link_libraries(${lib} PUBLIC ${LIBS})
242+
endfunction()
243+
244+
option(JAEGERTRACING_PLUGIN "Build dynamic plugin" OFF)
245+
if(NOT JAEGERTRACING_PLUGIN)
246+
set(no_plugin)
247+
endif()
248+
cmake_dependent_option(BUILD_SHARED_LIBS "Build shared libraries" ON
249+
"no_plugin" OFF)
250+
251+
if(BUILD_SHARED_LIBS)
252+
add_library(jaegertracing SHARED ${SRC})
253+
add_lib_deps(jaegertracing)
254+
set_target_properties(jaegertracing PROPERTIES
255+
VERSION ${PROJECT_VERSION}
256+
SOVERSION ${PROJECT_VERSION_MAJOR})
257+
set(JAEGERTRACING_LIB jaegertracing)
258+
list(APPEND JAEGERTRACING_LIBS jaegertracing)
259+
endif()
260+
261+
if(JAEGERTRACING_PLUGIN)
262+
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/export.map
263+
"{ global: OpenTracingMakeTracerFactory; local: *; };")
264+
add_library(jaegertracing_plugin MODULE ${SRC})
265+
add_lib_deps(jaegertracing_plugin)
266+
target_link_libraries(jaegertracing_plugin PUBLIC
267+
-static-libgcc
268+
-static-libstdc++
269+
-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/export.map)
270+
endif()
239271

240272
add_library(jaegertracing-static STATIC ${SRC})
241-
target_include_directories(jaegertracing-static PUBLIC
242-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
243-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>)
244-
target_link_libraries(jaegertracing-static ${LIBS})
245273
set_target_properties(jaegertracing-static PROPERTIES
246274
OUTPUT_NAME jaegertracing)
275+
add_lib_deps(jaegertracing-static)
276+
if(NOT JAEGERTRACING_LIB)
277+
set(JAEGERTRACING_LIB jaegertracing-static)
278+
endif()
279+
list(APPEND JAEGERTRACING_LIBS jaegertracing-static)
247280

248281
configure_file(
249282
src/jaegertracing/Constants.h.in
250283
src/jaegertracing/Constants.h
251284
@ONLY)
252-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
253285

254286
if(BUILD_TESTING)
255287
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/jaegertracing/testutils")
@@ -262,7 +294,6 @@ if(BUILD_TESTING)
262294
src/jaegertracing/TraceIDTest.cpp
263295
src/jaegertracing/TracerTest.cpp
264296
src/jaegertracing/TracerFactoryTest.cpp
265-
src/jaegertracing/DynamicLoadTest.cpp
266297
src/jaegertracing/UDPTransportTest.cpp
267298
src/jaegertracing/baggage/BaggageTest.cpp
268299
src/jaegertracing/metrics/MetricsTest.cpp
@@ -287,7 +318,7 @@ if(BUILD_TESTING)
287318
GTEST_HAS_TR1_TUPLE=0
288319
GTEST_USE_OWN_TR1_TUPLE=0)
289320
target_link_libraries(
290-
UnitTest testutils GTest::main jaegertracing ${LIBS})
321+
UnitTest testutils GTest::main ${JAEGERTRACING_LIB} ${LIBS})
291322
add_test(NAME UnitTest COMMAND UnitTest)
292323

293324
add_executable(DynamicallyLoadTracerTest src/jaegertracing/DynamicallyLoadTracerTest.cpp)
@@ -347,7 +378,7 @@ configure_package_config_file(
347378
# * header location after install: <prefix>/include/jaegertracing/Tracer.h
348379
# * headers can be included by C++ code `#include <jaegertracing/Tracer.h>`
349380
install(
350-
TARGETS jaegertracing jaegertracing-static
381+
TARGETS ${JAEGERTRACING_LIBS}
351382
EXPORT "${TARGETS_EXPORT_NAME}"
352383
LIBRARY DESTINATION "lib"
353384
ARCHIVE DESTINATION "lib"

Dockerfile.plugin

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM debian
2+
RUN apt-get update
3+
RUN apt-get install --yes build-essential curl git
4+
RUN curl -L -O "https://cmake.org/files/v3.11/cmake-3.11.0-Linux-x86_64.sh" && \
5+
bash cmake-3.11.0-Linux-x86_64.sh --skip-license
6+
7+
ADD . /src/jaeger-cpp-client
8+
WORKDIR /src/jaeger-cpp-client
9+
RUN ./scripts/build-plugin.sh

cmake/toolchain.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
set(CMAKE_CXX_STANDARD_REQUIRED true)
1+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
22
set(CMAKE_CXX_STANDARD 11)
33
set(CMAKE_CXX_EXTENSIONS OFF)
44
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

examples/config.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
service_name: test-service
2+
disabled: false
3+
sampler:
4+
type: probabilistic
5+
param: 0.001
6+
reporter:
7+
queueSize: 100
8+
bufferFlushInterval: 10
9+
logSpans: false
10+
localAgentHostPort: 127.0.0.1:6831
11+
headers:
12+
jaegerDebugHeader: debug-id
13+
jaegerBaggageHeader: baggage
14+
TraceContextHeaderName: trace-id
15+
traceBaggageHeaderPrefix: testctx-
16+
baggage_restrictions:
17+
denyBaggageOnInitializationFailure: false
18+
hostPort: 127.0.0.1:5778
19+
refreshInterval: 60

scripts/build-plugin.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
function main() {
6+
local project_dir
7+
project_dir="$(git rev-parse --show-toplevel)"
8+
9+
mkdir -p build
10+
cd build
11+
export CFLAGS="$CFLAGS -march=x86-64"
12+
export CXXFLAGS="$CXXFLAGS -march=x86-64"
13+
14+
cat <<EOF > export.map
15+
{
16+
global:
17+
OpenTracingMakeTracerFactory;
18+
local: *;
19+
};
20+
EOF
21+
22+
cmake -DCMAKE_BUILD_TYPE=Release \
23+
-DJAEGERTRACING_PLUGIN=ON \
24+
-DBUILD_TESTING=ON \
25+
-DHUNTER_CONFIGURATION_TYPES=Release \
26+
..
27+
make -j3
28+
mv libjaegertracing_plugin.so /libjaegertracing_plugin.so
29+
./DynamicallyLoadTracerTest /libjaegertracing_plugin.so
30+
}
31+
32+
main

scripts/build.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@ function working() {
1818
}
1919

2020
function main() {
21+
local project_dir
22+
project_dir=$(git rev-parse --show-toplevel)
23+
cd "$project_dir"
24+
2125
mkdir -p build
2226
cd build
2327
coverage_option=${COVERAGE:+"-DJAEGERTRACING_COVERAGE=ON"}
24-
cmake -DCMAKE_BUILD_TYPE=Debug "${coverage_option}" ..
28+
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON "${coverage_option}" ..
2529
make -j3 UnitTest
2630
info "Running tests..."
2731
./UnitTest

src/jaegertracing/DynamicLoadTest.cpp

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,44 @@
2121
#include <opentracing/dynamic_load.h>
2222

2323
namespace jaegertracing {
24+
namespace {
25+
26+
void trace(opentracing::TracerFactory& factory)
27+
{
28+
std::string errorMessage;
29+
auto result = factory.MakeTracer(R"(
30+
service_name: test-service
31+
disabled: false
32+
sampler:
33+
type: probabilistic
34+
param: 0.001
35+
reporter:
36+
queueSize: 100
37+
bufferFlushInterval: 10
38+
logSpans: false
39+
localAgentHostPort: 127.0.0.1:6831
40+
headers:
41+
jaegerDebugHeader: debug-id
42+
jaegerBaggageHeader: baggage
43+
TraceContextHeaderName: trace-id
44+
traceBaggageHeaderPrefix: testctx-
45+
baggage_restrictions:
46+
denyBaggageOnInitializationFailure: false
47+
hostPort: 127.0.0.1:5778
48+
refreshInterval: 60
49+
)",
50+
errorMessage);
51+
assert(errorMessage.empty());
52+
auto tracer = static_cast<std::shared_ptr<opentracing::Tracer>>(*result);
53+
{
54+
tracer->StartSpan("a");
55+
std::cout << "Started span\n";
56+
}
57+
std::cout << "Finished span\n";
58+
}
59+
60+
} // anonymous namespace
61+
2462
#ifdef JAEGERTRACING_WITH_YAML_CPP
2563
TEST(DynamicLoad, invalidVersion)
2664
{
@@ -44,7 +82,9 @@ TEST(DynamicLoad, validVersion)
4482
ASSERT_EQ(rcode, 0);
4583
ASSERT_EQ(errorCategory, nullptr);
4684
ASSERT_NE(tracerFactory, nullptr);
47-
delete static_cast<opentracing::TracerFactory*>(tracerFactory);
85+
std::unique_ptr<opentracing::TracerFactory> factory(
86+
static_cast<opentracing::TracerFactory*>(tracerFactory));
87+
trace(*factory);
4888
}
4989
#else
5090
TEST(DynamicLoad, noYAML)

0 commit comments

Comments
 (0)