I’d like to look at the generated machine code but not sure how to enable zig build to output disassembly. I’m working on Windows.
zig build-exe some.zig -femit-asm
it’s on linux but I believe should work on Windows too.
Thanks. I’m building a project with a build.zig, so I wonder if there’s an equivalent when using zig build
?
Yes.
pub fn build(b: *std.build.Builder) void {
const target = b.standardTargetOptions(.{});
const mode = b.standardReleaseOptions();
const exe = b.addExecutable("zf", "src/main.zig");
exe.single_threaded = true;
exe.emit_asm = .emit; // <<<<<<<<<<<<<<<
exe.setTarget(target);
exe.setBuildMode(mode);
exe.install();
}
1 Like
It’s a tagged union defined in zig-0.10.1/lib/std/build.zig
:
pub const EmitOption = union(enum) {
default: void,
no_emit: void,
emit: void,
emit_to: []const u8,
Thanks! I set this to a library I’m building but I don’t know where the output goes. There’s no .s or .asm files anywhere after rebuilding. I guess I’ll try on Linux, see if I can get it to work there first.
In my case it is in the root of the project:
$ ls -1
build.zig
src
zf.s <<<<<<<<<<
zig-cache
zig-out
1 Like
Did you try
zig build-lib ... -femit-asm
zig build-obj ... -femit-asm
?
That worked for producing asm output for the library root source file. But looks like it doesn’t contain the other source files than the root.
btw, I asked similar question some time ago