From 7c7627b18a85a1ab7e09b6dadfc9bba0903880db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Thu, 29 May 2025 23:27:26 +0200 Subject: [PATCH] compiler: Use new merged header paths for glibc and NetBSD libc. --- lib/std/zig/LibCDirs.zig | 6 ++++++ lib/std/zig/target.zig | 26 ++++++++++++++++++++++++++ src/libs/glibc.zig | 5 ++++- src/libs/netbsd.zig | 2 +- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/std/zig/LibCDirs.zig b/lib/std/zig/LibCDirs.zig index 7b371acbcb..90d4fa4d5f 100644 --- a/lib/std/zig/LibCDirs.zig +++ b/lib/std/zig/LibCDirs.zig @@ -170,6 +170,8 @@ pub fn detectFromBuilding( // Some architecture families are handled by the same set of headers. const arch_name = if (target.isMuslLibC() or target.isWasiLibC()) std.zig.target.muslArchNameHeaders(target.cpu.arch) + else if (target.isGnuLibC()) + std.zig.target.glibcArchNameHeaders(target.cpu.arch) else if (target.isFreeBSDLibC()) std.zig.target.freebsdArchNameHeaders(target.cpu.arch) else if (target.isNetBSDLibC()) @@ -179,6 +181,10 @@ pub fn detectFromBuilding( const os_name = @tagName(target.os.tag); const abi_name = if (target.isMuslLibC()) std.zig.target.muslAbiNameHeaders(target.abi) + else if (target.isGnuLibC()) + std.zig.target.glibcAbiNameHeaders(target.abi) + else if (target.isNetBSDLibC()) + std.zig.target.netbsdAbiNameHeaders(target.abi) else @tagName(target.abi); const arch_include_dir = try std.fmt.allocPrint( diff --git a/lib/std/zig/target.zig b/lib/std/zig/target.zig index 35dac87ff3..05440f4441 100644 --- a/lib/std/zig/target.zig +++ b/lib/std/zig/target.zig @@ -233,6 +233,25 @@ pub fn muslAbiNameHeaders(abi: std.Target.Abi) [:0]const u8 { }; } +pub fn glibcArchNameHeaders(arch: std.Target.Cpu.Arch) [:0]const u8 { + return switch (arch) { + .aarch64, .aarch64_be => "aarch64", + .arm, .armeb => "arm", + .loongarch64 => "loongarch", + .mips, .mipsel, .mips64, .mips64el => "mips", + .powerpc, .powerpc64, .powerpc64le => "powerpc", + .riscv32, .riscv64 => "riscv", + .sparc, .sparc64 => "sparc", + .x86, .x86_64 => "x86", + else => @tagName(arch), + }; +} + +pub fn glibcAbiNameHeaders(abi: std.Target.Abi) [:0]const u8 { + _ = abi; + return "gnu"; +} + pub fn freebsdArchNameHeaders(arch: std.Target.Cpu.Arch) [:0]const u8 { return switch (arch) { .powerpc64le => "powerpc64", @@ -250,6 +269,13 @@ pub fn netbsdArchNameHeaders(arch: std.Target.Cpu.Arch) [:0]const u8 { }; } +pub fn netbsdAbiNameHeaders(abi: std.Target.Abi) [:0]const u8 { + return switch (abi) { + .eabi, .eabihf => "eabi", + else => "none", + }; +} + pub fn isLibCLibName(target: std.Target, name: []const u8) bool { const ignore_case = target.os.tag.isDarwin() or target.os.tag == .windows; diff --git a/src/libs/glibc.zig b/src/libs/glibc.zig index 0a3185f380..cc781c5472 100644 --- a/src/libs/glibc.zig +++ b/src/libs/glibc.zig @@ -463,7 +463,10 @@ fn add_include_dirs(comp: *Compilation, arena: Allocator, args: *std.ArrayList([ try args.append("-I"); try args.append(try std.fmt.allocPrint(arena, "{s}" ++ s ++ "libc" ++ s ++ "include" ++ s ++ "{s}-{s}-{s}", .{ - comp.dirs.zig_lib.path orelse ".", @tagName(target.cpu.arch), @tagName(target.os.tag), @tagName(target.abi), + comp.dirs.zig_lib.path orelse ".", + std.zig.target.glibcArchNameHeaders(target.cpu.arch), + @tagName(target.os.tag), + std.zig.target.glibcAbiNameHeaders(target.abi), })); try args.append("-I"); diff --git a/src/libs/netbsd.zig b/src/libs/netbsd.zig index 1aba9da399..718861bf5c 100644 --- a/src/libs/netbsd.zig +++ b/src/libs/netbsd.zig @@ -100,7 +100,7 @@ pub fn buildCrtFile(comp: *Compilation, crt_file: CrtFile, prog_node: std.Progre try includePath(comp, arena, try std.fmt.allocPrint(arena, "{s}-{s}-{s}", .{ std.zig.target.netbsdArchNameHeaders(target.cpu.arch), @tagName(target.os.tag), - @tagName(target.abi), + std.zig.target.netbsdAbiNameHeaders(target.abi), })), "-I", try includePath(comp, arena, "generic-netbsd"),