| ... | @@ -668,6 +668,7 @@ export fn stage2_target_parse( | ... | @@ -668,6 +668,7 @@ export fn stage2_target_parse( |
| 668 | error.ProcessFdQuotaExceeded => return .ProcessFdQuotaExceeded, | 668 | error.ProcessFdQuotaExceeded => return .ProcessFdQuotaExceeded, |
| 669 | error.SystemFdQuotaExceeded => return .SystemFdQuotaExceeded, | 669 | error.SystemFdQuotaExceeded => return .SystemFdQuotaExceeded, |
| 670 | error.DeviceBusy => return .DeviceBusy, | 670 | error.DeviceBusy => return .DeviceBusy, |
| | 671 | error.UnknownDynamicLinkerPath => return .UnknownDynamicLinkerPath, |
| 671 | }; | 672 | }; |
| 672 | return .None; | 673 | return .None; |
| 673 | } | 674 | } |
| ... | @@ -1137,6 +1138,7 @@ fn enumInt(comptime Enum: type, int: c_int) Enum { | ... | @@ -1137,6 +1138,7 @@ fn enumInt(comptime Enum: type, int: c_int) Enum { |
| 1137 | /// TODO self-host this function | 1138 | /// TODO self-host this function |
| 1138 | fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) !Target { | 1139 | fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) !Target { |
| 1139 | var adjusted_target = cross_target.toTarget(); | 1140 | var adjusted_target = cross_target.toTarget(); |
| | 1141 | var have_native_dl = false; |
| 1140 | if (cross_target.cpu_arch == null or cross_target.os_tag == null) { | 1142 | if (cross_target.cpu_arch == null or cross_target.os_tag == null) { |
| 1141 | const detected_info = try std.zig.system.NativeTargetInfo.detect(std.heap.c_allocator); | 1143 | const detected_info = try std.zig.system.NativeTargetInfo.detect(std.heap.c_allocator); |
| 1142 | if (cross_target.cpu_arch == null) { | 1144 | if (cross_target.cpu_arch == null) { |
| ... | @@ -1155,6 +1157,7 @@ fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) | ... | @@ -1155,6 +1157,7 @@ fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) |
| 1155 | adjusted_target.os = detected_info.target.os; | 1157 | adjusted_target.os = detected_info.target.os; |
| 1156 | | 1158 | |
| 1157 | if (detected_info.dynamic_linker) |dl| { | 1159 | if (detected_info.dynamic_linker) |dl| { |
| | 1160 | have_native_dl = true; |
| 1158 | dynamic_linker_ptr.* = dl.ptr; | 1161 | dynamic_linker_ptr.* = dl.ptr; |
| 1159 | } | 1162 | } |
| 1160 | if (cross_target.abi == null) { | 1163 | if (cross_target.abi == null) { |
| ... | @@ -1164,6 +1167,14 @@ fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) | ... | @@ -1164,6 +1167,14 @@ fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) |
| 1164 | adjusted_target.abi = Target.Abi.default(adjusted_target.cpu.arch, adjusted_target.os); | 1167 | adjusted_target.abi = Target.Abi.default(adjusted_target.cpu.arch, adjusted_target.os); |
| 1165 | } | 1168 | } |
| 1166 | } | 1169 | } |
| | 1170 | if (!have_native_dl) { |
| | 1171 | dynamic_linker_ptr.* = adjusted_target.getStandardDynamicLinkerPath( |
| | 1172 | std.heap.c_allocator, |
| | 1173 | ) catch |err| switch (err) { |
| | 1174 | error.TargetHasNoDynamicLinker => null, |
| | 1175 | else => |e| return e, |
| | 1176 | }; |
| | 1177 | } |
| 1167 | return adjusted_target; | 1178 | return adjusted_target; |
| 1168 | } | 1179 | } |
| 1169 | | 1180 | |