Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / mini / mini-llvm.h
index eec8bb57d8fa87199b6599e87c5daf822b3d072b..0942c9a7d42370d478d2ef1e3a1fd1fceaf1b3c6 100644 (file)
-/*
- * Handle the differences between the llvm backend beeing embedded
- * or loaded at runtime.
+/**
+ * \file
  */
-#ifdef MONO_LLVM_LOADED
 
-int mono_llvm_load (const char* bpath) MONO_INTERNAL;
-
-#ifdef MONO_LLVM_IN_MINI
-
-#ifdef __MACH__
-#include <mach-o/dyld.h>
-#endif
-
-typedef void (*MonoLLVMVoidFunc)(void);
-typedef void (*MonoLLVMCFGFunc)(MonoCompile *cfg);
-typedef void (*MonoLLVMEmitCallFunc)(MonoCompile *cfg, MonoCallInst *call);
-typedef void (*MonoLLVMCreateAotFunc)(const char *got_symbol, gboolean external_symbols, gboolean emit_dwarf);
-typedef void (*MonoLLVMEmitAotFunc)(const char *filename, const char *cu_name);
-typedef void (*MonoLLVMFreeDomainFunc)(MonoDomain *domain);
-
-static MonoLLVMVoidFunc mono_llvm_init_fptr;
-static MonoLLVMVoidFunc mono_llvm_cleanup_fptr;
-static MonoLLVMCFGFunc mono_llvm_emit_method_fptr;
-static MonoLLVMEmitCallFunc mono_llvm_emit_call_fptr;
-static MonoLLVMCreateAotFunc mono_llvm_create_aot_module_fptr;
-static MonoLLVMEmitAotFunc mono_llvm_emit_aot_module_fptr;
-static MonoLLVMCFGFunc mono_llvm_check_method_supported_fptr;
-static MonoLLVMFreeDomainFunc mono_llvm_free_domain_info_fptr;
-
-void
-mono_llvm_init (void)
-{
-       mono_llvm_init_fptr ();
-}
-
-void
-mono_llvm_cleanup (void)
-{
-       mono_llvm_cleanup_fptr ();
-}
-
-void
-mono_llvm_emit_method (MonoCompile *cfg)
-{
-       mono_llvm_emit_method_fptr (cfg);
-}
-
-void
-mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call)
-{
-       mono_llvm_emit_call_fptr (cfg, call);
-}
-
-void
-mono_llvm_create_aot_module (const char *got_symbol, gboolean external_symbols, gboolean emit_dwarf)
-{
-       g_assert (mono_llvm_create_aot_module_fptr);
-       mono_llvm_create_aot_module_fptr (got_symbol, external_symbols, emit_dwarf);
-}
-
-void
-mono_llvm_emit_aot_module (const char *filename, const char *cu_name)
-{
-       g_assert (mono_llvm_emit_aot_module_fptr);
-       mono_llvm_emit_aot_module_fptr (filename, cu_name);
-}
-
-void
-mono_llvm_check_method_supported (MonoCompile *cfg)
-{
-       mono_llvm_check_method_supported_fptr (cfg);
-}
-
-void
-mono_llvm_free_domain_info (MonoDomain *domain)
-{
-       if (mono_llvm_free_domain_info_fptr)
-               mono_llvm_free_domain_info_fptr (domain);
-}
-
-int
-mono_llvm_load (const char* bpath)
-{
-       char *err = NULL;
-       MonoDl *llvm_lib = mono_dl_open_runtime_lib ("mono-llvm", MONO_DL_LAZY, &err);
-
-       if (!llvm_lib) {
-               g_warning ("llvm load failed: %s\n", err);
-               g_free (err);
-               return FALSE;
-       }
-
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_init", (void**)&mono_llvm_init_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_cleanup", (void**)&mono_llvm_cleanup_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_method", (void**)&mono_llvm_emit_method_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_call", (void**)&mono_llvm_emit_call_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_create_aot_module", (void**)&mono_llvm_create_aot_module_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_emit_aot_module", (void**)&mono_llvm_emit_aot_module_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_check_method_supported", (void**)&mono_llvm_check_method_supported_fptr);
-       if (err) goto symbol_error;
-       err = mono_dl_symbol (llvm_lib, "mono_llvm_free_domain_info", (void**)&mono_llvm_free_domain_info_fptr);
-       if (err) goto symbol_error;
-       return TRUE;
-symbol_error:
-       g_warning ("llvm symbol load failed: %s\n", err);
-       g_free (err);
-       return FALSE;
-}
+#ifndef __MONO_MINI_LLVM_H__
+#define __MONO_MINI_LLVM_H__
+
+#include "mini.h"
+
+/* LLVM backend */
+/* KEEP THIS IN SYNCH WITH mini-llvm-loaded.c */
+void     mono_llvm_init                     (void) MONO_LLVM_INTERNAL;
+void     mono_llvm_cleanup                  (void) MONO_LLVM_INTERNAL;
+void     mono_llvm_emit_method              (MonoCompile *cfg) MONO_LLVM_INTERNAL;
+void     mono_llvm_emit_call                (MonoCompile *cfg, MonoCallInst *call) MONO_LLVM_INTERNAL;
+void     mono_llvm_create_aot_module        (MonoAssembly *assembly, const char *global_prefix, int initial_got_size, gboolean emit_dwarf, gboolean static_link, gboolean llvm_only) MONO_LLVM_INTERNAL;
+void     mono_llvm_emit_aot_module          (const char *filename, const char *cu_name) MONO_LLVM_INTERNAL;
+void     mono_llvm_emit_aot_file_info       (MonoAotFileInfo *info, gboolean has_jitted_code) MONO_LLVM_INTERNAL;
+void     mono_llvm_emit_aot_data            (const char *symbol, guint8 *data, int data_len) MONO_LLVM_INTERNAL;
+void     mono_llvm_check_method_supported   (MonoCompile *cfg) MONO_LLVM_INTERNAL;
+void     mono_llvm_free_domain_info         (MonoDomain *domain) MONO_LLVM_INTERNAL;
+MONO_API void mono_personality              (void);
+int      mono_llvm_load                     (const char* bpath);
+void     mono_llvm_create_vars (MonoCompile *cfg) MONO_LLVM_INTERNAL;
+
+gboolean mini_llvm_init                     (void);
 
 #endif
-
-#else
-#define mono_llvm_load(bpath) TRUE
-#endif /* MONO_LLVM_LOADED */
-