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:
| M | build.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(.{