forked from dotnet/runtime
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclrfeatures.cmake
More file actions
159 lines (136 loc) · 6.16 KB
/
Copy pathclrfeatures.cmake
File metadata and controls
159 lines (136 loc) · 6.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# riscv64 and loongarch64 do not have a separate CID-only asm stub layer yet.
# Forcing FEATURE_DYNAMIC_CODE_COMPILED on keeps the feature matrix consistent with
# the top-level build and avoids unresolved CID/VSD stub symbols at link time.
if (NOT DEFINED FEATURE_DYNAMIC_CODE_COMPILED)
if (CLR_CMAKE_TARGET_ARCH_RISCV64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64)
set(FEATURE_DYNAMIC_CODE_COMPILED 1)
endif()
endif()
if (FEATURE_DYNAMIC_CODE_COMPILED)
set(FEATURE_TIERED_COMPILATION 1)
set(FEATURE_REJIT 1)
set(FEATURE_PGO 1)
endif()
# On desktop, if dynamic code compiled is false, we still enable static linking so we don't have to add platform manifest entries
# for interpreter library, which is required for the packs build
if (CLR_CMAKE_TARGET_ARCH_WASM OR CLR_CMAKE_TARGET_APPLE_MOBILE OR NOT FEATURE_DYNAMIC_CODE_COMPILED)
set(FEATURE_STATICALLY_LINKED 1)
endif()
if(CLR_CMAKE_TARGET_TIZEN_LINUX)
set(FEATURE_GDBJIT_LANGID_CS 1)
endif()
# FEATURE_EVENT_TRACE: Enables the full eventing infrastructure (generated FireEtw* functions,
# EventPipe write calls, ETW on Windows). Set on all platforms except cross-component WASM builds.
if(NOT DEFINED FEATURE_EVENT_TRACE)
if (NOT (CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_TARGET_ARCH_WASM))
# To actually disable FEATURE_EVENT_TRACE, also change clr.featuredefines.props
set(FEATURE_EVENT_TRACE 1)
endif()
endif(NOT DEFINED FEATURE_EVENT_TRACE)
# FEATURE_EVENTSOURCE_XPLAT: Enables the LTTng-based XplatEventLogger path (LTTNG_TRACE_CONTEXT,
# XplatEventLogger, XplatEventLoggerController, and the generated FireEtXplat* functions).
# Currently Linux-only (excluding Android). Used as the sole guard for all LTTng-related code;
# platforms without this flag (Windows, macOS, Browser, WASI) use EventPipe-only eventing.
if(NOT DEFINED FEATURE_EVENTSOURCE_XPLAT)
if (CLR_CMAKE_TARGET_LINUX AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT (CLR_CROSS_COMPONENTS_BUILD AND CLR_CMAKE_TARGET_ARCH_WASM))
# To actually disable FEATURE_EVENTSOURCE_XPLAT, also change clr.featuredefines.props
set(FEATURE_EVENTSOURCE_XPLAT 1)
endif()
endif(NOT DEFINED FEATURE_EVENTSOURCE_XPLAT)
# FEATURE_PERFTRACING: Enables the EventPipe diagnostics subsystem (event sessions, IPC protocol,
# diagnostic server). Set whenever FEATURE_EVENT_TRACE is set, or when threadless perftracing is
# explicitly requested via FEATURE_PERFTRACING_DISABLE_THREADS.
if(NOT DEFINED FEATURE_PERFTRACING)
if(FEATURE_EVENT_TRACE OR FEATURE_PERFTRACING_DISABLE_THREADS)
set(FEATURE_PERFTRACING 1)
endif()
endif(NOT DEFINED FEATURE_PERFTRACING)
if(NOT DEFINED FEATURE_DBGIPC)
if(CLR_CMAKE_TARGET_UNIX)
set(FEATURE_DBGIPC 1)
endif()
endif(NOT DEFINED FEATURE_DBGIPC)
if(NOT DEFINED FEATURE_CORPROFILER)
# ICorProfiler isn't supported on non-desktop targets or WASM scenarios
if(NOT CLR_CMAKE_TARGET_ARCH_WASM
# AND NOT CLR_CMAKE_TARGET_ANDROID
# AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE
)
set(FEATURE_CORPROFILER 1)
endif()
endif()
if(CLR_CMAKE_TARGET_ARCH_WASM)
# FEATURE_INTERPRETER is already enabled by default
set(FEATURE_PORTABLE_ENTRYPOINTS 1)
set(FEATURE_PORTABLE_HELPERS 1)
endif(CLR_CMAKE_TARGET_ARCH_WASM)
if(CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
set(FEATURE_WEBCIL 1)
endif()
if(NOT DEFINED FEATURE_INTERPRETER)
set(FEATURE_INTERPRETER 0)
if(NOT CLR_CMAKE_TARGET_ANDROID AND
(CLR_CMAKE_TARGET_ARCH_AMD64 OR
CLR_CMAKE_TARGET_ARCH_ARM64 OR
CLR_CMAKE_TARGET_ARCH_ARM OR
CLR_CMAKE_TARGET_ARCH_RISCV64 OR
CLR_CMAKE_TARGET_ARCH_LOONGARCH64))
set(FEATURE_INTERPRETER $<IF:$<CONFIG:Debug,Checked>,1,0>)
endif()
endif()
if(NOT DEFINED FEATURE_STANDALONE_GC)
set(FEATURE_STANDALONE_GC 1)
endif(NOT DEFINED FEATURE_STANDALONE_GC)
if(NOT DEFINED FEATURE_SINGLE_FILE_DIAGNOSTICS)
set(FEATURE_SINGLE_FILE_DIAGNOSTICS 1)
endif(NOT DEFINED FEATURE_SINGLE_FILE_DIAGNOSTICS)
if(NOT DEFINED FEATURE_INPROC_CRASHREPORT)
if(CLR_CMAKE_TARGET_WIN32 OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
# Windows, which requires a different native crash-context implementation.
# Browser and WASI, which do not provide the required native fatal-signal process model.
set(FEATURE_INPROC_CRASHREPORT 0)
else()
set(FEATURE_INPROC_CRASHREPORT 1)
endif()
endif(NOT DEFINED FEATURE_INPROC_CRASHREPORT)
if ((CLR_CMAKE_TARGET_WIN32 OR CLR_CMAKE_TARGET_UNIX) AND NOT CLR_CMAKE_TARGET_ARCH_WASM)
set(FEATURE_COMWRAPPERS 1)
endif()
if (CLR_CMAKE_TARGET_APPLE)
set(FEATURE_OBJCMARSHAL 1)
endif()
if(NOT DEFINED FEATURE_JAVAMARSHAL)
if(CLR_CMAKE_TARGET_ANDROID)
set(FEATURE_JAVAMARSHAL 1)
else()
set(FEATURE_JAVAMARSHAL $<IF:$<CONFIG:Debug,Checked>,1,0>)
endif()
endif()
if (CLR_CMAKE_TARGET_WIN32)
set(FEATURE_TYPEEQUIVALENCE 1)
endif(CLR_CMAKE_TARGET_WIN32)
if (NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT FEATURE_DYNAMIC_CODE_COMPILED)
set(FEATURE_STUBPRECODE_DYNAMIC_HELPERS 1)
endif()
if (NOT FEATURE_DYNAMIC_CODE_COMPILED)
set(FEATURE_CORECLR_CACHED_INTERFACE_DISPATCH 1)
set(FEATURE_CORECLR_VIRTUAL_STUB_DISPATCH 0)
else()
# Enable cached interface dispatch so that we can test/debug it more easily on non-embedded scenarios (set DOTNET_UseCachedInterfaceDispatch=1)
# Only enable in chk/debug builds as this support isn't intended for retail use elsewhere
if (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64)
set(FEATURE_CORECLR_CACHED_INTERFACE_DISPATCH $<IF:$<CONFIG:Debug,Checked>,1,0>)
else()
set(FEATURE_CORECLR_CACHED_INTERFACE_DISPATCH 0)
endif()
set(FEATURE_CORECLR_VIRTUAL_STUB_DISPATCH 1)
endif()
# We use a flush instruction cache to protect reads from the StubPrecodeData/CallCountingStub structures in the stubs.
# This is needed because the StubPrecodeData structure is initialized after the stub code is written, and we need to ensure that
# the reads in the stub happen after the writes to the StubPrecodeData structure. We could do this with a barrier instruction in the stub,
# but that would be more expensive.
set(FEATURE_CORECLR_FLUSH_INSTRUCTION_CACHE_TO_PROTECT_STUB_READS 1)
if (CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_HOST_ARCH_AMD64)
# Allow 16 byte compare-exchange (cmpxchg16b)
add_compile_options($<${FEATURE_CORECLR_CACHED_INTERFACE_DISPATCH}:-mcx16>)
endif()