zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit e3dd4dc91d65702c085dac9cc4d85aebfa308dfa (tree)
parent e6881d4373ce355f3f4565c22c125870ed8fcfc8
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Tue, 11 May 2021 20:28:14 -0400

Merge pull request #8737 from ifreund/link-system-libc

stage2: use system libc when targeting the native OS/ABI
Diffstat:
Mci/azure/macos_arm64_script | 8++++----
Msrc/Compilation.zig | 16++++++++--------
Msrc/glibc.zig | 9+++++----
Msrc/link/Elf.zig | 12+++++++++---
4 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/ci/azure/macos_arm64_script b/ci/azure/macos_arm64_script @@ -55,11 +55,11 @@ cmake .. \ -DZIG_TARGET_MCPU="$HOST_MCPU" \ -DZIG_STATIC=ON -make $JOBS install - unset CC unset CXX +make $JOBS install + # Build zig compiler cross-compiled for arm64 cd $ZIGDIR @@ -79,11 +79,11 @@ cmake .. \ -DZIG_EXECUTABLE="$ZIG" \ -DZIG_STATIC=ON -make $JOBS install - unset CC unset CXX +make $JOBS install + if [ "${BUILD_REASON}" != "PullRequest" ]; then mv ../LICENSE release/ diff --git a/src/Compilation.zig b/src/Compilation.zig @@ -848,7 +848,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { arena, options.zig_lib_directory.path.?, options.target, - options.is_native_os, + options.is_native_abi, link_libc, options.libc_installation, ); @@ -2885,7 +2885,7 @@ fn detectLibCIncludeDirs( arena: *Allocator, zig_lib_dir: []const u8, target: Target, - is_native_os: bool, + is_native_abi: bool, link_libc: bool, libc_installation: ?*const LibCInstallation, ) !LibCDirs { @@ -2900,6 +2900,12 @@ fn detectLibCIncludeDirs( return detectLibCFromLibCInstallation(arena, target, lci); } + if (is_native_abi) { + const libc = try arena.create(LibCInstallation); + libc.* = try LibCInstallation.findNative(.{ .allocator = arena }); + return detectLibCFromLibCInstallation(arena, target, libc); + } + if (target_util.canBuildLibC(target)) { const generic_name = target_util.libCGenericName(target); // Some architectures are handled by the same set of headers. @@ -2950,12 +2956,6 @@ fn detectLibCIncludeDirs( }; } - if (is_native_os) { - const libc = try arena.create(LibCInstallation); - libc.* = try LibCInstallation.findNative(.{ .allocator = arena }); - return detectLibCFromLibCInstallation(arena, target, libc); - } - return LibCDirs{ .libc_include_dir_list = &[0][]u8{}, .libc_installation = null, diff --git a/src/glibc.zig b/src/glibc.zig @@ -764,16 +764,17 @@ pub fn buildSharedObjects(comp: *Compilation) !void { .lt => continue, .gt => { // TODO Expose via compile error mechanism instead of log. - std.log.warn("invalid target glibc version: {}", .{target_version}); + std.log.err("invalid target glibc version: {}", .{target_version}); return error.InvalidTargetGLibCVersion; }, } - } else blk: { + } else { const latest_index = metadata.all_versions.len - 1; - std.log.warn("zig cannot build new glibc version {}; providing instead {}", .{ + // TODO Expose via compile error mechanism instead of log. + std.log.err("zig does not yet provide glibc version {}, the max provided version is {}", .{ target_version, metadata.all_versions[latest_index], }); - break :blk latest_index; + return error.InvalidTargetGLibCVersion; }; { var map_contents = std.ArrayList(u8).init(arena); diff --git a/src/link/Elf.zig b/src/link/Elf.zig @@ -1650,9 +1650,15 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void { if (self.base.options.libc_installation != null) { const needs_grouping = self.base.options.link_mode == .Static; if (needs_grouping) try argv.append("--start-group"); - try argv.append("-lm"); - try argv.append("-lpthread"); - try argv.append("-lc"); + // This matches the order of glibc.libs + try argv.appendSlice(&[_][]const u8{ + "-lm", + "-lpthread", + "-lc", + "-ldl", + "-lrt", + "-lutil", + }); if (needs_grouping) try argv.append("--end-group"); } else if (target.isGnuLibC()) { try argv.append(comp.libunwind_static_lib.?.full_object_path);