mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
support the concept of a target not having a dynamic linker
This commit is contained in:
parent
2f9c5c0644
commit
e26f063b22
@ -1227,6 +1227,7 @@ pub const Target = union(enum) {
|
||||
) error{
|
||||
OutOfMemory,
|
||||
UnknownDynamicLinkerPath,
|
||||
TargetHasNoDynamicLinker,
|
||||
}![:0]u8 {
|
||||
const a = allocator;
|
||||
if (self.isAndroid()) {
|
||||
@ -1300,6 +1301,10 @@ pub const Target = union(enum) {
|
||||
.riscv32 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv32-ilp32.so.1"),
|
||||
.riscv64 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv64-lp64.so.1"),
|
||||
|
||||
.wasm32,
|
||||
.wasm64,
|
||||
=> return error.TargetHasNoDynamicLinker,
|
||||
|
||||
.arc,
|
||||
.avr,
|
||||
.bpfel,
|
||||
@ -1324,12 +1329,22 @@ pub const Target = union(enum) {
|
||||
.kalimba,
|
||||
.shave,
|
||||
.lanai,
|
||||
.wasm32,
|
||||
.wasm64,
|
||||
.renderscript32,
|
||||
.renderscript64,
|
||||
=> return error.UnknownDynamicLinkerPath,
|
||||
},
|
||||
|
||||
.freestanding,
|
||||
.ios,
|
||||
.tvos,
|
||||
.watchos,
|
||||
.macosx,
|
||||
.uefi,
|
||||
.windows,
|
||||
.emscripten,
|
||||
.other,
|
||||
=> return error.TargetHasNoDynamicLinker,
|
||||
|
||||
else => return error.UnknownDynamicLinkerPath,
|
||||
}
|
||||
}
|
||||
|
||||
@ -110,6 +110,7 @@ const Error = extern enum {
|
||||
UnsupportedArchitecture,
|
||||
WindowsSdkNotFound,
|
||||
UnknownDynamicLinkerPath,
|
||||
TargetHasNoDynamicLinker,
|
||||
};
|
||||
|
||||
const FILE = std.c.FILE;
|
||||
@ -1101,6 +1102,7 @@ export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr:
|
||||
) catch |err| switch (err) {
|
||||
error.OutOfMemory => return .OutOfMemory,
|
||||
error.UnknownDynamicLinkerPath => return .UnknownDynamicLinkerPath,
|
||||
error.TargetHasNoDynamicLinker => return .TargetHasNoDynamicLinker,
|
||||
};
|
||||
out_ptr.* = result.ptr;
|
||||
out_len.* = result.len;
|
||||
|
||||
@ -8969,6 +8969,7 @@ static void detect_dynamic_linker(CodeGen *g) {
|
||||
char *dynamic_linker_ptr;
|
||||
size_t dynamic_linker_len;
|
||||
if ((err = stage2_detect_dynamic_linker(g->zig_target, &dynamic_linker_ptr, &dynamic_linker_len))) {
|
||||
if (err == ErrorTargetHasNoDynamicLinker) return;
|
||||
fprintf(stderr, "Unable to detect dynamic linker: %s\n", err_str(err));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -80,7 +80,8 @@ const char *err_str(Error err) {
|
||||
case ErrorLibCKernel32LibNotFound: return "kernel32 library not found";
|
||||
case ErrorUnsupportedArchitecture: return "unsupported architecture";
|
||||
case ErrorWindowsSdkNotFound: return "Windows SDK not found";
|
||||
case ErrorUnknownDynamicLinkerPath: return "Windows SDK not found";
|
||||
case ErrorUnknownDynamicLinkerPath: return "unknown dynamic linker path";
|
||||
case ErrorTargetHasNoDynamicLinker: return "target has no dynamic linker";
|
||||
}
|
||||
return "(invalid error)";
|
||||
}
|
||||
|
||||
@ -103,6 +103,7 @@ enum Error {
|
||||
ErrorUnsupportedArchitecture,
|
||||
ErrorWindowsSdkNotFound,
|
||||
ErrorUnknownDynamicLinkerPath,
|
||||
ErrorTargetHasNoDynamicLinker,
|
||||
};
|
||||
|
||||
// ABI warning
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user