11# Note: Make sure that this version is the same as that in
22# "./CheckRequiredCMakeVersion.cmake".
33cmake_minimum_required (VERSION 3.24)
4+ cmake_policy (SET CMP0077 NEW)
45
56project (dd-trace-cpp)
67
7- option (BUILD_SHARED_LIBS "Build shared libraries" OFF )
8- option (BUILD_STATIC_LIBS "Build static libraries" OFF )
8+ set (CMAKE_CXX_STANDARD 17)
9+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
10+ set (CMAKE_CXX_EXTENSIONS OFF )
11+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
12+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
13+
14+ option (BUILD_SHARED_LIBS "Build shared libraries" ON )
15+ option (BUILD_STATIC_LIBS "Build static libraries" ON )
16+
17+ 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'" )
918
1019# Consumer of the library using FetchContent do not need
1120# to build unit tests, fuzzers and examples.
@@ -20,26 +29,20 @@ endif()
2029
2130if (NOT CMAKE_BUILD_TYPE )
2231 set (CMAKE_BUILD_TYPE "RelWithDebInfo" )
23- elseif (CMAKE_BUILD_TYPE STREQUAL "Debug" )
24- set (DD_TRACE_ENABLE_SANITIZE ON )
2532endif ()
2633
27- # Linking this library requires libcurl and threads.
34+ # Linking this library requires threads.
2835find_package (Threads REQUIRED)
2936include (cmake/deps/curl.cmake)
3037
31- set (CMAKE_POSITION_INDEPENDENT_CODE ON )
32- set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
33- set (CMAKE_CXX_STANDARD 17)
34- set (CMAKE_CXX_STANDARD_REQUIRED ON )
35- set (CMAKE_CXX_EXTENSIONS OFF )
36-
3738file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR} /src/datadog/version .cpp DD_TRACE_VERSION_CPP_CONTENTS REGEX "#define DD_TRACE_VERSION( |_NUM )" )
3839string (REGEX MATCH "#define DD_TRACE_VERSION \" [^\" ]*" DD_TRACE_VERSION ${DD_TRACE_VERSION_CPP_CONTENTS} )
3940string (REGEX REPLACE "[^\" ]+\" " "" DD_TRACE_VERSION ${DD_TRACE_VERSION} )
4041message (STATUS "dd-trace-cpp version=[${DD_TRACE_VERSION} ]" )
4142unset (DD_TRACE_VERSION_CPP_CONTENTS)
4243
44+ message (STATUS "dd-trace-cpp transport=${DD_TRACE_TRANSPORT} " )
45+
4346if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
4447 message (STATUS "Compiler: MSVC ${CMAKE_CXX_COMPILER_VERSION} " )
4548 include (cmake/compiler/msvc .cmake)
@@ -73,19 +76,15 @@ endif ()
7376add_library (dd_trace_cpp-objects OBJECT)
7477add_library (dd_trace::obj ALIAS dd_trace_cpp-objects)
7578
76- add_dependencies (dd_trace_cpp-objects libcurl)
77-
7879target_sources (dd_trace_cpp-objects
7980 PRIVATE
8081 src/datadog/base64.cpp
8182 src/datadog/cerr_logger.cpp
8283 src/datadog/clock.cpp
8384 src/datadog/config_manager.cpp
8485 src/datadog/collector_response.cpp
85- src/datadog/curl.cpp
8686 src/datadog/datadog_agent_config.cpp
8787 src/datadog/datadog_agent.cpp
88- src/datadog/default_http_client_curl.cpp
8988# src/datadog/default_http_client_null.cpp use libcurl
9089 src/datadog/environment .cpp
9190 src/datadog/error.cpp
@@ -200,19 +199,20 @@ target_sources(dd_trace_cpp-objects PUBLIC
200199 src/datadog/w3c_propagation.h
201200)
202201
203- # TODO: define public/private
204202# Headers location are different depending of whether we are building
205203# or installing the library.
206- # target_include_directories(dd_trace_cpp-objects
207- # PUBLIC
208- # $<INSTALL_INTERFACE:src>
209- # $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
210- # )
204+ target_include_directories (dd_trace_cpp-objects
205+ PUBLIC
206+ $<INSTALL_INTERFACE:src>
207+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /src>
208+ )
209+
210+ add_dependencies (dd_trace_cpp-objects Threads::Threads)
211211
212212target_link_libraries (dd_trace_cpp-objects
213- PRIVATE
214- libcurl
213+ PUBLIC
215214 Threads::Threads
215+ PRIVATE
216216 dd_trace::specs
217217)
218218
@@ -221,11 +221,27 @@ if (BUILD_SHARED_LIBS)
221221 add_library (dd_trace_cpp-shared SHARED $<TARGET_OBJECTS:dd_trace_cpp-objects>)
222222 add_library (dd_trace::shared ALIAS dd_trace_cpp-shared)
223223
224- add_dependencies (dd_trace_cpp-shared dd_trace_cpp-objects)
224+ if (DD_TRACE_TRANSPORT STREQUAL "curl" )
225+ add_dependencies (dd_trace_cpp-shared CURL::libcurl_shared)
226+
227+ target_sources (dd_trace_cpp-shared
228+ PRIVATE
229+ src/datadog/curl.cpp
230+ src/datadog/default_http_client_curl.cpp
231+ )
232+
233+ target_link_libraries (dd_trace_cpp-shared
234+ PRIVATE
235+ CURL::libcurl_shared
236+ )
237+ endif ()
238+
239+ add_dependencies (dd_trace_cpp-shared dd_trace_cpp-objects CURL::libcurl_shared)
225240
226241 target_link_libraries (dd_trace_cpp-shared
227242 PUBLIC
228243 dd_trace::obj
244+ CURL::libcurl_shared
229245 PRIVATE
230246 dd_trace::specs
231247 )
@@ -244,6 +260,21 @@ if (BUILD_STATIC_LIBS)
244260 add_library (dd_trace_cpp-static STATIC $<TARGET_OBJECTS:dd_trace_cpp-objects>)
245261 add_library (dd_trace::static ALIAS dd_trace_cpp-static )
246262
263+ if (DD_TRACE_TRANSPORT STREQUAL "curl" )
264+ add_dependencies (dd_trace_cpp-static CURL::libcurl_static)
265+
266+ target_sources (dd_trace_cpp-static
267+ PRIVATE
268+ src/datadog/curl.cpp
269+ src/datadog/default_http_client_curl.cpp
270+ )
271+
272+ target_link_libraries (dd_trace_cpp-static
273+ PRIVATE
274+ CURL::libcurl_static
275+ )
276+ endif ()
277+
247278 add_dependencies (dd_trace_cpp-static dd_trace_cpp-objects)
248279
249280 target_link_libraries (dd_trace_cpp-static
0 commit comments