[TextAPI] Arch&Platform to Target
Summary:
This is a patch for updating TextAPI/Macho to read in targets as opposed to arch/platform.
This is because in previous versions tbd files only supported a single platform but that is no longer the case,
so, now its tracked by unique triples.
This precedes a seperate patch that will add the TBD-v4 format
Reviewers: ributzka, steven_wu, plotfi, compnerd, smeenai
Reviewed By: ributzka
Subscribers: mgorny, hiraditya, dexonsmith, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67527
llvm-svn: 372396
diff --git a/llvm/unittests/TextAPI/TextStubV1Tests.cpp b/llvm/unittests/TextAPI/TextStubV1Tests.cpp
index 383bc41..4472b1c 100644
--- a/llvm/unittests/TextAPI/TextStubV1Tests.cpp
+++ b/llvm/unittests/TextAPI/TextStubV1Tests.cpp
@@ -87,8 +87,13 @@
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
auto Archs = AK_armv7 | AK_armv7s | AK_armv7k | AK_arm64;
+ auto Platform = PlatformKind::iOS;
+ TargetList Targets;
+ for (auto &&arch : Archs)
+ Targets.emplace_back(Target(arch, Platform));
EXPECT_EQ(Archs, File->getArchitectures());
- EXPECT_EQ(PlatformKind::iOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
EXPECT_EQ(std::string("Test.dylib"), File->getInstallName());
EXPECT_EQ(PackedVersion(2, 3, 4), File->getCurrentVersion());
EXPECT_EQ(PackedVersion(1, 0, 0), File->getCompatibilityVersion());
@@ -97,8 +102,8 @@
EXPECT_TRUE(File->isTwoLevelNamespace());
EXPECT_TRUE(File->isApplicationExtensionSafe());
EXPECT_FALSE(File->isInstallAPI());
- InterfaceFileRef client("clientA", Archs);
- InterfaceFileRef reexport("/usr/lib/libfoo.dylib", Archs);
+ InterfaceFileRef client("clientA", Targets);
+ InterfaceFileRef reexport("/usr/lib/libfoo.dylib", Targets);
EXPECT_EQ(1U, File->allowableClients().size());
EXPECT_EQ(client, File->allowableClients().front());
EXPECT_EQ(1U, File->reexportedLibraries().size());
@@ -117,6 +122,10 @@
EXPECT_EQ(sizeof(TBDv1Symbols) / sizeof(ExportedSymbol), Exports.size());
EXPECT_TRUE(
std::equal(Exports.begin(), Exports.end(), std::begin(TBDv1Symbols)));
+
+ File->addSymbol(SymbolKind::ObjectiveCClassEHType, "Class1", {Targets[1]});
+ File->addSymbol(SymbolKind::ObjectiveCInstanceVariable, "Class1._ivar1",
+ {Targets[1]});
}
TEST(TBDv1, ReadFile2) {
@@ -131,8 +140,13 @@
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
auto Archs = AK_armv7 | AK_armv7s | AK_armv7k | AK_arm64;
+ auto Platform = PlatformKind::iOS;
+ TargetList Targets;
+ for (auto &&arch : Archs)
+ Targets.emplace_back(Target(arch, Platform));
EXPECT_EQ(Archs, File->getArchitectures());
- EXPECT_EQ(PlatformKind::iOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
EXPECT_EQ(std::string("Test.dylib"), File->getInstallName());
EXPECT_EQ(PackedVersion(1, 0, 0), File->getCurrentVersion());
EXPECT_EQ(PackedVersion(1, 0, 0), File->getCompatibilityVersion());
@@ -169,25 +183,27 @@
"...\n";
InterfaceFile File;
+ TargetList Targets;
+ for (auto &&arch : AK_i386 | AK_x86_64)
+ Targets.emplace_back(Target(arch, PlatformKind::macOS));
File.setPath("libfoo.dylib");
File.setInstallName("/usr/lib/libfoo.dylib");
File.setFileType(FileType::TBD_V1);
- File.setArchitectures(AK_i386 | AK_x86_64);
- File.setPlatform(PlatformKind::macOS);
+ File.addTargets(Targets);
File.setCurrentVersion(PackedVersion(1, 2, 3));
File.setSwiftABIVersion(5);
File.setObjCConstraint(ObjCConstraintType::Retain_Release);
- File.addAllowableClient("clientA", AK_x86_64);
- File.addReexportedLibrary("/usr/lib/libfoo.dylib", AK_x86_64);
- File.addSymbol(SymbolKind::GlobalSymbol, "_sym1", AK_i386);
- File.addSymbol(SymbolKind::GlobalSymbol, "_sym2", AK_i386,
+ File.addAllowableClient("clientA", Targets[1]);
+ File.addReexportedLibrary("/usr/lib/libfoo.dylib", Targets[1]);
+ File.addSymbol(SymbolKind::GlobalSymbol, "_sym1", {Targets[0]});
+ File.addSymbol(SymbolKind::GlobalSymbol, "_sym2", {Targets[0]},
SymbolFlags::WeakDefined);
- File.addSymbol(SymbolKind::GlobalSymbol, "_sym3", AK_i386,
+ File.addSymbol(SymbolKind::GlobalSymbol, "_sym3", {Targets[0]},
SymbolFlags::ThreadLocalValue);
- File.addSymbol(SymbolKind::ObjectiveCClass, "Class1", AK_x86_64);
- File.addSymbol(SymbolKind::ObjectiveCClassEHType, "Class1", AK_x86_64);
+ File.addSymbol(SymbolKind::ObjectiveCClass, "Class1", {Targets[1]});
+ File.addSymbol(SymbolKind::ObjectiveCClassEHType, "Class1", {Targets[1]});
File.addSymbol(SymbolKind::ObjectiveCInstanceVariable, "Class1._ivar1",
- AK_x86_64);
+ {Targets[1]});
SmallString<4096> Buffer;
raw_svector_ostream OS(Buffer);
@@ -206,9 +222,11 @@
auto Result =
TextAPIReader::get(MemoryBufferRef(tbd_v1_platform_macos, "Test.tbd"));
EXPECT_TRUE(!!Result);
+ auto Platform = PlatformKind::macOS;
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
- EXPECT_EQ(PlatformKind::macOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
}
TEST(TBDv1, Platform_iOS) {
@@ -221,9 +239,11 @@
auto Result =
TextAPIReader::get(MemoryBufferRef(tbd_v1_platform_ios, "Test.tbd"));
EXPECT_TRUE(!!Result);
+ auto Platform = PlatformKind::iOS;
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
- EXPECT_EQ(PlatformKind::iOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
}
TEST(TBDv1, Platform_watchOS) {
@@ -236,9 +256,11 @@
auto Result =
TextAPIReader::get(MemoryBufferRef(tbd_v1_platform_watchos, "Test.tbd"));
EXPECT_TRUE(!!Result);
+ auto Platform = PlatformKind::watchOS;
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
- EXPECT_EQ(PlatformKind::watchOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
}
TEST(TBDv1, Platform_tvOS) {
@@ -251,9 +273,11 @@
auto Result =
TextAPIReader::get(MemoryBufferRef(tbd_v1_platform_tvos, "Test.tbd"));
EXPECT_TRUE(!!Result);
+ auto Platform = PlatformKind::tvOS;
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
- EXPECT_EQ(PlatformKind::tvOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
}
TEST(TBDv1, Platform_bridgeOS) {
@@ -266,9 +290,11 @@
auto Result =
TextAPIReader::get(MemoryBufferRef(tbd_v1_platform_bridgeos, "Test.tbd"));
EXPECT_TRUE(!!Result);
+ auto Platform = PlatformKind::bridgeOS;
auto File = std::move(Result.get());
EXPECT_EQ(FileType::TBD_V1, File->getFileType());
- EXPECT_EQ(PlatformKind::bridgeOS, File->getPlatform());
+ EXPECT_EQ(File->getPlatforms().size(), 1U);
+ EXPECT_EQ(Platform, *File->getPlatforms().begin());
}
TEST(TBDv1, Swift_1_0) {