Skip to content

Commit 71ab8f1

Browse files
authored
Move src/native libraries that are shared between runtime builds to be targets-driven (#103184)
Today, the src/native/containers and src/native/eventpipe libraries are defined in terms of source and header file lists. This provides flexibility into how they're defined in CMake, but it makes it difficult to flow include directories or dependencies. It also makes it difficult to encapsulate logic, as these lists are defined in `.cmake` files that are included into a `CMakeLists.txt` file. This PR converts these libraries to be defined in terms of CMake targets. src/native/containers is transformed into an object library, so we can build it once and then link it into static libs, shared libs, or executables. An `extern "C"` block was added around all declarations that are currently used in eventpipe/diagnosticserver (so not `dn-simdhash`) to enable the build to build the containers library as a C library. Also, a default implementation of the `dn_simdhash_assert_fail` method was added to enable the containers lib to link into runtimes that don't currently provide an implementation. src/native/eventpipe is transformed into [interface libraries](https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries). Due to how eventpipe and diagnosticserver both require runtime-specific headers and need to be built with different flags for each target, defining them as interface libraries is the cleanest manner to handle this scenario (until we can refactor the `ep-rt-*.h` and `ds-rt-*.h` headers into a cleaner design). This PR also updates the eventpipe and diagnosticserver codebases to use CMake's UNITY_BUILD support in each runtime's implementation instead of manually implementing a unity build.
1 parent 9ef950b commit 71ab8f1

31 files changed

+373
-437
lines changed

src/coreclr/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ add_subdirectory(pal/prebuilt/inc)
125125
set(EP_GENERATED_HEADER_PATH "${GENERATED_INCLUDE_DIR}")
126126
include (${CLR_SRC_NATIVE_DIR}/eventpipe/configure.cmake)
127127

128+
add_subdirectory(${CLR_SRC_NATIVE_DIR}/containers containers)
129+
add_subdirectory(${CLR_SRC_NATIVE_DIR}/eventpipe eventpipe)
130+
128131
if(NOT CLR_CMAKE_HOST_MACCATALYST AND NOT CLR_CMAKE_HOST_IOS AND NOT CLR_CMAKE_HOST_TVOS)
129132
add_subdirectory(debug/debug-pal)
130133
endif()

src/coreclr/debug/debug-pal/CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
include_directories(../inc)
22
include_directories(../../pal/inc)
3-
include_directories(${EP_GENERATED_HEADER_PATH})
43

5-
set(SHARED_EVENTPIPE_SOURCE_PATH ${CLR_SRC_NATIVE_DIR}/eventpipe)
64
add_definitions(-DFEATURE_CORECLR)
75
add_definitions(-DFEATURE_PERFTRACING)
86
add_definitions(-DFEATURE_PERFTRACING_STANDALONE_PAL)
@@ -12,9 +10,7 @@ if(CLR_CMAKE_HOST_WIN32)
1210
include_directories(../../inc) #needed for warning control
1311

1412
if(CLR_CMAKE_TARGET_WIN32)
15-
set (EVENTPIPE_PAL_SOURCES "${SHARED_EVENTPIPE_SOURCE_PATH}/ds-ipc-pal-namedpipe.c")
16-
set_source_files_properties(${EVENTPIPE_PAL_SOURCES} PROPERTIES LANGUAGE CXX)
17-
13+
set(DEBUG_PAL_REFEREENCE_DIAGNOSTICSERVER ON)
1814
set(TWO_WAY_PIPE_SOURCES
1915
${EVENTPIPE_PAL_SOURCES}
2016
win/twowaypipe.cpp
@@ -28,14 +24,11 @@ if(CLR_CMAKE_HOST_WIN32)
2824
endif(CLR_CMAKE_HOST_WIN32)
2925

3026
if(CLR_CMAKE_HOST_UNIX)
27+
set(DEBUG_PAL_REFEREENCE_DIAGNOSTICSERVER ON)
3128

3229
add_definitions(-DPAL_IMPLEMENTATION)
3330
add_definitions(-D_POSIX_C_SOURCE=200809L)
3431

35-
set (EVENTPIPE_PAL_SOURCES "${SHARED_EVENTPIPE_SOURCE_PATH}/ds-ipc-pal-socket.c")
36-
set_source_files_properties(${EVENTPIPE_PAL_SOURCES} PROPERTIES LANGUAGE CXX)
37-
set_source_files_properties(${EVENTPIPE_PAL_SOURCES} PROPERTIES COMPILE_OPTIONS -xc++)
38-
3932
set(TWO_WAY_PIPE_SOURCES
4033
${EVENTPIPE_PAL_SOURCES}
4134
unix/twowaypipe.cpp
@@ -45,3 +38,13 @@ if(CLR_CMAKE_HOST_UNIX)
4538
endif(CLR_CMAKE_HOST_UNIX)
4639

4740
add_library_clr(debug-pal OBJECT ${TWO_WAY_PIPE_SOURCES})
41+
42+
if (DEBUG_PAL_REFEREENCE_DIAGNOSTICSERVER)
43+
target_link_libraries(debug-pal PRIVATE dn-diagnosticserver-pal)
44+
45+
# The DiagnosticServer Runtime implementation in CoreCLR is C++,
46+
# but the Diagnostic Server PAL is written in C.
47+
# Override those files to build as C++.
48+
get_property(ds_pal_sources TARGET dn-diagnosticserver-pal PROPERTY INTERFACE_SOURCES)
49+
set_source_files_properties(${ds_pal_sources} PROPERTIES LANGUAGE CXX)
50+
endif()

src/coreclr/nativeaot/Runtime/eventpipe/CMakeLists.txt

Lines changed: 48 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -106,89 +106,28 @@ endif()
106106

107107
set(AOT_EVENTPIPE_SHIM_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
108108

109-
set (CONTAINER_SOURCES "")
110-
set (CONTAINER_HEADERS "")
111109
set (MINIPAL_SOURCES "")
112110
set (EVENTPIPE_SOURCES "")
113-
set (EVENTPIPE_HEADERS "")
114111

115-
# Use TCP for EventPipe on mobile platforms
116-
if (CLR_CMAKE_HOST_IOS OR CLR_CMAKE_HOST_TVOS OR CLR_CMAKE_HOST_ANDROID)
117-
set(FEATURE_PERFTRACING_PAL_TCP 1)
118-
set(FEATURE_PERFTRACING_DISABLE_DEFAULT_LISTEN_PORT 1)
119-
endif()
120-
121-
set (SHARED_CONTAINERS_SOURCE_PATH "${CLR_SRC_NATIVE_DIR}/containers")
122-
set (SHARED_EVENTPIPE_SOURCE_PATH "${CLR_SRC_NATIVE_DIR}/eventpipe")
123112
set (SHARED_MINIPAL_SOURCE_PATH "${CLR_SRC_NATIVE_DIR}/minipal")
124-
include (${SHARED_EVENTPIPE_SOURCE_PATH}/eventpipe.cmake)
125-
include (${SHARED_CONTAINERS_SOURCE_PATH}/containers.cmake)
126113

127114
list(APPEND MINIPAL_SOURCES
128115
utf8.c
129116
)
130117

131-
if(CLR_CMAKE_HOST_WIN32)
132-
list(APPEND SHARED_DIAGNOSTIC_SERVER_SOURCES
133-
ds-ipc-pal-namedpipe.c
134-
)
135-
136-
list(APPEND SHARED_DIAGNOSTIC_SERVER_HEADERS
137-
ds-ipc-pal-namedpipe.h
138-
)
139-
endif(CLR_CMAKE_HOST_WIN32)
140-
141118
if(CLR_CMAKE_HOST_UNIX)
142-
list(APPEND SHARED_DIAGNOSTIC_SERVER_SOURCES
143-
ds-ipc-pal-socket.c
144-
)
145-
146-
list(APPEND SHARED_DIAGNOSTIC_SERVER_HEADERS
147-
ds-ipc-pal-socket.h
148-
)
149-
150119
include(${CLR_SRC_NATIVE_DIR}/minipal/configure.cmake)
151120
list(APPEND MINIPAL_SOURCES
152121
random.c
153122
)
154123

155124
endif(CLR_CMAKE_HOST_UNIX)
156125

157-
list(APPEND EVENTPIPE_SOURCES
158-
${SHARED_EVENTPIPE_SOURCES}
159-
${SHARED_DIAGNOSTIC_SERVER_SOURCES}
160-
)
161-
162-
list(APPEND EVENTPIPE_HEADERS
163-
${SHARED_EVENTPIPE_HEADERS}
164-
${SHARED_DIAGNOSTIC_SERVER_HEADERS}
165-
)
166-
167-
addprefix(CONTAINER_SOURCES ${SHARED_CONTAINERS_SOURCE_PATH} "${SHARED_CONTAINER_SOURCES}")
168-
addprefix(CONTAINER_HEADERS ${SHARED_CONTAINERS_SOURCE_PATH} "${SHARED_CONTAINER_HEADERS}")
169126
addprefix(MINIPAL_SOURCES ${SHARED_MINIPAL_SOURCE_PATH} "${MINIPAL_SOURCES}")
170127

171-
addprefix(EVENTPIPE_SOURCES ${SHARED_EVENTPIPE_SOURCE_PATH} "${EVENTPIPE_SOURCES}")
172-
addprefix(EVENTPIPE_HEADERS ${SHARED_EVENTPIPE_SOURCE_PATH} "${EVENTPIPE_HEADERS}")
173-
174-
set_source_files_properties(${SHARED_EVENTPIPE_SOURCE_PATH}/ep-sources.c PROPERTIES COMPILE_DEFINITIONS EP_FORCE_INCLUDE_SOURCE_FILES)
175-
set_source_files_properties(${SHARED_EVENTPIPE_SOURCE_PATH}/ds-sources.c PROPERTIES COMPILE_DEFINITIONS DS_FORCE_INCLUDE_SOURCE_FILES)
176-
177-
set_source_files_properties(${CONTAINER_SOURCES} PROPERTIES LANGUAGE CXX)
178-
set_source_files_properties(${EVENTPIPE_SOURCES} PROPERTIES LANGUAGE CXX)
179-
180-
if(CLR_CMAKE_HOST_UNIX)
181-
set_source_files_properties(${CONTAINER_SOURCES} PROPERTIES COMPILE_OPTIONS -xc++)
182-
set_source_files_properties(${EVENTPIPE_SOURCES} PROPERTIES COMPILE_OPTIONS -xc++)
183-
endif(CLR_CMAKE_HOST_UNIX)
184-
185-
if (CLR_CMAKE_TARGET_WIN32)
186-
set_source_files_properties(${EVENTPIPE_SOURCES} PROPERTIES COMPILE_FLAGS "/FI\"${RUNTIME_DIR}/eventpipe/NativeaotEventPipeSupport.h\"")
187-
endif()
188-
189128
list(APPEND AOT_EVENTPIPE_SHIM_SOURCES
190129
${AOT_EVENTPIPE_SHIM_DIR}/ep-rt-aot.cpp
191-
${AOT_EVENTPIPE_SHIM_DIR}/ds-rt-aot.cpp
130+
${AOT_EVENTPIPE_SHIM_DIR}/ds-rt-aot.cpp
192131
)
193132

194133
list(APPEND AOT_EVENTPIPE_SHIM_HEADERS
@@ -229,18 +168,56 @@ if (FEATURE_EVENT_TRACE)
229168
endif()
230169
endif()
231170

232-
171+
# The NativeAOT EventPipe runtime is C++, but the EventPipe and DiagnosticServer sources are C.
172+
# Forcibly override them to build as C++.
173+
get_property(diagnosticserver_sources TARGET dn-diagnosticserver PROPERTY INTERFACE_SOURCES)
174+
get_property(diagnosticserver_pal_sources TARGET dn-diagnosticserver-pal PROPERTY INTERFACE_SOURCES)
175+
get_property(eventpipe_sources TARGET dn-eventpipe PROPERTY INTERFACE_SOURCES)
176+
set_source_files_properties(${diagnosticserver_sources} ${diagnosticserver_pal_sources} ${eventpipe_sources} PROPERTIES LANGUAGE CXX)
177+
178+
add_library(eventpipe-shared-objects OBJECT)
179+
target_link_libraries(eventpipe-shared-objects PRIVATE dn-diagnosticserver dn-eventpipe dn-diagnosticserver-pal)
180+
# Build EventPipe and DiagnosticServer as unity-builds for better inlining.
181+
set_target_properties(eventpipe-shared-objects PROPERTIES
182+
UNITY_BUILD ON
183+
UNITY_BUILD_BATCH_SIZE 0
184+
COMPILE_PDB_NAME "eventpipe-shared-objects"
185+
COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
186+
)
187+
if (CLR_CMAKE_TARGET_WIN32)
188+
add_library(eventpipe-shared-objects.GuardCF OBJECT)
189+
target_link_libraries(eventpipe-shared-objects.GuardCF PRIVATE dn-diagnosticserver dn-eventpipe dn-diagnosticserver-pal)
190+
191+
target_compile_options(eventpipe-shared-objects PRIVATE
192+
"/FI${RUNTIME_DIR}/eventpipe/NativeaotEventPipeSupport.h")
193+
194+
target_compile_options(eventpipe-shared-objects.GuardCF PRIVATE
195+
"/FI${RUNTIME_DIR}/eventpipe/NativeaotEventPipeSupport.h")
196+
197+
# Build EventPipe and DiagnosticServer as unity-builds for better inlining.
198+
set_target_properties(eventpipe-shared-objects.GuardCF PROPERTIES
199+
UNITY_BUILD ON
200+
UNITY_BUILD_BATCH_SIZE 0
201+
CLR_CONTROL_FLOW_GUARD ON
202+
COMPILE_PDB_NAME "eventpipe-shared-objects.GuardCF"
203+
COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
204+
205+
# Install the compile PDB for the eventpipe unity builds.
206+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/eventpipe-shared-objects.pdb" DESTINATION aotsdk COMPONENT nativeaot)
207+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/eventpipe-shared-objects.GuardCF.pdb" DESTINATION aotsdk COMPONENT nativeaot)
208+
# For the container library, we need to produce a compile PDB and install it
209+
set_target_properties(dn-containers-no-lto PROPERTIES
210+
COMPILE_PDB_NAME "dn-containers"
211+
COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
212+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/dn-containers.pdb" DESTINATION aotsdk COMPONENT nativeaot)
213+
endif()
233214

234215
list(APPEND EVENTPIPE_SOURCES
235216
${AOT_EVENTPIPE_SHIM_SOURCES}
236-
${AOT_EVENTPIPE_SHIM_HEADERS}
237217
${AOT_EVENTPIPE_MANAGED_TO_NATIVE_SOURCES}
238218
${AOT_EVENTTRACE_SOURCES}
239-
${SHARED_EVENTPIPE_CONFIG_HEADERS}
240219
${GEN_EVENTPIPE_PROVIDER_SOURCES}
241220
${GEN_EVENTPIPE_PLAT_AGNOSTIC_SOURCES}
242-
${CONTAINER_SOURCES}
243-
${CONTAINER_HEADERS}
244221
${MINIPAL_SOURCES}
245222
)
246223

@@ -253,6 +230,8 @@ list(APPEND AOT_EVENTPIPE_DISABLED_SOURCES
253230
)
254231

255232
add_library(eventpipe-enabled STATIC ${EVENTPIPE_SOURCES})
233+
234+
target_link_libraries(eventpipe-enabled PRIVATE eventpipe-shared-objects dn-containers-no-lto)
256235
add_dependencies(eventpipe-enabled aot_eventing_headers)
257236
if(CLR_CMAKE_TARGET_WIN32)
258237
add_dependencies(eventpipe-enabled aot_etw_headers)
@@ -263,6 +242,7 @@ add_dependencies(eventpipe-disabled aot_eventing_headers)
263242

264243
if (CLR_CMAKE_TARGET_WIN32)
265244
add_library(eventpipe-enabled.GuardCF STATIC ${EVENTPIPE_SOURCES})
245+
target_link_libraries(eventpipe-enabled.GuardCF PRIVATE eventpipe-shared-objects.GuardCF dn-containers-no-lto)
266246
add_dependencies(eventpipe-enabled.GuardCF aot_eventing_headers)
267247
add_dependencies(eventpipe-enabled.GuardCF aot_etw_headers)
268248
add_library(eventpipe-disabled.GuardCF STATIC ${AOT_EVENTPIPE_DISABLED_SOURCES})
@@ -276,4 +256,4 @@ install_static_library(eventpipe-disabled aotsdk nativeaot)
276256
if (CLR_CMAKE_TARGET_WIN32)
277257
install_static_library(eventpipe-enabled.GuardCF aotsdk nativeaot)
278258
install_static_library(eventpipe-disabled.GuardCF aotsdk nativeaot)
279-
endif (CLR_CMAKE_TARGET_WIN32)
259+
endif (CLR_CMAKE_TARGET_WIN32)

src/coreclr/vm/eventing/eventpipe/CMakeLists.txt

Lines changed: 17 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -28,47 +28,6 @@ add_custom_command(OUTPUT ${GEN_EVENTPIPE_SOURCES}
2828
COMMAND ${GENERATE_COMMAND}
2929
DEPENDS ${GENERATE_SCRIPT} ${EVENT_MANIFEST} ${EVENT_EXCLUSIONS})
3030

31-
set (CONTAINER_SOURCES "")
32-
set (CONTAINER_HEADERS "")
33-
set (EVENTPIPE_SOURCES "")
34-
set (EVENTPIPE_HEADERS "")
35-
set (CORECLR_EVENTPIPE_SHIM_SOURCES "")
36-
set (CORECLR_EVENTPIPE_SHIM_HEADERS "")
37-
38-
set (SHARED_CONTAINERS_SOURCE_PATH "${CLR_SRC_NATIVE_DIR}/containers")
39-
set (SHARED_EVENTPIPE_SOURCE_PATH "${CLR_SRC_NATIVE_DIR}/eventpipe")
40-
set (CORECLR_EVENTPIPE_SHIM_SOURCE_PATH "${CORECLR_EVENTPIPE_SHIM_DIR}")
41-
42-
include (${SHARED_CONTAINERS_SOURCE_PATH}/containers.cmake)
43-
include (${SHARED_EVENTPIPE_SOURCE_PATH}/eventpipe.cmake)
44-
45-
list(APPEND EVENTPIPE_SOURCES
46-
${SHARED_EVENTPIPE_SOURCES}
47-
${SHARED_DIAGNOSTIC_SERVER_SOURCES}
48-
)
49-
50-
list(APPEND EVENTPIPE_HEADERS
51-
${SHARED_EVENTPIPE_HEADERS}
52-
${SHARED_DIAGNOSTIC_SERVER_HEADERS}
53-
)
54-
55-
addprefix(CONTAINER_SOURCES ${SHARED_CONTAINERS_SOURCE_PATH} "${SHARED_CONTAINER_SOURCES}")
56-
addprefix(CONTAINER_HEADERS ${SHARED_CONTAINERS_SOURCE_PATH} "${SHARED_CONTAINER_HEADERS}")
57-
58-
addprefix(EVENTPIPE_SOURCES ${SHARED_EVENTPIPE_SOURCE_PATH} "${EVENTPIPE_SOURCES}")
59-
addprefix(EVENTPIPE_HEADERS ${SHARED_EVENTPIPE_SOURCE_PATH} "${EVENTPIPE_HEADERS}")
60-
61-
set_source_files_properties(${SHARED_EVENTPIPE_SOURCE_PATH}/ep-sources.c PROPERTIES COMPILE_DEFINITIONS EP_FORCE_INCLUDE_SOURCE_FILES)
62-
set_source_files_properties(${SHARED_EVENTPIPE_SOURCE_PATH}/ds-sources.c PROPERTIES COMPILE_DEFINITIONS DS_FORCE_INCLUDE_SOURCE_FILES)
63-
64-
set_source_files_properties(${CONTAINER_SOURCES} PROPERTIES LANGUAGE CXX)
65-
set_source_files_properties(${EVENTPIPE_SOURCES} PROPERTIES LANGUAGE CXX)
66-
67-
if(CLR_CMAKE_HOST_UNIX)
68-
set_source_files_properties(${CONTAINER_SOURCES} PROPERTIES COMPILE_OPTIONS -xc++)
69-
set_source_files_properties(${EVENTPIPE_SOURCES} PROPERTIES COMPILE_OPTIONS -xc++)
70-
endif(CLR_CMAKE_HOST_UNIX)
71-
7231
list(APPEND CORECLR_EVENTPIPE_SHIM_SOURCES
7332
ep-rt-coreclr.cpp
7433
)
@@ -81,28 +40,28 @@ list(APPEND CORECLR_EVENTPIPE_SHIM_HEADERS
8140
ep-rt-types-coreclr.h
8241
)
8342

84-
addprefix(CORECLR_EVENTPIPE_SHIM_SOURCES ${CORECLR_EVENTPIPE_SHIM_SOURCE_PATH} "${CORECLR_EVENTPIPE_SHIM_SOURCES}")
85-
addprefix(CORECLR_EVENTPIPE_SHIM_HEADERS ${CORECLR_EVENTPIPE_SHIM_SOURCE_PATH} "${CORECLR_EVENTPIPE_SHIM_HEADERS}")
86-
87-
88-
list(APPEND EVENTPIPE_SOURCES
89-
${CORECLR_EVENTPIPE_SHIM_SOURCES}
90-
${CORECLR_EVENTPIPE_SHIM_HEADERS}
91-
${EVENTPIPE_HEADERS}
92-
${SHARED_EVENTPIPE_CONFIG_HEADERS}
93-
${CONTAINER_SOURCES}
94-
${CONTAINER_HEADERS}
95-
)
96-
9743
add_library_clr(eventpipe_gen_objs OBJECT ${GEN_EVENTPIPE_SOURCES})
9844
target_precompile_headers(eventpipe_gen_objs PRIVATE [["common.h"]])
9945
set_target_properties(eventpipe_gen_objs PROPERTIES LINKER_LANGUAGE CXX)
10046
add_dependencies(eventpipe_gen_objs eventing_headers)
10147

102-
add_library_clr(eventpipe_objs OBJECT ${EVENTPIPE_SOURCES})
103-
target_precompile_headers(eventpipe_objs PRIVATE [["common.h"]])
104-
set_target_properties(eventpipe_objs PROPERTIES LINKER_LANGUAGE CXX)
48+
add_library_clr(eventpipe_objs OBJECT ${CORECLR_EVENTPIPE_SHIM_SOURCES} ${CORECLR_EVENTPIPE_SHIM_HEADERS})
49+
set_target_properties(eventpipe_objs PROPERTIES
50+
LINKER_LANGUAGE CXX
51+
UNITY_BUILD ON
52+
UNITY_BUILD_BATCH_SIZE 0
53+
)
10554
add_dependencies(eventpipe_objs eventing_headers)
55+
target_link_libraries(eventpipe_objs PRIVATE dn-diagnosticserver dn-eventpipe)
56+
57+
# The CoreCLR EventPipe runtime is C++, but the EventPipe and DiagnosticServer sources are C.
58+
# Forcibly override them to build as C++.
59+
get_property(diagnosticserver_sources TARGET dn-diagnosticserver PROPERTY INTERFACE_SOURCES)
60+
get_property(eventpipe_sources TARGET dn-eventpipe PROPERTY INTERFACE_SOURCES)
61+
set_source_files_properties(${diagnosticserver_sources} ${eventpipe_sources} PROPERTIES LANGUAGE CXX)
62+
63+
# Build EventPipe and DiagnosticServer as unity-builds.
64+
set (SHARED_EVENTPIPE_SOURCE_PATH "${CLR_SRC_NATIVE_DIR}/eventpipe")
10665

10766
add_library(eventpipe INTERFACE)
108-
target_sources(eventpipe INTERFACE $<TARGET_OBJECTS:eventpipe_gen_objs> $<TARGET_OBJECTS:eventpipe_objs>)
67+
target_sources(eventpipe INTERFACE $<TARGET_OBJECTS:eventpipe_gen_objs> $<TARGET_OBJECTS:eventpipe_objs> $<TARGET_OBJECTS:dn-containers>)

src/mono/mono/component/CMakeLists.txt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ set(MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME "diagnostics_tracing")
99
set(MONO_DEBUGGER_COMPONENT_NAME "debugger")
1010
set(MONO_MARSHAL_ILGEN_COMPONENT_NAME "marshal-ilgen")
1111

12+
add_subdirectory(${SHARED_CONTAINERS_SOURCE_PATH} containers)
13+
add_subdirectory(${SHARED_EVENTPIPE_SOURCE_PATH} eventpipe)
14+
1215
# a list of every component.
1316
set(components "")
1417
# a list of components needed by the AOT compiler
@@ -70,7 +73,6 @@ include_directories(
7073
)
7174

7275
set(${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME}-sources
73-
${container_sources}
7476
${eventpipe_sources}
7577
${diagnostic_server_sources}
7678
${MONO_COMPONENT_PATH}/event_pipe.c
@@ -213,6 +215,29 @@ elseif(AOT_COMPONENTS OR (NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS))
213215

214216
endif()
215217

218+
if (ENABLE_PERFTRACING AND "${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME}" IN_LIST components_to_build)
219+
# Build EventPipe and DiagnosticServer with the Mono runtime implementation as unity-builds.
220+
add_library(eventpipe-mono-objects OBJECT)
221+
set_target_properties(
222+
eventpipe-mono-objects
223+
PROPERTIES
224+
UNITY_BUILD ON
225+
UNITY_BUILD_BATCH_SIZE 0
226+
)
227+
target_link_libraries(eventpipe-mono-objects PRIVATE component_base eglib_api dn-eventpipe dn-diagnosticserver dn-diagnosticserver-pal)
228+
# Link the diagnostics_tracing component to the EventPipe and DiagnosticServer libraries.
229+
if (TARGET ${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME}-objects)
230+
target_sources(${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME}-objects PRIVATE $<TARGET_OBJECTS:eventpipe-mono-objects> $<TARGET_OBJECTS:dn-containers>)
231+
list(APPEND mono-components-objects $<TARGET_OBJECTS:eventpipe-mono-objects> $<TARGET_OBJECTS:dn-containers>)
232+
endif()
233+
if (TARGET mono-component-${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME}-static)
234+
target_sources(mono-component-${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME}-static PRIVATE $<TARGET_OBJECTS:eventpipe-mono-objects> $<TARGET_OBJECTS:dn-containers>)
235+
endif()
236+
if (TARGET mono-component-${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME})
237+
target_sources(mono-component-${MONO_DIAGNOSTICS_TRACING_COMPONENT_NAME} PRIVATE $<TARGET_OBJECTS:eventpipe-mono-objects> $<TARGET_OBJECTS:dn-containers>)
238+
endif()
239+
endif()
240+
216241
# define a list of mono-components-stubs objects that will be linked into
217242
# the runtime to be used as fallbacks if the dynamic components are not
218243
# available or when only static component stubs are requested.

0 commit comments

Comments
 (0)