summaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
authorDan Gohman <dan433584@gmail.com>2019-01-15 06:58:13 +0000
committerDan Gohman <dan433584@gmail.com>2019-01-15 06:58:13 +0000
commit7bcc258758499e5673ed8ee2975d88fcc5308726 (patch)
treef069402a8def8697b8d32d62bd17270e8caacaaa /llvm
parente84a5dd8b954e63f75f9ed0bacbdf75a9bca57c3 (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.h8
-rw-r--r--llvm/lib/Support/Triple.cpp2
-rw-r--r--llvm/unittests/ADT/TripleTest.cpp18
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());