motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit 43938abe0bf140cc6b142ba8801d8942c88402a3 (tree)
parent 3ceacf8866b3b638a312299ead5b4a4714e502f3
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date:   Tue, 24 Feb 2026 09:24:55 +0200

airgen: don't use llvm, make a separate step

Diffstat:
Mbuild.zig | 84+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 48 insertions(+), 36 deletions(-)

diff --git a/build.zig b/build.zig @@ -714,30 +714,36 @@ pub fn build(b: *std.Build) !void { // Separate build_options for zig0 tests with a fixed version string, so // that the verbose_dumper cache is not invalidated on every git commit. - const zig0_exe_options = b.addOptions(); - zig0_exe_options.addOption(u32, "mem_leak_frames", mem_leak_frames); - zig0_exe_options.addOption(bool, "skip_non_native", skip_non_native); - zig0_exe_options.addOption(bool, "have_llvm", enable_llvm); - zig0_exe_options.addOption(bool, "llvm_has_m68k", llvm_has_m68k); - zig0_exe_options.addOption(bool, "llvm_has_csky", llvm_has_csky); - zig0_exe_options.addOption(bool, "llvm_has_arc", llvm_has_arc); - zig0_exe_options.addOption(bool, "llvm_has_xtensa", llvm_has_xtensa); - zig0_exe_options.addOption(bool, "debug_gpa", debug_gpa); - zig0_exe_options.addOption(DevEnv, "dev", dev_mode); - zig0_exe_options.addOption(ValueInterpretMode, "value_interpret_mode", value_interpret_mode); - zig0_exe_options.addOption([:0]const u8, "version", try b.allocator.dupeZ(u8, "0.15.2-zig0-dev")); - zig0_exe_options.addOption(std.SemanticVersion, "semver", try std.SemanticVersion.parse("0.15.2-zig0-dev")); - zig0_exe_options.addOption(bool, "enable_debug_extensions", enable_debug_extensions); - zig0_exe_options.addOption(bool, "enable_logging", enable_logging); - zig0_exe_options.addOption(bool, "enable_link_snapshots", enable_link_snapshots); - zig0_exe_options.addOption(bool, "enable_tracy", tracy != null); - zig0_exe_options.addOption(bool, "enable_tracy_callstack", tracy_callstack); - zig0_exe_options.addOption(bool, "enable_tracy_allocation", tracy_allocation); - zig0_exe_options.addOption(u32, "tracy_callstack_depth", tracy_callstack_depth); - zig0_exe_options.addOption(bool, "value_tracing", value_tracing); + const zig0_airgen_options = b.addOptions(); + zig0_airgen_options.addOption(u32, "mem_leak_frames", mem_leak_frames); + zig0_airgen_options.addOption(bool, "skip_non_native", skip_non_native); + // air_gen only needs source->AIR (no codegen), so disable LLVM. + zig0_airgen_options.addOption(bool, "have_llvm", false); + zig0_airgen_options.addOption(bool, "llvm_has_m68k", false); + zig0_airgen_options.addOption(bool, "llvm_has_csky", false); + zig0_airgen_options.addOption(bool, "llvm_has_arc", false); + zig0_airgen_options.addOption(bool, "llvm_has_xtensa", false); + zig0_airgen_options.addOption(bool, "debug_gpa", debug_gpa); + zig0_airgen_options.addOption(DevEnv, "dev", dev_mode); + zig0_airgen_options.addOption(ValueInterpretMode, "value_interpret_mode", value_interpret_mode); + zig0_airgen_options.addOption([:0]const u8, "version", try b.allocator.dupeZ(u8, "0.15.2-zig0-dev")); + zig0_airgen_options.addOption(std.SemanticVersion, "semver", try std.SemanticVersion.parse("0.15.2-zig0-dev")); + zig0_airgen_options.addOption(bool, "enable_debug_extensions", enable_debug_extensions); + zig0_airgen_options.addOption(bool, "enable_logging", enable_logging); + zig0_airgen_options.addOption(bool, "enable_link_snapshots", enable_link_snapshots); + zig0_airgen_options.addOption(bool, "enable_tracy", tracy != null); + zig0_airgen_options.addOption(bool, "enable_tracy_callstack", tracy_callstack); + zig0_airgen_options.addOption(bool, "enable_tracy_allocation", tracy_allocation); + zig0_airgen_options.addOption(u32, "tracy_callstack_depth", tracy_callstack_depth); + zig0_airgen_options.addOption(bool, "value_tracing", value_tracing); + + const air_gen_result = addAirGen(b, zig0_airgen_options); + + const prepare_zig0 = b.step("prepare-zig0", "Generate pre-computed AIR files for zig0 tests"); + prepare_zig0.dependOn(air_gen_result.step); const test_zig0_step = b.step("test-zig0", "Run zig0 C implementation tests"); - addZig0TestStep(b, test_zig0_step, zig0_target, optimize, zig0_cc, zig0_no_exec, zig0_valgrind, zig0_test_timeout, zig0_exe_options); + addZig0TestStep(b, test_zig0_step, zig0_target, optimize, zig0_cc, zig0_no_exec, zig0_valgrind, zig0_test_timeout, air_gen_result.air_dir); // zig0 standalone executable const zig0_step = b.step("zig0", "Build zig0 standalone executable"); @@ -832,7 +838,7 @@ pub fn build(b: *std.Build) !void { all_zig0.dependOn(&zig0_fmt_check.step); all_zig0.dependOn(lint_zig0); for (zig0_compilers) |compiler| { - addZig0TestStep(b, all_zig0, zig0_target, optimize, compiler, false, zig0_valgrind, zig0_test_timeout, zig0_exe_options); + addZig0TestStep(b, all_zig0, zig0_target, optimize, compiler, false, zig0_valgrind, zig0_test_timeout, air_gen_result.air_dir); } } @@ -1689,20 +1695,12 @@ fn superHtmlCheck(b: *std.Build, html_file: std.Build.LazyPath) *std.Build.Step return &run_superhtml.step; } -fn addZig0TestStep( - b: *std.Build, +const AirGenResult = struct { step: *std.Build.Step, - target: std.Build.ResolvedTarget, - optimize: std.builtin.OptimizeMode, - cc: []const u8, - no_exec: bool, - valgrind: bool, - test_timeout: ?[]const u8, - exe_options: *std.Build.Step.Options, -) void { - // Step 0: Build AIR generator and generate air_bundle.zig. - // The generator uses zig_internals to compile source files and - // produces pre-computed AIR data + tag names in a single Zig file. + air_dir: std.Build.LazyPath, +}; + +fn addAirGen(b: *std.Build, exe_options: *std.Build.Step.Options) AirGenResult { const zig_internals_mod = b.createModule(.{ .root_source_file = b.path("src/test_exports.zig"), }); @@ -1757,6 +1755,20 @@ fn addZig0TestStep( gen_run.addFileArg(b.path(path)); } + return .{ .step = &gen_run.step, .air_dir = air_dir }; +} + +fn addZig0TestStep( + b: *std.Build, + step: *std.Build.Step, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + cc: []const u8, + no_exec: bool, + valgrind: bool, + test_timeout: ?[]const u8, + air_dir: std.Build.LazyPath, +) void { // Step 1: Compile Zig test code to .o (cached independently of C objects). // NOTE: test_mod does NOT import zig_internals — stage0 tests are fast. const test_mod = b.createModule(.{