diff options
author | Dan Gohman <dan433584@gmail.com> | 2019-01-15 06:58:13 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2019-01-15 06:58:13 +0000 |
commit | 7bcc258758499e5673ed8ee2975d88fcc5308726 (patch) | |
tree | f069402a8def8697b8d32d62bd17270e8caacaaa /llvm | |
parent | e84a5dd8b954e63f75f9ed0bacbdf75a9bca57c3 (diff) |
[WebAssembly] Support multilibs for wasm32 and add a wasm OS that uses it
This adds support for multilib paths for wasm32 targets, following
[Debian's Multiarch conventions], and also adds an experimental OS name in
order to test it.
[Debian's Multiarch conventions]: https://wiki.debian.org/Multiarch/
Differential Revision: https://reviews.llvm.org/D56553
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/ADT/Triple.h | 8 | ||||
-rw-r--r-- | llvm/lib/Support/Triple.cpp | 2 | ||||
-rw-r--r-- | llvm/unittests/ADT/TripleTest.cpp | 18 |
3 files changed, 27 insertions, 1 deletions
diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h index 04b64e2fa60..ec2410d0d49 100644 --- a/llvm/include/llvm/ADT/Triple.h +++ b/llvm/include/llvm/ADT/Triple.h @@ -187,7 +187,8 @@ public: AMDPAL, // AMD PAL Runtime HermitCore, // HermitCore Unikernel/Multikernel Hurd, // GNU/Hurd - LastOSType = Hurd + COWS, // Capability-Oriented WebAssembly Syscalls + LastOSType = COWS }; enum EnvironmentType { UnknownEnvironment, @@ -588,6 +589,11 @@ public: return getOS() == Triple::Hurd; } + /// Tests whether the OS is COWS. + bool isOSCOWS() const { + return getOS() == Triple::COWS; + } + /// Tests whether the OS uses glibc. bool isOSGlibc() const { return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD || diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp index 4471fd05181..46522c0f6d5 100644 --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -211,6 +211,7 @@ StringRef Triple::getOSTypeName(OSType Kind) { case AMDPAL: return "amdpal"; case HermitCore: return "hermit"; case Hurd: return "hurd"; + case COWS: return "cows"; } llvm_unreachable("Invalid OSType"); @@ -510,6 +511,7 @@ static Triple::OSType parseOS(StringRef OSName) { .StartsWith("amdpal", Triple::AMDPAL) .StartsWith("hermit", Triple::HermitCore) .StartsWith("hurd", Triple::Hurd) + .StartsWith("cows", Triple::COWS) .Default(Triple::UnknownOS); } diff --git a/llvm/unittests/ADT/TripleTest.cpp b/llvm/unittests/ADT/TripleTest.cpp index efe859f158f..bb31b8b6225 100644 --- a/llvm/unittests/ADT/TripleTest.cpp +++ b/llvm/unittests/ADT/TripleTest.cpp @@ -253,12 +253,24 @@ TEST(TripleTest, ParsedIDs) { EXPECT_EQ(Triple::UnknownOS, T.getOS()); EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + T = Triple("wasm32-unknown-cows-musl"); + EXPECT_EQ(Triple::wasm32, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::COWS, T.getOS()); + EXPECT_EQ(Triple::Musl, T.getEnvironment()); + T = Triple("wasm64-unknown-unknown"); EXPECT_EQ(Triple::wasm64, T.getArch()); EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); EXPECT_EQ(Triple::UnknownOS, T.getOS()); EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + T = Triple("wasm64-unknown-cows-musl"); + EXPECT_EQ(Triple::wasm64, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::COWS, T.getOS()); + EXPECT_EQ(Triple::Musl, T.getEnvironment()); + T = Triple("avr-unknown-unknown"); EXPECT_EQ(Triple::avr, T.getArch()); EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); @@ -1235,11 +1247,17 @@ TEST(TripleTest, FileFormat) { EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat()); EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat()); + EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-cows-musl").getObjectFormat()); + EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-cows-musl").getObjectFormat()); EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown-wasm").getObjectFormat()); EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown-wasm").getObjectFormat()); + EXPECT_EQ(Triple::Wasm, + Triple("wasm32-unknown-cows-musl-wasm").getObjectFormat()); + EXPECT_EQ(Triple::Wasm, + Triple("wasm64-unknown-cows-musl-wasm").getObjectFormat()); Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); |