Commit cc9eb9e90f
Changed files (1)
build.zig
@@ -19,7 +19,7 @@ pub fn build(b: *Builder) !void {
const single_threaded = b.option(bool, "single-threaded", "Build artifacts that run in single threaded mode");
const use_zig_libcxx = b.option(bool, "use-zig-libcxx", "If libc++ is needed, use zig's bundled version, don't try to integrate with the system") orelse false;
- var docgen_exe = b.addExecutable("docgen", "doc/docgen.zig");
+ const docgen_exe = b.addExecutable("docgen", "doc/docgen.zig");
docgen_exe.single_threaded = single_threaded;
const rel_zig_exe = try fs.path.relative(b.allocator, b.build_root, b.zig_exe);
@@ -27,7 +27,7 @@ pub fn build(b: *Builder) !void {
b.allocator,
&[_][]const u8{ b.cache_root, "langref.html" },
) catch unreachable;
- var docgen_cmd = docgen_exe.run();
+ const docgen_cmd = docgen_exe.run();
docgen_cmd.addArgs(&[_][]const u8{
rel_zig_exe,
"doc" ++ fs.path.sep_str ++ "langref.html.in",
@@ -60,6 +60,7 @@ pub fn build(b: *Builder) !void {
const skip_install_lib_files = b.option(bool, "skip-install-lib-files", "Do not copy lib/ files to installation prefix") orelse false;
const only_install_lib_files = b.option(bool, "lib-files-only", "Only install library files") orelse false;
+
const is_stage1 = b.option(bool, "stage1", "Build the stage1 compiler, put stage2 behind a feature flag") orelse false;
const omit_stage2 = b.option(bool, "omit-stage2", "Do not include stage2 behind a feature flag inside stage1") orelse false;
const static_llvm = b.option(bool, "static-llvm", "Disable integration with system-installed LLVM, Clang, LLD, and libc++") orelse false;
@@ -135,9 +136,9 @@ pub fn build(b: *Builder) !void {
break :blk 4;
};
- const main_file = if (is_stage1) "src/stage1.zig" else "src/main.zig";
+ const main_file: ?[]const u8 = if (is_stage1) null else "src/main.zig";
- var exe = b.addExecutable("zig", main_file);
+ const exe = b.addExecutable("zig", main_file);
exe.strip = strip;
exe.install();
exe.setBuildMode(mode);
@@ -145,6 +146,7 @@ pub fn build(b: *Builder) !void {
if (!skip_stage2_tests) {
toolchain_step.dependOn(&exe.step);
}
+
b.default_step.dependOn(&exe.step);
exe.single_threaded = single_threaded;
@@ -166,56 +168,6 @@ pub fn build(b: *Builder) !void {
exe_options.addOption(bool, "llvm_has_arc", llvm_has_arc);
exe_options.addOption(bool, "force_gpa", force_gpa);
- if (enable_llvm) {
- const cmake_cfg = if (static_llvm) null else findAndParseConfigH(b, config_h_path_option);
-
- if (is_stage1) {
- exe.addIncludePath("src");
- exe.addIncludePath("deps/SoftFloat-3e/source/include");
-
- test_stage2.addIncludePath("src");
- test_stage2.addIncludePath("deps/SoftFloat-3e/source/include");
- // This is intentionally a dummy path. stage1.zig tries to @import("compiler_rt") in case
- // of being built by cmake. But when built by zig it's gonna get a compiler_rt so that
- // is pointless.
- exe.addPackagePath("compiler_rt", "src/empty.zig");
- exe.defineCMacro("ZIG_LINK_MODE", "Static");
- test_stage2.defineCMacro("ZIG_LINK_MODE", "Static");
-
- const softfloat = b.addStaticLibrary("softfloat", null);
- softfloat.setBuildMode(.ReleaseFast);
- softfloat.setTarget(target);
- softfloat.addIncludePath("deps/SoftFloat-3e-prebuilt");
- softfloat.addIncludePath("deps/SoftFloat-3e/source/8086");
- softfloat.addIncludePath("deps/SoftFloat-3e/source/include");
- softfloat.addCSourceFiles(&softfloat_sources, &[_][]const u8{ "-std=c99", "-O3" });
- softfloat.single_threaded = single_threaded;
-
- exe.linkLibrary(softfloat);
- test_stage2.linkLibrary(softfloat);
-
- exe.addCSourceFiles(&stage1_sources, &exe_cflags);
- exe.addCSourceFiles(&optimized_c_sources, &[_][]const u8{ "-std=c99", "-O3" });
-
- test_stage2.addCSourceFiles(&stage1_sources, &exe_cflags);
- test_stage2.addCSourceFiles(&optimized_c_sources, &[_][]const u8{ "-std=c99", "-O3" });
- }
- if (cmake_cfg) |cfg| {
- // Inside this code path, we have to coordinate with system packaged LLVM, Clang, and LLD.
- // That means we also have to rely on stage1 compiled c++ files. We parse config.h to find
- // the information passed on to us from cmake.
- if (cfg.cmake_prefix_path.len > 0) {
- b.addSearchPrefix(cfg.cmake_prefix_path);
- }
-
- try addCmakeCfgOptionsToExe(b, cfg, exe, use_zig_libcxx);
- try addCmakeCfgOptionsToExe(b, cfg, test_stage2, use_zig_libcxx);
- } else {
- // Here we are -Denable-llvm but no cmake integration.
- try addStaticLlvmOptionsToExe(exe);
- try addStaticLlvmOptionsToExe(test_stage2);
- }
- }
if (link_libc) {
exe.linkLibC();
test_stage2.linkLibC();
@@ -227,12 +179,12 @@ pub fn build(b: *Builder) !void {
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_string = b.fmt("{d}.{d}.{d}", .{ zig_version.major, zig_version.minor, zig_version.patch });
-
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);
}
+ const version_string = b.fmt("{d}.{d}.{d}", .{ zig_version.major, zig_version.minor, zig_version.patch });
+
var code: u8 = undefined;
const git_describe_untrimmed = b.execAllowFail(&[_][]const u8{
"git", "-C", b.build_root, "describe", "--match", "*.*.*", "--tags",
@@ -280,6 +232,108 @@ pub fn build(b: *Builder) !void {
};
exe_options.addOption([:0]const u8, "version", try b.allocator.dupeZ(u8, version));
+ if (enable_llvm) {
+ const cmake_cfg = if (static_llvm) null else findAndParseConfigH(b, config_h_path_option);
+
+ if (is_stage1) {
+ const softfloat = b.addStaticLibrary("softfloat", null);
+ softfloat.setBuildMode(.ReleaseFast);
+ softfloat.setTarget(target);
+ softfloat.addIncludePath("deps/SoftFloat-3e-prebuilt");
+ softfloat.addIncludePath("deps/SoftFloat-3e/source/8086");
+ softfloat.addIncludePath("deps/SoftFloat-3e/source/include");
+ softfloat.addCSourceFiles(&softfloat_sources, &[_][]const u8{ "-std=c99", "-O3" });
+ softfloat.single_threaded = single_threaded;
+
+ const zig0 = b.addExecutable("zig0", null);
+ zig0.addCSourceFiles(&.{"src/stage1/zig0.cpp"}, &exe_cflags);
+ zig0.addIncludePath("zig-cache/tmp"); // for config.h
+ zig0.defineCMacro("ZIG_VERSION_MAJOR", b.fmt("{d}", .{zig_version.major}));
+ zig0.defineCMacro("ZIG_VERSION_MINOR", b.fmt("{d}", .{zig_version.minor}));
+ zig0.defineCMacro("ZIG_VERSION_PATCH", b.fmt("{d}", .{zig_version.patch}));
+ zig0.defineCMacro("ZIG_VERSION_STRING", b.fmt("\"{s}\"", .{version}));
+
+ for ([_]*std.build.LibExeObjStep{ zig0, exe }) |artifact| {
+ artifact.addIncludePath("src");
+ artifact.addIncludePath("deps/SoftFloat-3e/source/include");
+ artifact.addIncludePath("deps/SoftFloat-3e-prebuilt");
+
+ artifact.defineCMacro("ZIG_LINK_MODE", "Static");
+
+ artifact.addCSourceFiles(&stage1_sources, &exe_cflags);
+ artifact.addCSourceFiles(&optimized_c_sources, &[_][]const u8{ "-std=c99", "-O3" });
+
+ artifact.linkLibrary(softfloat);
+ artifact.linkLibCpp();
+ }
+
+ try addStaticLlvmOptionsToExe(zig0);
+
+ const zig1_obj_ext = target.getObjectFormat().fileExt(target.getCpuArch());
+ const zig1_obj_path = b.pathJoin(&.{ "zig-cache", "tmp", b.fmt("zig1{s}", .{zig1_obj_ext}) });
+ const zig1_compiler_rt_path = b.pathJoin(&.{ b.pathFromRoot("lib"), "std", "special", "compiler_rt.zig" });
+
+ const zig1_obj = zig0.run();
+ zig1_obj.addArgs(&.{
+ "src/stage1.zig",
+ "-target",
+ try target.zigTriple(b.allocator),
+ "-mcpu=baseline",
+ "--name",
+ "zig1",
+ "--zig-lib-dir",
+ b.pathFromRoot("lib"),
+ b.fmt("-femit-bin={s}", .{b.pathFromRoot(zig1_obj_path)}),
+ "-fcompiler-rt",
+ "-lc",
+ });
+ {
+ zig1_obj.addArgs(&.{ "--pkg-begin", "build_options" });
+ zig1_obj.addFileSourceArg(exe_options.getSource());
+ zig1_obj.addArgs(&.{ "--pkg-end", "--pkg-begin", "compiler_rt", zig1_compiler_rt_path, "--pkg-end" });
+ }
+ switch (mode) {
+ .Debug => {},
+ .ReleaseFast => {
+ zig1_obj.addArg("-OReleaseFast");
+ zig1_obj.addArg("--strip");
+ },
+ .ReleaseSafe => {
+ zig1_obj.addArg("-OReleaseSafe");
+ zig1_obj.addArg("--strip");
+ },
+ .ReleaseSmall => {
+ zig1_obj.addArg("-OReleaseSmall");
+ zig1_obj.addArg("--strip");
+ },
+ }
+ if (single_threaded orelse false) {
+ zig1_obj.addArg("-fsingle-threaded");
+ }
+
+ exe.step.dependOn(&zig1_obj.step);
+ exe.addObjectFile(zig1_obj_path);
+
+ // This is intentionally a dummy path. stage1.zig tries to @import("compiler_rt") in case
+ // of being built by cmake. But when built by zig it's gonna get a compiler_rt so that
+ // is pointless.
+ exe.addPackagePath("compiler_rt", "src/empty.zig");
+ }
+ if (cmake_cfg) |cfg| {
+ // Inside this code path, we have to coordinate with system packaged LLVM, Clang, and LLD.
+ // That means we also have to rely on stage1 compiled c++ files. We parse config.h to find
+ // the information passed on to us from cmake.
+ if (cfg.cmake_prefix_path.len > 0) {
+ b.addSearchPrefix(cfg.cmake_prefix_path);
+ }
+
+ try addCmakeCfgOptionsToExe(b, cfg, exe, use_zig_libcxx);
+ } else {
+ // Here we are -Denable-llvm but no cmake integration.
+ try addStaticLlvmOptionsToExe(exe);
+ }
+ }
+
const semver = try std.SemanticVersion.parse(version);
exe_options.addOption(std.SemanticVersion, "semver", semver);
@@ -548,7 +602,6 @@ fn addCxxKnownPath(
) !void {
if (!std.process.can_spawn)
return error.RequiredLibraryNotFound;
-
const path_padded = try b.exec(&[_][]const u8{
ctx.cxx_compiler,
b.fmt("-print-file-name={s}", .{objname}),
@@ -695,15 +748,19 @@ fn toNativePathSep(b: *Builder, s: []const u8) []u8 {
const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c",
+ "deps/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c",
"deps/SoftFloat-3e/source/8086/s_commonNaNToF128M.c",
+ "deps/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c",
"deps/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c",
"deps/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c",
"deps/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c",
"deps/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c",
+ "deps/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c",
"deps/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c",
"deps/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c",
"deps/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c",
"deps/SoftFloat-3e/source/8086/s_propagateNaNF128M.c",
+ "deps/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c",
"deps/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c",
"deps/SoftFloat-3e/source/8086/softfloat_raiseFlags.c",
"deps/SoftFloat-3e/source/f128M_add.c",
@@ -723,6 +780,7 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/f128M_to_f16.c",
"deps/SoftFloat-3e/source/f128M_to_f32.c",
"deps/SoftFloat-3e/source/f128M_to_f64.c",
+ "deps/SoftFloat-3e/source/f128M_to_extF80M.c",
"deps/SoftFloat-3e/source/f128M_to_i32.c",
"deps/SoftFloat-3e/source/f128M_to_i32_r_minMag.c",
"deps/SoftFloat-3e/source/f128M_to_i64.c",
@@ -731,6 +789,20 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c",
"deps/SoftFloat-3e/source/f128M_to_ui64.c",
"deps/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c",
+ "deps/SoftFloat-3e/source/extF80M_add.c",
+ "deps/SoftFloat-3e/source/extF80M_div.c",
+ "deps/SoftFloat-3e/source/extF80M_eq.c",
+ "deps/SoftFloat-3e/source/extF80M_le.c",
+ "deps/SoftFloat-3e/source/extF80M_lt.c",
+ "deps/SoftFloat-3e/source/extF80M_mul.c",
+ "deps/SoftFloat-3e/source/extF80M_rem.c",
+ "deps/SoftFloat-3e/source/extF80M_roundToInt.c",
+ "deps/SoftFloat-3e/source/extF80M_sqrt.c",
+ "deps/SoftFloat-3e/source/extF80M_sub.c",
+ "deps/SoftFloat-3e/source/extF80M_to_f16.c",
+ "deps/SoftFloat-3e/source/extF80M_to_f32.c",
+ "deps/SoftFloat-3e/source/extF80M_to_f64.c",
+ "deps/SoftFloat-3e/source/extF80M_to_f128M.c",
"deps/SoftFloat-3e/source/f16_add.c",
"deps/SoftFloat-3e/source/f16_div.c",
"deps/SoftFloat-3e/source/f16_eq.c",
@@ -742,9 +814,12 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/f16_roundToInt.c",
"deps/SoftFloat-3e/source/f16_sqrt.c",
"deps/SoftFloat-3e/source/f16_sub.c",
+ "deps/SoftFloat-3e/source/f16_to_extF80M.c",
"deps/SoftFloat-3e/source/f16_to_f128M.c",
"deps/SoftFloat-3e/source/f16_to_f64.c",
+ "deps/SoftFloat-3e/source/f32_to_extF80M.c",
"deps/SoftFloat-3e/source/f32_to_f128M.c",
+ "deps/SoftFloat-3e/source/f64_to_extF80M.c",
"deps/SoftFloat-3e/source/f64_to_f128M.c",
"deps/SoftFloat-3e/source/f64_to_f16.c",
"deps/SoftFloat-3e/source/i32_to_f128M.c",
@@ -752,6 +827,7 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/s_addCarryM.c",
"deps/SoftFloat-3e/source/s_addComplCarryM.c",
"deps/SoftFloat-3e/source/s_addF128M.c",
+ "deps/SoftFloat-3e/source/s_addExtF80M.c",
"deps/SoftFloat-3e/source/s_addM.c",
"deps/SoftFloat-3e/source/s_addMagsF16.c",
"deps/SoftFloat-3e/source/s_addMagsF32.c",
@@ -762,12 +838,14 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/s_approxRecip_1Ks.c",
"deps/SoftFloat-3e/source/s_compare128M.c",
"deps/SoftFloat-3e/source/s_compare96M.c",
+ "deps/SoftFloat-3e/source/s_compareNonnormExtF80M.c",
"deps/SoftFloat-3e/source/s_countLeadingZeros16.c",
"deps/SoftFloat-3e/source/s_countLeadingZeros32.c",
"deps/SoftFloat-3e/source/s_countLeadingZeros64.c",
"deps/SoftFloat-3e/source/s_countLeadingZeros8.c",
"deps/SoftFloat-3e/source/s_eq128.c",
"deps/SoftFloat-3e/source/s_invalidF128M.c",
+ "deps/SoftFloat-3e/source/s_invalidExtF80M.c",
"deps/SoftFloat-3e/source/s_isNaNF128M.c",
"deps/SoftFloat-3e/source/s_le128.c",
"deps/SoftFloat-3e/source/s_lt128.c",
@@ -778,7 +856,9 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/s_mulAddF32.c",
"deps/SoftFloat-3e/source/s_mulAddF64.c",
"deps/SoftFloat-3e/source/s_negXM.c",
+ "deps/SoftFloat-3e/source/s_normExtF80SigM.c",
"deps/SoftFloat-3e/source/s_normRoundPackMToF128M.c",
+ "deps/SoftFloat-3e/source/s_normRoundPackMToExtF80M.c",
"deps/SoftFloat-3e/source/s_normRoundPackToF16.c",
"deps/SoftFloat-3e/source/s_normRoundPackToF32.c",
"deps/SoftFloat-3e/source/s_normRoundPackToF64.c",
@@ -789,6 +869,7 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/s_remStepMBy32.c",
"deps/SoftFloat-3e/source/s_roundMToI64.c",
"deps/SoftFloat-3e/source/s_roundMToUI64.c",
+ "deps/SoftFloat-3e/source/s_roundPackMToExtF80M.c",
"deps/SoftFloat-3e/source/s_roundPackMToF128M.c",
"deps/SoftFloat-3e/source/s_roundPackToF16.c",
"deps/SoftFloat-3e/source/s_roundPackToF32.c",
@@ -817,9 +898,12 @@ const softfloat_sources = [_][]const u8{
"deps/SoftFloat-3e/source/s_subMagsF32.c",
"deps/SoftFloat-3e/source/s_subMagsF64.c",
"deps/SoftFloat-3e/source/s_tryPropagateNaNF128M.c",
+ "deps/SoftFloat-3e/source/s_tryPropagateNaNExtF80M.c",
"deps/SoftFloat-3e/source/softfloat_state.c",
"deps/SoftFloat-3e/source/ui32_to_f128M.c",
"deps/SoftFloat-3e/source/ui64_to_f128M.c",
+ "deps/SoftFloat-3e/source/ui32_to_extF80M.c",
+ "deps/SoftFloat-3e/source/ui64_to_extF80M.c",
};
const stage1_sources = [_][]const u8{