Skip to content
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
79 changes: 55 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
# Note: Make sure that this version is the same as that in
# "./CheckRequiredCMakeVersion.cmake".
cmake_minimum_required(VERSION 3.24)
cmake_policy(SET CMP0077 NEW)

project(dd-trace-cpp)

option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
option(BUILD_STATIC_LIBS "Build static libraries" OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(BUILD_STATIC_LIBS "Build static libraries" ON)

set(DD_TRACE_TRANSPORT "curl" CACHE STRING "HTTP transport that dd-trace-cpp uses to communicate with the Datadog Agent, can be either 'none' or 'curl'")

# Consumer of the library using FetchContent do not need
# to build unit tests, fuzzers and examples.
Expand All @@ -20,26 +29,20 @@ endif()

if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
elseif (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DD_TRACE_ENABLE_SANITIZE ON)
endif ()

# Linking this library requires libcurl and threads.
# Linking this library requires threads.
find_package(Threads REQUIRED)
include(cmake/deps/curl.cmake)

set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/src/datadog/version.cpp DD_TRACE_VERSION_CPP_CONTENTS REGEX "#define DD_TRACE_VERSION( |_NUM )")
string(REGEX MATCH "#define DD_TRACE_VERSION \"[^\"]*" DD_TRACE_VERSION ${DD_TRACE_VERSION_CPP_CONTENTS})
string(REGEX REPLACE "[^\"]+\"" "" DD_TRACE_VERSION ${DD_TRACE_VERSION})
message(STATUS "dd-trace-cpp version=[${DD_TRACE_VERSION}]")
unset(DD_TRACE_VERSION_CPP_CONTENTS)

message(STATUS "dd-trace-cpp transport=${DD_TRACE_TRANSPORT}")

if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
message(STATUS "Compiler: MSVC ${CMAKE_CXX_COMPILER_VERSION}")
include(cmake/compiler/msvc.cmake)
Expand Down Expand Up @@ -73,19 +76,15 @@ endif ()
add_library(dd_trace_cpp-objects OBJECT)
add_library(dd_trace::obj ALIAS dd_trace_cpp-objects)

add_dependencies(dd_trace_cpp-objects libcurl)

