diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 8e9bfd273c..c5a800097d 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -2884,19 +2884,29 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { }, }, + .elfiamcu, + .fuchsia, + .hermit, + + .aix, + .haiku, + .hurd, .linux, + .plan9, + .rtems, + .serenity, + .zos, + .freebsd, - .netbsd, .dragonfly, + .netbsd, .openbsd, + + .illumos, + .solaris, + .wasi, .emscripten, - .plan9, - .solaris, - .illumos, - .haiku, - .fuchsia, - .serenity, => switch (target.cpu.arch) { .msp430 => switch (c_type) { .char => return 8, @@ -2941,7 +2951,10 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { .longdouble => switch (target.cpu.arch) { .x86 => switch (target.abi) { .android => return 64, - else => return 80, + else => switch (target.os.tag) { + .elfiamcu => return 64, + else => return 80, + }, }, .powerpc, @@ -2955,7 +2968,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { .muslx32, => return 64, else => switch (target.os.tag) { - .freebsd, .netbsd, .openbsd => return 64, + .aix, .freebsd, .netbsd, .openbsd => return 64, else => return 128, }, }, @@ -2971,7 +2984,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { .muslx32, => return 64, else => switch (target.os.tag) { - .freebsd, .openbsd => return 64, + .aix, .freebsd, .openbsd => return 64, else => return 128, }, }, @@ -3049,10 +3062,17 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { .gnux32, .muslx32 => return 32, else => return 64, }, - else => return 64, + else => switch (target.abi) { + .ilp32 => return 32, + else => return 64, + }, }, .longlong, .ulonglong, .double => return 64, .longdouble => switch (target.cpu.arch) { + .aarch64 => switch (target.os.tag) { + .bridgeos => return 128, + else => return 64, + }, .x86 => switch (target.abi) { .android => return 64, else => return 80, @@ -3104,13 +3124,7 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { }, .ps3, - .zos, - .rtems, - .aix, - .elfiamcu, .contiki, - .hermit, - .hurd, .opengl, => @panic("TODO specify the C integer and float type sizes for this OS"), } @@ -3121,6 +3135,10 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 { switch (target.cpu.arch) { .avr => return 1, .x86 => switch (target.os.tag) { + .elfiamcu => switch (c_type) { + .longlong, .ulonglong, .double => return 4, + else => {}, + }, .windows, .uefi => switch (c_type) { .longlong, .ulonglong, .double => return 8, .longdouble => switch (target.abi) { @@ -3131,6 +3149,20 @@ pub fn cTypeAlignment(target: Target, c_type: CType) u16 { }, else => {}, }, + .powerpc, .powerpcle, .powerpc64, .powerpc64le => switch (target.os.tag) { + .aix => switch (c_type) { + .double, .longdouble => return 4, + else => {}, + }, + else => {}, + }, + .wasm32, .wasm64 => switch (target.os.tag) { + .emscripten => switch (c_type) { + .longdouble => return 8, + else => {}, + }, + else => {}, + }, else => {}, } @@ -3244,6 +3276,10 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 { }, .avr => return 1, .x86 => switch (target.os.tag) { + .elfiamcu => switch (c_type) { + .longlong, .ulonglong, .double, .longdouble => return 4, + else => {}, + }, .windows, .uefi => switch (c_type) { .longdouble => switch (target.abi) { .gnu, .gnuilp32, .ilp32, .cygnus => return 4, @@ -3256,6 +3292,13 @@ pub fn cTypePreferredAlignment(target: Target, c_type: CType) u16 { else => {}, }, }, + .wasm32, .wasm64 => switch (target.os.tag) { + .emscripten => switch (c_type) { + .longdouble => return 8, + else => {}, + }, + else => {}, + }, else => {}, } diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 737aa51107..0a755e25a8 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -280,8 +280,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .cygnus => "cygnus", .simulator => "simulator", .macabi => "macabi", - .ohos => "ohos", - .ohoseabi => "ohoseabi", + .ohos, .ohoseabi => "ohos", }; try llvm_triple.appendSlice(llvm_abi); diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 1ffcabb1f5..9cfe839ca3 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -4191,7 +4191,11 @@ pub const Platform = struct { return .{ .os_tag = target.os.tag, .abi = target.abi, - .version = target.os.version_range.semver.min, + // This should use semver once we determine the version history. + .version = if (target.os.tag == .bridgeos) + .{ .major = 0, .minor = 0, .patch = 0 } + else + target.os.version_range.semver.min, }; } diff --git a/test/llvm_targets.zig b/test/llvm_targets.zig index 42c5428e06..284c1fcd70 100644 --- a/test/llvm_targets.zig +++ b/test/llvm_targets.zig @@ -15,13 +15,12 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .simulator }, .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .android }, .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnuilp32 }, + .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .ohos }, .{ .cpu_arch = .aarch64, .os_tag = .macos, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .netbsd, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .openbsd, .abi = .none }, - .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .ilp32 }, .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .serenity, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .none }, @@ -38,17 +37,17 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .aarch64_be, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnuilp32 }, + .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .aarch64_be, .os_tag = .netbsd, .abi = .none }, .{ .cpu_arch = .amdgcn, .os_tag = .amdhsa, .abi = .none }, - .{ .cpu_arch = .amdgcn, .os_tag = .amdpal, .abi = .none }, - .{ .cpu_arch = .amdgcn, .os_tag = .mesa3d, .abi = .none }, + // .{ .cpu_arch = .amdgcn, .os_tag = .amdpal, .abi = .none }, + // .{ .cpu_arch = .amdgcn, .os_tag = .mesa3d, .abi = .none }, - .{ .cpu_arch = .arc, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .none }, + // .{ .cpu_arch = .arc, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .gnu }, + // .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabi }, .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabihf }, @@ -70,8 +69,8 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .arm, .os_tag = .openbsd, .abi = .eabihf }, .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabi }, .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabihf }, - .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabi }, - .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabihf }, + // .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabi }, + // .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabihf }, .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabi }, .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabihf }, @@ -95,36 +94,37 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .bpfel, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabi }, - .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabihf }, - .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabi }, - .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabihf }, - .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabi }, - .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabihf }, + // .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabi }, + // .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabihf }, + // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabi }, + // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabihf }, + // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabi }, + // .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabihf }, .{ .cpu_arch = .hexagon, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .hexagon, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none }, + // .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none }, + // .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none }, .{ .cpu_arch = .loongarch64, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnuf32 }, + // .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnuf32 }, .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnusf }, .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .loongarch64, .os_tag = .uefi, .abi = .none }, + // .{ .cpu_arch = .loongarch64, .os_tag = .uefi, .abi = .none }, - .{ .cpu_arch = .m68k, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .m68k, .os_tag = .haiku, .abi = .none }, - .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .m68k, .os_tag = .netbsd, .abi = .none }, - .{ .cpu_arch = .m68k, .os_tag = .rtems, .abi = .none }, + // .{ .cpu_arch = .m68k, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .m68k, .os_tag = .haiku, .abi = .none }, + // .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .gnu }, + // .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .musl }, + // .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .none }, + // .{ .cpu_arch = .m68k, .os_tag = .netbsd, .abi = .none }, + // .{ .cpu_arch = .m68k, .os_tag = .rtems, .abi = .none }, .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabi }, .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabihf }, @@ -178,12 +178,12 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .msp430, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .nvptx, .os_tag = .cuda, .abi = .none }, - .{ .cpu_arch = .nvptx, .os_tag = .nvcl, .abi = .none }, - .{ .cpu_arch = .nvptx64, .os_tag = .cuda, .abi = .none }, - .{ .cpu_arch = .nvptx64, .os_tag = .nvcl, .abi = .none }, + // .{ .cpu_arch = .nvptx, .os_tag = .cuda, .abi = .none }, + // .{ .cpu_arch = .nvptx, .os_tag = .nvcl, .abi = .none }, + // .{ .cpu_arch = .nvptx64, .os_tag = .cuda, .abi = .none }, + // .{ .cpu_arch = .nvptx64, .os_tag = .nvcl, .abi = .none }, - .{ .cpu_arch = .powerpc, .os_tag = .aix, .abi = .eabihf }, + // .{ .cpu_arch = .powerpc, .os_tag = .aix, .abi = .eabihf }, .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabi }, .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabihf }, .{ .cpu_arch = .powerpc, .os_tag = .freestanding, .abi = .eabi }, @@ -206,7 +206,7 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabi }, .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabihf }, - .{ .cpu_arch = .powerpc64, .os_tag = .aix, .abi = .none }, + // .{ .cpu_arch = .powerpc64, .os_tag = .aix, .abi = .none }, .{ .cpu_arch = .powerpc64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .powerpc64, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .powerpc64, .os_tag = .linux, .abi = .gnu }, @@ -226,7 +226,7 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .riscv32, .os_tag = .rtems, .abi = .none }, - .{ .cpu_arch = .riscv32, .os_tag = .uefi, .abi = .none }, + // .{ .cpu_arch = .riscv32, .os_tag = .uefi, .abi = .none }, .{ .cpu_arch = .riscv64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .riscv64, .os_tag = .freestanding, .abi = .none }, @@ -241,20 +241,20 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .riscv64, .os_tag = .openbsd, .abi = .none }, .{ .cpu_arch = .riscv64, .os_tag = .rtems, .abi = .none }, .{ .cpu_arch = .riscv64, .os_tag = .serenity, .abi = .none }, - .{ .cpu_arch = .riscv64, .os_tag = .uefi, .abi = .none }, + // .{ .cpu_arch = .riscv64, .os_tag = .uefi, .abi = .none }, .{ .cpu_arch = .s390x, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .s390x, .os_tag = .zos, .abi = .none }, + // .{ .cpu_arch = .s390x, .os_tag = .zos, .abi = .none }, - .{ .cpu_arch = .sparc, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .sparc, .os_tag = .illumos, .abi = .none }, - .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .sparc, .os_tag = .netbsd, .abi = .none }, - .{ .cpu_arch = .sparc, .os_tag = .rtems, .abi = .none }, - .{ .cpu_arch = .sparc, .os_tag = .solaris, .abi = .none }, + // .{ .cpu_arch = .sparc, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .sparc, .os_tag = .illumos, .abi = .none }, + // .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .gnu }, + // .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .none }, + // .{ .cpu_arch = .sparc, .os_tag = .netbsd, .abi = .none }, + // .{ .cpu_arch = .sparc, .os_tag = .rtems, .abi = .none }, + // .{ .cpu_arch = .sparc, .os_tag = .solaris, .abi = .none }, .{ .cpu_arch = .sparc64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .sparc64, .os_tag = .freestanding, .abi = .none }, @@ -301,8 +301,8 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabi }, .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabihf }, - .{ .cpu_arch = .ve, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .ve, .os_tag = .linux, .abi = .none }, + // .{ .cpu_arch = .ve, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .ve, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .wasm32, .os_tag = .emscripten, .abi = .none }, .{ .cpu_arch = .wasm32, .os_tag = .freestanding, .abi = .none }, @@ -329,6 +329,7 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .x86, .os_tag = .rtems, .abi = .none }, .{ .cpu_arch = .x86, .os_tag = .solaris, .abi = .none }, .{ .cpu_arch = .x86, .os_tag = .uefi, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .cygnus }, .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .gnu }, .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .itanium }, .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .msvc }, @@ -368,14 +369,15 @@ const targets = [_]std.Target.Query{ .{ .cpu_arch = .x86_64, .os_tag = .uefi, .abi = .none }, .{ .cpu_arch = .x86_64, .os_tag = .visionos, .abi = .simulator }, .{ .cpu_arch = .x86_64, .os_tag = .watchos, .abi = .simulator }, + .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .cygnus }, .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .gnu }, .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .itanium }, .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .msvc }, - .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none }, + // .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none }, + // .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none }, }; pub fn addCases( @@ -392,7 +394,7 @@ pub fn addCases( .xtensa => if (!build_options.llvm_has_xtensa) continue, else => {}, }; - var case = ctx.noEmitUsingLlvmBackend("llvm_targets", b.resolveTargetQuery(target_query)); + var case = ctx.addObjLlvm("llvm_targets", b.resolveTargetQuery(target_query)); case.addCompile(""); } } diff --git a/test/src/Cases.zig b/test/src/Cases.zig index 2a601637e6..208e8a6ce1 100644 --- a/test/src/Cases.zig +++ b/test/src/Cases.zig @@ -204,34 +204,18 @@ pub fn exeFromCompiledC(ctx: *Cases, name: []const u8, target_query: std.Target. return &ctx.cases.items[ctx.cases.items.len - 1]; } -pub fn noEmitUsingLlvmBackend(ctx: *Cases, name: []const u8, target: std.Build.ResolvedTarget) *Case { +pub fn addObjLlvm(ctx: *Cases, name: []const u8, target: std.Build.ResolvedTarget) *Case { ctx.cases.append(Case{ .name = name, .target = target, .updates = std.ArrayList(Update).init(ctx.cases.allocator), .output_mode = .Obj, - .emit_bin = false, .deps = std.ArrayList(DepModule).init(ctx.arena), .backend = .llvm, }) catch @panic("out of memory"); return &ctx.cases.items[ctx.cases.items.len - 1]; } -/// Adds a test case that uses the LLVM backend to emit an executable. -/// Currently this implies linking libc, because only then we can generate a testable executable. -pub fn exeUsingLlvmBackend(ctx: *Cases, name: []const u8, target: std.Build.ResolvedTarget) *Case { - ctx.cases.append(Case{ - .name = name, - .target = target, - .updates = std.ArrayList(Update).init(ctx.cases.allocator), - .output_mode = .Exe, - .deps = std.ArrayList(DepModule).init(ctx.arena), - .backend = .llvm, - .link_libc = true, - }) catch @panic("out of memory"); - return &ctx.cases.items[ctx.cases.items.len - 1]; -} - pub fn addObj( ctx: *Cases, name: []const u8,