fix: support -Dtarget=[target] for release builds

Specifying a target will still produce a baseline cpu release build.
This commit is contained in:
CJ van den Berg 2025-10-02 10:29:47 +02:00
parent 31c03060cf
commit b7b0501715
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -112,9 +112,24 @@ fn build_release(
.{ .cpu_arch = .x86_64, .os_tag = .windows },
.{ .cpu_arch = .aarch64, .os_tag = .windows },
} else blk: {
const native_target = b.resolveTargetQuery(.{}).result;
const maybe_triple = b.option(
[]const u8,
"target",
"The CPU architecture, OS, and ABI to build for",
);
const triple = maybe_triple orelse {
const native_target = b.resolveTargetQuery(.{}).result;
break :blk &.{
.{ .cpu_arch = native_target.cpu.arch, .os_tag = native_target.os.tag },
};
};
const selected_target = std.Build.parseTargetQuery(.{
.arch_os_abi = triple,
}) catch |err| switch (err) {
error.ParseFailed => @panic("unknown target"),
};
break :blk &.{
.{ .cpu_arch = native_target.cpu.arch, .os_tag = native_target.os.tag },
.{ .cpu_arch = selected_target.cpu_arch, .os_tag = selected_target.os_tag, .abi = selected_target.abi },
};
};
const optimize = b.standardOptimizeOption(.{});