Skip to content

Commit b625050

Browse files
authored
chore(cmake): overall improvements (#242)
1 parent 9dfe87a commit b625050

File tree

23 files changed

+593
-124
lines changed

23 files changed

+593
-124
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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
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: 165 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,158 @@ 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+
POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS}
230+
)
231+
232+
install(
233+
TARGETS dd-trace-cpp-objects dd-trace-cpp-specs
234+
EXPORT dd-trace-cpp-targets
235+
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
174236
)
175237

176238
# Produce both shared and static versions of the library.
177239
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)
240+
add_library(dd-trace-cpp-shared SHARED $<TARGET_OBJECTS:dd-trace-cpp-objects>)
241+
add_library(dd-trace-cpp::shared ALIAS dd-trace-cpp-shared)
180242

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

184-
target_sources(dd_trace_cpp-shared
246+
target_sources(dd-trace-cpp-shared
185247
PRIVATE
186248
src/datadog/curl.cpp
187249
src/datadog/default_http_client_curl.cpp
188250
)
189251

190-
target_link_libraries(dd_trace_cpp-shared
252+
target_link_libraries(dd-trace-cpp-shared
191253
PRIVATE
192254
CURL::libcurl_shared
193255
)
256+
257+
install(
258+
TARGETS libcurl_shared
259+
EXPORT dd-trace-cpp-targets
260+
)
194261
else()
195-
target_sources(dd_trace_cpp-shared
262+
target_sources(dd-trace-cpp-shared
196263
PRIVATE
197264
src/datadog/default_http_client_null.cpp
198265
)
199-
endif ()
266+
endif()
200267

201-
target_link_libraries(dd_trace_cpp-shared
268+
target_link_libraries(dd-trace-cpp-shared
202269
PUBLIC
203-
dd_trace::obj
270+
dd-trace-cpp::obj
204271
PRIVATE
205-
dd_trace::specs
272+
dd-trace-cpp::specs
273+
)
274+
275+
set_target_properties(dd-trace-cpp-shared
276+
PROPERTIES
277+
OUTPUT_NAME "dd-trace-cpp"
206278
)
207279

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}
280+
install(
281+
TARGETS dd-trace-cpp-shared
282+
EXPORT dd-trace-cpp-targets
211283
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
212284
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
213285
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
214286
)
215287
endif ()
216288

217289
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)
290+
add_library(dd-trace-cpp-static STATIC $<TARGET_OBJECTS:dd-trace-cpp-objects>)
291+
add_library(dd-trace-cpp::static ALIAS dd-trace-cpp-static)
220292

221-
add_dependencies(dd_trace_cpp-static dd_trace_cpp-objects)
293+
add_dependencies(dd-trace-cpp-static dd-trace-cpp-objects)
222294

223295
if (DD_TRACE_TRANSPORT STREQUAL "curl")
224-
add_dependencies(dd_trace_cpp-static CURL::libcurl_static)
296+
add_dependencies(dd-trace-cpp-static CURL::libcurl_static)
225297

226-
target_sources(dd_trace_cpp-static
298+
target_sources(dd-trace-cpp-static
227299
PRIVATE
228300
src/datadog/curl.cpp
229301
src/datadog/default_http_client_curl.cpp
230302
)
231303

232-
target_link_libraries(dd_trace_cpp-static
304+
target_link_libraries(dd-trace-cpp-static
233305
PRIVATE
234306
CURL::libcurl_static
235307
)
308+
309+
install(
310+
TARGETS libcurl_static
311+
EXPORT dd-trace-cpp-targets
312+
)
236313
else()
237-
target_sources(dd_trace_cpp-static
314+
target_sources(dd-trace-cpp-static
238315
PRIVATE
239316
src/datadog/default_http_client_null.cpp
240317
)
241318
endif ()
242319

243-
target_link_libraries(dd_trace_cpp-static
320+
target_link_libraries(dd-trace-cpp-static
244321
PUBLIC
245-
dd_trace::obj
322+
dd-trace-cpp::obj
246323
PRIVATE
247-
dd_trace::specs
324+
dd-trace-cpp::specs
325+
)
326+
327+
set_target_properties(dd-trace-cpp-static
328+
PROPERTIES
329+
OUTPUT_NAME "dd-trace-cpp"
248330
)
249331

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}
332+
install(
333+
TARGETS dd-trace-cpp-static
334+
EXPORT dd-trace-cpp-targets
253335
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
254336
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
255337
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
256338
)
257339
endif ()
340+
341+
# install target
342+
write_basic_package_version_file(
343+
"${PROJECT_NAME}-config-version.cmake"
344+
VERSION ${PROJECT_VERSION}
345+
COMPATIBILITY SameMajorVersion
346+
)
347+
348+
configure_package_config_file(
349+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
350+
${PROJECT_NAME}-config.cmake
351+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
352+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
353+
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
354+
)
355+
356+
install(
357+
EXPORT dd-trace-cpp-targets
358+
NAMESPACE dd-trace-cpp::
359+
FILE ${PROJECT_NAME}-targets.cmake
360+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
361+
)
362+
363+
install(
364+
FILES
365+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
366+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
367+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
368+
)

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)