Commit 7c7627b18a

Alex Rønne Petersen <alex@alexrp.com>
2025-05-29 23:27:26
compiler: Use new merged header paths for glibc and NetBSD libc.
1 parent dc76049
Changed files (4)
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(
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;
 
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");
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"),