From 449983c2ef32e43df5b1aa9f6053769d5da2b042 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Sun, 16 Jun 2024 22:32:12 +0200 Subject: [PATCH 1/9] deps: bump libcurl to 8.3.0 - Fix crashes on macOS Sonoma: https://github.com/curl/curl/issues/11893 - Disable more curl features. - Debug build do not enable santiizer anymore. --- CMakeLists.txt | 2 -- cmake/deps/curl.cmake | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f33e850..25c67a70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,8 +20,6 @@ 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. diff --git a/cmake/deps/curl.cmake b/cmake/deps/curl.cmake index edd9e762..ab37d468 100644 --- a/cmake/deps/curl.cmake +++ b/cmake/deps/curl.cmake @@ -4,25 +4,32 @@ include(FetchContent) 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) 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) From 0ec14b76ceb11d43fa2d6de79a6feac389719420 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 26 Jun 2024 11:32:36 +0200 Subject: [PATCH 2/9] Remove BUILD_*_LIBS in curl.cmake --- CMakeLists.txt | 13 +++++++------ cmake/deps/curl.cmake | 2 -- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25c67a70..9c8c7bf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,16 @@ # 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) +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" OFF) option(BUILD_STATIC_LIBS "Build static libraries" OFF) @@ -26,12 +33,6 @@ endif () 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}) diff --git a/cmake/deps/curl.cmake b/cmake/deps/curl.cmake index ab37d468..81ea70d5 100644 --- a/cmake/deps/curl.cmake +++ b/cmake/deps/curl.cmake @@ -2,8 +2,6 @@ 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) From 9cb04e978f0b9d35b93fc06a33d2e9d32efbbce1 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 26 Jun 2024 11:36:56 +0200 Subject: [PATCH 3/9] enable shared and static build by default --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c8c7bf4..d15abf6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,8 +11,8 @@ set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) -option(BUILD_SHARED_LIBS "Build shared libraries" OFF) -option(BUILD_STATIC_LIBS "Build static libraries" OFF) +option(BUILD_SHARED_LIBS "Build shared libraries" ON) +option(BUILD_STATIC_LIBS "Build static libraries" ON) # Consumer of the library using FetchContent do not need # to build unit tests, fuzzers and examples. From b8c34bbda3723ef8f2a263881d18644e22b6ed4a Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 26 Jun 2024 11:51:00 +0200 Subject: [PATCH 4/9] fix msvc compilation --- cmake/compiler/msvc.cmake | 5 +++++ test/CMakeLists.txt | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/compiler/msvc.cmake b/cmake/compiler/msvc.cmake index d115d068..47151674 100644 --- a/cmake/compiler/msvc.cmake +++ b/cmake/compiler/msvc.cmake @@ -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 +) + if (CMAKE_BUILD_TYPE STREQUAL "Debug|RelWithDebInfo") target_compile_options(dd_trace_cpp-specs INTERFACE diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c4ae657e..3a7eb5ab 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -40,7 +40,6 @@ add_executable(tests target_link_libraries(tests PRIVATE - libcurl dd_trace_cpp-static dd_trace::specs ) From cfc2e73ab6d1fda61e9d45adba44a889799f5de5 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 26 Jun 2024 11:57:03 +0200 Subject: [PATCH 5/9] Set back libcurl dep in tests --- test/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3a7eb5ab..dd269110 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -40,6 +40,8 @@ add_executable(tests target_link_libraries(tests PRIVATE + # TODO: Remove dependency on libcurl + libcurl dd_trace_cpp-static dd_trace::specs ) From 6a5555b7207e7f600daaf680783405ab7d440a23 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 26 Jun 2024 12:02:25 +0200 Subject: [PATCH 6/9] fix msvc compilation part2 --- cmake/compiler/msvc.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/compiler/msvc.cmake b/cmake/compiler/msvc.cmake index 47151674..42db3875 100644 --- a/cmake/compiler/msvc.cmake +++ b/cmake/compiler/msvc.cmake @@ -44,6 +44,7 @@ target_compile_options(dd_trace_cpp-specs target_link_options(dd_trace_cpp-specs INTERFACE ws2_32 + wsock32 ) if (CMAKE_BUILD_TYPE STREQUAL "Debug|RelWithDebInfo") From f532442540dc497d83de6a10d12d2b6cbed07b82 Mon Sep 17 00:00:00 2001 From: Damien MEHALA Date: Thu, 27 Jun 2024 23:53:30 +0200 Subject: [PATCH 7/9] fix msvc: link against ws2_32.lib --- cmake/compiler/msvc.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmake/compiler/msvc.cmake b/cmake/compiler/msvc.cmake index 42db3875..b12a7c03 100644 --- a/cmake/compiler/msvc.cmake +++ b/cmake/compiler/msvc.cmake @@ -43,8 +43,7 @@ target_compile_options(dd_trace_cpp-specs target_link_options(dd_trace_cpp-specs INTERFACE - ws2_32 - wsock32 + ws2_32.lib ) if (CMAKE_BUILD_TYPE STREQUAL "Debug|RelWithDebInfo") From 7f7ec319ab18aba90414a2733220435468ce99e3 Mon Sep 17 00:00:00 2001 From: Damien MEHALA Date: Fri, 28 Jun 2024 01:32:31 +0200 Subject: [PATCH 8/9] improve curl cmake --- CMakeLists.txt | 50 ++++++++++++++++++++++++++++++++++++------- cmake/deps/curl.cmake | 2 ++ test/CMakeLists.txt | 2 +- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d15abf6b..d65a7e6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ 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. if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) @@ -29,7 +31,7 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo") endif () -# Linking this library requires libcurl and threads. +# Linking this library requires threads. find_package(Threads REQUIRED) include(cmake/deps/curl.cmake) @@ -39,6 +41,8 @@ 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) @@ -72,8 +76,6 @@ 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 @@ -81,10 +83,8 @@ target_sources(dd_trace_cpp-objects 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 @@ -208,10 +208,13 @@ target_sources(dd_trace_cpp-objects PUBLIC # $ # ) +add_dependencies(dd_trace_cpp-objects libcurl_object Threads::Threads) + target_link_libraries(dd_trace_cpp-objects - PRIVATE - libcurl + PUBLIC + # libcurl_object Threads::Threads + PRIVATE dd_trace::specs ) @@ -220,11 +223,27 @@ if (BUILD_SHARED_LIBS) add_library(dd_trace_cpp-shared SHARED $) 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 ) @@ -243,6 +262,21 @@ if (BUILD_STATIC_LIBS) add_library(dd_trace_cpp-static STATIC $) 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 diff --git a/cmake/deps/curl.cmake b/cmake/deps/curl.cmake index 81ea70d5..8fcc8dfd 100644 --- a/cmake/deps/curl.cmake +++ b/cmake/deps/curl.cmake @@ -24,6 +24,8 @@ 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-8_8_0/curl-8.8.0.tar.gz" diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dd269110..47adbaf1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -41,7 +41,7 @@ add_executable(tests target_link_libraries(tests PRIVATE # TODO: Remove dependency on libcurl - libcurl + CURL::libcurl_static dd_trace_cpp-static dd_trace::specs ) From d3288fe93d0c48692cea409b71a2839a905ae700 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Fri, 28 Jun 2024 14:24:05 +0200 Subject: [PATCH 9/9] chore: remove comments --- CMakeLists.txt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d65a7e6d..d263eec8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,20 +199,18 @@ 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 -# $ -# $ -# ) +target_include_directories(dd_trace_cpp-objects + PUBLIC + $ + $ +) -add_dependencies(dd_trace_cpp-objects libcurl_object Threads::Threads) +add_dependencies(dd_trace_cpp-objects Threads::Threads) target_link_libraries(dd_trace_cpp-objects PUBLIC - # libcurl_object Threads::Threads PRIVATE dd_trace::specs