mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
Enable stage2 end-to-end tests on macOS run natively
This commit enables stage2 end-to-end tests to run natively on macOS (where and when applicable). Since QEMU on macOS doesn't support the same type of architecture emulation as it does on linux (i.e., there is no `qemu-x86_64` for instance), this commit ensures that we specify a path to dynamic linker on macOS (`/usr/lib/dyld`) which is then checked for existence in `std.CrossTarget.getExternalExecutor()` function, and if exists, we can run the test natively. Signed-off-by: Jakub Konka <kubkon@jakubkonka.com>
This commit is contained in:
parent
f3667e8a80
commit
0e1afee732
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user