832bff1e738b091892e757d6a750ef5b68667d0f
[platform/upstream/dotnet/runtime.git] / src / coreclr / clrdefinitions.cmake
1 include(${CMAKE_CURRENT_LIST_DIR}/clrfeatures.cmake)
2
3 add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>:DACCESS_COMPILE>)
4
5 if (CLR_CMAKE_TARGET_ARCH_ARM64)
6   if (CLR_CMAKE_TARGET_UNIX)
7     add_definitions(-DFEATURE_EMULATE_SINGLESTEP)
8   endif()
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)
20
21 if (CLR_CMAKE_TARGET_UNIX)
22
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>)
30   endif()
31
32 endif(CLR_CMAKE_TARGET_UNIX)
33
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)
37
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)
43
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>)
48
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)
57
58 if (NOT (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_UNIX))
59   add_compile_definitions(EnC_SUPPORTED)
60 endif()
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)
67
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)
71
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)
77   endif()
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)
82
83 if(NOT CLR_CMAKE_TARGET_ARCH_I386)
84   add_definitions(-DFEATURE_PORTABLE_SHUFFLE_THUNKS)
85 endif()
86
87 if(CLR_CMAKE_TARGET_UNIX OR NOT CLR_CMAKE_TARGET_ARCH_I386)
88   add_definitions(-DFEATURE_INSTANTIATINGSTUB_AS_IL)
89 endif()
90
91 add_compile_definitions(FEATURE_CODE_VERSIONING)
92 add_definitions(-DFEATURE_COLLECTIBLE_TYPES)
93
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)
99
100 add_definitions(-DFEATURE_BASICFREEZE)
101 add_definitions(-DFEATURE_CORECLR)
102 if(FEATURE_DBGIPC)
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)
116 if(FEATURE_GDBJIT)
117     add_definitions(-DFEATURE_GDBJIT)
118 endif()
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)
147
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)
161
162 if(FEATURE_COMWRAPPERS)
163     add_compile_definitions(FEATURE_COMWRAPPERS)
164 endif(FEATURE_COMWRAPPERS)
165
166 if(FEATURE_OBJCMARSHAL)
167   add_compile_definitions(FEATURE_OBJCMARSHAL)
168 endif()
169
170 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>>:FEATURE_PROFAPI_ATTACH_DETACH>)
171
172 add_definitions(-DFEATURE_READYTORUN)
173
174 set(FEATURE_READYTORUN 1)
175
176 add_compile_definitions(FEATURE_REJIT)
177
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)
181
182 if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_ARCH_ARM64)
183     add_definitions(-DFEATURE_STUBS_AS_IL)
184 endif ()
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)
209
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)
216
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)
222
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)
226
227 if (CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_TARGET_ARCH_AMD64)
228   add_definitions(-DFEATURE_SPECIAL_USER_MODE_APC)
229 endif()
230
231
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})
238
239   set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_ARCH TRUE)
240   set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_OS TRUE)
241
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")
253     endif()
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)
257     endif()
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)
261     endif()
262     if (TARGETDETAILS_OS STREQUAL "unix_anyos")
263       target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX_ANYOS)
264     endif()
265   elseif (TARGETDETAILS_OS STREQUAL "win")
266     target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS)
267   endif((TARGETDETAILS_OS MATCHES "^unix"))
268
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)
288   endif()
289
290   if (TARGETDETAILS_ARCH STREQUAL "armel")
291     target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE ARM_SOFTFP)
292   endif()
293
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"))
297 endfunction()