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
10 typedef void (*MonoLLVMVoidFunc)(void);
11 typedef void (*MonoLLVMCFGFunc)(MonoCompile *cfg);
12 typedef void (*MonoLLVMEmitCallFunc)(MonoCompile *cfg, MonoCallInst *call);
13 typedef void (*MonoLLVMCreateAotFunc)(const char *got_symbol);
14 typedef void (*MonoLLVMEmitAotFunc)(const char *filename, int got_size);
16 static MonoLLVMVoidFunc mono_llvm_init_fptr;
17 static MonoLLVMVoidFunc mono_llvm_cleanup_fptr;
18 static MonoLLVMCFGFunc mono_llvm_emit_method_fptr;
19 static MonoLLVMEmitCallFunc mono_llvm_emit_call_fptr;
20 static MonoLLVMCreateAotFunc mono_llvm_create_aot_module_fptr;
21 static MonoLLVMEmitAotFunc mono_llvm_emit_aot_module_fptr;
22 static MonoLLVMCFGFunc mono_llvm_check_method_supported_fptr;
27 mono_llvm_init_fptr ();
31 mono_llvm_cleanup (void)
33 mono_llvm_cleanup_fptr ();
37 mono_llvm_emit_method (MonoCompile *cfg)
39 mono_llvm_emit_method_fptr (cfg);
43 mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call)
45 mono_llvm_emit_call_fptr (cfg, call);
49 mono_llvm_create_aot_module (const char *got_symbol)
51 g_assert (mono_llvm_create_aot_module_fptr);
52 mono_llvm_create_aot_module_fptr (got_symbol);
56 mono_llvm_emit_aot_module (const char *filename, int got_size)
58 g_assert (mono_llvm_emit_aot_module_fptr);
59 mono_llvm_emit_aot_module_fptr (filename, got_size);
63 mono_llvm_check_method_supported (MonoCompile *cfg)
65 mono_llvm_check_method_supported_fptr (cfg);
69 try_llvm_load (char *dir, char **err)
76 while ((path = mono_dl_build_path (dir, "mono-llvm", &iter))) {
78 llvm_lib = mono_dl_open (path, MONO_DL_LAZY, err);
87 mono_llvm_load (const char* bpath)
89 MonoDl *llvm_lib = NULL;
93 binl = readlink ("/proc/self/exe", buf, sizeof (buf)-1);
98 base = g_path_get_dirname (buf);
99 name = g_strdup_printf ("%s/.libs", base);
102 llvm_lib = try_llvm_load (name, &err);
106 llvm_lib = try_llvm_load (NULL, &err);
108 g_warning ("llvm load failed: %s\n", err);
113 err = mono_dl_symbol (llvm_lib, "mono_llvm_init", (void**)&mono_llvm_init_fptr);
114 if (err) goto symbol_error;
115 err = mono_dl_symbol (llvm_lib, "mono_llvm_cleanup", (void**)&mono_llvm_cleanup_fptr);
116 if (err) goto symbol_error;
117 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_method", (void**)&mono_llvm_emit_method_fptr);
118 if (err) goto symbol_error;
119 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_call", (void**)&mono_llvm_emit_call_fptr);
120 if (err) goto symbol_error;
121 err = mono_dl_symbol (llvm_lib, "mono_llvm_create_aot_module", (void**)&mono_llvm_create_aot_module_fptr);
122 if (err) goto symbol_error;
123 err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_module", (void**)&mono_llvm_emit_aot_module_fptr);
124 if (err) goto symbol_error;
125 err = mono_dl_symbol (llvm_lib, "mono_llvm_check_method_supported", (void**)&mono_llvm_check_method_supported_fptr);
126 if (err) goto symbol_error;
129 g_warning ("llvm symbol load failed: %s\n", err);
137 #define mono_llvm_load(bpath) TRUE
138 #endif /* MONO_LLVM_LOADED */