Skip to content

Commit 6ea195e

Browse files
committed
chore(cmake): overall improvements
1 parent ae0d9a3 commit 6ea195e

File tree

22 files changed

+591
-123
lines changed

22 files changed

+591
-123
lines changed

.github/workflows/dev.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ jobs:
55
format:
66
runs-on: ubuntu-22.04-arm
77
container:
8-
image: datadog/docker-library:dd-trace-cpp-ci-5f5c273-arm64
8+
image: datadog/docker-library:dd-trace-cpp-ci-23768e9-arm64
99
steps:
1010
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
1111
- name: Check format
@@ -29,7 +29,7 @@ jobs:
2929
needs: format
3030
runs-on: ${{ matrix.runner }}
3131
container:
32-
image: datadog/docker-library:dd-trace-cpp-ci-5f5c273-${{matrix.docker-arch}}
32+
image: datadog/docker-library:dd-trace-cpp-ci-23768e9-${{matrix.docker-arch}}
3333
environment:
3434
name: dev
3535
permissions:
@@ -68,7 +68,7 @@ jobs:
6868
docker-arch: amd64
6969
runs-on: ${{ matrix.runner }}
7070
container:
71-
image: datadog/docker-library:dd-trace-cpp-ci-5f5c273-${{matrix.docker-arch}}
71+
image: datadog/docker-library:dd-trace-cpp-ci-23768e9-${{matrix.docker-arch}}
7272
steps:
7373
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
7474
- name: Build
@@ -144,7 +144,7 @@ jobs:
144144
needs: build-linux-cmake
145145
runs-on: ubuntu-22.04-arm
146146
container:
147-
image: datadog/docker-library:dd-trace-cpp-ci-5f5c273-arm64
147+
image: datadog/docker-library:dd-trace-cpp-ci-23768e9-arm64
148148
environment:
149149
name: dev
150150
permissions:

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
needs: call-dev-workflow
4141
runs-on: ubuntu-22.04-arm
4242
container:
43-
image: datadog/docker-library:dd-trace-cpp-ci-5f5c273-arm64
43+
image: datadog/docker-library:dd-trace-cpp-ci-23768e9-arm64
4444
env:
4545
DURATION_SEC: 300 # 5min
4646
steps:

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
/bazel-*
22
/.build/
3+
/build/
4+
/build-*/
35
/.coverage/
46
build/
57

CMakeLists.txt

Lines changed: 164 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
# Note: Make sure that this version is the same as that in
22
# "./CheckRequiredCMakeVersion.cmake".
3-
cmake_minimum_required(VERSION 3.24)
3+
cmake_minimum_required(VERSION 3.28...4.0)
44
cmake_policy(SET CMP0077 NEW)
55

6-
project(dd-trace-cpp)
6+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
77

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)
8+
# Get the version of the lib
9+
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/src/datadog/version.cpp DD_TRACE_VERSION_CPP_CONTENTS REGEX "#define DD_TRACE_VERSION( |_NUM )")
10+
string(REGEX MATCH "#define DD_TRACE_VERSION \"[^\"]*" DD_TRACE_VERSION ${DD_TRACE_VERSION_CPP_CONTENTS})
11+
string(REGEX REPLACE "[^\"]+\"v" "" DD_TRACE_VERSION ${DD_TRACE_VERSION})
12+
13+
project(
14+
dd-trace-cpp
15+
VERSION ${DD_TRACE_VERSION}
16+
LANGUAGES CXX
17+
)
1318

