Skip to content

Commit

Permalink
add default-dir build option
Browse files Browse the repository at this point in the history
  • Loading branch information
dweiller committed Jul 19, 2024
1 parent 9f737ff commit 9f04168
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
19 changes: 16 additions & 3 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@ pub fn build(b: *std.Build) !void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});

const default_dir = b.option(
[]const u8,
"default-dir",
"Default compiler installation directory (default: zig)",
) orelse "zig";

const build_options = b.addOptions();
build_options.addOption([]const u8, "default_dir", default_dir);

const zigup_exe_native = blk: {
const exe = addZigupExe(b, target, optimize);
const exe = addZigupExe(b, target, optimize, build_options);
b.installArtifact(exe);
const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
Expand Down Expand Up @@ -74,13 +83,14 @@ pub fn build(b: *std.Build) !void {
ci_step.dependOn(test_step);
ci_step.dependOn(unzip_step);
ci_step.dependOn(zip_step);
try ci(b, ci_step, test_step, host_zip_exe);
try ci(b, ci_step, test_step, host_zip_exe, build_options);
}

fn addZigupExe(
b: *std.Build,
target: std.Build.ResolvedTarget,
optimize: std.builtin.Mode,
build_options: *std.Build.Step.Options,
) *std.Build.Step.Compile {
const win32exelink_mod: ?*std.Build.Module = blk: {
if (target.result.os.tag == .windows) {
Expand All @@ -104,6 +114,8 @@ fn addZigupExe(
.optimize = optimize,
});

exe.root_module.addOptions("build-options", build_options);

if (target.result.os.tag == .windows) {
exe.root_module.addImport("win32exelink", win32exelink_mod.?);
}
Expand All @@ -115,6 +127,7 @@ fn ci(
ci_step: *std.Build.Step,
test_step: *std.Build.Step,
host_zip_exe: *std.Build.Step.Compile,
build_options: *std.Build.Step.Options,
) !void {
const ci_targets = [_][]const u8{
"x86_64-linux",
Expand All @@ -140,7 +153,7 @@ fn ci(
const optimize: std.builtin.OptimizeMode =
// Compile in ReleaseSafe on Windows for faster extraction
if (target.result.os.tag == .windows) .ReleaseSafe else .Debug;
const zigup_exe = addZigupExe(b, target, optimize);
const zigup_exe = addZigupExe(b, target, optimize, build_options);
const zigup_exe_install = b.addInstallArtifact(zigup_exe, .{
.dest_dir = .{ .override = .{ .custom = ci_target_str } },
});
Expand Down
6 changes: 4 additions & 2 deletions zigup.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ const std = @import("std");
const builtin = @import("builtin");
const mem = std.mem;

const build_options = @import("build-options");

const ArrayList = std.ArrayList;
const Allocator = mem.Allocator;

Expand Down Expand Up @@ -131,14 +133,14 @@ fn allocInstallDirString(allocator: Allocator) ![]const u8 {
if (builtin.os.tag == .windows) {
const self_exe_dir = try std.fs.selfExeDirPathAlloc(allocator);
defer allocator.free(self_exe_dir);
return std.fs.path.join(allocator, &.{ self_exe_dir, "zig" });
return std.fs.path.join(allocator, &.{ self_exe_dir, build_options.default_dir });
}
const home = try getHomeDir();
if (!std.fs.path.isAbsolute(home)) {
std.log.err("$HOME environment variable '{s}' is not an absolute path", .{home});
return error.BadHomeEnvironmentVariable;
}
return std.fs.path.join(allocator, &[_][]const u8{ home, "zig" });
return std.fs.path.join(allocator, &[_][]const u8{ home, build_options.default_dir });
}
const GetInstallDirOptions = struct {
create: bool,
Expand Down

0 comments on commit 9f04168

Please sign in to comment.