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

Commit

Permalink
Add plugin build (#82)
Browse files Browse the repository at this point in the history
Signed-off-by: Isaac Hier <[email protected]>
  • Loading branch information
isaachier authored Apr 26, 2018
1 parent 41c772c commit 359979c
Show file tree
Hide file tree
Showing 8 changed files with 163 additions and 27 deletions.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
79 changes: 55 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/toolchain.cmake"
CACHE FILEPATH
"Toolchain to use for building this package and dependencies")

set(HUNTER_CONFIGURATION_TYPES "Release;Debug" CACHE STRING
"Configuration types used when building Hunter dependencies")

include(CMakeDependentOption)
include(HunterGate)
HunterGate(
Expand All @@ -25,7 +28,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field")
endif()

set(CMAKE_EXPORT_COMPILE_COMMANDS true)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

if(HUNTER_ENABLED)
set(hunter_config "CONFIG")
Expand Down Expand Up @@ -70,9 +73,12 @@ list(APPEND package_deps nlohmann_json)

option(JAEGERTRACING_COVERAGE "Build with coverage" $ENV{COVERAGE})
option(JAEGERTRACING_BUILD_CROSSDOCK "Build crossdock" $ENV{CROSSDOCK})
if(NOT JAEGERTRACING_BUILD_CROSSDOCK)
set(no_crossdock ON)
endif()
cmake_dependent_option(
JAEGERTRACING_WITH_YAML_CPP "Use yaml-cpp to parse config files" ON
"NOT JAEGERTRACING_BUILD_CROSSDOCK" ON)
"no_crossdock" ON)

if(JAEGERTRACING_WITH_YAML_CPP)
hunter_add_package(yaml-cpp)
Expand Down Expand Up @@ -104,18 +110,18 @@ if(JAEGERTRACING_BUILD_CROSSDOCK)
set(CROSSDOCK_SRC crossdock/Server.cpp)
add_executable(crossdock ${CROSSDOCK_SRC})
target_include_directories(crossdock PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/crossdock>)
target_link_libraries(crossdock PUBLIC jaegertracing-static)
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/crossdock>)
target_link_libraries(crossdock PUBLIC ${JAEGERTRACING_LIB})

set(JAEGER_CROSSDOCK_URL
"https://raw.githubusercontent.com/jaegertracing/jaeger/master/docker-compose/\
jaeger-docker-compose.yml")
file(DOWNLOAD ${JAEGER_CROSSDOCK_URL}
"${PROJECT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml")
"${CMAKE_CURRENT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml")
find_program(DOCKER_COMPOSE_EXE docker-compose REQUIRED)
set(DOCKER_COMPOSE_CMD ${DOCKER_COMPOSE_EXE}
-f ${PROJECT_SOURCE_DIR}/crossdock/docker-compose.yml
-f ${PROJECT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml)
-f ${CMAKE_CURRENT_SOURCE_DIR}/crossdock/docker-compose.yml
-f ${CMAKE_CURRENT_SOURCE_DIR}/crossdock/jaeger-docker-compose.yml)
add_custom_target(crossdock-kill
COMMAND ${DOCKER_COMPOSE_CMD} kill
COMMAND ${DOCKER_COMPOSE_CMD} rm --force)
Expand All @@ -134,6 +140,7 @@ endif()

