From b16210b30b73e70e36fa3bb9c91c7886fdb4575a Mon Sep 17 00:00:00 2001 From: Cyndy Ishida Date: Wed, 6 Aug 2025 10:44:00 -0700 Subject: [PATCH 1/2] [TextAPI] Seperate out Arch name from enum label, NFCI (#152332) The enum label e.g. `AK_arm64` is often the same as the architecture name, but doesn't have to be. Seperate it out. (cherry picked from commit 477a65a051ce151895193f8dede1262fdc251132) --- llvm/include/llvm/TextAPI/Architecture.def | 30 +++++++++++----------- llvm/include/llvm/TextAPI/Architecture.h | 2 +- llvm/lib/TextAPI/Architecture.cpp | 12 ++++----- llvm/lib/TextAPI/TextStubCommon.cpp | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/llvm/include/llvm/TextAPI/Architecture.def b/llvm/include/llvm/TextAPI/Architecture.def index 58ef31b25fe0b..5d310c7982444 100644 --- a/llvm/include/llvm/TextAPI/Architecture.def +++ b/llvm/include/llvm/TextAPI/Architecture.def @@ -13,33 +13,33 @@ /// /// X86 architectures sorted by cpu type and sub type id. /// -ARCHINFO(i386, MachO::CPU_TYPE_I386, MachO::CPU_SUBTYPE_I386_ALL, 32) -ARCHINFO(x86_64, MachO::CPU_TYPE_X86_64, MachO::CPU_SUBTYPE_X86_64_ALL, 64) -ARCHINFO(x86_64h, MachO::CPU_TYPE_X86_64, MachO::CPU_SUBTYPE_X86_64_H, 64) +ARCHINFO(i386, i386, MachO::CPU_TYPE_I386, MachO::CPU_SUBTYPE_I386_ALL, 32) +ARCHINFO(x86_64, x86_64, MachO::CPU_TYPE_X86_64, MachO::CPU_SUBTYPE_X86_64_ALL, 64) +ARCHINFO(x86_64h, x86_64h, MachO::CPU_TYPE_X86_64, MachO::CPU_SUBTYPE_X86_64_H, 64) /// /// ARM architectures sorted by cpu sub type id. /// -ARCHINFO(armv4t, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V4T, 32) -ARCHINFO(armv6, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V6, 32) -ARCHINFO(armv5, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V5TEJ, 32) -ARCHINFO(armv7, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7, 32) -ARCHINFO(armv7s, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7S, 32) -ARCHINFO(armv7k, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7K, 32) -ARCHINFO(armv6m, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V6M, 32) -ARCHINFO(armv7m, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7M, 32) -ARCHINFO(armv7em, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7EM, 32) +ARCHINFO(armv4t, armv4t, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V4T, 32) +ARCHINFO(armv6, armv6, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V6, 32) +ARCHINFO(armv5, armv5, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V5TEJ, 32) +ARCHINFO(armv7, armv7, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7, 32) +ARCHINFO(armv7s, armv7s, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7S, 32) +ARCHINFO(armv7k, armv7k, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7K, 32) +ARCHINFO(armv6m, armv6m, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V6M, 32) +ARCHINFO(armv7m, armv7m, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7M, 32) +ARCHINFO(armv7em, armv7em, MachO::CPU_TYPE_ARM, MachO::CPU_SUBTYPE_ARM_V7EM, 32) /// /// ARM64 architectures sorted by cpu sub type id. /// -ARCHINFO(arm64, MachO::CPU_TYPE_ARM64, MachO::CPU_SUBTYPE_ARM64_ALL, 64) -ARCHINFO(arm64e, MachO::CPU_TYPE_ARM64, MachO::CPU_SUBTYPE_ARM64E, 64) +ARCHINFO(arm64, arm64, MachO::CPU_TYPE_ARM64, MachO::CPU_SUBTYPE_ARM64_ALL, 64) +ARCHINFO(arm64e, arm64e, MachO::CPU_TYPE_ARM64, MachO::CPU_SUBTYPE_ARM64E, 64) /// /// ARM64_32 architectures sorted by cpu sub type id /// -ARCHINFO(arm64_32, MachO::CPU_TYPE_ARM64_32, MachO::CPU_SUBTYPE_ARM64_32_V8, 32) +ARCHINFO(arm64_32, arm64_32, MachO::CPU_TYPE_ARM64_32, MachO::CPU_SUBTYPE_ARM64_32_V8, 32) diff --git a/llvm/include/llvm/TextAPI/Architecture.h b/llvm/include/llvm/TextAPI/Architecture.h index 7a7f5416fe7c7..2ca199489f1d3 100644 --- a/llvm/include/llvm/TextAPI/Architecture.h +++ b/llvm/include/llvm/TextAPI/Architecture.h @@ -26,7 +26,7 @@ namespace MachO { /// Defines the architecture slices that are supported by Text-based Stub files. enum Architecture : uint8_t { -#define ARCHINFO(Arch, Type, SubType, NumBits) AK_##Arch, +#define ARCHINFO(Arch, Name, Type, SubType, NumBits) AK_##Arch, #include "llvm/TextAPI/Architecture.def" #undef ARCHINFO AK_unknown, // this has to go last. diff --git a/llvm/lib/TextAPI/Architecture.cpp b/llvm/lib/TextAPI/Architecture.cpp index 51ca91db13008..3b5306746e1c5 100644 --- a/llvm/lib/TextAPI/Architecture.cpp +++ b/llvm/lib/TextAPI/Architecture.cpp @@ -21,7 +21,7 @@ namespace llvm { namespace MachO { Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType) { -#define ARCHINFO(Arch, Type, Subtype, NumBits) \ +#define ARCHINFO(Arch, Name, Type, Subtype, NumBits) \ if (CPUType == (Type) && \ (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) == (Subtype)) \ return AK_##Arch; @@ -33,7 +33,7 @@ Architecture getArchitectureFromCpuType(uint32_t CPUType, uint32_t CPUSubType) { Architecture getArchitectureFromName(StringRef Name) { return StringSwitch(Name) -#define ARCHINFO(Arch, Type, Subtype, NumBits) .Case(#Arch, AK_##Arch) +#define ARCHINFO(Arch, Name, Type, Subtype, NumBits) .Case(#Name, AK_##Arch) #include "llvm/TextAPI/Architecture.def" #undef ARCHINFO .Default(AK_unknown); @@ -41,9 +41,9 @@ Architecture getArchitectureFromName(StringRef Name) { StringRef getArchitectureName(Architecture Arch) { switch (Arch) { -#define ARCHINFO(Arch, Type, Subtype, NumBits) \ +#define ARCHINFO(Arch, Name, Type, Subtype, NumBits) \ case AK_##Arch: \ - return #Arch; + return #Name; #include "llvm/TextAPI/Architecture.def" #undef ARCHINFO case AK_unknown: @@ -57,7 +57,7 @@ StringRef getArchitectureName(Architecture Arch) { std::pair getCPUTypeFromArchitecture(Architecture Arch) { switch (Arch) { -#define ARCHINFO(Arch, Type, Subtype, NumBits) \ +#define ARCHINFO(Arch, Name, Type, Subtype, NumBits) \ case AK_##Arch: \ return std::make_pair(Type, Subtype); #include "llvm/TextAPI/Architecture.def" @@ -77,7 +77,7 @@ Architecture mapToArchitecture(const Triple &Target) { bool is64Bit(Architecture Arch) { switch (Arch) { -#define ARCHINFO(Arch, Type, Subtype, NumBits) \ +#define ARCHINFO(Arch, Name, Type, Subtype, NumBits) \ case AK_##Arch: \ return NumBits == 64; #include "llvm/TextAPI/Architecture.def" diff --git a/llvm/lib/TextAPI/TextStubCommon.cpp b/llvm/lib/TextAPI/TextStubCommon.cpp index 0b710b0790b3d..7bf1f9ab4c939 100644 --- a/llvm/lib/TextAPI/TextStubCommon.cpp +++ b/llvm/lib/TextAPI/TextStubCommon.cpp @@ -133,7 +133,7 @@ QuotingType ScalarTraits::mustQuote(StringRef) { void ScalarBitSetTraits::bitset(IO &IO, ArchitectureSet &Archs) { -#define ARCHINFO(arch, type, subtype, numbits) \ +#define ARCHINFO(arch, name, type, subtype, numbits) \ IO.bitSetCase(Archs, #arch, 1U << static_cast(AK_##arch)); #include "llvm/TextAPI/Architecture.def" #undef ARCHINFO From 45327ee311c22abac1adcc15aacb1bac3c1c41a4 Mon Sep 17 00:00:00 2001 From: Cyndy Ishida Date: Thu, 7 Aug 2025 19:02:44 -0700 Subject: [PATCH 2/2] [TextAPI] Add riscv32 as a supported arch (#152619) (cherry picked from commit c9f3a706e7a3d265d995424ac8f3f082ffaf980e) --- llvm/include/llvm/TextAPI/Architecture.def | 5 ++++ llvm/unittests/TextAPI/TextStubV5Tests.cpp | 27 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/llvm/include/llvm/TextAPI/Architecture.def b/llvm/include/llvm/TextAPI/Architecture.def index 5d310c7982444..53877cf0b60ce 100644 --- a/llvm/include/llvm/TextAPI/Architecture.def +++ b/llvm/include/llvm/TextAPI/Architecture.def @@ -43,3 +43,8 @@ ARCHINFO(arm64e, arm64e, MachO::CPU_TYPE_ARM64, MachO::CPU_SUBTYPE_ARM64E, 64) /// ARM64_32 architectures sorted by cpu sub type id /// ARCHINFO(arm64_32, arm64_32, MachO::CPU_TYPE_ARM64_32, MachO::CPU_SUBTYPE_ARM64_32_V8, 32) + +/// +/// RISCV32 architectures sorted by cpu sub type id +/// +ARCHINFO(riscv32, riscv32, MachO::CPU_TYPE_RISCV, MachO::CPU_SUBTYPE_RISCV_ALL, 32) diff --git a/llvm/unittests/TextAPI/TextStubV5Tests.cpp b/llvm/unittests/TextAPI/TextStubV5Tests.cpp index 24577b3ec6148..f6689f7524a72 100644 --- a/llvm/unittests/TextAPI/TextStubV5Tests.cpp +++ b/llvm/unittests/TextAPI/TextStubV5Tests.cpp @@ -1167,6 +1167,33 @@ TEST(TBDv5, InvalidMinOS) { EXPECT_EQ("invalid min_deployment section\n", ErrorMessage); } +TEST(TBDv5, RISCV) { + static const char TBDv5File[] = R"({ +"tapi_tbd_version": 5, +"main_library": { + "target_info": [ + { + "target": "riscv32-ios", + "min_deployment": "34.1" + } + ], + "install_names":[ + { "name":"/S/L/F/Foo.framework/Foo" } + ] +}})"; + + Expected Result = + TextAPIReader::get(MemoryBufferRef(TBDv5File, "Test.tbd")); + EXPECT_TRUE(!!Result); + Target ExpectedTarget = Target(AK_riscv32, PLATFORM_IOS, VersionTuple(34, 1)); + TBDFile ReadFile = std::move(Result.get()); + EXPECT_EQ(FileType::TBD_V5, ReadFile->getFileType()); + EXPECT_EQ(std::string("/S/L/F/Foo.framework/Foo"), + ReadFile->getInstallName()); + EXPECT_TRUE(ReadFile->targets().begin() != ReadFile->targets().end()); + EXPECT_EQ(*ReadFile->targets().begin(), ExpectedTarget); +} + TEST(TBDv5, SimSupport) { static const char TBDv5File[] = R"({ "tapi_tbd_version": 5,