1 include(${CMAKE_CURRENT_LIST_DIR}/clrfeatures.cmake)
3 add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>:DACCESS_COMPILE>)
5 if (CLR_CMAKE_TARGET_ARCH_ARM64)
6 if (CLR_CMAKE_TARGET_UNIX)
7 add_definitions(-DFEATURE_EMULATE_SINGLESTEP)
9 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:FEATURE_MULTIREG_RETURN>)
10 elseif (CLR_CMAKE_TARGET_ARCH_ARM)
11 if (CLR_CMAKE_HOST_WIN32 AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
12 # Set this to ensure we can use Arm SDK for Desktop binary linkage when doing native (Arm32) build
13 add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE)
14 add_definitions(-D_ARM_WORKAROUND_)
15 endif (CLR_CMAKE_HOST_WIN32 AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
16 add_definitions(-DFEATURE_EMULATE_SINGLESTEP)
17 elseif (CLR_CMAKE_TARGET_ARCH_RISCV64)
18 add_definitions(-DFEATURE_EMULATE_SINGLESTEP)
19 endif (CLR_CMAKE_TARGET_ARCH_ARM64)
21 if (CLR_CMAKE_TARGET_UNIX)
23 if (CLR_CMAKE_TARGET_ARCH_AMD64)
24 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:UNIX_AMD64_ABI>)
25 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:FEATURE_MULTIREG_RETURN>)
26 elseif (CLR_CMAKE_TARGET_ARCH_ARM)
27 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:UNIX_ARM_ABI>)
28 elseif (CLR_CMAKE_TARGET_ARCH_I386)
29 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:UNIX_X86_ABI>)
32 endif(CLR_CMAKE_TARGET_UNIX)
34 if (CLR_CMAKE_TARGET_APPLE AND CLR_CMAKE_TARGET_ARCH_ARM64)
35 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:OSX_ARM64_ABI>)
36 endif(CLR_CMAKE_TARGET_APPLE AND CLR_CMAKE_TARGET_ARCH_ARM64)
38 if(CLR_CMAKE_TARGET_LINUX_MUSL)
39 # musl-libc doesn't have fixed stack limit, this define disables some stack pointer
40 # sanity checks in debug / checked build that rely on a fixed stack limit
41 add_definitions(-DNO_FIXED_STACK_LIMIT)
42 endif(CLR_CMAKE_TARGET_LINUX_MUSL)
44 add_definitions(-D_BLD_CLR)
45 add_definitions(-DDEBUGGING_SUPPORTED)
46 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>>:PROFILING_SUPPORTED>)
47 add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>:PROFILING_SUPPORTED_DATA>)
49 if(CLR_CMAKE_HOST_WIN32)
50 add_definitions(-DWIN32)
51 add_definitions(-D_WIN32)
52 add_definitions(-DWINVER=0x0602)
53 add_definitions(-D_WIN32_WINNT=0x0602)
54 add_definitions(-DWIN32_LEAN_AND_MEAN)
55 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
56 endif(CLR_CMAKE_HOST_WIN32)
58 if (NOT (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_UNIX))
59 add_compile_definitions(EnC_SUPPORTED)
61 if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_WIN32))
62 add_compile_definitions(FEATURE_ENC_SUPPORTED)
63 endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_WIN32))
64 if(CLR_CMAKE_TARGET_TIZEN_LINUX AND NOT CLR_CMAKE_TARGET_ARCH_I386 AND NOT CLR_CMAKE_TARGET_ARCH_RISCV64)
65 add_compile_definitions(FEATURE_TIZEN_HOT_RELOAD_SUPPORTED)
66 endif(CLR_CMAKE_TARGET_TIZEN_LINUX AND NOT CLR_CMAKE_TARGET_ARCH_I386 AND NOT CLR_CMAKE_TARGET_ARCH_RISCV64)
68 if(CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_TARGET_ARCH_AMD64)
69 add_compile_definitions(OUT_OF_PROCESS_SETTHREADCONTEXT)
70 endif(CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_TARGET_ARCH_AMD64)
72 # Features - please keep them alphabetically sorted
73 if(CLR_CMAKE_TARGET_WIN32)
74 if(NOT CLR_CMAKE_TARGET_ARCH_I386)
75 add_definitions(-DFEATURE_ARRAYSTUB_AS_IL)
76 add_definitions(-DFEATURE_MULTICASTSTUB_AS_IL)
78 else(CLR_CMAKE_TARGET_WIN32)
79 add_definitions(-DFEATURE_ARRAYSTUB_AS_IL)
80 add_definitions(-DFEATURE_MULTICASTSTUB_AS_IL)
81 endif(CLR_CMAKE_TARGET_WIN32)
83 if(NOT CLR_CMAKE_TARGET_ARCH_I386)
84 add_definitions(-DFEATURE_PORTABLE_SHUFFLE_THUNKS)
87 if(CLR_CMAKE_TARGET_UNIX OR NOT CLR_CMAKE_TARGET_ARCH_I386)
88 add_definitions(-DFEATURE_INSTANTIATINGSTUB_AS_IL)
91 add_compile_definitions(FEATURE_CODE_VERSIONING)
92 add_definitions(-DFEATURE_COLLECTIBLE_TYPES)
94 if(CLR_CMAKE_TARGET_WIN32)
95 add_definitions(-DFEATURE_COMINTEROP)
96 add_definitions(-DFEATURE_COMINTEROP_APARTMENT_SUPPORT)
97 add_definitions(-DFEATURE_COMINTEROP_UNMANAGED_ACTIVATION)
98 endif(CLR_CMAKE_TARGET_WIN32)
100 add_definitions(-DFEATURE_BASICFREEZE)
101 add_definitions(-DFEATURE_CORECLR)
103 add_definitions(-DFEATURE_DBGIPC_TRANSPORT_DI)
104 add_definitions(-DFEATURE_DBGIPC_TRANSPORT_VM)
105 endif(FEATURE_DBGIPC)
106 add_definitions(-DFEATURE_DEFAULT_INTERFACES)
107 if(FEATURE_AUTO_TRACE)
108 add_compile_definitions(FEATURE_AUTO_TRACE)
109 endif(FEATURE_AUTO_TRACE)
110 if(FEATURE_EVENT_TRACE)
111 add_compile_definitions(FEATURE_EVENT_TRACE)
112 add_definitions(-DFEATURE_PERFTRACING)
113 else(FEATURE_EVENT_TRACE)
114 add_custom_target(eventing_headers) # add a dummy target to avoid checking for FEATURE_EVENT_TRACE in multiple places
115 endif(FEATURE_EVENT_TRACE)
117 add_definitions(-DFEATURE_GDBJIT)
119 if(FEATURE_GDBJIT_FRAME)
120 add_definitions(-DFEATURE_GDBJIT_FRAME)
121 endif(FEATURE_GDBJIT_FRAME)
122 if(FEATURE_GDBJIT_LANGID_CS)
123 add_definitions(-DFEATURE_GDBJIT_LANGID_CS)
124 endif(FEATURE_GDBJIT_LANGID_CS)
125 if(FEATURE_GDBJIT_SYMTAB)
126 add_definitions(-DFEATURE_GDBJIT_SYMTAB)
127 endif(FEATURE_GDBJIT_SYMTAB)
128 if(CLR_CMAKE_TARGET_LINUX)
129 add_definitions(-DFEATURE_EVENTSOURCE_XPLAT)
130 endif(CLR_CMAKE_TARGET_LINUX)
131 # NetBSD doesn't implement this feature
132 if(NOT CLR_CMAKE_TARGET_NETBSD)
133 add_definitions(-DFEATURE_HIJACK)
134 endif(NOT CLR_CMAKE_TARGET_NETBSD)
135 add_definitions(-DFEATURE_ICASTABLE)
136 if (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM64))
137 add_definitions(-DFEATURE_INTEROP_DEBUGGING)
138 endif (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM64))
139 if(FEATURE_INTERPRETER)
140 add_compile_definitions(FEATURE_INTERPRETER)
141 endif(FEATURE_INTERPRETER)
142 add_definitions(-DFEATURE_ISYM_READER)
143 if (CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_WIN32)
144 add_definitions(-DFEATURE_MANAGED_ETW)
145 endif(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_WIN32)
146 add_definitions(-DFEATURE_MANAGED_ETW_CHANNELS)
148 if(FEATURE_MERGE_JIT_AND_ENGINE)
149 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_FEATURE_MERGE_JIT_AND_ENGINE>>>:FEATURE_MERGE_JIT_AND_ENGINE>)
150 endif(FEATURE_MERGE_JIT_AND_ENGINE)
151 add_compile_definitions(FEATURE_MULTICOREJIT)
152 if(CLR_CMAKE_TARGET_UNIX)
153 add_definitions(-DFEATURE_PAL_ANSI)
154 endif(CLR_CMAKE_TARGET_UNIX)
155 if(CLR_CMAKE_TARGET_LINUX AND CLR_CMAKE_HOST_LINUX)
156 add_definitions(-DFEATURE_PERFMAP)
157 endif(CLR_CMAKE_TARGET_LINUX AND CLR_CMAKE_HOST_LINUX)
158 if(CLR_CMAKE_TARGET_FREEBSD)
159 add_compile_definitions(FEATURE_PERFMAP)
160 endif(CLR_CMAKE_TARGET_FREEBSD)
162 if(FEATURE_COMWRAPPERS)
163 add_compile_definitions(FEATURE_COMWRAPPERS)
164 endif(FEATURE_COMWRAPPERS)
166 if(FEATURE_OBJCMARSHAL)
167 add_compile_definitions(FEATURE_OBJCMARSHAL)
170 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>>:FEATURE_PROFAPI_ATTACH_DETACH>)
172 add_definitions(-DFEATURE_READYTORUN)
174 set(FEATURE_READYTORUN 1)
176 add_compile_definitions(FEATURE_REJIT)
178 if (CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_TARGET_UNIX)
179 add_definitions(-DFEATURE_REMOTE_PROC_MEM)
180 endif (CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_TARGET_UNIX)
182 if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_ARCH_ARM64)
183 add_definitions(-DFEATURE_STUBS_AS_IL)
185 if (FEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION)
186 add_definitions(-DFEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION)
187 endif(FEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION)
188 add_definitions(-DFEATURE_SVR_GC)
189 add_definitions(-DFEATURE_SYMDIFF)
190 add_compile_definitions(FEATURE_TIERED_COMPILATION)
191 if (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64)
192 add_compile_definitions(FEATURE_ON_STACK_REPLACEMENT)
193 endif (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64)
194 add_compile_definitions(FEATURE_PGO)
195 if (CLR_CMAKE_TARGET_WIN32)
196 add_definitions(-DFEATURE_TYPEEQUIVALENCE)
197 endif(CLR_CMAKE_TARGET_WIN32)
198 if (CLR_CMAKE_TARGET_ARCH_AMD64)
199 # Enable the AMD64 Unix struct passing JIT-EE interface for all AMD64 platforms, to enable altjit.
200 add_definitions(-DUNIX_AMD64_ABI_ITF)
201 endif (CLR_CMAKE_TARGET_ARCH_AMD64)
202 add_definitions(-DFEATURE_USE_ASM_GC_WRITE_BARRIERS)
203 if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64 OR CLR_CMAKE_TARGET_ARCH_RISCV64)
204 add_definitions(-DFEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP)
205 endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64 OR CLR_CMAKE_TARGET_ARCH_RISCV64)
206 if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64 OR CLR_CMAKE_TARGET_ARCH_RISCV64)
207 add_definitions(-DFEATURE_MANUALLY_MANAGED_CARD_BUNDLES)
208 endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_LOONGARCH64 OR CLR_CMAKE_TARGET_ARCH_RISCV64)
210 if(NOT CLR_CMAKE_TARGET_UNIX)
211 add_definitions(-DFEATURE_WIN32_REGISTRY)
212 endif(NOT CLR_CMAKE_TARGET_UNIX)
213 add_definitions(-D_SECURE_SCL=0)
214 add_definitions(-DUNICODE)
215 add_definitions(-D_UNICODE)
217 if(CLR_CMAKE_TARGET_WIN32)
218 if (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
219 add_definitions(-DFEATURE_DATABREAKPOINT)
220 endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
221 endif(CLR_CMAKE_TARGET_WIN32)
223 if (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32)
224 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:FEATURE_EH_FUNCLETS>)
225 endif (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32)
227 if (CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_TARGET_ARCH_AMD64)
228 add_definitions(-DFEATURE_SPECIAL_USER_MODE_APC)
232 # Use this function to enable building with a specific target OS and architecture set of defines
233 # This is known to work for the set of defines used by the JIT and gcinfo, it is not likely correct for
234 # other components of the runtime
235 function(set_target_definitions_to_custom_os_and_arch)
236 set(oneValueArgs TARGET OS ARCH)
237 cmake_parse_arguments(TARGETDETAILS "" "${oneValueArgs}" "" ${ARGN})
239 set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_ARCH TRUE)
240 set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_OS TRUE)
242 if ((TARGETDETAILS_OS MATCHES "^unix"))
243 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX)
244 if (TARGETDETAILS_ARCH STREQUAL "x64")
245 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_AMD64_ABI)
246 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_MULTIREG_RETURN)
247 elseif ((TARGETDETAILS_ARCH STREQUAL "arm") OR (TARGETDETAILS_ARCH STREQUAL "armel"))
248 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_ARM_ABI)
249 elseif (TARGETDETAILS_ARCH STREQUAL "x86")
250 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_X86_ABI)
251 elseif (TARGETDETAILS_ARCH STREQUAL "arm64")
252 elseif (TARGETDETAILS_ARCH STREQUAL "loongarch64")
254 if ((TARGETDETAILS_ARCH STREQUAL "arm64") AND (TARGETDETAILS_OS STREQUAL "unix_osx"))
255 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_APPLE)
256 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE OSX_ARM64_ABI)
258 if (TARGETDETAILS_OS STREQUAL "unix_osx")
259 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_APPLE)
260 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_OSX)
262 if (TARGETDETAILS_OS STREQUAL "unix_anyos")
263 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX_ANYOS)
265 elseif (TARGETDETAILS_OS STREQUAL "win")
266 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS)
267 endif((TARGETDETAILS_OS MATCHES "^unix"))
269 if (TARGETDETAILS_ARCH STREQUAL "x86")
270 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_X86)
271 elseif(TARGETDETAILS_ARCH STREQUAL "x64")
272 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_64BIT)
273 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_AMD64)
274 elseif(TARGETDETAILS_ARCH STREQUAL "arm64")
275 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_64BIT)
276 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM64)
277 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_MULTIREG_RETURN)
278 elseif(TARGETDETAILS_ARCH STREQUAL "loongarch64")
279 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_64BIT)
280 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_LOONGARCH64)
281 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_MULTIREG_RETURN)
282 elseif((TARGETDETAILS_ARCH STREQUAL "arm") OR (TARGETDETAILS_ARCH STREQUAL "armel"))
283 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM)
284 elseif((TARGETDETAILS_ARCH STREQUAL "riscv64"))
285 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_64BIT)
286 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_RISCV64)
287 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_MULTIREG_RETURN)
290 if (TARGETDETAILS_ARCH STREQUAL "armel")
291 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE ARM_SOFTFP)
294 if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS MATCHES "^unix"))
295 target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_EH_FUNCLETS)
296 endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS MATCHES "^unix"))