target_sources(dd_trace_cpp-objects
PRIVATE
src/datadog/base64.cpp
src/datadog/cerr_logger.cpp
src/datadog/clock.cpp
src/datadog/config_manager.cpp
src/datadog/collector_response.cpp
src/datadog/curl.cpp
src/datadog/datadog_agent_config.cpp
src/datadog/datadog_agent.cpp
src/datadog/default_http_client_curl.cpp
# src/datadog/default_http_client_null.cpp use libcurl
src/datadog/environment.cpp
src/datadog/error.cpp
Expand Down Expand Up @@ -200,19 +199,20 @@ target_sources(dd_trace_cpp-objects PUBLIC
src/datadog/w3c_propagation.h
)

# TODO: define public/private
# Headers location are different depending of whether we are building
# or installing the library.
# target_include_directories(dd_trace_cpp-objects
# PUBLIC
# $<INSTALL_INTERFACE:src>
# $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
# )
target_include_directories(dd_trace_cpp-objects
PUBLIC
$<INSTALL_INTERFACE:src>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
)

add_dependencies(dd_trace_cpp-objects Threads::Threads)

target_link_libraries(dd_trace_cpp-objects
PRIVATE
libcurl
PUBLIC
Threads::Threads
PRIVATE
dd_trace::specs
)

Expand All @@ -221,11 +221,27 @@ if (BUILD_SHARED_LIBS)
add_library(dd_trace_cpp-shared SHARED $<TARGET_OBJECTS:dd_trace_cpp-objects>)
add_library(dd_trace::shared ALIAS dd_trace_cpp-shared)

add_dependencies(dd_trace_cpp-shared dd_trace_cpp-objects)
if (DD_TRACE_TRANSPORT STREQUAL "curl")
add_dependencies(dd_trace_cpp-shared CURL::libcurl_shared)

target_sources(dd_trace_cpp-shared
PRIVATE
src/datadog/curl.cpp
src/datadog/default_http_client_curl.cpp
)

target_link_libraries(dd_trace_cpp-shared
PRIVATE
CURL::libcurl_shared
)
endif ()

add_dependencies(dd_trace_cpp-shared dd_trace_cpp-objects CURL::libcurl_shared)

target_link_libraries(dd_trace_cpp-shared
PUBLIC
dd_trace::obj
CURL::libcurl_shared
PRIVATE
dd_trace::specs
)
Expand All @@ -244,6 +260,21 @@ if (BUILD_STATIC_LIBS)
add_library(dd_trace_cpp-static STATIC $<TARGET_OBJECTS:dd_trace_cpp-objects>)
add_library(dd_trace::static ALIAS dd_trace_cpp-static)

if (DD_TRACE_TRANSPORT STREQUAL "curl")
add_dependencies(dd_trace_cpp-static CURL::libcurl_static)

target_sources(dd_trace_cpp-static
PRIVATE
src/datadog/curl.cpp
src/datadog/default_http_client_curl.cpp
)

target_link_libraries(dd_trace_cpp-static
PRIVATE
CURL::libcurl_static
)
endif ()

add_dependencies(dd_trace_cpp-static dd_trace_cpp-objects)

target_link_libraries(dd_trace_cpp-static
Expand Down
5 changes: 5 additions & 0 deletions cmake/compiler/msvc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ target_compile_options(dd_trace_cpp-specs
/D_WIN32_WINNT=${win_ver}
)

target_link_options(dd_trace_cpp-specs
INTERFACE
ws2_32.lib
)

if (CMAKE_BUILD_TYPE STREQUAL "Debug|RelWithDebInfo")
target_compile_options(dd_trace_cpp-specs
INTERFACE
Expand Down
21 changes: 14 additions & 7 deletions cmake/deps/curl.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,34 @@ include(FetchContent)

# No need to build curl executable
SET(BUILD_CURL_EXE OFF)
SET(BUILD_SHARED_LIBS OFF)
SET(BUILD_STATIC_LIBS ON)
set(BUILD_LIBCURL_DOCS OFF)
set(BUILD_MISC_DOCS OFF)

# Disables all protocols except HTTP
# Disable all protocols except HTTP
SET(HTTP_ONLY ON)

# Disable curl features
SET(USE_ZLIB OFF)
SET(USE_LIBIDN2 OFF)
SET(CURL_ENABLE_SSL OFF)
SET(CURL_BROTLI OFF)
SET(CURL_ZSTD OFF)
SET(CURL_ZLIB OFF)
SET(USE_ZLIB OFF)
SET(USE_LIBIDN2 OFF)
SET(CURL_USE_LIBSSH2 OFF)
SET(CURL_USE_LIBPSL OFF)
SET(CURL_DISABLE_HSTS ON)
set(CURL_CA_PATH "none")
set(CURL_CA_PATH_SET FALSE)
set(CURL_DISABLE_INSTALL ON)
set(CURL_DISABLE_ALTSVC ON)
set(CURL_DISABLE_SRP ON)

set(SHARE_LIB_OBJECT ON)

FetchContent_Declare(
curl
URL "https://github.com/curl/curl/releases/download/curl-7_85_0/curl-7.85.0.tar.gz"
URL_MD5 "4e9eb4f434e9be889e510f038754d3de"
URL "https://github.com/curl/curl/releases/download/curl-8_8_0/curl-8.8.0.tar.gz"
URL_MD5 "2300048f61e6196678281a8612a873ef"
)

FetchContent_MakeAvailable(curl)
3 changes: 2 additions & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ add_executable(tests

target_link_libraries(tests
PRIVATE
libcurl
# TODO: Remove dependency on libcurl
CURL::libcurl_static
dd_trace_cpp-static
dd_trace::specs
)
Expand Down