2 * Handle the differences between the llvm backend beeing embedded
3 * or loaded at runtime.
5 #ifdef MONO_LLVM_LOADED
7 int mono_llvm_load (const char* bpath) MONO_INTERNAL;
9 #ifdef MONO_LLVM_IN_MINI
12 #include <mach-o/dyld.h>
15 typedef void (*MonoLLVMVoidFunc)(void);
16 typedef void (*MonoLLVMCFGFunc)(MonoCompile *cfg);
17 typedef void (*MonoLLVMEmitCallFunc)(MonoCompile *cfg, MonoCallInst *call);
18 typedef void (*MonoLLVMCreateAotFunc)(const char *got_symbol);
19 typedef void (*MonoLLVMEmitAotFunc)(const char *filename, const char *cu_name, int got_size);
20 typedef void (*MonoLLVMFreeDomainFunc)(MonoDomain *domain);
22 static MonoLLVMVoidFunc mono_llvm_init_fptr;
23 static MonoLLVMVoidFunc mono_llvm_cleanup_fptr;
24 static MonoLLVMCFGFunc mono_llvm_emit_method_fptr;
25 static MonoLLVMEmitCallFunc mono_llvm_emit_call_fptr;
26 static MonoLLVMCreateAotFunc mono_llvm_create_aot_module_fptr;
27 static MonoLLVMEmitAotFunc mono_llvm_emit_aot_module_fptr;
28 static MonoLLVMCFGFunc mono_llvm_check_method_supported_fptr;
29 static MonoLLVMFreeDomainFunc mono_llvm_free_domain_info_fptr;
34 mono_llvm_init_fptr ();
38 mono_llvm_cleanup (void)
40 mono_llvm_cleanup_fptr ();
44 mono_llvm_emit_method (MonoCompile *cfg)
46 mono_llvm_emit_method_fptr (cfg);
50 mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call)
52 mono_llvm_emit_call_fptr (cfg, call);
56 mono_llvm_create_aot_module (const char *got_symbol)
58 g_assert (mono_llvm_create_aot_module_fptr);
59 mono_llvm_create_aot_module_fptr (got_symbol);
63 mono_llvm_emit_aot_module (const char *filename, const char *cu_name, int got_size)
65 g_assert (mono_llvm_emit_aot_module_fptr);
66 mono_llvm_emit_aot_module_fptr (filename, cu_name, got_size);
70 mono_llvm_check_method_supported (MonoCompile *cfg)
72 mono_llvm_check_method_supported_fptr (cfg);
76 mono_llvm_free_domain_info (MonoDomain *domain)
78 if (mono_llvm_free_domain_info_fptr)
79 mono_llvm_free_domain_info_fptr (domain);
83 mono_llvm_load (const char* bpath)
86 MonoDl *llvm_lib = mono_dl_open_runtime_lib ("mono-llvm", MONO_DL_LAZY, &err);
89 g_warning ("llvm load failed: %s\n", err);
94 err = mono_dl_symbol (llvm_lib, "mono_llvm_init", (void**)&mono_llvm_init_fptr);
95 if (err) goto symbol_error;
96 err = mono_dl_symbol (llvm_lib, "mono_llvm_cleanup", (void**)&mono_llvm_cleanup_fptr);
97 if (err) goto symbol_error;
98 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_method", (void**)&mono_llvm_emit_method_fptr);
99 if (err) goto symbol_error;
100 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_call", (void**)&mono_llvm_emit_call_fptr);
101 if (err) goto symbol_error;
102 err = mono_dl_symbol (llvm_lib, "mono_llvm_create_aot_module", (void**)&mono_llvm_create_aot_module_fptr);
103 if (err) goto symbol_error;
104 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_module", (void**)&mono_llvm_emit_aot_module_fptr);
105 if (err) goto symbol_error;
106 err = mono_dl_symbol (llvm_lib, "mono_llvm_check_method_supported", (void**)&mono_llvm_check_method_supported_fptr);
107 if (err) goto symbol_error;
108 err = mono_dl_symbol (llvm_lib, "mono_llvm_free_domain_info", (void**)&mono_llvm_free_domain_info_fptr);
109 if (err) goto symbol_error;
112 g_warning ("llvm symbol load failed: %s\n", err);
120 #define mono_llvm_load(bpath) TRUE
121 #endif /* MONO_LLVM_LOADED */