aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-05-29 23:27:26 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-05-30 00:15:37 +0200
commit7c7627b18a85a1ab7e09b6dadfc9bba0903880db (patch)
treeb1ca9e2937cedf8a4f64738f42d5b3897b37d461 /lib/std
parentdc760492a44a3e494943f9191efbd6ded291af87 (diff)
downloadzig-7c7627b18a85a1ab7e09b6dadfc9bba0903880db.tar.gz
zig-7c7627b18a85a1ab7e09b6dadfc9bba0903880db.zip
compiler: Use new merged header paths for glibc and NetBSD libc.
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/zig/LibCDirs.zig6
-rw-r--r--lib/std/zig/target.zig26
2 files changed, 32 insertions, 0 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;