authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-11-29 15:28:54-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-11-29 15:28:54-05:00
loga47aa9dd9d7f950427aacc360f1302e636234bc2
treea3e4a4fcab9e49f6adb8a5cfdc719f51b5ea4fd4
parentc3821fe4ca8d98d07454fddf2bf25bfc8d7817f2
parent78b8ce5095abf6516dc414b8cf487acedbd0ce99
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #22095 from alexrp/test-llvm-emit

Change `llvm_targets` tests to actually emit objects, and fix bugs found as a result

5 files changed, 119 insertions(+), 87 deletions(-)

lib/std/Target.zig+60-17
...@@ -2884,19 +2884,29 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {...@@ -2884,19 +2884,29 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {
2884 },2884 },
2885 },2885 },
28862886
2887 .elfiamcu,
2888 .fuchsia,
2889 .hermit,
2890
2891 .aix,
2892 .haiku,
2893 .hurd,
2887 .linux,2894 .linux,
2895 .plan9,
2896 .rtems,
2897 .serenity,
2898 .zos,
2899
2888 .freebsd,2900 .freebsd,
2889 .netbsd,
2890 .dragonfly,2901 .dragonfly,
2902 .netbsd,
2891 .openbsd,2903 .openbsd,
2904
2905 .illumos,
2906 .solaris,
2907
2892 .wasi,2908 .wasi,
2893 .emscripten,2909 .emscripten,
2894 .plan9,
2895 .solaris,
2896 .illumos,
2897 .haiku,
2898 .fuchsia,
2899 .serenity,
2900 => switch (target.cpu.arch) {2910 => switch (target.cpu.arch) {
2901 .msp430 => switch (c_type) {2911 .msp430 => switch (c_type) {
2902 .char => return 8,2912 .char => return 8,
...@@ -2941,7 +2951,10 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {...@@ -2941,7 +2951,10 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {
2941 .longdouble => switch (target.cpu.arch) {2951 .longdouble => switch (target.cpu.arch) {
2942 .x86 => switch (target.abi) {2952 .x86 => switch (target.abi) {
2943 .android => return 64,2953 .android => return 64,
2944 else => return 80,2954 else => switch (target.os.tag) {
2955 .elfiamcu => return 64,
2956 else => return 80,
2957 },
2945 },2958 },
29462959
2947 .powerpc,2960 .powerpc,
...@@ -2955,7 +2968,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {...@@ -2955,7 +2968,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {
2955 .muslx32,2968 .muslx32,
2956 => return 64,2969 => return 64,
2957 else => switch (target.os.tag) {2970 else => switch (target.os.tag) {
2958 .freebsd, .netbsd, .openbsd => return 64,2971 .aix, .freebsd, .netbsd, .openbsd => return 64,
2959 else => return 128,2972 else => return 128,
2960 },2973 },
2961 },2974 },
...@@ -2971,7 +2984,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {...@@ -2971,7 +2984,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {
2971 .muslx32,2984 .muslx32,
2972 => return 64,2985 => return 64,
2973 else => switch (target.os.tag) {2986 else => switch (target.os.tag) {
2974 .freebsd, .openbsd => return 64,2987 .aix, .freebsd, .openbsd => return 64,
2975 else => return 128,2988 else => return 128,
2976 },2989 },
2977 },2990 },
...@@ -3049,10 +3062,17 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {...@@ -3049,10 +3062,17 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {
3049 .gnux32, .muslx32 => return 32,3062 .gnux32, .muslx32 => return 32,
3050 else => return 64,3063 else => return 64,
3051 },3064 },
3052 else => return 64,3065 else => switch (target.abi) {
3066 .ilp32 => return 32,
3067 else => return 64,
3068 },
3053 },3069 },
3054 .longlong, .ulonglong, .double => return 64,3070 .longlong, .ulonglong, .double => return 64,
3055 .longdouble => switch (target.cpu.arch) {3071 .longdouble => switch (target.cpu.arch) {
3072 .aarch64 => switch (target.os.tag) {
3073 .bridgeos => return 128,
3074 else => return 64,
3075 },
3056 .x86 => switch (target.abi) {3076 .x86 => switch (target.abi) {
3057 .android => return 64,3077 .android => return 64,
3058 else => return 80,3078 else => return 80,
...@@ -3104,13 +3124,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {...@@ -3104,13 +3124,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 {
3104 },3124 },
31053125
3106 .ps3,3126 .ps3,
3107 .zos,
3108 .rtems,
3109 .aix,
3110 .elfiamcu,
3111 .contiki,3127 .contiki,
3112 .hermit,
3113 .hurd,
3114 .opengl,3128 .opengl,
3115 => @panic("TODO specify the C integer and float type sizes for this OS"),3129 => @panic("TODO specify the C integer and float type sizes for this OS"),
3116 }3130 }
...@@ -3121,6 +3135,10 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {...@@ -3121,6 +3135,10 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {
3121 switch (target.cpu.arch) {3135 switch (target.cpu.arch) {
3122 .avr => return 1,3136 .avr => return 1,
3123 .x86 => switch (target.os.tag) {3137 .x86 => switch (target.os.tag) {
3138 .elfiamcu => switch (c_type) {
3139 .longlong, .ulonglong, .double => return 4,
3140 else => {},
3141 },
3124 .windows, .uefi => switch (c_type) {3142 .windows, .uefi => switch (c_type) {
3125 .longlong, .ulonglong, .double => return 8,3143 .longlong, .ulonglong, .double => return 8,
3126 .longdouble => switch (target.abi) {3144 .longdouble => switch (target.abi) {
...@@ -3131,6 +3149,20 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {...@@ -3131,6 +3149,20 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 {
3131 },3149 },
3132 else => {},3150 else => {},
3133 },3151 },
3152 .powerpc, .powerpcle, .powerpc64, .powerpc64le => switch (target.os.tag) {
3153 .aix => switch (c_type) {
3154 .double, .longdouble => return 4,
3155 else => {},
3156 },
3157 else => {},
3158 },
3159 .wasm32, .wasm64 => switch (target.os.tag) {
3160 .emscripten => switch (c_type) {
3161 .longdouble => return 8,
3162 else => {},
3163 },
3164 else => {},
3165 },
3134 else => {},3166 else => {},
3135 }3167 }
31363168
...@@ -3244,6 +3276,10 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {...@@ -3244,6 +3276,10 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
3244 },3276 },
3245 .avr => return 1,3277 .avr => return 1,
3246 .x86 => switch (target.os.tag) {3278 .x86 => switch (target.os.tag) {
3279 .elfiamcu => switch (c_type) {
3280 .longlong, .ulonglong, .double, .longdouble => return 4,
3281 else => {},
3282 },
3247 .windows, .uefi => switch (c_type) {3283 .windows, .uefi => switch (c_type) {
3248 .longdouble => switch (target.abi) {3284 .longdouble => switch (target.abi) {
3249 .gnu, .gnuilp32, .ilp32, .cygnus => return 4,3285 .gnu, .gnuilp32, .ilp32, .cygnus => return 4,
...@@ -3256,6 +3292,13 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {...@@ -3256,6 +3292,13 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 {
3256 else => {},3292 else => {},
3257 },3293 },
3258 },3294 },
3295 .wasm32, .wasm64 => switch (target.os.tag) {
3296 .emscripten => switch (c_type) {
3297 .longdouble => return 8,
3298 else => {},
3299 },
3300 else => {},
3301 },
3259 else => {},3302 else => {},
3260 }3303 }
32613304
src/codegen/llvm.zig+1-2
...@@ -280,8 +280,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {...@@ -280,8 +280,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
280 .cygnus => "cygnus",280 .cygnus => "cygnus",
281 .simulator => "simulator",281 .simulator => "simulator",
282 .macabi => "macabi",282 .macabi => "macabi",
283 .ohos => "ohos",283 .ohos, .ohoseabi => "ohos",
284 .ohoseabi => "ohoseabi",
285 };284 };
286 try llvm_triple.appendSlice(llvm_abi);285 try llvm_triple.appendSlice(llvm_abi);
287286
src/link/MachO.zig+5-1
...@@ -4191,7 +4191,11 @@ pub const Platform = struct {...@@ -4191,7 +4191,11 @@ pub const Platform = struct {
4191 return .{4191 return .{
4192 .os_tag = target.os.tag,4192 .os_tag = target.os.tag,
4193 .abi = target.abi,4193 .abi = target.abi,
4194 .version = target.os.version_range.semver.min,4194 // This should use semver once we determine the version history.
4195 .version = if (target.os.tag == .bridgeos)
4196 .{ .major = 0, .minor = 0, .patch = 0 }
4197 else
4198 target.os.version_range.semver.min,
4195 };4199 };
4196 }4200 }
41974201
test/llvm_targets.zig+52-50
...@@ -15,13 +15,12 @@ const targets = [_]std.Target.Query{...@@ -15,13 +15,12 @@ const targets = [_]std.Target.Query{
15 .{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .simulator },15 .{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .simulator },
16 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .android },16 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .android },
17 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnu },17 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnu },
18 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnuilp32 },18 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .musl },
19 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .none },19 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .none },
20 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .ohos },20 .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .ohos },
21 .{ .cpu_arch = .aarch64, .os_tag = .macos, .abi = .none },21 .{ .cpu_arch = .aarch64, .os_tag = .macos, .abi = .none },
22 .{ .cpu_arch = .aarch64, .os_tag = .netbsd, .abi = .none },22 .{ .cpu_arch = .aarch64, .os_tag = .netbsd, .abi = .none },
23 .{ .cpu_arch = .aarch64, .os_tag = .openbsd, .abi = .none },23 .{ .cpu_arch = .aarch64, .os_tag = .openbsd, .abi = .none },
24 .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .ilp32 },
25 .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .none },24 .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .none },
26 .{ .cpu_arch = .aarch64, .os_tag = .serenity, .abi = .none },25 .{ .cpu_arch = .aarch64, .os_tag = .serenity, .abi = .none },
27 .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .none },26 .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .none },
...@@ -38,17 +37,17 @@ const targets = [_]std.Target.Query{...@@ -38,17 +37,17 @@ const targets = [_]std.Target.Query{
3837
39 .{ .cpu_arch = .aarch64_be, .os_tag = .freestanding, .abi = .none },38 .{ .cpu_arch = .aarch64_be, .os_tag = .freestanding, .abi = .none },
40 .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnu },39 .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnu },
41 .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnuilp32 },40 .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .musl },
42 .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .none },41 .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .none },
43 .{ .cpu_arch = .aarch64_be, .os_tag = .netbsd, .abi = .none },42 .{ .cpu_arch = .aarch64_be, .os_tag = .netbsd, .abi = .none },
4443
45 .{ .cpu_arch = .amdgcn, .os_tag = .amdhsa, .abi = .none },44 .{ .cpu_arch = .amdgcn, .os_tag = .amdhsa, .abi = .none },
46 .{ .cpu_arch = .amdgcn, .os_tag = .amdpal, .abi = .none },45 // .{ .cpu_arch = .amdgcn, .os_tag = .amdpal, .abi = .none },
47 .{ .cpu_arch = .amdgcn, .os_tag = .mesa3d, .abi = .none },46 // .{ .cpu_arch = .amdgcn, .os_tag = .mesa3d, .abi = .none },
4847
49 .{ .cpu_arch = .arc, .os_tag = .freestanding, .abi = .none },48 // .{ .cpu_arch = .arc, .os_tag = .freestanding, .abi = .none },
50 .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .gnu },49 // .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .gnu },
51 .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .none },50 // .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .none },
5251
53 .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabi },52 .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabi },
54 .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabihf },53 .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabihf },
...@@ -70,8 +69,8 @@ const targets = [_]std.Target.Query{...@@ -70,8 +69,8 @@ const targets = [_]std.Target.Query{
70 .{ .cpu_arch = .arm, .os_tag = .openbsd, .abi = .eabihf },69 .{ .cpu_arch = .arm, .os_tag = .openbsd, .abi = .eabihf },
71 .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabi },70 .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabi },
72 .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabihf },71 .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabihf },
73 .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabi },72 // .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabi },
74 .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabihf },73 // .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabihf },
7574
76 .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabi },75 .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabi },
77 .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabihf },76 .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabihf },
...@@ -95,36 +94,37 @@ const targets = [_]std.Target.Query{...@@ -95,36 +94,37 @@ const targets = [_]std.Target.Query{
9594
96 .{ .cpu_arch = .bpfel, .os_tag = .freestanding, .abi = .none },95 .{ .cpu_arch = .bpfel, .os_tag = .freestanding, .abi = .none },
9796
98 .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabi },97 // .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabi },
99 .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabihf },98 // .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabihf },
100 .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabi },99 // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabi },
101 .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabihf },100 // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabihf },
102 .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabi },101 // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabi },
103 .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabihf },102 // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabihf },
104103
105 .{ .cpu_arch = .hexagon, .os_tag = .freestanding, .abi = .none },104 .{ .cpu_arch = .hexagon, .os_tag = .freestanding, .abi = .none },
106 .{ .cpu_arch = .hexagon, .os_tag = .linux, .abi = .none },105 .{ .cpu_arch = .hexagon, .os_tag = .linux, .abi = .none },
107106
108 .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none },107 // .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none },
109108
110 .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none },109 // .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none },
111 .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none },110 // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none },
112 .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none },111 // .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none },
113112
114 .{ .cpu_arch = .loongarch64, .os_tag = .freestanding, .abi = .none },113 .{ .cpu_arch = .loongarch64, .os_tag = .freestanding, .abi = .none },
115 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnu },114 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnu },
116 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnuf32 },115 // .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnuf32 },
117 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnusf },116 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnusf },
118 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .musl },117 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .musl },
119 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .none },118 .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .none },
120 .{ .cpu_arch = .loongarch64, .os_tag = .uefi, .abi = .none },119 // .{ .cpu_arch = .loongarch64, .os_tag = .uefi, .abi = .none },
121120
122 .{ .cpu_arch = .m68k, .os_tag = .freestanding, .abi = .none },121 // .{ .cpu_arch = .m68k, .os_tag = .freestanding, .abi = .none },
123 .{ .cpu_arch = .m68k, .os_tag = .haiku, .abi = .none },122 // .{ .cpu_arch = .m68k, .os_tag = .haiku, .abi = .none },
124 .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .gnu },123 // .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .gnu },
125 .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .none },124 // .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .musl },
126 .{ .cpu_arch = .m68k, .os_tag = .netbsd, .abi = .none },125 // .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .none },
127 .{ .cpu_arch = .m68k, .os_tag = .rtems, .abi = .none },126 // .{ .cpu_arch = .m68k, .os_tag = .netbsd, .abi = .none },
127 // .{ .cpu_arch = .m68k, .os_tag = .rtems, .abi = .none },
128128
129 .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabi },129 .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabi },
130 .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabihf },130 .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabihf },
...@@ -178,12 +178,12 @@ const targets = [_]std.Target.Query{...@@ -178,12 +178,12 @@ const targets = [_]std.Target.Query{
178178
179 .{ .cpu_arch = .msp430, .os_tag = .freestanding, .abi = .none },179 .{ .cpu_arch = .msp430, .os_tag = .freestanding, .abi = .none },
180180
181 .{ .cpu_arch = .nvptx, .os_tag = .cuda, .abi = .none },181 // .{ .cpu_arch = .nvptx, .os_tag = .cuda, .abi = .none },
182 .{ .cpu_arch = .nvptx, .os_tag = .nvcl, .abi = .none },182 // .{ .cpu_arch = .nvptx, .os_tag = .nvcl, .abi = .none },
183 .{ .cpu_arch = .nvptx64, .os_tag = .cuda, .abi = .none },183 // .{ .cpu_arch = .nvptx64, .os_tag = .cuda, .abi = .none },
184 .{ .cpu_arch = .nvptx64, .os_tag = .nvcl, .abi = .none },184 // .{ .cpu_arch = .nvptx64, .os_tag = .nvcl, .abi = .none },
185185
186 .{ .cpu_arch = .powerpc, .os_tag = .aix, .abi = .eabihf },186 // .{ .cpu_arch = .powerpc, .os_tag = .aix, .abi = .eabihf },
187 .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabi },187 .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabi },
188 .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabihf },188 .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabihf },
189 .{ .cpu_arch = .powerpc, .os_tag = .freestanding, .abi = .eabi },189 .{ .cpu_arch = .powerpc, .os_tag = .freestanding, .abi = .eabi },
...@@ -206,7 +206,7 @@ const targets = [_]std.Target.Query{...@@ -206,7 +206,7 @@ const targets = [_]std.Target.Query{
206 .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabi },206 .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabi },
207 .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabihf },207 .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabihf },
208208
209 .{ .cpu_arch = .powerpc64, .os_tag = .aix, .abi = .none },209 // .{ .cpu_arch = .powerpc64, .os_tag = .aix, .abi = .none },
210 .{ .cpu_arch = .powerpc64, .os_tag = .freebsd, .abi = .none },210 .{ .cpu_arch = .powerpc64, .os_tag = .freebsd, .abi = .none },
211 .{ .cpu_arch = .powerpc64, .os_tag = .freestanding, .abi = .none },211 .{ .cpu_arch = .powerpc64, .os_tag = .freestanding, .abi = .none },
212 .{ .cpu_arch = .powerpc64, .os_tag = .linux, .abi = .gnu },212 .{ .cpu_arch = .powerpc64, .os_tag = .linux, .abi = .gnu },
...@@ -226,7 +226,7 @@ const targets = [_]std.Target.Query{...@@ -226,7 +226,7 @@ const targets = [_]std.Target.Query{
226 .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .musl },226 .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .musl },
227 .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .none },227 .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .none },
228 .{ .cpu_arch = .riscv32, .os_tag = .rtems, .abi = .none },228 .{ .cpu_arch = .riscv32, .os_tag = .rtems, .abi = .none },
229 .{ .cpu_arch = .riscv32, .os_tag = .uefi, .abi = .none },229 // .{ .cpu_arch = .riscv32, .os_tag = .uefi, .abi = .none },
230230
231 .{ .cpu_arch = .riscv64, .os_tag = .freebsd, .abi = .none },231 .{ .cpu_arch = .riscv64, .os_tag = .freebsd, .abi = .none },
232 .{ .cpu_arch = .riscv64, .os_tag = .freestanding, .abi = .none },232 .{ .cpu_arch = .riscv64, .os_tag = .freestanding, .abi = .none },
...@@ -241,20 +241,20 @@ const targets = [_]std.Target.Query{...@@ -241,20 +241,20 @@ const targets = [_]std.Target.Query{
241 .{ .cpu_arch = .riscv64, .os_tag = .openbsd, .abi = .none },241 .{ .cpu_arch = .riscv64, .os_tag = .openbsd, .abi = .none },
242 .{ .cpu_arch = .riscv64, .os_tag = .rtems, .abi = .none },242 .{ .cpu_arch = .riscv64, .os_tag = .rtems, .abi = .none },
243 .{ .cpu_arch = .riscv64, .os_tag = .serenity, .abi = .none },243 .{ .cpu_arch = .riscv64, .os_tag = .serenity, .abi = .none },
244 .{ .cpu_arch = .riscv64, .os_tag = .uefi, .abi = .none },244 // .{ .cpu_arch = .riscv64, .os_tag = .uefi, .abi = .none },
245245
246 .{ .cpu_arch = .s390x, .os_tag = .freestanding, .abi = .none },246 .{ .cpu_arch = .s390x, .os_tag = .freestanding, .abi = .none },
247 .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .gnu },247 .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .gnu },
248 .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .none },248 .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .none },
249 .{ .cpu_arch = .s390x, .os_tag = .zos, .abi = .none },249 // .{ .cpu_arch = .s390x, .os_tag = .zos, .abi = .none },
250250
251 .{ .cpu_arch = .sparc, .os_tag = .freestanding, .abi = .none },251 // .{ .cpu_arch = .sparc, .os_tag = .freestanding, .abi = .none },
252 .{ .cpu_arch = .sparc, .os_tag = .illumos, .abi = .none },252 // .{ .cpu_arch = .sparc, .os_tag = .illumos, .abi = .none },
253 .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .gnu },253 // .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .gnu },
254 .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .none },254 // .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .none },
255 .{ .cpu_arch = .sparc, .os_tag = .netbsd, .abi = .none },255 // .{ .cpu_arch = .sparc, .os_tag = .netbsd, .abi = .none },
256 .{ .cpu_arch = .sparc, .os_tag = .rtems, .abi = .none },256 // .{ .cpu_arch = .sparc, .os_tag = .rtems, .abi = .none },
257 .{ .cpu_arch = .sparc, .os_tag = .solaris, .abi = .none },257 // .{ .cpu_arch = .sparc, .os_tag = .solaris, .abi = .none },
258258
259 .{ .cpu_arch = .sparc64, .os_tag = .freebsd, .abi = .none },259 .{ .cpu_arch = .sparc64, .os_tag = .freebsd, .abi = .none },
260 .{ .cpu_arch = .sparc64, .os_tag = .freestanding, .abi = .none },260 .{ .cpu_arch = .sparc64, .os_tag = .freestanding, .abi = .none },
...@@ -301,8 +301,8 @@ const targets = [_]std.Target.Query{...@@ -301,8 +301,8 @@ const targets = [_]std.Target.Query{
301 .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabi },301 .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabi },
302 .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabihf },302 .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabihf },
303303
304 .{ .cpu_arch = .ve, .os_tag = .freestanding, .abi = .none },304 // .{ .cpu_arch = .ve, .os_tag = .freestanding, .abi = .none },
305 .{ .cpu_arch = .ve, .os_tag = .linux, .abi = .none },305 // .{ .cpu_arch = .ve, .os_tag = .linux, .abi = .none },
306306
307 .{ .cpu_arch = .wasm32, .os_tag = .emscripten, .abi = .none },307 .{ .cpu_arch = .wasm32, .os_tag = .emscripten, .abi = .none },
308 .{ .cpu_arch = .wasm32, .os_tag = .freestanding, .abi = .none },308 .{ .cpu_arch = .wasm32, .os_tag = .freestanding, .abi = .none },
...@@ -329,6 +329,7 @@ const targets = [_]std.Target.Query{...@@ -329,6 +329,7 @@ const targets = [_]std.Target.Query{
329 .{ .cpu_arch = .x86, .os_tag = .rtems, .abi = .none },329 .{ .cpu_arch = .x86, .os_tag = .rtems, .abi = .none },
330 .{ .cpu_arch = .x86, .os_tag = .solaris, .abi = .none },330 .{ .cpu_arch = .x86, .os_tag = .solaris, .abi = .none },
331 .{ .cpu_arch = .x86, .os_tag = .uefi, .abi = .none },331 .{ .cpu_arch = .x86, .os_tag = .uefi, .abi = .none },
332 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .cygnus },
332 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .gnu },333 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .gnu },
333 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .itanium },334 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .itanium },
334 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .msvc },335 .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .msvc },
...@@ -368,14 +369,15 @@ const targets = [_]std.Target.Query{...@@ -368,14 +369,15 @@ const targets = [_]std.Target.Query{
368 .{ .cpu_arch = .x86_64, .os_tag = .uefi, .abi = .none },369 .{ .cpu_arch = .x86_64, .os_tag = .uefi, .abi = .none },
369 .{ .cpu_arch = .x86_64, .os_tag = .visionos, .abi = .simulator },370 .{ .cpu_arch = .x86_64, .os_tag = .visionos, .abi = .simulator },
370 .{ .cpu_arch = .x86_64, .os_tag = .watchos, .abi = .simulator },371 .{ .cpu_arch = .x86_64, .os_tag = .watchos, .abi = .simulator },
372 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .cygnus },
371 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .gnu },373 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .gnu },
372 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .itanium },374 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .itanium },
373 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .msvc },375 .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .msvc },
374376
375 .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none },377 // .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none },
376378
377 .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none },379 // .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none },
378 .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none },380 // .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none },
379};381};
380382
381pub fn addCases(383pub fn addCases(
...@@ -392,7 +394,7 @@ pub fn addCases(...@@ -392,7 +394,7 @@ pub fn addCases(
392 .xtensa => if (!build_options.llvm_has_xtensa) continue,394 .xtensa => if (!build_options.llvm_has_xtensa) continue,
393 else => {},395 else => {},
394 };396 };
395 var case = ctx.noEmitUsingLlvmBackend("llvm_targets", b.resolveTargetQuery(target_query));397 var case = ctx.addObjLlvm("llvm_targets", b.resolveTargetQuery(target_query));
396 case.addCompile("");398 case.addCompile("");
397 }399 }
398}400}
test/src/Cases.zig+1-17
...@@ -204,34 +204,18 @@ pub fn exeFromCompiledC(ctx: *Cases, name: []const u8, target_query: std.Target....@@ -204,34 +204,18 @@ pub fn exeFromCompiledC(ctx: *Cases, name: []const u8, target_query: std.Target.
204 return &ctx.cases.items[ctx.cases.items.len - 1];204 return &ctx.cases.items[ctx.cases.items.len - 1];
205}205}
206206
207pub fn noEmitUsingLlvmBackend(ctx: *Cases, name: []const u8, target: std.Build.ResolvedTarget) *Case {207pub fn addObjLlvm(ctx: *Cases, name: []const u8, target: std.Build.ResolvedTarget) *Case {
208 ctx.cases.append(Case{208 ctx.cases.append(Case{
209 .name = name,209 .name = name,
210 .target = target,210 .target = target,
211 .updates = std.ArrayList(Update).init(ctx.cases.allocator),211 .updates = std.ArrayList(Update).init(ctx.cases.allocator),
212 .output_mode = .Obj,212 .output_mode = .Obj,
213 .emit_bin = false,
214 .deps = std.ArrayList(DepModule).init(ctx.arena),213 .deps = std.ArrayList(DepModule).init(ctx.arena),
215 .backend = .llvm,214 .backend = .llvm,
216 }) catch @panic("out of memory");215 }) catch @panic("out of memory");
217 return &ctx.cases.items[ctx.cases.items.len - 1];216 return &ctx.cases.items[ctx.cases.items.len - 1];
218}217}
219218
220/// Adds a test case that uses the LLVM backend to emit an executable.
221/// Currently this implies linking libc, because only then we can generate a testable executable.
222pub fn exeUsingLlvmBackend(ctx: *Cases, name: []const u8, target: std.Build.ResolvedTarget) *Case {
223 ctx.cases.append(Case{
224 .name = name,
225 .target = target,
226 .updates = std.ArrayList(Update).init(ctx.cases.allocator),
227 .output_mode = .Exe,
228 .deps = std.ArrayList(DepModule).init(ctx.arena),
229 .backend = .llvm,
230 .link_libc = true,
231 }) catch @panic("out of memory");
232 return &ctx.cases.items[ctx.cases.items.len - 1];
233}
234
235pub fn addObj(219pub fn addObj(
236 ctx: *Cases,220 ctx: *Cases,
237 name: []const u8,221 name: []const u8,