Skip to content

Commit e26f063

Browse files
committed
support the concept of a target not having a dynamic linker
1 parent 2f9c5c0 commit e26f063

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
lines changed

lib/std/target.zig

+17-2
Original file line numberDiff line numberDiff line change
@@ -1227,6 +1227,7 @@ pub const Target = union(enum) {
12271227
) error{
12281228
OutOfMemory,
12291229
UnknownDynamicLinkerPath,
1230+
TargetHasNoDynamicLinker,
12301231
}![:0]u8 {
12311232
const a = allocator;
12321233
if (self.isAndroid()) {
@@ -1300,6 +1301,10 @@ pub const Target = union(enum) {
13001301
.riscv32 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv32-ilp32.so.1"),
13011302
.riscv64 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv64-lp64.so.1"),
13021303

1304+
.wasm32,
1305+
.wasm64,
1306+
=> return error.TargetHasNoDynamicLinker,
1307+
13031308
.arc,
13041309
.avr,
13051310
.bpfel,
@@ -1324,12 +1329,22 @@ pub const Target = union(enum) {
13241329
.kalimba,
13251330
.shave,
13261331
.lanai,
1327-
.wasm32,
1328-
.wasm64,
13291332
.renderscript32,
13301333
.renderscript64,
13311334
=> return error.UnknownDynamicLinkerPath,
13321335
},
1336+
1337+
.freestanding,
1338+
.ios,
1339+
.tvos,
1340+
.watchos,
1341+
.macosx,
1342+
.uefi,
1343+
.windows,
1344+
.emscripten,
1345+
.other,
1346+
=> return error.TargetHasNoDynamicLinker,
1347+
13331348
else => return error.UnknownDynamicLinkerPath,
13341349
}
13351350
}

src-self-hosted/stage2.zig

+2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ const Error = extern enum {
110110
UnsupportedArchitecture,
111111
WindowsSdkNotFound,
112112
UnknownDynamicLinkerPath,
113+
TargetHasNoDynamicLinker,
113114
};
114115

115116
const FILE = std.c.FILE;
@@ -1101,6 +1102,7 @@ export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr:
11011102
) catch |err| switch (err) {
11021103
error.OutOfMemory => return .OutOfMemory,
11031104
error.UnknownDynamicLinkerPath => return .UnknownDynamicLinkerPath,
1105+
error.TargetHasNoDynamicLinker => return .TargetHasNoDynamicLinker,
11041106
};
11051107
out_ptr.* = result.ptr;
11061108
out_len.* = result.len;

src/codegen.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -8969,6 +8969,7 @@ static void detect_dynamic_linker(CodeGen *g) {
89698969
char *dynamic_linker_ptr;
89708970
size_t dynamic_linker_len;
89718971
if ((err = stage2_detect_dynamic_linker(g->zig_target, &dynamic_linker_ptr, &dynamic_linker_len))) {
8972+
if (err == ErrorTargetHasNoDynamicLinker) return;
89728973
fprintf(stderr, "Unable to detect dynamic linker: %s\n", err_str(err));
89738974
exit(1);
89748975
}

src/error.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ const char *err_str(Error err) {
8080
case ErrorLibCKernel32LibNotFound: return "kernel32 library not found";
8181
case ErrorUnsupportedArchitecture: return "unsupported architecture";
8282
case ErrorWindowsSdkNotFound: return "Windows SDK not found";
83-
case ErrorUnknownDynamicLinkerPath: return "Windows SDK not found";
83+
case ErrorUnknownDynamicLinkerPath: return "unknown dynamic linker path";
84+
case ErrorTargetHasNoDynamicLinker: return "target has no dynamic linker";
8485
}
8586
return "(invalid error)";
8687
}

src/stage2.h

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ enum Error {
103103
ErrorUnsupportedArchitecture,
104104
ErrorWindowsSdkNotFound,
105105
ErrorUnknownDynamicLinkerPath,
106+
ErrorTargetHasNoDynamicLinker,
106107
};
107108

108109
// ABI warning

0 commit comments

Comments
 (0)