This commit is contained in:
David Gonzalez Martin 2025-05-06 08:34:42 -06:00
parent c07849aa79
commit d87bcccfc4
4 changed files with 39 additions and 3 deletions

View File

@ -1,6 +1,7 @@
#pragma once
#include <lib.h>
#include <llvm.h>
#define report_error() trap_raw()

View File

@ -1,5 +1,20 @@
#include <compiler.h>
fn void llvm_initialize(Module* module)
{
llvm_initialize_all();
}
void emit(Module* module)
{
llvm_initialize(module);
auto context = LLVMContextCreate();
auto m = llvm_context_create_module(context, module->name);
llvm::DIBuilder* di_builder = 0;
if (module->has_debug_info)
{
di_builder = LLVMCreateDIBuilder(m);
}
trap_raw();
}

View File

@ -33,9 +33,9 @@ fn StringRef string_ref(String string)
return StringRef((char*)string.pointer, string.length);
}
EXPORT Module* llvm_context_create_module(LLVMContext& context, String name)
EXPORT Module* llvm_context_create_module(LLVMContext* context, String name)
{
return new Module(string_ref(name), context);
return new Module(string_ref(name), *context);
}
EXPORT unsigned llvm_integer_type_get_bit_count(const IntegerType& integer_type)

View File

@ -1,9 +1,15 @@
#pragma once
#include <lib.h>
namespace llvm
{
class Type;
class Value;
class Module;
class Builder;
class DIBuilder;
class LLVMContext;
}
fn bool llvm_initialized = false;
@ -19,6 +25,11 @@ extern "C" String llvm_default_target_triple();
extern "C" String llvm_host_cpu_name();
extern "C" String llvm_host_cpu_features();
extern "C" llvm::LLVMContext* LLVMContextCreate();
extern "C" llvm::Module* llvm_context_create_module(llvm::LLVMContext* context, String name);
extern "C" llvm::Builder* LLVMCreateBuilderInContext(llvm::LLVMContext* context, String name);
extern "C" llvm::DIBuilder* LLVMCreateDIBuilder(llvm::Module* module);
struct LLVMGlobal
{
String host_triple;
@ -28,9 +39,10 @@ struct LLVMGlobal
global_variable LLVMGlobal llvm_global;
fn void initialize_all()
fn void llvm_initialize_all_raw()
{
assert(!llvm_initialized);
LLVMInitializeX86TargetInfo();
LLVMInitializeX86Target();
LLVMInitializeX86TargetMC();
@ -44,3 +56,11 @@ fn void initialize_all()
.host_cpu_features = llvm_host_cpu_features(),
};
}
fn void llvm_initialize_all()
{
if (!llvm_initialized)
{
llvm_initialize_all_raw();
}
}