| ... | ... | @@ -18,62 +18,61 @@ const assert = std.debug.assert; |
| 18 | 18 | const Blake3 = std.crypto.hash.Blake3; |
| 19 | 19 | |
| 20 | 20 | const LibCTarget = struct { |
| 21 | | name: []const u8, |
| 22 | 21 | arch: Arch, |
| 23 | 22 | abi: Abi, |
| 24 | 23 | }; |
| 25 | 24 | |
| 26 | 25 | const glibc_targets = [_]LibCTarget{ |
| 27 | | .{ .name = "arc-linux-gnu", .arch = .arc, .abi = .gnu }, |
| 28 | | .{ .name = "arm-linux-gnueabi", .arch = .arm, .abi = .gnueabi }, |
| 29 | | .{ .name = "arm-linux-gnueabihf", .arch = .arm, .abi = .gnueabihf }, |
| 30 | | .{ .name = "armeb-linux-gnueabi", .arch = .armeb, .abi = .gnueabi }, |
| 31 | | .{ .name = "armeb-linux-gnueabihf", .arch = .armeb, .abi = .gnueabihf }, |
| 32 | | .{ .name = "aarch64-linux-gnu", .arch = .aarch64, .abi = .gnu }, |
| 33 | | .{ .name = "aarch64_be-linux-gnu", .arch = .aarch64_be, .abi = .gnu }, |
| 34 | | .{ .name = "csky-linux-gnuabiv2-soft", .arch = .csky, .abi = .gnueabi }, |
| 35 | | .{ .name = "csky-linux-gnuabiv2", .arch = .csky, .abi = .gnueabihf }, |
| 36 | | .{ .name = "loongarch64-linux-gnu-lp64d", .arch = .loongarch64, .abi = .gnu }, |
| 37 | | .{ .name = "loongarch64-linux-gnu-lp64s", .arch = .loongarch64, .abi = .gnusf }, |
| 38 | | .{ .name = "m68k-linux-gnu", .arch = .m68k, .abi = .gnu }, |
| 39 | | .{ .name = "mips-linux-gnu", .arch = .mips, .abi = .gnueabihf }, |
| 40 | | .{ .name = "mips-linux-gnu-soft", .arch = .mips, .abi = .gnueabi }, |
| 41 | | .{ .name = "mipsel-linux-gnu-soft", .arch = .mipsel, .abi = .gnueabi }, |
| 42 | | .{ .name = "mipsel-linux-gnu", .arch = .mipsel, .abi = .gnueabihf }, |
| 43 | | .{ .name = "mips64-linux-gnu-n64", .arch = .mips64, .abi = .gnuabi64 }, |
| 44 | | .{ .name = "mips64-linux-gnu-n32", .arch = .mips64, .abi = .gnuabin32 }, |
| 45 | | .{ .name = "mips64el-linux-gnu-n64", .arch = .mips64el, .abi = .gnuabi64 }, |
| 46 | | .{ .name = "mips64el-linux-gnu-n32", .arch = .mips64el, .abi = .gnuabin32 }, |
| 47 | | .{ .name = "powerpc-linux-gnu-soft", .arch = .powerpc, .abi = .gnueabi }, |
| 48 | | .{ .name = "powerpc-linux-gnu", .arch = .powerpc, .abi = .gnueabihf }, |
| 49 | | .{ .name = "powerpc64-linux-gnu", .arch = .powerpc64, .abi = .gnu }, |
| 50 | | .{ .name = "powerpc64le-linux-gnu", .arch = .powerpc64le, .abi = .gnu }, |
| 51 | | .{ .name = "riscv32-linux-gnu-rv32imafdc-ilp32d", .arch = .riscv32, .abi = .gnu }, |
| 52 | | .{ .name = "riscv64-linux-gnu-rv64imafdc-lp64d", .arch = .riscv64, .abi = .gnu }, |
| 53 | | .{ .name = "s390x-linux-gnu", .arch = .s390x, .abi = .gnu }, |
| 54 | | .{ .name = "sparcv9-linux-gnu", .arch = .sparc, .abi = .gnu }, |
| 55 | | .{ .name = "sparc64-linux-gnu", .arch = .sparc64, .abi = .gnu }, |
| 56 | | .{ .name = "i686-linux-gnu", .arch = .x86, .abi = .gnu }, |
| 57 | | .{ .name = "x86_64-linux-gnu", .arch = .x86_64, .abi = .gnu }, |
| 58 | | .{ .name = "x86_64-linux-gnu-x32", .arch = .x86_64, .abi = .gnux32 }, |
| 26 | .{ .arch = .arc, .abi = .gnu }, |
| 27 | .{ .arch = .arm, .abi = .gnueabi }, |
| 28 | .{ .arch = .arm, .abi = .gnueabihf }, |
| 29 | .{ .arch = .armeb, .abi = .gnueabi }, |
| 30 | .{ .arch = .armeb, .abi = .gnueabihf }, |
| 31 | .{ .arch = .aarch64, .abi = .gnu }, |
| 32 | .{ .arch = .aarch64_be, .abi = .gnu }, |
| 33 | .{ .arch = .csky, .abi = .gnueabi }, |
| 34 | .{ .arch = .csky, .abi = .gnueabihf }, |
| 35 | .{ .arch = .loongarch64, .abi = .gnu }, |
| 36 | .{ .arch = .loongarch64, .abi = .gnusf }, |
| 37 | .{ .arch = .m68k, .abi = .gnu }, |
| 38 | .{ .arch = .mips, .abi = .gnueabi }, |
| 39 | .{ .arch = .mips, .abi = .gnueabihf }, |
| 40 | .{ .arch = .mipsel, .abi = .gnueabi }, |
| 41 | .{ .arch = .mipsel, .abi = .gnueabihf }, |
| 42 | .{ .arch = .mips64, .abi = .gnuabi64 }, |
| 43 | .{ .arch = .mips64, .abi = .gnuabin32 }, |
| 44 | .{ .arch = .mips64el, .abi = .gnuabi64 }, |
| 45 | .{ .arch = .mips64el, .abi = .gnuabin32 }, |
| 46 | .{ .arch = .powerpc, .abi = .gnueabi }, |
| 47 | .{ .arch = .powerpc, .abi = .gnueabihf }, |
| 48 | .{ .arch = .powerpc64, .abi = .gnu }, |
| 49 | .{ .arch = .powerpc64le, .abi = .gnu }, |
| 50 | .{ .arch = .riscv32, .abi = .gnu }, |
| 51 | .{ .arch = .riscv64, .abi = .gnu }, |
| 52 | .{ .arch = .s390x, .abi = .gnu }, |
| 53 | .{ .arch = .sparc, .abi = .gnu }, |
| 54 | .{ .arch = .sparc64, .abi = .gnu }, |
| 55 | .{ .arch = .x86, .abi = .gnu }, |
| 56 | .{ .arch = .x86_64, .abi = .gnu }, |
| 57 | .{ .arch = .x86_64, .abi = .gnux32 }, |
| 59 | 58 | }; |
| 60 | 59 | |
| 61 | 60 | const musl_targets = [_]LibCTarget{ |
| 62 | | .{ .name = "arm", .arch = .arm, .abi = .musl }, |
| 63 | | .{ .name = "aarch64", .arch = .aarch64, .abi = .musl }, |
| 64 | | .{ .name = "loongarch64", .arch = .loongarch64, .abi = .musl }, |
| 65 | | .{ .name = "m68k", .arch = .m68k, .abi = .musl }, |
| 66 | | .{ .name = "mips", .arch = .mips, .abi = .musl }, |
| 67 | | .{ .name = "mips64", .arch = .mips64, .abi = .musl }, |
| 68 | | .{ .name = "mipsn32", .arch = .mips64, .abi = .muslabin32 }, |
| 69 | | .{ .name = "powerpc", .arch = .powerpc, .abi = .musl }, |
| 70 | | .{ .name = "powerpc64", .arch = .powerpc64, .abi = .musl }, |
| 71 | | .{ .name = "riscv32", .arch = .riscv32, .abi = .musl }, |
| 72 | | .{ .name = "riscv64", .arch = .riscv64, .abi = .musl }, |
| 73 | | .{ .name = "s390x", .arch = .s390x, .abi = .musl }, |
| 74 | | .{ .name = "i386", .arch = .x86, .abi = .musl }, |
| 75 | | .{ .name = "x86_64", .arch = .x86_64, .abi = .musl }, |
| 76 | | .{ .name = "x32", .arch = .x86_64, .abi = .muslx32 }, |
| 61 | .{ .arch = .arm, .abi = .musl }, |
| 62 | .{ .arch = .aarch64, .abi = .musl }, |
| 63 | .{ .arch = .loongarch64, .abi = .musl }, |
| 64 | .{ .arch = .m68k, .abi = .musl }, |
| 65 | .{ .arch = .mips, .abi = .musl }, |
| 66 | .{ .arch = .mips64, .abi = .musl }, |
| 67 | .{ .arch = .mips64, .abi = .muslabin32 }, |
| 68 | .{ .arch = .powerpc, .abi = .musl }, |
| 69 | .{ .arch = .powerpc64, .abi = .musl }, |
| 70 | .{ .arch = .riscv32, .abi = .musl }, |
| 71 | .{ .arch = .riscv64, .abi = .musl }, |
| 72 | .{ .arch = .s390x, .abi = .musl }, |
| 73 | .{ .arch = .x86, .abi = .musl }, |
| 74 | .{ .arch = .x86_64, .abi = .musl }, |
| 75 | .{ .arch = .x86_64, .abi = .muslx32 }, |
| 77 | 76 | }; |
| 78 | 77 | |
| 79 | 78 | const DestTarget = struct { |
| ... | ... | @@ -174,6 +173,10 @@ pub fn main() !void { |
| 174 | 173 | var hasher = Blake3.init(.{}); |
| 175 | 174 | |
| 176 | 175 | for (libc_targets) |libc_target| { |
| 176 | const libc_dir = switch (vendor) { |
| 177 | .glibc => try std.zig.target.glibcRuntimeTriple(allocator, libc_target.arch, .linux, libc_target.abi), |
| 178 | .musl => std.zig.target.muslArchName(libc_target.arch, libc_target.abi), |
| 179 | }; |
| 177 | 180 | const dest_target = DestTarget{ |
| 178 | 181 | .arch = libc_target.arch, |
| 179 | 182 | .os = .linux, |
| ... | ... | @@ -182,8 +185,8 @@ pub fn main() !void { |
| 182 | 185 | |
| 183 | 186 | search: for (search_paths.items) |search_path| { |
| 184 | 187 | const sub_path = switch (vendor) { |
| 185 | | .glibc => &[_][]const u8{ search_path, libc_target.name, "usr", "include" }, |
| 186 | | .musl => &[_][]const u8{ search_path, libc_target.name, "usr", "local", "musl", "include" }, |
| 188 | .glibc => &[_][]const u8{ search_path, libc_dir, "usr", "include" }, |
| 189 | .musl => &[_][]const u8{ search_path, libc_dir, "usr", "local", "musl", "include" }, |
| 187 | 190 | }; |
| 188 | 191 | const target_include_dir = try std.fs.path.join(allocator, sub_path); |
| 189 | 192 | var dir_stack = std.ArrayList([]const u8).init(allocator); |
| ... | ... | @@ -219,7 +222,7 @@ pub fn main() !void { |
| 219 | 222 | max_bytes_saved += raw_bytes.len; |
| 220 | 223 | gop.value_ptr.hit_count += 1; |
| 221 | 224 | std.debug.print("duplicate: {s} {s} ({:2})\n", .{ |
| 222 | | libc_target.name, |
| 225 | libc_dir, |
| 223 | 226 | rel_path, |
| 224 | 227 | std.fmt.fmtIntSizeDec(raw_bytes.len), |
| 225 | 228 | }); |
| ... | ... | @@ -246,7 +249,7 @@ pub fn main() !void { |
| 246 | 249 | } |
| 247 | 250 | break; |
| 248 | 251 | } else { |
| 249 | | std.debug.print("warning: libc target not found: {s}\n", .{libc_target.name}); |
| 252 | std.debug.print("warning: libc target not found: {s}\n", .{libc_dir}); |
| 250 | 253 | } |
| 251 | 254 | } |
| 252 | 255 | std.debug.print("summary: {:2} could be reduced to {:2}\n", .{ |