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

Build shared plugin for Linux amd64 using Docker #82

Merged
merged 1 commit into from
Apr 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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