Commit e26f063b22
Changed files (5)
lib/std/target.zig
@@ -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,
}
}
src/codegen.cpp
@@ -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);
}
src/error.cpp
@@ -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)";
}
src/stage2.h
@@ -103,6 +103,7 @@ enum Error {
ErrorUnsupportedArchitecture,
ErrorWindowsSdkNotFound,
ErrorUnknownDynamicLinkerPath,
+ ErrorTargetHasNoDynamicLinker,
};
// ABI warning
src-self-hosted/stage2.zig
@@ -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;