Commit 0e1afee732
Changed files (2)
lib
std
test
stage2
lib/std/zig/cross_target.zig
@@ -608,10 +608,15 @@ pub const CrossTarget = struct {
// If the OS and CPU arch match, the binary can be considered native.
if (os_match and cpu_arch == Target.current.cpu.arch) {
// However, we also need to verify that the dynamic linker path is valid.
- // TODO Until that is implemented, we prevent returning `.native` when the OS is non-native.
if (self.os_tag == null) {
return .native;
}
+ if (self.dynamic_linker.max_byte) |len| blk: {
+ std.fs.cwd().access(self.dynamic_linker.buffer[0..len + 1], .{}) catch {
+ break :blk;
+ };
+ return .native;
+ }
}
// If the OS matches, we can use QEMU to emulate a foreign architecture.
test/stage2/test.zig
@@ -14,6 +14,7 @@ const linux_x64 = std.zig.CrossTarget{
const macosx_x64 = std.zig.CrossTarget{
.cpu_arch = .x86_64,
.os_tag = .macos,
+ .dynamic_linker = std.zig.CrossTarget.DynamicLinker.init("/usr/lib/dyld"),
};
const linux_riscv64 = std.zig.CrossTarget{
@@ -145,7 +146,7 @@ pub fn addCases(ctx: *TestContext) !void {
}
{
- var case = ctx.exe("hello world", macosx_x64);
+ var case = ctx.exe("hello world with updates", macosx_x64);
case.addError("", &[_][]const u8{":1:1: error: no entry point found"});
// Incorrect return type