diff --git a/build.zig b/build.zig index f085583eff..d9a18ce513 100644 --- a/build.zig +++ b/build.zig @@ -252,7 +252,8 @@ pub fn build(b: *std.Build) !void { exe_options.addOption(bool, "llvm_has_arc", llvm_has_arc); exe_options.addOption(bool, "llvm_has_xtensa", llvm_has_xtensa); exe_options.addOption(bool, "debug_gpa", debug_gpa); - exe_options.addOption(DevEnv, "dev", b.option(DevEnv, "dev", "Build a compiler with a reduced feature set for development of specific features") orelse if (only_c) .bootstrap else .full); + const dev_mode: DevEnv = b.option(DevEnv, "dev", "Build a compiler with a reduced feature set for development of specific features") orelse if (only_c) .bootstrap else .full; + exe_options.addOption(DevEnv, "dev", dev_mode); exe_options.addOption(ValueInterpretMode, "value_interpret_mode", value_interpret_mode); if (link_libc) { @@ -685,8 +686,32 @@ pub fn build(b: *std.Build) !void { break :blk b.resolveTargetQuery(query); }; + // 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 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, exe_options); + addZig0TestStep(b, test_zig0_step, zig0_target, optimize, zig0_cc, zig0_no_exec, zig0_valgrind, zig0_test_timeout, zig0_exe_options); const fmt_zig0 = b.step("fmt-zig0", "Format zig0 C code"); const clang_format = b.addSystemCommand(&.{ "clang-format", "-i" }); @@ -749,7 +774,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, exe_options); + addZig0TestStep(b, all_zig0, zig0_target, optimize, compiler, false, zig0_valgrind, zig0_test_timeout, zig0_exe_options); } } diff --git a/stage0/sema_test.zig b/stage0/sema_test.zig index 599b7c03c7..a18608fcde 100644 --- a/stage0/sema_test.zig +++ b/stage0/sema_test.zig @@ -251,6 +251,10 @@ fn semaAirRawCheck(source: [:0]const u8) !void { std.debug.print("zig_compare_air error: {s}\n", .{std.mem.span(e)}); return error.AirMismatch; } + if (cmp_result.matched_count != result.c_func_air_list.len) { + std.debug.print("Air func count mismatch: zig matched {d}, c produced {d}\n", .{ cmp_result.matched_count, result.c_func_air_list.len }); + return error.AirMismatch; + } } test "sema: Air raw C vs Zig comparison (empty)" { diff --git a/stage0/stages_test.zig b/stage0/stages_test.zig index a2f62affcf..c0b04e0229 100644 --- a/stage0/stages_test.zig +++ b/stage0/stages_test.zig @@ -92,6 +92,10 @@ fn stagesCheck(gpa: Allocator, comptime path: []const u8, source: [:0]const u8) std.debug.print("zig_compare_air error: {s}\n", .{std.mem.span(e)}); return error.AirMismatch; } + if (cmp_result.matched_count != c_func_air_list.len) { + std.debug.print("Air func count mismatch: zig matched {d}, c produced {d}\n", .{ cmp_result.matched_count, c_func_air_list.len }); + return error.AirMismatch; + } } }