aboutsummaryrefslogtreecommitdiff
path: root/src/link.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-12-28 16:42:54 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-01-01 19:49:08 -0700
commitb8674910d45f0b87f82376abbd7a705ad77fe79a (patch)
treed4f5034d521dd0a54366860b7a1b0a862d877519 /src/link.zig
parent92cc2f41e6027a1e3bec7b3daa01da8dc90a9370 (diff)
downloadzig-b8674910d45f0b87f82376abbd7a705ad77fe79a.tar.gz
zig-b8674910d45f0b87f82376abbd7a705ad77fe79a.zip
restore -fno-emit-bin -femit-llvm-ir functionality
Now, link.File will always be null when -fno-emit-bin is specified, and in the case that LLVM artifacts are still required, the Zcu instance has an LlvmObject.
Diffstat (limited to 'src/link.zig')
-rw-r--r--src/link.zig41
1 files changed, 4 insertions, 37 deletions
diff --git a/src/link.zig b/src/link.zig
index e60571a473..89f4125888 100644
--- a/src/link.zig
+++ b/src/link.zig
@@ -984,49 +984,16 @@ pub const File = struct {
return output_mode == .Lib and !self.isStatic();
}
- pub fn resolveEmitLoc(
- base: File,
- arena: Allocator,
- opt_loc: ?Compilation.EmitLoc,
- ) Allocator.Error!?[*:0]const u8 {
- const loc = opt_loc orelse return null;
- const slice = if (loc.directory) |directory|
- try directory.joinZ(arena, &.{loc.basename})
- else
- try base.emit.basenamePath(arena, loc.basename);
- return slice.ptr;
- }
-
pub fn emitLlvmObject(
base: File,
arena: Allocator,
llvm_object: *LlvmObject,
prog_node: *std.Progress.Node,
) !void {
- const comp = base.comp;
-
- var sub_prog_node = prog_node.start("LLVM Emit Object", 0);
- sub_prog_node.activate();
- sub_prog_node.context.refresh();
- defer sub_prog_node.end();
-
- try llvm_object.emit(.{
- .pre_ir_path = comp.verbose_llvm_ir,
- .pre_bc_path = comp.verbose_llvm_bc,
- .bin_path = try base.resolveEmitLoc(arena, .{
- .directory = null,
- .basename = base.zcu_object_sub_path.?,
- }),
- .asm_path = try base.resolveEmitLoc(arena, comp.emit_asm),
- .post_ir_path = try base.resolveEmitLoc(arena, comp.emit_llvm_ir),
- .post_bc_path = try base.resolveEmitLoc(arena, comp.emit_llvm_bc),
-
- .is_debug = comp.root_mod.optimize_mode == .Debug,
- .is_small = comp.root_mod.optimize_mode == .ReleaseSmall,
- .time_report = comp.time_report,
- .sanitize_thread = comp.config.any_sanitize_thread,
- .lto = comp.config.lto,
- });
+ return base.comp.emitLlvmObject(arena, base.emit, .{
+ .directory = null,
+ .basename = base.zcu_object_sub_path.?,
+ }, llvm_object, prog_node);
}
pub const C = @import("link/C.zig");