about summary refs log tree commit diff
path: root/src/bootstrap/codegen.src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/bootstrap/codegen.src43
1 files changed, 43 insertions, 0 deletions
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;
+};