From 7e151cb5e99101012872090480519be65573c9c1 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 1 Dec 2022 16:34:15 -0700 Subject: [PATCH] build: remove -Dwasi-bootstrap; add update-zig1 step Now it is a single command tdo update zig1.wasm.zst. --- build.zig | 91 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/build.zig b/build.zig index 675640ee1a..f37fa9b268 100644 --- a/build.zig +++ b/build.zig @@ -14,17 +14,11 @@ const zig_version = std.builtin.Version{ .major = 0, .minor = 11, .patch = 0 }; const stack_size = 32 * 1024 * 1024; pub fn build(b: *Builder) !void { - const wasi_bootstrap = b.option(bool, "wasi-bootstrap", "Produce a WASI build for bootstrapping the compiler") orelse false; - const release = b.option(bool, "release", "Build in release mode") orelse wasi_bootstrap; - const only_c = b.option(bool, "only-c", "Translate the Zig compiler to C code, with only the C backend enabled") orelse wasi_bootstrap; + const release = b.option(bool, "release", "Build in release mode") orelse false; + const only_c = b.option(bool, "only-c", "Translate the Zig compiler to C code, with only the C backend enabled") orelse false; const target = t: { var default_target: std.zig.CrossTarget = .{}; - if (wasi_bootstrap) { - default_target.cpu_arch = .wasm32; - default_target.os_tag = .wasi; - default_target.cpu_features_add.addFeature(@enumToInt(std.Target.wasm.Feature.bulk_memory)); - break :t default_target; - } else if (only_c) { + if (only_c) { default_target.ofmt = .c; } break :t b.standardTargetOptions(.{ .default_target = default_target }); @@ -81,7 +75,7 @@ pub fn build(b: *Builder) !void { if (deprecated_skip_install_lib_files) { std.log.warn("-Dskip-install-lib-files is deprecated in favor of -Dno-lib", .{}); } - const skip_install_lib_files = b.option(bool, "no-lib", "skip copying of lib/ files to installation prefix. Useful for development") orelse (deprecated_skip_install_lib_files or wasi_bootstrap); + const skip_install_lib_files = b.option(bool, "no-lib", "skip copying of lib/ files to installation prefix. Useful for development") orelse deprecated_skip_install_lib_files; const only_install_lib_files = b.option(bool, "lib-files-only", "Only install library files") orelse false; @@ -145,7 +139,7 @@ pub fn build(b: *Builder) !void { const tracy_callstack = b.option(bool, "tracy-callstack", "Include callstack information with Tracy data. Does nothing if -Dtracy is not provided") orelse (tracy != null); const tracy_allocation = b.option(bool, "tracy-allocation", "Include allocation information with Tracy data. Does nothing if -Dtracy is not provided") orelse (tracy != null); const force_gpa = b.option(bool, "force-gpa", "Force the compiler to use GeneralPurposeAllocator") orelse false; - const link_libc = b.option(bool, "force-link-libc", "Force self-hosted compiler to link libc") orelse (enable_llvm or (only_c and !wasi_bootstrap)); + const link_libc = b.option(bool, "force-link-libc", "Force self-hosted compiler to link libc") orelse (enable_llvm or only_c); const sanitize_thread = b.option(bool, "sanitize-thread", "Enable thread-sanitization") orelse false; const strip = b.option(bool, "strip", "Omit debug information"); const value_tracing = b.option(bool, "value-tracing", "Enable extra state tracking to help troubleshoot bugs in the compiler (using the std.debug.Trace API)") orelse false; @@ -156,20 +150,17 @@ pub fn build(b: *Builder) !void { break :blk 4; }; - const main_file: ?[]const u8 = "src/main.zig"; - - const exe = b.addExecutable("zig", main_file); - - const compile_step = b.step("compile", "Build the self-hosted compiler"); - compile_step.dependOn(&exe.step); - - exe.stack_size = stack_size; + const exe = addCompilerStep(b); exe.strip = strip; exe.sanitize_thread = sanitize_thread; exe.build_id = b.option(bool, "build-id", "Include a build id note") orelse false; exe.install(); exe.setBuildMode(mode); exe.setTarget(target); + + const compile_step = b.step("compile", "Build the self-hosted compiler"); + compile_step.dependOn(&exe.step); + if (!skip_stage2_tests) { test_step.dependOn(&exe.step); } @@ -205,7 +196,7 @@ pub fn build(b: *Builder) !void { const enable_link_snapshots = b.option(bool, "link-snapshot", "Whether to enable linker state snapshots") orelse false; const opt_version_string = b.option([]const u8, "version-string", "Override Zig version string. Default is to find out with git."); - const version = if (opt_version_string) |version| version else v: { + const version_slice = if (opt_version_string) |version| version else v: { if (!std.process.can_spawn) { std.debug.print("error: version info cannot be retrieved from git. Zig version must be provided using -Dversion-string\n", .{}); std.process.exit(1); @@ -257,7 +248,8 @@ pub fn build(b: *Builder) !void { }, } }; - exe_options.addOption([:0]const u8, "version", try b.allocator.dupeZ(u8, version)); + const version = try b.allocator.dupeZ(u8, version_slice); + exe_options.addOption([:0]const u8, "version", version); if (enable_llvm) { const cmake_cfg = if (static_llvm) null else blk: { @@ -347,7 +339,7 @@ pub fn build(b: *Builder) !void { test_cases_options.addOption(u32, "mem_leak_frames", mem_leak_frames * 2); test_cases_options.addOption(bool, "value_tracing", value_tracing); test_cases_options.addOption(?[]const u8, "glibc_runtimes_dir", b.glibc_runtimes_dir); - test_cases_options.addOption([:0]const u8, "version", try b.allocator.dupeZ(u8, version)); + test_cases_options.addOption([:0]const u8, "version", version); test_cases_options.addOption(std.SemanticVersion, "semver", semver); test_cases_options.addOption(?[]const u8, "test_filter", test_filter); @@ -465,6 +457,61 @@ pub fn build(b: *Builder) !void { skip_stage1, true, // TODO get these all passing )); + + try addWasiUpdateStep(b, version); +} + +fn addWasiUpdateStep(b: *Builder, version: [:0]const u8) !void { + const semver = try std.SemanticVersion.parse(version); + + var target: std.zig.CrossTarget = .{ + .cpu_arch = .wasm32, + .os_tag = .wasi, + }; + target.cpu_features_add.addFeature(@enumToInt(std.Target.wasm.Feature.bulk_memory)); + + const exe = addCompilerStep(b); + exe.setBuildMode(.ReleaseSmall); + exe.setTarget(target); + + const exe_options = b.addOptions(); + exe.addOptions("build_options", exe_options); + + exe_options.addOption(u32, "mem_leak_frames", 0); + exe_options.addOption(bool, "have_llvm", false); + exe_options.addOption(bool, "force_gpa", false); + exe_options.addOption(bool, "only_c", true); + exe_options.addOption([:0]const u8, "version", version); + exe_options.addOption(std.SemanticVersion, "semver", semver); + exe_options.addOption(bool, "enable_logging", false); + exe_options.addOption(bool, "enable_link_snapshots", false); + exe_options.addOption(bool, "enable_tracy", false); + exe_options.addOption(bool, "enable_tracy_callstack", false); + exe_options.addOption(bool, "enable_tracy_allocation", false); + exe_options.addOption(bool, "value_tracing", false); + + const run_opt = b.addSystemCommand(&.{ "wasm-opt", "-Oz", "--enable-bulk-memory" }); + run_opt.addArtifactArg(exe); + run_opt.addArg("-o"); + run_opt.addFileSourceArg(.{ .path = "stage1/zig1.wasm" }); + + const run_zstd = b.addSystemCommand(&.{ "zstd", "-19", "-f" }); + run_zstd.step.dependOn(&run_opt.step); + run_zstd.addFileSourceArg(.{ .path = "stage1/zig1.wasm" }); + run_zstd.addArg("-o"); + run_zstd.addFileSourceArg(.{ .path = "stage1/zig1.wasm.zst" }); + + const cleanup = b.addRemoveDirTree("stage1/zig1.wasm"); + cleanup.step.dependOn(&run_zstd.step); + + const update_zig1_step = b.step("update-zig1", "Update stage1/zig1.wasm.zst"); + update_zig1_step.dependOn(&cleanup.step); +} + +fn addCompilerStep(b: *Builder) *std.build.LibExeObjStep { + const exe = b.addExecutable("zig", "src/main.zig"); + exe.stack_size = stack_size; + return exe; } const exe_cflags = [_][]const u8{