From 243e3cc6947ada3d12b0dde88f51aed64774799e Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 21 Sep 2019 12:31:47 -0300 Subject: [PATCH 1/2] fix llvm linking --- build.zig | 2 ++ src/codegen.zig | 6 ++++-- src/llvm.zig | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index d7502d4..020f6cf 100644 --- a/build.zig +++ b/build.zig @@ -6,7 +6,9 @@ pub fn build(b: *Builder) void { exe.setBuildMode(mode); exe.install(); + exe.linkSystemLibrary("c"); exe.linkSystemLibrary("LLVM-8"); + exe.linkSystemLibrary("stdc++"); const run_cmd = exe.run(); run_cmd.step.dependOn(b.getInstallStep()); diff --git a/src/codegen.zig b/src/codegen.zig index 3e5661c..295bf85 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -62,10 +62,12 @@ pub const Codegen = struct { } pub fn gen(self: *Codegen, root: *ast.Node) !void { + //std.debug.warn("cgen: init native target\n"); + //_ = llvm.LLVMInitializeNativeTarget(); std.debug.warn("cgen: start gen\n"); - var mod = llvm.LLVMModuleCreateWithName(c"awoo"); + + var mod = llvm.LLVMModuleCreateWithName(c"awoo").?; defer llvm.LLVMDisposeModule(mod); - std.debug.warn("cgen: got mod\n"); for (root.Root.toSlice()) |child| { std.debug.warn("cgen: gen child {}\n", child); diff --git a/src/llvm.zig b/src/llvm.zig index 8e79786..f849857 100644 --- a/src/llvm.zig +++ b/src/llvm.zig @@ -6,6 +6,11 @@ pub const llvm = @cImport({ @cInclude("llvm-c/Target.h"); @cInclude("llvm-c/Analysis.h"); @cInclude("llvm-c/BitWriter.h"); + + @cDefine("_GNU_SOURCE", {}); + @cDefine("__STDC_CONSTANT_MACROS", {}); + @cDefine("__STDC_FORMAT_MACROS", {}); + @cDefine("__STDC_LIMIT_MACROS", {}); }); usingnamespace llvm; From 86e899e771e91edc3625fa07061175b16e5c14d1 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 21 Sep 2019 12:37:41 -0300 Subject: [PATCH 2/2] cgen: output .bc file --- .gitignore | 2 ++ src/codegen.zig | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 3cef7be..900a841 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ zig-cache/ +*.bc +*.ll diff --git a/src/codegen.zig b/src/codegen.zig index 295bf85..37e39ac 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -74,8 +74,6 @@ pub const Codegen = struct { try self.genNode(mod, &child); } - std.debug.warn("cgen: done\n"); - var err: ?[*]u8 = null; _ = llvm.LLVMVerifyModule( mod, @@ -83,5 +81,9 @@ pub const Codegen = struct { &err, ); llvm.LLVMDisposeMessage(err); + + if (llvm.LLVMWriteBitcodeToFile(mod, c"awoo.bc") != 0) { + std.debug.warn("error writing bitcode to file\n"); + } } };