Ongoing work on the cmake build. (#20371)
[mono-project.git] / mono / mini / CMakeLists.txt
blob57b6e52c8c24ded7864ac0dd62b700b965b50c8b
1 project(mini)
3 function(addprefix var prefix list)
4   foreach(i ${list})
5     set(f ${f} ${prefix}/${i})
6   endforeach()
7   set(${var} ${f} PARENT_SCOPE)
8 endfunction()
10 include_directories(
11   ${PROJECT_BINARY_DIR}/
12   ${PROJECT_BINARY_DIR}/../..
13   ${PROJECT_BINARY_DIR}/../../mono/eglib
14   ${CMAKE_SOURCE_DIR}/
15   ${PROJECT_SOURCE_DIR}/../
16   ${PROJECT_SOURCE_DIR}/../eglib
17   ${PROJECT_SOURCE_DIR}/../sgen)
20 # SUBDIRS
22 include(../eglib/CMakeLists.txt)
23 include(../utils/CMakeLists.txt)
24 include(../metadata/CMakeLists.txt)
25 include(../sgen/CMakeLists.txt)
26 include(../eventpipe/CMakeLists.txt)
28 set(eventpipe_sources_base
29         ep.c
30         ep.h
31         ep-block.c
32         ep-block.h
33         ep-buffer.c
34         ep-buffer.h
35         ep-buffer-manager.c
36         ep-buffer-manager.h
37         ep-config.c
38         ep-config.h
39         ep-config-internals.h
40         ep-event.c
41         ep-event.h
42         ep-event-instance.h
43         ep-event-instance.c
44         ep-event-payload.c
45         ep-event-payload.h
46         ep-event-source.c
47         ep-event-source.h
48         ep-file.c
49         ep-file.h
50         ep-getter-setter.h
51         ep-metadata-generator.c
52         ep-metadata-generator.h
53         ep-provider.c
54         ep-provider.h
55         ep-provider-internals.h
56         ep-rt.h
57         ep-rt-config.h
58         ep-rt-config-mono.h
59         ep-rt-mono.c
60         ep-rt-mono.h
61         ep-rt-types.h
62         ep-rt-types-mono.h
63         ep-thread.c
64         ep-thread.h
65         ep-types.h
66         ep-session.c
67         ep-session.h
68         ep-session-provider.c
69         ep-stack-contents.c
70         ep-stack-contents.h
71         ep-stream.c
72         ep-stream.h)
73 if(ENABLE_PERFTRACING)
74   addprefix(eventpipe_sources ../eventpipe  "${eventpipe_sources_base}")
75 endif()
77 # ICU
78 if(HAVE_SYS_ICU)
79 if(STATIC_ICU)
80 set(pal_icushim_sources_base
81     pal_icushim_static.c)
82 else()
83 set(pal_icushim_sources_base
84     pal_icushim.c)
85 endif()
87 set(icu_shim_sources_base
88     pal_calendarData.c
89     pal_casing.c
90     pal_collation.c
91     pal_idna.c
92     pal_locale.c
93     pal_localeNumberData.c
94     pal_localeStringData.c
95     pal_normalization.c
96     pal_timeZoneInfo.c
97     entrypoints.c
98     ${pal_icushim_sources_base})
99 addprefix(icu_shim_sources "${ICU_SHIM_PATH}" "${icu_shim_sources_base}")
100 set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_DEFINITIONS OSX_ICU_LIBRARY_PATH="${OSX_ICU_LIBRARY_PATH}")
101 set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_FLAGS "-I${ICU_INCLUDEDIR} -I${CMAKE_SOURCE_DIR}/../libraries/Native/Unix/System.Globalization.Native/ -I${CMAKE_SOURCE_DIR}/../libraries/Native/Unix/Common/ ${ICU_FLAGS}")
102 set(ICU_LIBS "icucore")
103 set(ICU_LDFLAGS "-L${ICU_LIBDIR}")
104 endif()
107 # MINI
110 set(mini_common_sources
111     mini.c
112     mini-runtime.c
113     seq-points.c
114     seq-points.h
115     ir-emit.h
116     method-to-ir.c
117     cfgdump.h
118     cfgdump.c
119     calls.c
120     decompose.c
121     mini.h
122     version.h
123     optflags-def.h
124     jit-icalls.h
125     jit-icalls.c
126     trace.c
127     trace.h
128     patch-info.h
129     mini-ops.h
130     mini-arch.h
131     dominators.c
132     cfold.c
133     regalloc.h
134     helpers.c
135     liveness.c
136     ssa.c
137     abcremoval.c
138     abcremoval.h
139     local-propagation.c
140     driver.c
141     debug-mini.c
142     linear-scan.c
143     aot-compiler.h
144     aot-compiler.c
145     aot-runtime.c
146     graph.c
147     mini-codegen.c
148     mini-exceptions.c
149     mini-trampolines.c
150     branch-opts.c
151     mini-generic-sharing.c
152     simd-methods.h
153     tasklets.c
154     tasklets.h
155     simd-intrinsics.c
156     mini-native-types.c
157     mini-unwind.h
158     unwind.c
159     image-writer.h
160     image-writer.c
161     dwarfwriter.h
162     dwarfwriter.c
163     mini-gc.h
164     mini-gc.c
165     xdebug.c
166     mini-llvm.h
167     mini-llvm-cpp.h
168     llvm-jit.h
169     alias-analysis.c
170     mini-cross-helpers.c
171     arch-stubs.c
172     llvm-runtime.h
173     llvm-intrinsics.h
174     type-checking.c
175     lldb.h
176     lldb.c
177     memory-access.c
178     intrinsics.c
179     mini-profiler.c
180     interp-stubs.c
181     aot-runtime.h
182     ee.h
183     mini-runtime.h
184     llvmonly-runtime.h
185     llvmonly-runtime.c
186     simd-intrinsics-netcore.c
187     monovm.h
188     monovm.c)
190 set(debugger_sources
191   debugger-engine.h
192   debugger-engine.c
193   debugger-agent.h
194   debugger-agent.c
195   debugger-agent-stubs.c
196   debugger-state-machine.h
197   debugger-state-machine.c)
199 set(amd64_sources
200     mini-amd64.c
201     mini-amd64.h
202     exceptions-amd64.c
203     tramp-amd64.c
204     mini-amd64-gsharedvt.c
205     mini-amd64-gsharedvt.h
206     tramp-amd64-gsharedvt.c
207     cpu-amd64.h)
209 set(x86_sources
210     mini-x86.c
211     mini-x86.h
212     exceptions-x86.c
213     tramp-x86.c
214     mini-x86-gsharedvt.c
215     tramp-x86-gsharedvt.c
216     cpu-x86.h)
218 set(arm64_sources
219     mini-arm64.c
220     mini-arm64.h
221     exceptions-arm64.c
222     tramp-arm64.c
223     mini-arm64-gsharedvt.c
224     mini-arm64-gsharedvt.h
225     tramp-arm64-gsharedvt.c
226     cpu-arm64.h)
228 set(arm_sources
229     mini-arm.c
230     mini-arm.h
231     exceptions-arm.c
232     tramp-arm.c
233     mini-arm-gsharedvt.c
234     mini-arm-gsharedvt.h
235     tramp-arm-gsharedvt.c
236     cpu-arm.h)
238 set(wasm_sources
239     mini-wasm.c
240     tramp-wasm.c
241     exceptions-wasm.c
242     aot-runtime-wasm.c
243     mini-wasm-debugger.c
244     wasm_m2n_invoke.g.h
245     cpu-wasm.h)
247 if(TARGET_AMD64)
248 set(arch_sources ${amd64_sources})
249 elseif(TARGET_X86)
250 set(arch_sources ${x86_sources})
251 elseif(TARGET_ARM64)
252 set(arch_sources ${arm64_sources})
253 elseif(TARGET_ARM)
254 set(arch_sources ${arm_sources})
255 elseif(TARGET_WASM)
256 set(arch_sources ${wasm_sources})
257 endif()
259 set(darwin_sources
260     mini-darwin.c)
262 set(windows_sources
263     mini-windows.c
264     mini-windows.h
265     mini-windows-dllmain.c
266     mini-windows-dlldac.c)
268 set(posix_sources
269     mini-posix.c)
271 if(HOST_DARWIN)
272 set(os_sources "${darwin_sources};${posix_sources}")
273 endif()
275 set(interp_sources
276     interp/interp.h
277     interp/interp-internals.h
278     interp/interp.c
279     interp/interp-intrins.h
280     interp/interp-intrins.c
281     interp/mintops.h
282     interp/mintops.c
283     interp/transform.c)
284 set(interp_stub_sources
285     interp-stubs.c)
287 if(NOT DISABLE_INTERPRETER)
288 set(mini_interp_sources ${interp_sources})
289 else()
290 set(mini_interp_sources ${interp_stub_sources})
291 endif()
293 if(ENABLE_INTERP_LIB)
294 add_library(mono-ee-interp STATIC "${interp_sources}")
295 install(TARGETS mono-ee-interp LIBRARY)
296 endif()
298 if(ENABLE_LLVM)
299 set(llvm_sources
300     mini-llvm.c
301     mini-llvm-cpp.cpp
302     llvm-jit.cpp)
303 endif()
305 if(ENABLE_LLVM)
306 set(llvm_runtime_sources
307     llvm-runtime.cpp)
308 elseif(ENABLE_LLVM_RUNTIME)
309 set(llvm_runtime_sources
310     llvm-runtime.cpp)
311 endif()
313 set(mini_public_headers_base
314   jit.h
315   mono-private-unstable.h)
316 addprefix(mini_public_headers ../mini "${mini_public_headers_base}")
318 set(mini_sources "${CMAKE_CURRENT_BINARY_DIR}/buildver-sgen.h;main-core.c;${mini_common_sources};${arch_sources};${os_sources};${mini_interp_sources};${llvm_sources};${debugger_sources};${llvm_runtime_sources}")
320 if(LLVM_LIBDIR)
321   link_directories(${LLVM_LIBDIR})
322 endif()
324 if(HOST_DARWIN)
325 set(OS_LIBS "-framework CoreFoundation" "-framework Foundation")
326 endif()
328 if(HOST_IOS)
329 set(OS_LIBS "-framework CoreFoundation" "-lobjc" "-lc++")
330 endif()
332 add_library(monosgen-objects OBJECT "${eglib_sources};${metadata_sources};${utils_sources};${sgen_sources};${icu_shim_sources};${eventpipe_sources};${mini_sources}")
333 add_library(monosgen-static STATIC $<TARGET_OBJECTS:monosgen-objects>)
334 set_target_properties(monosgen-static PROPERTIES OUTPUT_NAME monosgen-2.0)
335 if(NOT DISABLE_LIBS)
336   install(TARGETS monosgen-static LIBRARY)
337   install(FILES ${metadata_public_headers}
338         DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mono-2.0/mono/metadata)
339   install(FILES ${utils_public_headers}
340         DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mono-2.0/mono/utils)
341   install(FILES ${mini_public_headers}
342         DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mono-2.0/mono/jit)
343 endif()
344 if(NOT DISABLE_SHARED_LIBS)
345   add_library(monosgen SHARED $<TARGET_OBJECTS:monosgen-objects>)
346   set_target_properties(monosgen PROPERTIES OUTPUT_NAME monosgen-2.0)
347   set_target_properties(monosgen PROPERTIES LIBRARY_OUTPUT_DIRECTORY .libs)
348   target_link_libraries(monosgen ${OS_LIBS} "iconv" ${LLVM_LIBS} ${ICU_LIBS})
349   if(ICU_LDFLAGS)
350     set_target_properties(monosgen PROPERTIES LINK_FLAGS ${ICU_LDFLAGS})
351   endif()
352   install(TARGETS monosgen LIBRARY)
353 endif()
355 # FIXME: Always rebuilds, creates non-deterministic builds
356 # FIXME: Use the previous format
357 #string(TIMESTAMP BUILD_DATE)
359 #add_custom_command(
360 #  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/buildver-sgen.h
361 #  COMMAND echo "const char *build_date = \"${BUILD_DATE}\";" > ${CMAKE_CURRENT_BINARY_DIR}/buildver-sgen.h
362 #  VERBATIM
364 add_custom_command(
365   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/buildver-sgen.h
366   COMMAND echo "const char *build_date = \"\";" > ${CMAKE_CURRENT_BINARY_DIR}/buildver-sgen.h
367   VERBATIM
370 add_custom_command(
371   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
372   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen-version-h.sh ${CMAKE_CURRENT_SOURCE_DIR}/../..
373   VERBATIM
376 add_custom_command(
377   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-amd64.h
378   COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_AMD64 ${CMAKE_CURRENT_SOURCE_DIR} cpu-amd64.h amd64_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-amd64.md
379   VERBATIM
382 add_custom_command(
383   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-x86.h
384   COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_X86 ${CMAKE_CURRENT_SOURCE_DIR} cpu-x86.h x86_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-x86.md
385   VERBATIM
388 add_custom_command(
389   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-arm64.h
390   COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_ARM64 ${CMAKE_CURRENT_SOURCE_DIR} cpu-arm64.h arm64_cpu_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-arm64.md
391   VERBATIM
394 add_custom_command(
395   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-arm.h
396   COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_ARM ${CMAKE_CURRENT_SOURCE_DIR} cpu-arm.h arm_cpu_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-arm.md
397   VERBATIM
400 add_custom_command(
401   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-wasm.h
402   COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_WASM ${CMAKE_CURRENT_SOURCE_DIR} cpu-wasm.h wasm_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-wasm.md
403   VERBATIM
406 if(NOT DISABLE_EXECUTABLES)
407 set(CMAKE_SKIP_RPATH 1)
408 add_executable(mono-sgen "main-sgen.c")
409 target_link_libraries(mono-sgen monosgen-static ${OS_LIBS} "iconv" ${LLVM_LIBS} ${ICU_LIBS})
410 if(ICU_LDFLAGS)
411   set_target_properties(mono-sgen PROPERTIES LINK_FLAGS ${ICU_LDFLAGS})
412 endif()
413 install(TARGETS mono-sgen RUNTIME)
414 endif()