authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-17 15:46:53-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-17 15:46:53-05:00
loge26f063b22893f50dd7eb02a01585f4d52849ede
tree73ec54c84face97b521288f9499801643c326463
parent2f9c5c0644dd516ec0d96f33333a35e6b4deea91

support the concept of a target not having a dynamic linker


5 files changed, 23 insertions(+), 3 deletions(-)

lib/std/target.zig+17-2
...@@ -1227,6 +1227,7 @@ pub const Target = union(enum) {...@@ -1227,6 +1227,7 @@ pub const Target = union(enum) {
1227 ) error{1227 ) error{
1228 OutOfMemory,1228 OutOfMemory,
1229 UnknownDynamicLinkerPath,1229 UnknownDynamicLinkerPath,
1230 TargetHasNoDynamicLinker,
1230 }![:0]u8 {1231 }![:0]u8 {
1231 const a = allocator;1232 const a = allocator;
1232 if (self.isAndroid()) {1233 if (self.isAndroid()) {
...@@ -1300,6 +1301,10 @@ pub const Target = union(enum) {...@@ -1300,6 +1301,10 @@ pub const Target = union(enum) {
1300 .riscv32 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv32-ilp32.so.1"),1301 .riscv32 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv32-ilp32.so.1"),
1301 .riscv64 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv64-lp64.so.1"),1302 .riscv64 => return mem.dupeZ(a, u8, "/lib/ld-linux-riscv64-lp64.so.1"),
13021303
1304 .wasm32,
1305 .wasm64,
1306 => return error.TargetHasNoDynamicLinker,
1307
1303 .arc,1308 .arc,
1304 .avr,1309 .avr,
1305 .bpfel,1310 .bpfel,
...@@ -1324,12 +1329,22 @@ pub const Target = union(enum) {...@@ -1324,12 +1329,22 @@ pub const Target = union(enum) {
1324 .kalimba,1329 .kalimba,
1325 .shave,1330 .shave,
1326 .lanai,1331 .lanai,
1327 .wasm32,
1328 .wasm64,
1329 .renderscript32,1332 .renderscript32,
1330 .renderscript64,1333 .renderscript64,
1331 => return error.UnknownDynamicLinkerPath,1334 => return error.UnknownDynamicLinkerPath,
1332 },1335 },
1336
1337 .freestanding,
1338 .ios,
1339 .tvos,
1340 .watchos,
1341 .macosx,
1342 .uefi,
1343 .windows,
1344 .emscripten,
1345 .other,
1346 => return error.TargetHasNoDynamicLinker,
1347
1333 else => return error.UnknownDynamicLinkerPath,1348 else => return error.UnknownDynamicLinkerPath,
1334 }1349 }
1335 }1350 }
src-self-hosted/stage2.zig+2
...@@ -110,6 +110,7 @@ const Error = extern enum {...@@ -110,6 +110,7 @@ const Error = extern enum {
110 UnsupportedArchitecture,110 UnsupportedArchitecture,
111 WindowsSdkNotFound,111 WindowsSdkNotFound,
112 UnknownDynamicLinkerPath,112 UnknownDynamicLinkerPath,
113 TargetHasNoDynamicLinker,
113};114};
114115
115const FILE = std.c.FILE;116const FILE = std.c.FILE;
...@@ -1101,6 +1102,7 @@ export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr:...@@ -1101,6 +1102,7 @@ export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr:
1101 ) catch |err| switch (err) {1102 ) catch |err| switch (err) {
1102 error.OutOfMemory => return .OutOfMemory,1103 error.OutOfMemory => return .OutOfMemory,
1103 error.UnknownDynamicLinkerPath => return .UnknownDynamicLinkerPath,1104 error.UnknownDynamicLinkerPath => return .UnknownDynamicLinkerPath,
1105 error.TargetHasNoDynamicLinker => return .TargetHasNoDynamicLinker,
1104 };1106 };
1105 out_ptr.* = result.ptr;1107 out_ptr.* = result.ptr;
1106 out_len.* = result.len;1108 out_len.* = result.len;
src/codegen.cpp+1
...@@ -8969,6 +8969,7 @@ static void detect_dynamic_linker(CodeGen *g) {...@@ -8969,6 +8969,7 @@ static void detect_dynamic_linker(CodeGen *g) {
8969 char *dynamic_linker_ptr;8969 char *dynamic_linker_ptr;
8970 size_t dynamic_linker_len;8970 size_t dynamic_linker_len;
8971 if ((err = stage2_detect_dynamic_linker(g->zig_target, &dynamic_linker_ptr, &dynamic_linker_len))) {8971 if ((err = stage2_detect_dynamic_linker(g->zig_target, &dynamic_linker_ptr, &dynamic_linker_len))) {
8972 if (err == ErrorTargetHasNoDynamicLinker) return;
8972 fprintf(stderr, "Unable to detect dynamic linker: %s\n", err_str(err));8973 fprintf(stderr, "Unable to detect dynamic linker: %s\n", err_str(err));
8973 exit(1);8974 exit(1);
8974 }8975 }
src/error.cpp+2-1
...@@ -80,7 +80,8 @@ const char *err_str(Error err) {...@@ -80,7 +80,8 @@ const char *err_str(Error err) {
80 case ErrorLibCKernel32LibNotFound: return "kernel32 library not found";80 case ErrorLibCKernel32LibNotFound: return "kernel32 library not found";
81 case ErrorUnsupportedArchitecture: return "unsupported architecture";81 case ErrorUnsupportedArchitecture: return "unsupported architecture";
82 case ErrorWindowsSdkNotFound: return "Windows SDK not found";82 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";
84 }85 }
85 return "(invalid error)";86 return "(invalid error)";
86}87}
src/stage2.h+1
...@@ -103,6 +103,7 @@ enum Error {...@@ -103,6 +103,7 @@ enum Error {
103 ErrorUnsupportedArchitecture,103 ErrorUnsupportedArchitecture,
104 ErrorWindowsSdkNotFound,104 ErrorWindowsSdkNotFound,
105 ErrorUnknownDynamicLinkerPath,105 ErrorUnknownDynamicLinkerPath,
106 ErrorTargetHasNoDynamicLinker,
106};107};
107108
108// ABI warning109// ABI warning