mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
665 lines
27 KiB
Zig
665 lines
27 KiB
Zig
const std = @import("std");
|
|
|
|
pub fn build(b: *std.Build) void {
|
|
const host_target = b.standardTargetOptions(.{
|
|
.whitelist = &.{
|
|
.{
|
|
.cpu_arch = .x86_64,
|
|
.cpu_model = .baseline,
|
|
.os_tag = .linux,
|
|
.abi = .musl,
|
|
},
|
|
.{
|
|
.cpu_arch = .aarch64,
|
|
.cpu_model = .baseline,
|
|
.os_tag = .linux,
|
|
.abi = .musl,
|
|
},
|
|
.{
|
|
.cpu_arch = .aarch64,
|
|
.cpu_model = .baseline,
|
|
.os_tag = .macos,
|
|
.abi = .none,
|
|
},
|
|
.{
|
|
.cpu_arch = .x86_64,
|
|
.cpu_model = .baseline,
|
|
.os_tag = .windows,
|
|
.abi = .gnu,
|
|
},
|
|
.{
|
|
.cpu_arch = .aarch64,
|
|
.cpu_model = .baseline,
|
|
.os_tag = .windows,
|
|
.abi = .gnu,
|
|
},
|
|
},
|
|
.default_target = .{
|
|
.cpu_arch = b.graph.host.result.cpu.arch,
|
|
.cpu_model = .baseline,
|
|
.os_tag = b.graph.host.result.os.tag,
|
|
.abi = if (b.graph.host.result.os.tag == .windows)
|
|
.gnu
|
|
else if (b.graph.host.result.isDarwin())
|
|
.none
|
|
else
|
|
.musl,
|
|
},
|
|
});
|
|
const host_triple = host_target.result.linuxTriple(b.allocator) catch @panic("OOM");
|
|
const host_cpu = host_target.query.serializeCpuAlloc(b.allocator) catch @panic("OOM");
|
|
const host_exe_file_ext = host_target.result.exeFileExt();
|
|
const build_type = b.option(enum { None, Debug, Release, RelWithDebInfo, MinSizeRel }, "build-type", "CMake build type") orelse .Debug;
|
|
const tool_optimize = b.option(
|
|
std.builtin.OptimizeMode,
|
|
"tool-optimize",
|
|
"Prioritize performance, safety, or binary size for build tools",
|
|
) orelse .ReleaseSafe;
|
|
|
|
const binaryen_lazy_dep = if (host_target.result.cpu.arch != .aarch64 or host_target.result.os.tag != .windows)
|
|
b.lazyDependency(b.fmt("binaryen-{s}", .{host_triple}), .{})
|
|
else
|
|
null;
|
|
const cmake_lazy_dep = b.lazyDependency(b.fmt("cmake-{s}", .{host_triple}), .{});
|
|
const ninja_lazy_dep = b.lazyDependency(b.fmt("ninja-{s}", .{host_triple}), .{});
|
|
const qemu_lazy_dep = if (host_target.result.cpu.arch == .x86_64 and host_target.result.os.tag == .linux)
|
|
b.lazyDependency(b.fmt("qemu-{s}", .{host_triple}), .{})
|
|
else
|
|
null;
|
|
const tidy_lazy_dep = b.lazyDependency(b.fmt("tidy-{s}", .{host_triple}), .{});
|
|
const wasmtime_lazy_dep = if (host_target.result.cpu.arch != .aarch64 or host_target.result.os.tag != .windows)
|
|
b.lazyDependency(b.fmt("wasmtime-{s}", .{host_triple}), .{})
|
|
else
|
|
null;
|
|
const zig_llvm_lld_clang_lazy_dep =
|
|
b.lazyDependency(b.fmt("zig+llvm+lld+clang-{s}", .{host_triple}), .{});
|
|
|
|
const cmake_dep = cmake_lazy_dep orelse return;
|
|
const ninja_dep = ninja_lazy_dep orelse return;
|
|
const zig_llvm_lld_clang_dep = zig_llvm_lld_clang_lazy_dep orelse return;
|
|
|
|
const cmake_exe = cmake_dep.path(b.fmt("{s}bin/cmake{s}", .{
|
|
if (host_target.result.isDarwin()) "CMake.app/Contents/" else "",
|
|
host_exe_file_ext,
|
|
}));
|
|
const ninja_exe = ninja_dep.path(b.fmt("ninja{s}", .{host_exe_file_ext}));
|
|
|
|
const build_file = b.path("../build.zig");
|
|
const local_cache_dir = b.path(".zig-local-cache");
|
|
const global_cache_dir = b.path(".zig-global-cache");
|
|
|
|
const clean_step = b.step("clean", "Cleanup previous CI runs");
|
|
clean_step.dependOn(&b.addRemoveDirTree(b.cache_root.path orelse ".").step);
|
|
clean_step.dependOn(&b.addRemoveDirTree(b.pathFromRoot("../.zig-cache")).step);
|
|
clean_step.dependOn(&b.addRemoveDirTree(local_cache_dir.getPath(b)).step);
|
|
clean_step.dependOn(&b.addRemoveDirTree(global_cache_dir.getPath(b)).step);
|
|
|
|
const run_exe = b.addExecutable(.{
|
|
.name = "run",
|
|
.root_source_file = b.path("run.zig"),
|
|
.target = host_target,
|
|
.optimize = tool_optimize,
|
|
.strip = false,
|
|
});
|
|
run_exe.step.max_rss = 281_214_976;
|
|
|
|
const run_chmod_step = if (host_target.result.isDarwin()) steps: {
|
|
const chmod_exe = b.addExecutable(.{
|
|
.name = "chmod",
|
|
.root_source_file = b.path("chmod.zig"),
|
|
.target = host_target,
|
|
.optimize = tool_optimize,
|
|
.strip = false,
|
|
});
|
|
chmod_exe.step.max_rss = 267_157_504;
|
|
|
|
const run_chmod = b.addRunArtifact(chmod_exe);
|
|
run_chmod.step.max_rss = 1_212_416;
|
|
if (binaryen_lazy_dep) |binaryen_dep| for ([_][]const u8{
|
|
"binaryen-unittests",
|
|
"wasm2js",
|
|
"wasm-as",
|
|
"wasm-ctor-eval",
|
|
"wasm-dis",
|
|
"wasm-emscripten-finalize",
|
|
"wasm-fuzz-lattices",
|
|
"wasm-fuzz-types",
|
|
"wasm-merge",
|
|
"wasm-metadce",
|
|
"wasm-opt",
|
|
"wasm-reduce",
|
|
"wasm-shell",
|
|
"wasm-split",
|
|
}) |exe| run_chmod.addFileArg(binaryen_dep.path(b.fmt("bin/{s}{s}", .{ exe, host_exe_file_ext })));
|
|
run_chmod.addFileArg(cmake_exe);
|
|
run_chmod.addFileArg(ninja_exe);
|
|
if (qemu_lazy_dep) |qemu_dep| for ([_][]const u8{
|
|
"cris",
|
|
"mips64el",
|
|
"ppc64",
|
|
"loongarch64",
|
|
"sparc",
|
|
"aarch64",
|
|
"sparc64",
|
|
"alpha",
|
|
"sparc32plus",
|
|
"sh4",
|
|
"hexagon",
|
|
"xtensaeb",
|
|
"riscv64",
|
|
"aarch64_be",
|
|
"i386",
|
|
"armeb",
|
|
"mips",
|
|
"s390x",
|
|
"mips64",
|
|
"ppc64le",
|
|
"mipsel",
|
|
"x86_64",
|
|
"arm",
|
|
"hppa",
|
|
"ppc",
|
|
"or1k",
|
|
"xtensa",
|
|
"microblaze",
|
|
"riscv32",
|
|
"m68k",
|
|
"sh4eb",
|
|
"mipsn32el",
|
|
"nios2",
|
|
"microblazeel",
|
|
"mipsn32",
|
|
}) |qemu_target| run_chmod.addFileArg(qemu_dep.path(b.fmt("bin/qemu-{s}{s}", .{ qemu_target, host_exe_file_ext })));
|
|
if (tidy_lazy_dep) |tidy_dep| run_chmod.addFileArg(tidy_dep.path(b.fmt("bin/tidy{s}", .{host_exe_file_ext})));
|
|
if (wasmtime_lazy_dep) |wasmtime_dep| run_chmod.addFileArg(wasmtime_dep.path(b.fmt("wasmtime{s}", .{host_exe_file_ext})));
|
|
run_chmod.addFileArg(zig_llvm_lld_clang_dep.path(b.fmt("bin/zig{s}", .{host_exe_file_ext})));
|
|
|
|
break :steps &run_chmod.step;
|
|
} else null;
|
|
|
|
const build_cc_stage2_step = if (b.option(
|
|
[]const u8,
|
|
"cc",
|
|
"System C compiler to use for cc bootstrap",
|
|
)) |cc| steps: {
|
|
const cc_bootstrap_step = b.step("cc-bootstrap", "build cc bootstrap");
|
|
const test_cc_bootstrap_step = b.step("test-cc-bootstrap", "test cc bootstrap");
|
|
|
|
const build_bootstrap = b.addSystemCommand(&.{ cc, "-o" });
|
|
build_bootstrap.step.max_rss = 94_011_392;
|
|
const bootstrap_exe = build_bootstrap.addOutputFileArg("bootstrap");
|
|
build_bootstrap.addArgs(&.{ "-MD", "-MF" });
|
|
_ = build_bootstrap.addDepFileOutputArg("bootstrap.d");
|
|
build_bootstrap.addFileArg(b.path("../bootstrap.c"));
|
|
build_bootstrap.setCwd(b.path(".."));
|
|
|
|
const build_stage2 = std.Build.Step.Run.create(b, "build cc bootstrap");
|
|
build_stage2.step.max_rss = 5_953_224_704;
|
|
build_stage2.addArtifactArg(run_exe);
|
|
build_stage2.addArgs(&.{
|
|
"$0",
|
|
"--delete",
|
|
"zig-wasm2c",
|
|
"zig1.c",
|
|
"zig1",
|
|
"config.zig",
|
|
"zig2.c",
|
|
"compiler_rt.c",
|
|
"--rename",
|
|
"zig2",
|
|
"$1",
|
|
"--",
|
|
});
|
|
build_stage2.addFileArg(bootstrap_exe);
|
|
const stage2_exe = build_stage2.addOutputFileArg("zig2");
|
|
build_stage2.setEnvironmentVariable("CC", cc);
|
|
build_stage2.setCwd(b.path(".."));
|
|
|
|
const build_stage3 = std.Build.Step.Run.create(b, "build cc bootstrap");
|
|
build_stage3.step.max_rss = 736_362_496;
|
|
build_stage3.addFileArg(stage2_exe);
|
|
build_stage3.addArgs(&.{
|
|
"build",
|
|
"--maxrss",
|
|
b.fmt("{}", .{@max(build_stage3.step.max_rss, 7_000_000_000)}),
|
|
"--build-file",
|
|
});
|
|
build_stage3.addFileArg(build_file);
|
|
build_stage3.addArg("--prefix");
|
|
const stage3_out = build_stage3.addOutputDirectoryArg("stage3");
|
|
build_stage3.addArg("--cache-dir");
|
|
build_stage3.addDirectoryArg(local_cache_dir);
|
|
build_stage3.addArg("--global-cache-dir");
|
|
build_stage3.addDirectoryArg(global_cache_dir);
|
|
build_stage3.addArg("-Dno-lib");
|
|
|
|
cc_bootstrap_step.dependOn(&b.addInstallDirectory(.{
|
|
.source_dir = stage3_out,
|
|
.install_dir = .prefix,
|
|
.install_subdir = "cc",
|
|
}).step);
|
|
const stage3_exe = stage3_out.path(b, b.fmt("bin/zig{s}", .{host_exe_file_ext}));
|
|
|
|
const run_tests = std.Build.Step.Run.create(b, "test cc bootstrap (stage3)");
|
|
run_tests.step.max_rss = 451_231_744;
|
|
run_tests.addFileArg(stage3_exe);
|
|
run_tests.addArg("test");
|
|
run_tests.addFileArg(b.path("../test/behavior.zig"));
|
|
test_cc_bootstrap_step.dependOn(&run_tests.step);
|
|
|
|
break :steps &build_stage2.step;
|
|
} else null;
|
|
|
|
{
|
|
const cmake_bootstrap_step = b.step("cmake-bootstrap", "build cmake bootstrap");
|
|
const test_cmake_bootstrap_step = b.step("test-cmake-bootstrap", "test cmake bootstrap");
|
|
|
|
const build_stage3 = std.Build.Step.Run.create(b, "build cmake bootstrap");
|
|
build_stage3.step.max_rss = 10_620_571_648;
|
|
build_stage3.addArtifactArg(run_exe);
|
|
build_stage3.addArgs(&.{
|
|
"$4",
|
|
"-GNinja",
|
|
"-S..",
|
|
"-B$6",
|
|
"-DCMAKE_MAKE_PROGRAM=$5",
|
|
"-DCMAKE_BUILD_TYPE=$2",
|
|
"-DCMAKE_PREFIX_PATH=$7",
|
|
"-DCMAKE_C_COMPILER=$7/bin/zig$3;cc;-target;$0;-mcpu=$1",
|
|
"-DCMAKE_CXX_COMPILER=$7/bin/zig$3;c++;-target;$0;-mcpu=$1",
|
|
"-DCMAKE_AR=$7/bin/zig$3",
|
|
"-DZIG_AR_WORKAROUND=ON",
|
|
"-DZIG_TARGET_TRIPLE=$0",
|
|
"-DZIG_TARGET_MCPU=$1",
|
|
"-DZIG_STATIC=ON",
|
|
"-DZIG_STATIC_CURSES=OFF",
|
|
"-DZIG_NO_LIB=ON",
|
|
"--then",
|
|
"$5",
|
|
"-C",
|
|
"$6",
|
|
"install",
|
|
"--",
|
|
host_triple,
|
|
host_cpu,
|
|
@tagName(build_type),
|
|
host_exe_file_ext,
|
|
});
|
|
build_stage3.addFileArg(cmake_exe);
|
|
build_stage3.addFileArg(ninja_exe);
|
|
const stage3_out = build_stage3.addOutputDirectoryArg("build").path(b, "stage3");
|
|
build_stage3.addDirectoryArg(zig_llvm_lld_clang_dep.path(""));
|
|
build_stage3.addFileInput(b.path("../stage1/zig1.wasm"));
|
|
build_stage3.addFileInput(b.path("../stage1/zig.h"));
|
|
if (run_chmod_step) |step| build_stage3.step.dependOn(step);
|
|
|
|
cmake_bootstrap_step.dependOn(&b.addInstallDirectory(.{
|
|
.source_dir = stage3_out,
|
|
.install_dir = .prefix,
|
|
.install_subdir = "cmake",
|
|
}).step);
|
|
const stage3_exe = stage3_out.path(b, b.fmt("bin/zig{s}", .{host_exe_file_ext}));
|
|
|
|
const run_tests = std.Build.Step.Run.create(b, "test cmake bootstrap (stage3)");
|
|
run_tests.step.max_rss = 12_676_628_480;
|
|
run_tests.addArtifactArg(run_exe);
|
|
run_tests.addArgs(&.{
|
|
"$0",
|
|
"build",
|
|
"$--maxrss",
|
|
b.fmt("{}", .{run_tests.step.max_rss}),
|
|
"$--build-file",
|
|
"$1",
|
|
"$--prefix",
|
|
"$2",
|
|
"$--cache-dir",
|
|
"$3",
|
|
"$--global-cache-dir",
|
|
"$4",
|
|
"test-fmt",
|
|
"test",
|
|
"docs",
|
|
"-Dstatic-llvm",
|
|
"$--search-prefix",
|
|
"$5",
|
|
});
|
|
if (host_target.result.isDarwin()) run_tests.addArg("-Denable-macos-sdk");
|
|
if (host_target.result.os.tag == .windows) run_tests.addArgs(&.{"-Denable-symlinks-windows"});
|
|
if (b.option(bool, "skip-non-native", "Skip non-native tests") orelse false)
|
|
run_tests.addArg("-Dskip-non-native");
|
|
if (qemu_lazy_dep) |_| run_tests.addArg("-fqemu");
|
|
if (tidy_lazy_dep) |_| run_tests.addArg("-Denable-tidy");
|
|
if (wasmtime_lazy_dep) |_| run_tests.addArg("-fwasmtime");
|
|
run_tests.addArg("--path");
|
|
{
|
|
var index: usize = 6;
|
|
for ([_]?*std.Build.Dependency{
|
|
qemu_lazy_dep,
|
|
tidy_lazy_dep,
|
|
wasmtime_lazy_dep,
|
|
}) |maybe_dep| if (maybe_dep) |_| {
|
|
run_tests.addArg(b.fmt("${}", .{index}));
|
|
index += 1;
|
|
};
|
|
}
|
|
run_tests.addArg("--");
|
|
run_tests.addFileArg(stage3_exe);
|
|
run_tests.addFileArg(build_file);
|
|
_ = run_tests.addOutputDirectoryArg("tests");
|
|
run_tests.addDirectoryArg(local_cache_dir);
|
|
run_tests.addDirectoryArg(global_cache_dir);
|
|
run_tests.addDirectoryArg(zig_llvm_lld_clang_dep.path(""));
|
|
if (qemu_lazy_dep) |qemu_dep| run_tests.addDirectoryArg(qemu_dep.path("bin"));
|
|
if (tidy_lazy_dep) |tidy_dep| run_tests.addDirectoryArg(tidy_dep.path("bin"));
|
|
if (wasmtime_lazy_dep) |wasmtime_dep| run_tests.addDirectoryArg(wasmtime_dep.path(""));
|
|
if (run_chmod_step) |step| run_tests.step.dependOn(step);
|
|
test_cmake_bootstrap_step.dependOn(&run_tests.step);
|
|
|
|
for (b.option([]const []const u8, "extra-target", "Extra targets to build") orelse &.{}) |build_target| {
|
|
const build_stage4 = std.Build.Step.Run.create(b, "build");
|
|
build_stage4.step.max_rss = 4_483_489_792;
|
|
build_stage4.addFileArg(stage3_exe);
|
|
build_stage4.addArgs(&.{
|
|
"build",
|
|
"--maxrss",
|
|
b.fmt("{}", .{@max(build_stage4.step.max_rss, 7_000_000_000)}),
|
|
"--build-file",
|
|
});
|
|
build_stage4.addFileArg(build_file);
|
|
build_stage4.addArg("--prefix");
|
|
_ = build_stage4.addOutputDirectoryArg(b.fmt("stage4-{s}", .{build_target}));
|
|
build_stage4.addArg("--cache-dir");
|
|
build_stage4.addDirectoryArg(local_cache_dir);
|
|
build_stage4.addArg("--global-cache-dir");
|
|
build_stage4.addDirectoryArg(global_cache_dir);
|
|
build_stage4.addArgs(&.{ b.fmt("-Dtarget={s}", .{build_target}), "-Dno-lib" });
|
|
test_cmake_bootstrap_step.dependOn(&build_stage4.step);
|
|
}
|
|
|
|
switch (build_type) {
|
|
.None, .Debug, .RelWithDebInfo, .MinSizeRel => {},
|
|
.Release => {
|
|
const reproducible_step = b.step("reproducible", "Ensure that stage3 and stage4 are byte-for-byte identical");
|
|
|
|
const run_stage3_version = std.Build.Step.Run.create(b, "get stage3 version");
|
|
run_stage3_version.step.max_rss = 40_452_096;
|
|
run_stage3_version.addFileArg(stage3_exe);
|
|
run_stage3_version.addArg("version");
|
|
const stage3_version = run_stage3_version.captureStdOut();
|
|
|
|
const build_stage4 = b.addRunArtifact(run_exe);
|
|
build_stage4.step.max_rss = 4_361_846_784;
|
|
build_stage4.addArgs(&.{
|
|
"$2",
|
|
"build",
|
|
"$--maxrss",
|
|
b.fmt("{}", .{@max(build_stage4.step.max_rss, 7_000_000_000)}),
|
|
"$--build-file",
|
|
"$3",
|
|
"$--prefix",
|
|
"$4",
|
|
"$--cache-dir",
|
|
"$5",
|
|
"$--global-cache-dir",
|
|
"$6",
|
|
"-Denable-llvm",
|
|
"-Dno-lib",
|
|
"-Doptimize=ReleaseFast",
|
|
"-Dstrip",
|
|
"-Dtarget=$0",
|
|
"-Dcpu=$1",
|
|
"-Duse-zig-libcxx",
|
|
"-Dversion-string=@7",
|
|
"--",
|
|
host_triple,
|
|
host_cpu,
|
|
});
|
|
build_stage4.addFileArg(stage3_exe);
|
|
build_stage4.addFileArg(build_file);
|
|
const stage4_prefix = build_stage4.addOutputDirectoryArg("stage4");
|
|
build_stage4.addDirectoryArg(local_cache_dir);
|
|
build_stage4.addDirectoryArg(global_cache_dir);
|
|
build_stage4.addFileArg(stage3_version);
|
|
|
|
const cmp_exe = b.addExecutable(.{
|
|
.name = "cmp",
|
|
.root_source_file = b.path("cmp.zig"),
|
|
.target = host_target,
|
|
.optimize = tool_optimize,
|
|
.strip = false,
|
|
});
|
|
cmp_exe.step.max_rss = 267_403_264;
|
|
|
|
const run_cmp = std.Build.Step.Run.create(b, "Check stage3 and stage4 are byte-for-byte identical");
|
|
run_cmp.step.max_rss = 8_495_104;
|
|
run_cmp.addArtifactArg(cmp_exe);
|
|
run_cmp.addFileArg(stage3_exe);
|
|
run_cmp.addFileArg(stage4_prefix.path(b, b.fmt("bin/zig{s}", .{host_exe_file_ext})));
|
|
reproducible_step.dependOn(&run_cmp.step);
|
|
},
|
|
}
|
|
|
|
if (binaryen_lazy_dep) |binaryen_dep| {
|
|
const update_stage1_step = b.step("update-stage1", "Test bootstrap after updating the stage1 wasm binary");
|
|
|
|
const update_zig1 = std.Build.Step.Run.create(b, "update zig1");
|
|
update_zig1.step.max_rss = 1_815_281_664;
|
|
update_zig1.addArtifactArg(run_exe);
|
|
update_zig1.addArgs(&.{
|
|
"$0",
|
|
"build",
|
|
"$--maxrss",
|
|
b.fmt("{}", .{@max(update_zig1.step.max_rss, 7_000_000_000)}),
|
|
"$--build-file",
|
|
"$1",
|
|
"$--cache-dir",
|
|
"$2",
|
|
"$--global-cache-dir",
|
|
"$3",
|
|
"update-zig1",
|
|
"--path",
|
|
"$4",
|
|
"--",
|
|
});
|
|
update_zig1.addFileArg(stage3_exe);
|
|
update_zig1.addFileArg(build_file);
|
|
update_zig1.addDirectoryArg(local_cache_dir);
|
|
update_zig1.addDirectoryArg(global_cache_dir);
|
|
update_zig1.addDirectoryArg(binaryen_dep.path("bin"));
|
|
if (run_chmod_step) |step| update_zig1.step.dependOn(step);
|
|
// Clobbering stage1 depends on all steps that use the original stage1
|
|
if (build_cc_stage2_step) |step| update_zig1.step.dependOn(step);
|
|
update_zig1.step.dependOn(&build_stage3.step);
|
|
|
|
const build_updated_stage3 = std.Build.Step.Run.create(b, "build updated cmake bootstrap");
|
|
build_updated_stage3.step.max_rss = 10_600_501_248;
|
|
build_updated_stage3.addArtifactArg(run_exe);
|
|
build_updated_stage3.addArgs(&.{
|
|
"$4",
|
|
"-GNinja",
|
|
"-S..",
|
|
"-B$6",
|
|
"-DCMAKE_MAKE_PROGRAM=$5",
|
|
"-DCMAKE_BUILD_TYPE=$2",
|
|
"-DCMAKE_PREFIX_PATH=$7",
|
|
"-DCMAKE_C_COMPILER=$7/bin/zig$3;cc;-target;$0;-mcpu=$1",
|
|
"-DCMAKE_CXX_COMPILER=$7/bin/zig$3;c++;-target;$0;-mcpu=$1",
|
|
"-DCMAKE_AR=$7/bin/zig$3",
|
|
"-DZIG_AR_WORKAROUND=ON",
|
|
"-DZIG_TARGET_TRIPLE=$0",
|
|
"-DZIG_TARGET_MCPU=$1",
|
|
"-DZIG_STATIC=ON",
|
|
"-DZIG_STATIC_CURSES=OFF",
|
|
"-DZIG_NO_LIB=ON",
|
|
"--then",
|
|
"$5",
|
|
"-C",
|
|
"$6",
|
|
"install",
|
|
"--",
|
|
host_triple,
|
|
host_cpu,
|
|
@tagName(build_type),
|
|
host_exe_file_ext,
|
|
});
|
|
build_updated_stage3.addFileArg(cmake_exe);
|
|
build_updated_stage3.addFileArg(ninja_exe);
|
|
const updated_stage3_exe = build_updated_stage3.addOutputDirectoryArg("build")
|
|
.path(b, b.fmt("stage3/bin/zig{s}", .{host_exe_file_ext}));
|
|
build_updated_stage3.addDirectoryArg(zig_llvm_lld_clang_dep.path(""));
|
|
build_updated_stage3.addFileInput(b.path("../stage1/zig1.wasm"));
|
|
build_updated_stage3.addFileInput(b.path("../stage1/zig.h"));
|
|
if (run_chmod_step) |step| build_updated_stage3.step.dependOn(step);
|
|
build_updated_stage3.step.dependOn(&update_zig1.step);
|
|
|
|
const build_updated_stage4 = b.addRunArtifact(run_exe);
|
|
build_updated_stage4.step.max_rss = 4_499_849_216;
|
|
build_updated_stage4.addArgs(&.{
|
|
"$2",
|
|
"build",
|
|
"$--maxrss",
|
|
b.fmt("{}", .{@max(build_updated_stage4.step.max_rss, 7_000_000_000)}),
|
|
"$--build-file",
|
|
"$3",
|
|
"$--prefix",
|
|
"$4",
|
|
"$--cache-dir",
|
|
"$5",
|
|
"$--global-cache-dir",
|
|
"$6",
|
|
"-Denable-llvm",
|
|
"-Dno-lib",
|
|
"-Doptimize=ReleaseFast",
|
|
"-Dstrip",
|
|
"-Dtarget=$0",
|
|
"-Dcpu=$1",
|
|
"-Duse-zig-libcxx",
|
|
"--",
|
|
host_triple,
|
|
host_cpu,
|
|
});
|
|
build_updated_stage4.addFileArg(updated_stage3_exe);
|
|
build_updated_stage4.addFileArg(build_file);
|
|
const updated_stage4_prefix = build_updated_stage4.addOutputDirectoryArg("stage4");
|
|
build_updated_stage4.addDirectoryArg(local_cache_dir);
|
|
build_updated_stage4.addDirectoryArg(global_cache_dir);
|
|
|
|
const run_tests_with_updated_stage4 = std.Build.Step.Run.create(b, "test updated cmake bootstrap (stage3)");
|
|
run_tests_with_updated_stage4.step.max_rss = 696_287_232;
|
|
run_tests_with_updated_stage4.addFileArg(updated_stage4_prefix.path(b, b.fmt("bin/zig{s}", .{host_exe_file_ext})));
|
|
run_tests_with_updated_stage4.addArg("test");
|
|
run_tests_with_updated_stage4.addFileArg(b.path("../test/behavior.zig"));
|
|
update_stage1_step.dependOn(&run_tests_with_updated_stage4.step);
|
|
}
|
|
|
|
msvc: {
|
|
const msvc_target = target: {
|
|
var target = host_target.result;
|
|
target.abi = .msvc;
|
|
break :target target;
|
|
};
|
|
const libc = std.zig.LibCDirs.detect(
|
|
b.allocator,
|
|
b.pathFromRoot("../lib"),
|
|
msvc_target,
|
|
true,
|
|
true,
|
|
null,
|
|
) catch |err| switch (err) {
|
|
error.WindowsSdkNotFound => break :msvc,
|
|
else => |e| @panic(@errorName(e)),
|
|
};
|
|
const msvc_arch = switch (host_target.result.cpu.arch) {
|
|
.x86 => "x86",
|
|
.x86_64 => "x64",
|
|
.arm, .armeb, .thumb, .thumbeb => "arm",
|
|
.aarch64 => "arm64",
|
|
else => break :msvc,
|
|
};
|
|
const cl_exe = b.pathResolve(&.{
|
|
(libc.libc_installation orelse break :msvc).msvc_lib_dir orelse break :msvc,
|
|
"..",
|
|
"..",
|
|
"bin",
|
|
b.fmt("Host{s}", .{msvc_arch}),
|
|
msvc_arch,
|
|
b.fmt("cl{s}", .{host_exe_file_ext}),
|
|
});
|
|
const msvc_triple = msvc_target.linuxTriple(b.allocator) catch @panic("OOM");
|
|
|
|
const msvc_step = b.step("msvc", "Run the behavior tests compiled with MSVC");
|
|
|
|
const build_msvc_behavior_tests = std.Build.Step.Run.create(b, "build msvc behavior tests");
|
|
build_msvc_behavior_tests.step.max_rss = 213_237_760;
|
|
build_msvc_behavior_tests.addFileArg(stage3_exe);
|
|
build_msvc_behavior_tests.addArgs(&.{
|
|
"test",
|
|
"-ofmt=c",
|
|
"--test-no-exec",
|
|
"-target",
|
|
msvc_triple,
|
|
"-lc",
|
|
});
|
|
build_msvc_behavior_tests.addFileArg(b.path("../test/behavior.zig"));
|
|
const behavior_msvc_source =
|
|
build_msvc_behavior_tests.addPrefixedOutputFileArg("-femit-bin=", "behavior-msvc.c");
|
|
|
|
const build_msvc_compiler_rt = std.Build.Step.Run.create(b, "build msvc compiler-rt");
|
|
build_msvc_compiler_rt.step.max_rss = 217_788_416;
|
|
build_msvc_compiler_rt.addFileArg(stage3_exe);
|
|
build_msvc_compiler_rt.addArgs(&.{
|
|
"build-obj",
|
|
"-ofmt=c",
|
|
"-OReleaseSmall",
|
|
"--name",
|
|
"compiler_rt",
|
|
"-target",
|
|
msvc_triple,
|
|
"-lc",
|
|
});
|
|
build_msvc_compiler_rt.addFileArg(b.path("../lib/compiler_rt.zig"));
|
|
const compiler_rt_msvc_source =
|
|
build_msvc_compiler_rt.addPrefixedOutputFileArg("-femit-bin=", "compiler_rt-msvc.c");
|
|
|
|
const build_msvc_tests = std.Build.Step.Run.create(b, "build msvc tests");
|
|
build_msvc_tests.step.max_rss = 599_506_944;
|
|
build_msvc_tests.addArgs(&.{ cl_exe, "/W3", "/Z7" });
|
|
build_msvc_tests.addPrefixedDirectoryArg("/I", b.path("../lib"));
|
|
build_msvc_tests.addFileArg(behavior_msvc_source);
|
|
build_msvc_tests.addFileArg(compiler_rt_msvc_source);
|
|
const msvc_tests_exe = build_msvc_tests.addPrefixedOutputFileArg(
|
|
"/Fe:",
|
|
b.fmt("behavior-msvc{s}", .{host_exe_file_ext}),
|
|
);
|
|
// Link args must appear after all other args.
|
|
build_msvc_tests.addArgs(&.{
|
|
"/link",
|
|
"/nologo",
|
|
"/debug",
|
|
"/subsystem:console",
|
|
"kernel32.lib",
|
|
"ntdll.lib",
|
|
"libcmt.lib",
|
|
});
|
|
build_msvc_tests.setEnvironmentVariable("INCLUDE", std.mem.join(
|
|
b.allocator,
|
|
&.{std.fs.path.delimiter},
|
|
libc.libc_include_dir_list,
|
|
) catch @panic("OOM"));
|
|
build_msvc_tests.setEnvironmentVariable("LIB", std.mem.join(
|
|
b.allocator,
|
|
&.{std.fs.path.delimiter},
|
|
&.{
|
|
libc.libc_installation.?.msvc_lib_dir.?,
|
|
libc.libc_installation.?.crt_dir.?,
|
|
libc.libc_installation.?.kernel32_lib_dir.?,
|
|
},
|
|
) catch @panic("OOM"));
|
|
|
|
const run_msvc_tests = std.Build.Step.Run.create(b, "run msvc tests");
|
|
run_msvc_tests.step.max_rss = 6_574_080;
|
|
run_msvc_tests.addFileArg(msvc_tests_exe);
|
|
msvc_step.dependOn(&run_msvc_tests.step);
|
|
}
|
|
}
|
|
}
|