1419
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
1520
option(BUILD_STATIC_LIBS "Build static libraries" ON)
@@ -26,7 +31,6 @@ set(DD_TRACE_TRANSPORT "curl" CACHE STRING "HTTP transport that dd-trace-cpp use
2631

2732
if(DD_TRACE_TRANSPORT STREQUAL "curl")
2833
include(cmake/deps/curl.cmake)
29-
message(STATUS "DD_TRACE_TRANSPORT is set to 'curl', including curl")
3034
elseif(DD_TRACE_TRANSPORT STREQUAL "none")
3135
message(STATUS "DD_TRACE_TRANSPORT is set to 'none', no default transport will be included")
3236
else()
@@ -44,18 +48,15 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
4448
option(DD_TRACE_ENABLE_SANITIZE "Build with address sanitizer and undefined behavior sanitizer" OFF)
4549
endif()
4650

47-
if (NOT CMAKE_BUILD_TYPE)
48-
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
49-
endif ()
51+
# Include mandatory files
52+
include(GNUInstallDirs)
53+
include(CMakePackageConfigHelpers)
5054

5155
# Linking this library requires threads.
5256
find_package(Threads REQUIRED)
5357
include(cmake/deps/json.cmake)
5458
include(cmake/utils.cmake)
5559

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

@@ -83,7 +84,10 @@ if (DD_TRACE_BUILD_FUZZERS)
8384
endif ()
8485

8586
if (DD_TRACE_BUILD_TESTING)
87+
include(Catch)
88+
enable_testing()
8689
add_subdirectory(test)
90+
add_subdirectory(test/system-tests)
8791
endif()
8892

8993
if (DD_TRACE_BUILD_EXAMPLES)
@@ -94,17 +98,68 @@ if (DD_TRACE_BUILD_BENCHMARK)
9498
add_subdirectory(benchmark)
9599
endif ()
96100

97-
add_library(dd_trace_cpp-objects OBJECT)
98-
add_library(dd_trace::obj ALIAS dd_trace_cpp-objects)
101+
add_library(dd-trace-cpp-objects OBJECT)
102+
add_library(dd-trace-cpp::obj ALIAS dd-trace-cpp-objects)
99103

100-
file(GLOB_RECURSE public_header_files ${CMAKE_SOURCE_DIR}/include/*.h)
104+
target_compile_features(dd-trace-cpp-objects
105+
PUBLIC
106+
cxx_std_17
107+
)
101108

102-
target_sources(dd_trace_cpp-objects
109+
# NOTE: Don't use glob:
110+
# - <https://stackoverflow.com/questions/32411963/why-is-cmake-file-glob-evil>
111+
# - <https://discourse.cmake.org/t/is-glob-still-considered-harmful-with-configure-depends/808>
112+
target_sources(dd-trace-cpp-objects
103113
PUBLIC
104114
FILE_SET public_headers
105115
TYPE HEADERS
106116
BASE_DIRS include
107-
FILES ${public_header_files}
117+
FILES
118+
include/datadog/remote_config/capability.h
119+
include/datadog/remote_config/listener.h
120+
include/datadog/remote_config/product.h
121+
include/datadog/telemetry/configuration.h
122+
include/datadog/telemetry/metrics.h
123+
include/datadog/telemetry/product.h
124+
include/datadog/telemetry/telemetry.h
125+
include/datadog/baggage.h
126+
include/datadog/cerr_logger.h
127+
include/datadog/clock.h
128+
include/datadog/collector.h
129+
include/datadog/config.h
130+
include/datadog/datadog_agent_config.h
131+
include/datadog/dict_reader.h
132+
include/datadog/dict_writer.h
133+
include/datadog/environment.h
134+
include/datadog/error.h
135+
include/datadog/event_scheduler.h
136+
include/datadog/expected.h
137+
include/datadog/http_client.h
138+
include/datadog/id_generator.h
139+
include/datadog/injection_options.h
140+
include/datadog/logger.h
141+
include/datadog/null_collector.h
142+
include/datadog/optional.h
143+
include/datadog/propagation_style.h
144+
include/datadog/rate.h
145+
include/datadog/runtime_id.h
146+
include/datadog/sampling_decision.h
147+
include/datadog/sampling_mechanism.h
148+
include/datadog/sampling_priority.h
149+
include/datadog/span.h
150+
include/datadog/span_config.h
151+
include/datadog/span_defaults.h
152+
include/datadog/span_matcher.h
153+
include/datadog/span_sampler_config.h
154+
include/datadog/string_view.h
155+
include/datadog/trace_id.h
156+
include/datadog/trace_sampler_config.h
157+
include/datadog/trace_segment.h
158+
include/datadog/trace_source.h
159+
include/datadog/tracer.h
160+
include/datadog/tracer_config.h
161+
include/datadog/tracer_signature.h
162+
include/datadog/version.h
108163
PRIVATE
109164
src/datadog/common/hash.cpp
110165
src/datadog/telemetry/configuration.cpp
@@ -156,102 +211,157 @@ target_sources(dd_trace_cpp-objects
156211
src/datadog/w3c_propagation.cpp
157212
)
158213

159-
# Headers location are different depending of whether we are building
160-
# or installing the library.
161-
target_include_directories(dd_trace_cpp-objects
162-
PUBLIC
163-
$<INSTALL_INTERFACE:include>
164-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
214+
target_include_directories(dd-trace-cpp-objects
165215
PRIVATE
166216
${CMAKE_CURRENT_SOURCE_DIR}/src/datadog
167217
)
168218

169-
target_link_libraries(dd_trace_cpp-objects
219+
target_link_libraries(dd-trace-cpp-objects
170220
PUBLIC
171221
Threads::Threads
172222
PRIVATE
173-
dd_trace::specs
223+
dd-trace-cpp::specs
224+
)
225+
226+
set_target_properties(dd-trace-cpp-objects
227+
PROPERTIES
228+
VERIFY_INTERFACE_HEADER_SETS ON
229+
)
230+
231+
install(
232+
TARGETS dd-trace-cpp-objects dd-trace-cpp-specs
233+
EXPORT dd-trace-cpp-targets
234+
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
174235
)
175236

176237
# Produce both shared and static versions of the library.
177238
if (BUILD_SHARED_LIBS)
178-
add_library(dd_trace_cpp-shared SHARED $<TARGET_OBJECTS:dd_trace_cpp-objects>)
179-
add_library(dd_trace::shared ALIAS dd_trace_cpp-shared)
239+
add_library(dd-trace-cpp-shared SHARED $<TARGET_OBJECTS:dd-trace-cpp-objects>)
240+
add_library(dd-trace-cpp::shared ALIAS dd-trace-cpp-shared)
180241

181-
if (DD_TRACE_TRANSPORT STREQUAL "curl")
182-
add_dependencies(dd_trace_cpp-shared CURL::libcurl_shared)
242+
if(DD_TRACE_TRANSPORT STREQUAL "curl")
243+
add_dependencies(dd-trace-cpp-shared CURL::libcurl_shared)
183244

184-
target_sources(dd_trace_cpp-shared
245+
target_sources(dd-trace-cpp-shared
185246
PRIVATE
186247
src/datadog/curl.cpp
187248
src/datadog/default_http_client_curl.cpp
188249
)
189250

190-
target_link_libraries(dd_trace_cpp-shared
251+
target_link_libraries(dd-trace-cpp-shared
191252
PRIVATE
192253
CURL::libcurl_shared
193254
)
255+
256+
install(
257+
TARGETS libcurl_shared
258+
EXPORT dd-trace-cpp-targets
259+
)
194260
else()
195-
target_sources(dd_trace_cpp-shared
261+
target_sources(dd-trace-cpp-shared
196262
PRIVATE
197263
src/datadog/default_http_client_null.cpp
198264
)
199-
endif ()
265+
endif()
200266

201-
target_link_libraries(dd_trace_cpp-shared
267+
target_link_libraries(dd-trace-cpp-shared
202268
PUBLIC
203-
dd_trace::obj
269+
dd-trace-cpp::obj
204270
PRIVATE
205-
dd_trace::specs
271+
dd-trace-cpp::specs
272+
)
273+
274+
set_target_properties(dd-trace-cpp-shared
275+
PROPERTIES
276+
OUTPUT_NAME "dd-trace-cpp"
206277
)
207278

208-
install(TARGETS dd_trace_cpp-objects dd_trace_cpp-shared
209-
EXPORT dd_trace_cpp-export
210-
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
279+
install(
280+
TARGETS dd-trace-cpp-shared libcurl_shared
281+
EXPORT dd-trace-cpp-targets
211282
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
212283
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
213284
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
214285
)
215286
endif ()
216287

217288
if (BUILD_STATIC_LIBS)
218-
add_library(dd_trace_cpp-static STATIC $<TARGET_OBJECTS:dd_trace_cpp-objects>)
219-
add_library(dd_trace::static ALIAS dd_trace_cpp-static)
289+
add_library(dd-trace-cpp-static STATIC $<TARGET_OBJECTS:dd-trace-cpp-objects>)
290+
add_library(dd-trace-cpp::static ALIAS dd-trace-cpp-static)
220291

221-
add_dependencies(dd_trace_cpp-static dd_trace_cpp-objects)
292+
add_dependencies(dd-trace-cpp-static dd-trace-cpp-objects)
222293

223294
if (DD_TRACE_TRANSPORT STREQUAL "curl")
224-
add_dependencies(dd_trace_cpp-static CURL::libcurl_static)
295+
add_dependencies(dd-trace-cpp-static CURL::libcurl_static)
225296

226-
target_sources(dd_trace_cpp-static
297+
target_sources(dd-trace-cpp-static
227298
PRIVATE
228299
src/datadog/curl.cpp
229300
src/datadog/default_http_client_curl.cpp
230301
)
231302

232-
target_link_libraries(dd_trace_cpp-static
303+
target_link_libraries(dd-trace-cpp-static
233304
PRIVATE
234305
CURL::libcurl_static
235306
)
307+
308+
install(
309+
TARGETS libcurl_static
310+
EXPORT dd-trace-cpp-targets
311+
)
236312
else()
237-
target_sources(dd_trace_cpp-static
313+
target_sources(dd-trace-cpp-static
238314
PRIVATE
239315
src/datadog/default_http_client_null.cpp
240316
)
241317
endif ()
242318

243-
target_link_libraries(dd_trace_cpp-static
319+
target_link_libraries(dd-trace-cpp-static
244320
PUBLIC
245-
dd_trace::obj
321+
dd-trace-cpp::obj
246322
PRIVATE
247-
dd_trace::specs
323+
dd-trace-cpp::specs
324+
)
325+
326+
set_target_properties(dd-trace-cpp-static
327+
PROPERTIES
328+
OUTPUT_NAME "dd-trace-cpp"
248329
)
249330

250-
install(TARGETS dd_trace_cpp-objects dd_trace_cpp-static
251-
EXPORT dd_trace_cpp-export
252-
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
331+
install(
332+
TARGETS dd-trace-cpp-static
333+
EXPORT dd-trace-cpp-targets
253334
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
254335
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
255336
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
256337
)
257338
endif ()
339+
340+
# install target
341+
write_basic_package_version_file(
342+
"${PROJECT_NAME}-config-version.cmake"
343+
VERSION ${PROJECT_VERSION}
344+
COMPATIBILITY SameMajorVersion
345+
)
346+
347+
configure_package_config_file(
348+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
349+
${PROJECT_NAME}-config.cmake
350+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
351+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
352+
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
353+
)
354+
355+
install(
356+
EXPORT dd-trace-cpp-targets
357+
NAMESPACE dd-trace-cpp::
358+
FILE ${PROJECT_NAME}-targets.cmake
359+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
360+
)
361+
362+
install(
363+
FILES
364+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
365+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
366+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
367+
)

CMakePresets.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"displayName": "Development",
2626
"cacheVariables": {
2727
"CMAKE_BUILD_TYPE": "Debug",
28+
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
2829
"DD_TRACE_ENABLE_SANITIZE": "OFF",
2930
"DD_TRACE_BUILD_TESTING": "ON",
3031
"DD_TRACE_BUILD_EXAMPLES": "ON",

0 commit comments

Comments
 (0)