From b7c331eb610bae76dab7f65044012282344acbd5 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 12 Mar 2019 10:28:05 -0400 Subject: add musl headers --- libc/process_headers.zig | 272 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 269 insertions(+), 3 deletions(-) (limited to 'libc/process_headers.zig') diff --git a/libc/process_headers.zig b/libc/process_headers.zig index 8e8655ca12..e6b174c8f9 100644 --- a/libc/process_headers.zig +++ b/libc/process_headers.zig @@ -5,7 +5,7 @@ // every target. So the process to create libc headers that Zig ships is to use // this tool. // First, use the musl/glibc build systems to create installations of all the -// targets in the `libc_targets` variable. +// targets in the `glibc_targets`/`musl_targets` variables. // Next, run this tool to create a new directory which puts .h files into // subdirectories, with `generic` being files that apply to all architectures. // You'll then have to manually update Zig source repo with these new files. @@ -23,7 +23,7 @@ const LibCTarget = struct { zig_abi: ?Abi, }; -const libc_targets = []LibCTarget{ +const glibc_targets = []LibCTarget{ LibCTarget{ .name = "aarch64_be-linux-gnu", .zig_arch = Arch.aarch64_be, @@ -420,6 +420,258 @@ const libc_targets = []LibCTarget{ .zig_abi = null, }, }; +const musl_targets = []LibCTarget{ + LibCTarget{ + .name = "aarch64_be-linux-musl-native", + .zig_arch = Arch.aarch64_be, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "aarch64-linux-musleabi-native", + .zig_arch = Arch.aarch64, + .zig_abi = Abi.musleabi, + }, + LibCTarget{ + .name = "armeb-linux-musleabihf-native", + .zig_arch = Arch.armeb, + .zig_abi = Abi.musleabihf, + }, + LibCTarget{ + .name = "armeb-linux-musleabi-native", + .zig_arch = Arch.armeb, + .zig_abi = Abi.musleabi, + }, + LibCTarget{ + .name = "armel-linux-musleabihf-native", + .zig_arch = null, + .zig_abi = Abi.musleabihf, + }, + LibCTarget{ + .name = "armel-linux-musleabi-native", + .zig_arch = null, + .zig_abi = Abi.musleabi, + }, + LibCTarget{ + .name = "arm-linux-musleabihf-native", + .zig_arch = Arch.arm, + .zig_abi = Abi.musleabihf, + }, + LibCTarget{ + .name = "arm-linux-musleabi-native", + .zig_arch = Arch.arm, + .zig_abi = Abi.musleabi, + }, + LibCTarget{ + .name = "armv5l-linux-musleabihf-native", + .zig_arch = null, + .zig_abi = Abi.musleabihf, + }, + LibCTarget{ + .name = "armv7l-linux-musleabihf-native", + .zig_arch = null, + .zig_abi = Abi.musleabihf, + }, + LibCTarget{ + .name = "armv7m-linux-musleabi-native", + .zig_arch = null, + .zig_abi = Abi.musleabi, + }, + LibCTarget{ + .name = "armv7r-linux-musleabihf-native", + .zig_arch = null, + .zig_abi = Abi.musleabihf, + }, + LibCTarget{ + .name = "i486-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "i686-linux-musl-native", + .zig_arch = Arch.i386, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "i686-w64-mingw32-native", + .zig_arch = null, + .zig_abi = null, + }, + LibCTarget{ + .name = "m68k-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "microblazeel-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "microblaze-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "mips64el-linux-musln32-native", + .zig_arch = Arch.mips64el, + .zig_abi = null, + }, + LibCTarget{ + .name = "mips64el-linux-musln32sf-native", + .zig_arch = Arch.mips64el, + .zig_abi = null, + }, + LibCTarget{ + .name = "mips64el-linux-musl-native", + .zig_arch = Arch.mips64el, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "mips64-linux-musln32-native", + .zig_arch = Arch.mips64, + .zig_abi = null, + }, + LibCTarget{ + .name = "mips64-linux-musln32sf-native", + .zig_arch = Arch.mips64, + .zig_abi = null, + }, + LibCTarget{ + .name = "mips64-linux-musl-native", + .zig_arch = Arch.mips64, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "mipsel-linux-musln32-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "mipsel-linux-musln32sf-native", + .zig_arch = Arch.mipsel, + .zig_abi = null, + }, + LibCTarget{ + .name = "mipsel-linux-musl-native", + .zig_arch = Arch.mipsel, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "mipsel-linux-muslsf-native", + .zig_arch = Arch.mipsel, + .zig_abi = null, + }, + LibCTarget{ + .name = "mips-linux-musln32sf-native", + .zig_arch = Arch.mips, + .zig_abi = null, + }, + LibCTarget{ + .name = "mips-linux-musl-native", + .zig_arch = Arch.mips, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "mips-linux-muslsf-native", + .zig_arch = Arch.mips, + .zig_abi = null, + }, + LibCTarget{ + .name = "or1k-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "powerpc64le-linux-musl-native", + .zig_arch = Arch.powerpc64le, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "powerpc64-linux-musl-native", + .zig_arch = Arch.powerpc64, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "powerpcle-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "powerpcle-linux-muslsf-native", + .zig_arch = null, + .zig_abi = null, + }, + LibCTarget{ + .name = "powerpc-linux-musl-native", + .zig_arch = Arch.powerpc, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "powerpc-linux-muslsf-native", + .zig_arch = Arch.powerpc, + .zig_abi = null, + }, + LibCTarget{ + .name = "riscv32-linux-musl-native", + .zig_arch = Arch.riscv32, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "riscv64-linux-musl-native", + .zig_arch = Arch.riscv64, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "s390x-linux-musl-native", + .zig_arch = Arch.s390x, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "sh2eb-linux-muslfdpic-native", + .zig_arch = null, + .zig_abi = null, + }, + LibCTarget{ + .name = "sh2eb-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "sh2-linux-muslfdpic-native", + .zig_arch = null, + .zig_abi = null, + }, + LibCTarget{ + .name = "sh2-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "sh4eb-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "sh4-linux-musl-native", + .zig_arch = null, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "x86_64-linux-musl-native", + .zig_arch = Arch.x86_64, + .zig_abi = Abi.musl, + }, + LibCTarget{ + .name = "x86_64-linux-muslx32-native", + .zig_arch = Arch.x86_64, + .zig_abi = null, + }, + LibCTarget{ + .name = "x86_64-w64-mingw32-native", + .zig_arch = null, + .zig_abi = null, + }, +}; const DestTarget = struct { arch: @TagType(Arch), @@ -461,6 +713,7 @@ pub fn main() !void { const args = try std.os.argsAlloc(allocator); var search_paths = std.ArrayList([]const u8).init(allocator); var opt_out_dir: ?[]const u8 = null; + var opt_abi: ?[]const u8 = null; var arg_i: usize = 1; while (arg_i < args.len) : (arg_i += 1) { @@ -476,6 +729,9 @@ pub fn main() !void { } else if (std.mem.eql(u8, args[arg_i], "--out")) { assert(opt_out_dir == null); opt_out_dir = args[arg_i + 1]; + } else if (std.mem.eql(u8, args[arg_i], "--abi")) { + assert(opt_abi == null); + opt_abi = args[arg_i + 1]; } else { std.debug.warn("unrecognized argument: {}\n", args[arg_i]); usageAndExit(args[0]); @@ -485,6 +741,15 @@ pub fn main() !void { } const out_dir = opt_out_dir orelse usageAndExit(args[0]); + const abi_name = opt_abi orelse usageAndExit(args[0]); + const libc_targets = if (std.mem.eql(u8, abi_name, "musl")) + musl_targets + else if (std.mem.eql(u8, abi_name, "glibc")) + glibc_targets + else { + std.debug.warn("unrecognized C ABI: {}\n", abi_name); + usageAndExit(args[0]); + }; var path_table = PathTable.init(allocator); var hash_to_contents = HashToContents.init(allocator); @@ -619,9 +884,10 @@ pub fn main() !void { } fn usageAndExit(arg0: []const u8) noreturn { - std.debug.warn("Usage: {} [--search-path ] --out \n", arg0); + std.debug.warn("Usage: {} [--search-path ] --out --abi \n", arg0); std.debug.warn("--search-path can be used any number of times.\n"); std.debug.warn(" subdirectories of search paths look like, e.g. x86_64-linux-gnu\n"); std.debug.warn("--out is a dir that will be created, and populated with the results\n"); + std.debug.warn("--abi is either musl or glibc\n"); std.os.exit(1); } -- cgit v1.2.3