| ... | @@ -3,7 +3,7 @@ const Build = std.Build; | ... | @@ -3,7 +3,7 @@ const Build = std.Build; |
| 3 | const Target = std.Target; | 3 | const Target = std.Target; |
| 4 | const OsVersion = Target.Query.OsVersion; | 4 | const OsVersion = Target.Query.OsVersion; |
| 5 | | 5 | |
| 6 | pub fn build(b: *std.Build) void { | 6 | pub fn build(b: *std.Build) !void { |
| 7 | b.reference_trace = 20; | 7 | b.reference_trace = 20; |
| 8 | | 8 | |
| 9 | const native_target = b.resolveTargetQuery(.{}); | 9 | const native_target = b.resolveTargetQuery(.{}); |
| ... | @@ -40,8 +40,20 @@ pub fn build(b: *std.Build) void { | ... | @@ -40,8 +40,20 @@ pub fn build(b: *std.Build) void { |
| 40 | "Experiment with the Zig self-hosted backends", | 40 | "Experiment with the Zig self-hosted backends", |
| 41 | ) orelse false; | 41 | ) orelse false; |
| 42 | | 42 | |
| 43 | const native_debug = buildWithTarget(b, native_target, .Debug, .none, no_llvm); | 43 | const version = version: { |
| 44 | const main = buildWithTarget(b, target, optimize, tracing, no_llvm); | 44 | const text = try b.build_root.handle.readFileAlloc( |
| | 45 | b.graph.arena, |
| | 46 | "CHANGELOG.md", |
| | 47 | std.math.maxInt(usize), |
| | 48 | ); |
| | 49 | const first_header = std.mem.indexOf(u8, text, "## ") orelse unreachable; |
| | 50 | var tokenizer = std.mem.tokenizeAny(u8, text[first_header + 2 ..], " \t\n"); |
| | 51 | const version_text = tokenizer.next() orelse unreachable; |
| | 52 | break :version std.SemanticVersion.parse(version_text) catch unreachable; |
| | 53 | }; |
| | 54 | |
| | 55 | const native_debug = buildWithTarget(b, native_target, .Debug, .none, version, no_llvm); |
| | 56 | const main = buildWithTarget(b, target, optimize, tracing, version, no_llvm); |
| 45 | | 57 | |
| 46 | b.installArtifact(main.compiler); | 58 | b.installArtifact(main.compiler); |
| 47 | | 59 | |
| ... | @@ -133,7 +145,7 @@ pub fn build(b: *std.Build) void { | ... | @@ -133,7 +145,7 @@ pub fn build(b: *std.Build) void { |
| 133 | }, | 145 | }, |
| 134 | ) catch @panic("OOM"); | 146 | ) catch @panic("OOM"); |
| 135 | | 147 | |
| 136 | const artifacts = buildWithTarget(b, cross_target, .ReleaseSafe, .none, no_llvm); | 148 | const artifacts = buildWithTarget(b, cross_target, .ReleaseSafe, .none, version, no_llvm); |
| 137 | | 149 | |
| 138 | inline for (.{ | 150 | inline for (.{ |
| 139 | .{ artifacts.compiler, "compiler" }, | 151 | .{ artifacts.compiler, "compiler" }, |
| ... | @@ -173,6 +185,7 @@ fn buildWithTarget( | ... | @@ -173,6 +185,7 @@ fn buildWithTarget( |
| 173 | target: Build.ResolvedTarget, | 185 | target: Build.ResolvedTarget, |
| 174 | optimize: std.builtin.OptimizeMode, | 186 | optimize: std.builtin.OptimizeMode, |
| 175 | tracing: TracingMode, | 187 | tracing: TracingMode, |
| | 188 | version: std.SemanticVersion, |
| 176 | no_llvm: bool, | 189 | no_llvm: bool, |
| 177 | ) Artifacts { | 190 | ) Artifacts { |
| 178 | const dep_opts = .{ .target = target, .optimize = optimize }; | 191 | const dep_opts = .{ .target = target, .optimize = optimize }; |
| ... | @@ -185,6 +198,7 @@ fn buildWithTarget( | ... | @@ -185,6 +198,7 @@ fn buildWithTarget( |
| 185 | | 198 | |
| 186 | // Options | 199 | // Options |
| 187 | const opts = b.addOptions(); | 200 | const opts = b.addOptions(); |
| | 201 | opts.addOption(std.SemanticVersion, "version", version); |
| 188 | opts.addOption([]const u8, "tracing", @tagName(tracing)); | 202 | opts.addOption([]const u8, "tracing", @tagName(tracing)); |
| 189 | const opts_mod = opts.createModule(); | 203 | const opts_mod = opts.createModule(); |
| 190 | | 204 | |