@@ -19,8 +19,13 @@ set(CMAKE_CXX_EXTENSIONS OFF)
1919
2020# If we're building with clang, then use the libc++ version of the standard
2121# library instead of libstdc++. Better coverage of build configurations.
22- if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
23- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++" )
22+ #
23+ # But there's one exception: libfuzzer is built with libstdc++ on Ubuntu,
24+ # and so won't link to libc++. So, if any of the FUZZ_* variables are set,
25+ # keep to libstdc++ (the default on most systems).
26+ if ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) AND (NOT ${FUZZ_W3C_PROPAGATION} ))
27+ add_compile_options (-stdlib=libc++)
28+ add_link_options (-stdlib=libc++)
2429endif ()
2530
2631include (ProcessorCount)
@@ -74,8 +79,8 @@ if(BUILD_COVERAGE)
7479 set (COVERAGE_LIBRARIES gcov)
7580endif ()
7681
77- add_library (dd_trace_cpp SHARED )
78- target_sources (dd_trace_cpp PRIVATE
82+ add_library (dd_trace_cpp-objects OBJECT )
83+ target_sources (dd_trace_cpp-objects PRIVATE
7984 src/datadog/cerr_logger.cpp
8085 src/datadog/clock.cpp
8186 src/datadog/collector.cpp
@@ -132,7 +137,7 @@ target_sources(dd_trace_cpp PRIVATE
132137)
133138
134139# This library's public headers are just its source headers.
135- target_sources (dd_trace_cpp PUBLIC
140+ target_sources (dd_trace_cpp-objects PUBLIC
136141 FILE_SET public_headers
137142 TYPE HEADERS
138143 BASE_DIRS src/
@@ -193,20 +198,30 @@ target_sources(dd_trace_cpp PUBLIC
193198 src/datadog/w3c_propagation.h
194199)
195200
196- add_dependencies (dd_trace_cpp curl)
201+ add_dependencies (dd_trace_cpp-objects curl)
197202
198- # Make the build libcurl visible to dd_trace_cpp, and its dependents .
199- target_include_directories (dd_trace_cpp PUBLIC ${CMAKE_BINARY_DIR} /include )
203+ # Make the build libcurl visible.
204+ include_directories ( ${CMAKE_BINARY_DIR} /include )
200205
201206# Linking this library requires libcurl and threads.
202207find_package (Threads REQUIRED)
203- target_link_libraries (dd_trace_cpp PUBLIC ${CMAKE_BINARY_DIR} /lib/libcurl.a PUBLIC Threads::Threads ${COVERAGE_LIBRARIES} )
208+ target_link_libraries (dd_trace_cpp-objects PUBLIC ${CMAKE_BINARY_DIR} /lib/libcurl.a PUBLIC Threads::Threads ${COVERAGE_LIBRARIES} )
204209
205210# When installing, install the library and its public headers.
206-
207- install (TARGETS dd_trace_cpp
211+ install (TARGETS dd_trace_cpp-objects
208212 FILE_SET public_headers)
209213
214+ # Produce both shared and static versions of the library.
215+ add_library (dd_trace_cpp-shared SHARED $<TARGET_OBJECTS:dd_trace_cpp-objects>)
216+ set_target_properties (dd_trace_cpp-shared PROPERTIES OUTPUT_NAME "dd_trace_cpp" )
217+ add_dependencies (dd_trace_cpp-shared dd_trace_cpp-objects)
218+ target_link_libraries (dd_trace_cpp-shared dd_trace_cpp-objects)
219+
220+ add_library (dd_trace_cpp-static STATIC $<TARGET_OBJECTS:dd_trace_cpp-objects>)
221+ set_target_properties (dd_trace_cpp-static PROPERTIES OUTPUT_NAME "dd_trace_cpp" )
222+ add_dependencies (dd_trace_cpp-static dd_trace_cpp-objects)
223+ target_link_libraries (dd_trace_cpp-static dd_trace_cpp-objects)
224+
210225if (BUILD_TESTING)
211226 add_subdirectory (test )
212227endif ()
0 commit comments