authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2021-05-06 19:03:42+02:00
committergravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2021-05-11 12:27:24+02:00
logac546f56eb2b9fd50a69f1d0bda3d0d070b76f52
treeb102f9dbd11b9aba60840f9c983fc6044b4218b5
parentb288f8c9a657b1c5a97e3e543d8598a9e749a390

stage2: Allow building musl/glibc in thumb mode


2 files changed, 16 insertions(+), 2 deletions(-)

src/Compilation.zig+11-1
...@@ -2903,7 +2903,17 @@ fn detectLibCIncludeDirs(...@@ -2903,7 +2903,17 @@ fn detectLibCIncludeDirs(
2903 if (target_util.canBuildLibC(target)) {2903 if (target_util.canBuildLibC(target)) {
2904 const generic_name = target_util.libCGenericName(target);2904 const generic_name = target_util.libCGenericName(target);
2905 // Some architectures are handled by the same set of headers.2905 // Some architectures are handled by the same set of headers.
2906 const arch_name = if (target.abi.isMusl()) target_util.archMuslName(target.cpu.arch) else @tagName(target.cpu.arch);2906 const arch_name = if (target.abi.isMusl())
2907 target_util.archMuslName(target.cpu.arch)
2908 else if (target.cpu.arch.isThumb())
2909 // ARM headers are valid for Thumb too.
2910 switch (target.cpu.arch) {
2911 .thumb => "arm",
2912 .thumbeb => "armeb",
2913 else => unreachable,
2914 }
2915 else
2916 @tagName(target.cpu.arch);
2907 const os_name = @tagName(target.os.tag);2917 const os_name = @tagName(target.os.tag);
2908 // Musl's headers are ABI-agnostic and so they all have the "musl" ABI name.2918 // Musl's headers are ABI-agnostic and so they all have the "musl" ABI name.
2909 const abi_name = if (target.abi.isMusl()) "musl" else @tagName(target.abi);2919 const abi_name = if (target.abi.isMusl()) "musl" else @tagName(target.abi);
src/target.zig+5-1
...@@ -24,6 +24,10 @@ pub const available_libcs = [_]ArchOsAbi{...@@ -24,6 +24,10 @@ pub const available_libcs = [_]ArchOsAbi{
24 .{ .arch = .arm, .os = .linux, .abi = .gnueabihf },24 .{ .arch = .arm, .os = .linux, .abi = .gnueabihf },
25 .{ .arch = .arm, .os = .linux, .abi = .musleabi },25 .{ .arch = .arm, .os = .linux, .abi = .musleabi },
26 .{ .arch = .arm, .os = .linux, .abi = .musleabihf },26 .{ .arch = .arm, .os = .linux, .abi = .musleabihf },
27 .{ .arch = .thumb, .os = .linux, .abi = .gnueabi },
28 .{ .arch = .thumb, .os = .linux, .abi = .gnueabihf },
29 .{ .arch = .thumb, .os = .linux, .abi = .musleabi },
30 .{ .arch = .thumb, .os = .linux, .abi = .musleabihf },
27 .{ .arch = .arm, .os = .windows, .abi = .gnu },31 .{ .arch = .arm, .os = .windows, .abi = .gnu },
28 .{ .arch = .csky, .os = .linux, .abi = .gnueabi },32 .{ .arch = .csky, .os = .linux, .abi = .gnueabi },
29 .{ .arch = .csky, .os = .linux, .abi = .gnueabihf },33 .{ .arch = .csky, .os = .linux, .abi = .gnueabihf },
...@@ -97,7 +101,7 @@ pub fn libCGenericName(target: std.Target) [:0]const u8 {...@@ -97,7 +101,7 @@ pub fn libCGenericName(target: std.Target) [:0]const u8 {
97pub fn archMuslName(arch: std.Target.Cpu.Arch) [:0]const u8 {101pub fn archMuslName(arch: std.Target.Cpu.Arch) [:0]const u8 {
98 switch (arch) {102 switch (arch) {
99 .aarch64, .aarch64_be => return "aarch64",103 .aarch64, .aarch64_be => return "aarch64",
100 .arm, .armeb => return "arm",104 .arm, .armeb, .thumb, .thumbeb => return "arm",
101 .mips, .mipsel => return "mips",105 .mips, .mipsel => return "mips",
102 .mips64el, .mips64 => return "mips64",106 .mips64el, .mips64 => return "mips64",
103 .powerpc => return "powerpc",107 .powerpc => return "powerpc",