From 08abe6f88042d3f734453e47e4a410391fd4e9f9 Mon Sep 17 00:00:00 2001 From: Baitinq Date: Tue, 3 Jun 2025 22:53:03 +0200 Subject: Bootstrap: Codegen: Start implementation --- src/bootstrap/codegen.src | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/bootstrap/codegen.src (limited to 'src/bootstrap/codegen.src') diff --git a/src/bootstrap/codegen.src b/src/bootstrap/codegen.src new file mode 100644 index 0000000..e4d3102 --- /dev/null +++ b/src/bootstrap/codegen.src @@ -0,0 +1,43 @@ +import "llvm.src"; + +let codegen = struct { + llvm_module: *void, + llvm_context: *void, + builder: *void, +}; + +let codegen_init = (alloc: *arena) => *codegen { + LLVMInitializeX86TargetInfo(); + LLVMInitializeX86TargetMC(); + LLVMInitializeX86Target(); + LLVMInitializeX86AsmPrinter(); + LLVMInitializeX86AsmParser(); + + let module = LLVMModuleCreateWithName("module"); + let context = LLVMGetGlobalContext(); + let builder = LLVMCreateBuilder(); + + let c = cast(*codegen, arena_alloc(alloc, sizeof(codegen))); + + (*c).llvm_module = module; + (*c).llvm_context = context; + (*c).builder = builder; + + return c; +}; + +let codegen_generate = (c: *codegen) => i64 { + return 0; +}; + +let codegen_compile = (c: *codegen) => i64 { + LLVMDumpModule((*c).llvm_module); + return 0; +}; + +let codegen_deinit = (c: *codegen) => void { + LLVMDisposeModule((*c).llvm_module); + LLVMShutdown(); + LLVMDisposeBuilder((*c).builder); + return; +}; -- cgit 1.4.1