motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit 99f077baf96c0f19026ea3d7f9475aa41b720cb9 (tree)
parent 304cfb7122a9f32d11b1f699fc9768ce81b7b9ca
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue,  9 May 2017 21:20:09 -0400

zig build: allow calling b.standardReleaseOptions...

...multiple times. See #368

Diffstat:
Mstd/build.zig | 18++++++++++++------
Mtest/standalone/pkg_import/build.zig | 5+++++
2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/std/build.zig b/std/build.zig @@ -44,6 +44,7 @@ pub const Builder = struct { installed_files: ArrayList([]const u8), build_root: []const u8, cache_root: []const u8, + release_mode: ?builtin.Mode, const UserInputOptionsMap = HashMap([]const u8, UserInputOption, mem.hash_slice_u8, mem.eql_slice_u8); const AvailableOptionsMap = HashMap([]const u8, AvailableOption, mem.hash_slice_u8, mem.eql_slice_u8); @@ -112,6 +113,7 @@ pub const Builder = struct { .description = "Copy build artifacts to prefix path", }, .have_install_step = false, + .release_mode = null, }; self.processNixOSEnvVars(); self.default_step = self.step("default", "Build the project"); @@ -407,20 +409,24 @@ pub const Builder = struct { } pub fn standardReleaseOptions(self: &Builder) -> builtin.Mode { + if (self.release_mode) |mode| return mode; + const release_safe = self.option(bool, "release-safe", "optimizations on and safety on") ?? false; const release_fast = self.option(bool, "release-fast", "optimizations on and safety off") ?? false; - if (release_safe and !release_fast) { - return builtin.Mode.ReleaseSafe; + const mode = if (release_safe and !release_fast) { + builtin.Mode.ReleaseSafe } else if (release_fast and !release_safe) { - return builtin.Mode.ReleaseFast; + builtin.Mode.ReleaseFast } else if (!release_fast and !release_safe) { - return builtin.Mode.Debug; + builtin.Mode.Debug } else { %%io.stderr.printf("Both -Drelease-safe and -Drelease-fast specified"); self.markInvalidUserInput(); - return builtin.Mode.Debug; - } + builtin.Mode.Debug + }; + self.release_mode = mode; + return mode; } pub fn addUserInputOption(self: &Builder, name: []const u8, value: []const u8) -> bool { diff --git a/test/standalone/pkg_import/build.zig b/test/standalone/pkg_import/build.zig @@ -4,6 +4,11 @@ pub fn build(b: &Builder) { const exe = b.addExecutable("test", "test.zig"); exe.addPackagePath("my_pkg", "pkg.zig"); + // This is duplicated to test that you are allowed to call + // b.standardReleaseOptions() twice. + exe.setBuildMode(b.standardReleaseOptions()); + exe.setBuildMode(b.standardReleaseOptions()); + const run = b.addCommand(".", b.env_map, exe.getOutputPath(), [][]const u8{}); run.step.dependOn(&exe.step);