set(SRC
src/jaegertracing/Config.cpp
src/jaegertracing/DynamicLoad.cpp
src/jaegertracing/LogRecord.cpp
src/jaegertracing/Logging.cpp
src/jaegertracing/Reference.cpp
Expand All @@ -143,7 +150,6 @@ set(SRC
src/jaegertracing/TraceID.cpp
src/jaegertracing/Tracer.cpp
src/jaegertracing/TracerFactory.cpp
src/jaegertracing/DynamicLoad.cpp
src/jaegertracing/Transport.cpp
src/jaegertracing/UDPTransport.cpp
src/jaegertracing/baggage/BaggageSetter.cpp
Expand Down Expand Up @@ -228,28 +234,54 @@ set(SRC
src/jaegertracing/utils/UDPClient.cpp
src/jaegertracing/utils/YAML.cpp)

add_library(jaegertracing SHARED ${SRC})
target_include_directories(jaegertracing PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>)
target_link_libraries(jaegertracing ${LIBS})
set_target_properties(jaegertracing PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
function(add_lib_deps lib)
target_include_directories(${lib} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>)
target_link_libraries(${lib} PUBLIC ${LIBS})
endfunction()

option(JAEGERTRACING_PLUGIN "Build dynamic plugin" OFF)
if(NOT JAEGERTRACING_PLUGIN)
set(no_plugin)
endif()
cmake_dependent_option(BUILD_SHARED_LIBS "Build shared libraries" ON
"no_plugin" OFF)

if(BUILD_SHARED_LIBS)
add_library(jaegertracing SHARED ${SRC})
add_lib_deps(jaegertracing)
set_target_properties(jaegertracing PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
set(JAEGERTRACING_LIB jaegertracing)
list(APPEND JAEGERTRACING_LIBS jaegertracing)
endif()

if(JAEGERTRACING_PLUGIN)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/export.map
"{ global: OpenTracingMakeTracerFactory; local: *; };")
add_library(jaegertracing_plugin MODULE ${SRC})
add_lib_deps(jaegertracing_plugin)
target_link_libraries(jaegertracing_plugin PUBLIC
-static-libgcc
-static-libstdc++
-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/export.map)
endif()

add_library(jaegertracing-static STATIC ${SRC})
target_include_directories(jaegertracing-static PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>)
target_link_libraries(jaegertracing-static ${LIBS})
set_target_properties(jaegertracing-static PROPERTIES
OUTPUT_NAME jaegertracing)
add_lib_deps(jaegertracing-static)
if(NOT JAEGERTRACING_LIB)
set(JAEGERTRACING_LIB jaegertracing-static)
endif()
list(APPEND JAEGERTRACING_LIBS jaegertracing-static)

configure_file(
src/jaegertracing/Constants.h.in
src/jaegertracing/Constants.h
@ONLY)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

if(BUILD_TESTING)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/jaegertracing/testutils")
Expand All @@ -262,7 +294,6 @@ if(BUILD_TESTING)
src/jaegertracing/TraceIDTest.cpp
src/jaegertracing/TracerTest.cpp
src/jaegertracing/TracerFactoryTest.cpp
src/jaegertracing/DynamicLoadTest.cpp
src/jaegertracing/UDPTransportTest.cpp
src/jaegertracing/baggage/BaggageTest.cpp
src/jaegertracing/metrics/MetricsTest.cpp
Expand All @@ -287,7 +318,7 @@ if(BUILD_TESTING)
GTEST_HAS_TR1_TUPLE=0
GTEST_USE_OWN_TR1_TUPLE=0)
target_link_libraries(
UnitTest testutils GTest::main jaegertracing ${LIBS})
UnitTest testutils GTest::main ${JAEGERTRACING_LIB} ${LIBS})
add_test(NAME UnitTest COMMAND UnitTest)

add_executable(DynamicallyLoadTracerTest src/jaegertracing/DynamicallyLoadTracerTest.cpp)
Expand Down Expand Up @@ -347,7 +378,7 @@ configure_package_config_file(
# * header location after install: <prefix>/include/jaegertracing/Tracer.h
# * headers can be included by C++ code `#include <jaegertracing/Tracer.h>`
install(
TARGETS jaegertracing jaegertracing-static
TARGETS ${JAEGERTRACING_LIBS}
EXPORT "${TARGETS_EXPORT_NAME}"
LIBRARY DESTINATION "lib"
ARCHIVE DESTINATION "lib"
Expand Down
9 changes: 9 additions & 0 deletions Dockerfile.plugin
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM debian
RUN apt-get update
RUN apt-get install --yes build-essential curl git
RUN curl -L -O "https://cmake.org/files/v3.11/cmake-3.11.0-Linux-x86_64.sh" && \
bash cmake-3.11.0-Linux-x86_64.sh --skip-license

ADD . /src/jaeger-cpp-client
WORKDIR /src/jaeger-cpp-client
RUN ./scripts/build-plugin.sh
2 changes: 1 addition & 1 deletion cmake/toolchain.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(CMAKE_CXX_STANDARD_REQUIRED true)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
19 changes: 19 additions & 0 deletions examples/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
service_name: test-service
disabled: false
sampler:
type: probabilistic
param: 0.001
reporter:
queueSize: 100
bufferFlushInterval: 10
logSpans: false
localAgentHostPort: 127.0.0.1:6831
headers:
jaegerDebugHeader: debug-id
jaegerBaggageHeader: baggage
TraceContextHeaderName: trace-id
traceBaggageHeaderPrefix: testctx-
baggage_restrictions:
denyBaggageOnInitializationFailure: false
hostPort: 127.0.0.1:5778
refreshInterval: 60
32 changes: 32 additions & 0 deletions scripts/build-plugin.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash

set -e

function main() {
local project_dir
project_dir="$(git rev-parse --show-toplevel)"

mkdir -p build
cd build
export CFLAGS="$CFLAGS -march=x86-64"
export CXXFLAGS="$CXXFLAGS -march=x86-64"

cat <<EOF > export.map
{
global:
OpenTracingMakeTracerFactory;
local: *;
};
EOF

cmake -DCMAKE_BUILD_TYPE=Release \
-DJAEGERTRACING_PLUGIN=ON \
-DBUILD_TESTING=ON \
-DHUNTER_CONFIGURATION_TYPES=Release \
..
make -j3
mv libjaegertracing_plugin.so /libjaegertracing_plugin.so
./DynamicallyLoadTracerTest /libjaegertracing_plugin.so
}

main
6 changes: 5 additions & 1 deletion scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,14 @@ function working() {
}

function main() {
local project_dir
project_dir=$(git rev-parse --show-toplevel)
cd "$project_dir"

mkdir -p build
cd build
coverage_option=${COVERAGE:+"-DJAEGERTRACING_COVERAGE=ON"}
cmake -DCMAKE_BUILD_TYPE=Debug "${coverage_option}" ..
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON "${coverage_option}" ..
make -j3 UnitTest
info "Running tests..."
./UnitTest
Expand Down
42 changes: 41 additions & 1 deletion src/jaegertracing/DynamicLoadTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,44 @@
#include <opentracing/dynamic_load.h>

namespace jaegertracing {
namespace {

void trace(opentracing::TracerFactory& factory)
{
std::string errorMessage;
auto result = factory.MakeTracer(R"(
service_name: test-service
disabled: false
sampler:
type: probabilistic
param: 0.001
reporter:
queueSize: 100
bufferFlushInterval: 10
logSpans: false
localAgentHostPort: 127.0.0.1:6831
headers:
jaegerDebugHeader: debug-id
jaegerBaggageHeader: baggage
TraceContextHeaderName: trace-id
traceBaggageHeaderPrefix: testctx-
baggage_restrictions:
denyBaggageOnInitializationFailure: false
hostPort: 127.0.0.1:5778
refreshInterval: 60
)",
errorMessage);
assert(errorMessage.empty());
auto tracer = static_cast<std::shared_ptr<opentracing::Tracer>>(*result);
{
tracer->StartSpan("a");
std::cout << "Started span\n";
}
std::cout << "Finished span\n";
}

} // anonymous namespace

#ifdef JAEGERTRACING_WITH_YAML_CPP
TEST(DynamicLoad, invalidVersion)
{
Expand All @@ -44,7 +82,9 @@ TEST(DynamicLoad, validVersion)
ASSERT_EQ(rcode, 0);
ASSERT_EQ(errorCategory, nullptr);
ASSERT_NE(tracerFactory, nullptr);
delete static_cast<opentracing::TracerFactory*>(tracerFactory);
std::unique_ptr<opentracing::TracerFactory> factory(
static_cast<opentracing::TracerFactory*>(tracerFactory));
trace(*factory);
}
#else
TEST(DynamicLoad, noYAML)
Expand Down

0 comments on commit 359979c

Please sign in to comment.