From 84e192c88b2a970b249c7a7480e14717535b6096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sat, 5 Oct 2024 15:13:37 +0200 Subject: [PATCH] std.Target: Introduce Abi.ohoseabi to distinguish the soft float case. For the same reason as #21504. --- lib/compiler/aro/aro/target.zig | 3 ++- lib/std/Target.zig | 17 ++++++++++++++--- lib/std/zig/LibCDirs.zig | 1 + src/codegen/llvm.zig | 1 + src/target.zig | 2 +- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/compiler/aro/aro/target.zig b/lib/compiler/aro/aro/target.zig index 1799dac5da..c07935a420 100644 --- a/lib/compiler/aro/aro/target.zig +++ b/lib/compiler/aro/aro/target.zig @@ -699,7 +699,8 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 { .cygnus => "cygnus", .simulator => "simulator", .macabi => "macabi", - .ohos => "openhos", + .ohos => "ohos", + .ohoseabi => "ohoseabi", }; writer.writeAll(llvm_abi) catch unreachable; return stream.getWritten(); diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 223730073f..541e050ad6 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -677,6 +677,7 @@ pub const Abi = enum { simulator, macabi, ohos, + ohoseabi, // LLVM tags deliberately omitted: // - amplification @@ -766,8 +767,18 @@ pub const Abi = enum { pub inline fn isMusl(abi: Abi) bool { return switch (abi) { - .musl, .musleabi, .musleabihf, .muslx32 => true, - .ohos => true, + .musl, + .musleabi, + .musleabihf, + .muslx32, + => true, + else => abi.isOpenHarmony(), + }; + } + + pub inline fn isOpenHarmony(abi: Abi) bool { + return switch (abi) { + .ohos, .ohoseabi => true, else => false, }; } @@ -786,7 +797,7 @@ pub const Abi = enum { .gnueabi, .musleabi, .gnusf, - .ohos, + .ohoseabi, => .soft, else => .hard, }; diff --git a/lib/std/zig/LibCDirs.zig b/lib/std/zig/LibCDirs.zig index 2df5bd0932..8b8a3a8d42 100644 --- a/lib/std/zig/LibCDirs.zig +++ b/lib/std/zig/LibCDirs.zig @@ -242,6 +242,7 @@ fn libCGenericName(target: std.Target) [:0]const u8 { .muslx32, .none, .ohos, + .ohoseabi, => return "musl", .code16, .eabi, diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 927cedbb96..b91b13d95f 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -185,6 +185,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .simulator => "simulator", .macabi => "macabi", .ohos => "ohos", + .ohoseabi => "ohoseabi", }; try llvm_triple.appendSlice(llvm_abi); diff --git a/src/target.zig b/src/target.zig index 5847d3d8cd..2d7917c196 100644 --- a/src/target.zig +++ b/src/target.zig @@ -46,7 +46,7 @@ pub fn requiresPIC(target: std.Target, linking_libc: bool) bool { target.os.tag == .windows or target.os.tag == .uefi or osRequiresLibC(target) or (linking_libc and target.isGnuLibC()) or - (target.abi == .ohos and target.cpu.arch == .aarch64); + (target.cpu.arch == .aarch64 and target.abi == .ohos); } pub fn picLevel(target: std.Target) u32 {