Skip to content

Commit 1839dfd

Browse files
author
Dan Gohman
committed
[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 llvm-svn: 351163
1 parent 3c5423b commit 1839dfd

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

llvm/include/llvm/ADT/Triple.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ class Triple {
187187
AMDPAL, // AMD PAL Runtime
188188
HermitCore, // HermitCore Unikernel/Multikernel
189189
Hurd, // GNU/Hurd
190-
LastOSType = Hurd
190+
COWS, // Capability-Oriented WebAssembly Syscalls
191+
LastOSType = COWS
191192
};
192193
enum EnvironmentType {
193194
UnknownEnvironment,
@@ -588,6 +589,11 @@ class Triple {
588589
return getOS() == Triple::Hurd;
589590
}
590591

592+
/// Tests whether the OS is COWS.
593+
bool isOSCOWS() const {
594+
return getOS() == Triple::COWS;
595+
}
596+
591597
/// Tests whether the OS uses glibc.
592598
bool isOSGlibc() const {
593599
return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD ||

llvm/lib/Support/Triple.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
211211
case AMDPAL: return "amdpal";
212212
case HermitCore: return "hermit";
213213
case Hurd: return "hurd";
214+
case COWS: return "cows";
214215
}
215216

216217
llvm_unreachable("Invalid OSType");
@@ -510,6 +511,7 @@ static Triple::OSType parseOS(StringRef OSName) {
510511
.StartsWith("amdpal", Triple::AMDPAL)
511512
.StartsWith("hermit", Triple::HermitCore)
512513
.StartsWith("hurd", Triple::Hurd)
514+
.StartsWith("cows", Triple::COWS)
513515
.Default(Triple::UnknownOS);
514516
}
515517

llvm/unittests/ADT/TripleTest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,24 @@ TEST(TripleTest, ParsedIDs) {
253253
EXPECT_EQ(Triple::UnknownOS, T.getOS());
254254
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
255255

256+
T = Triple("wasm32-unknown-cows-musl");
257+
EXPECT_EQ(Triple::wasm32, T.getArch());
258+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
259+
EXPECT_EQ(Triple::COWS, T.getOS());
260+
EXPECT_EQ(Triple::Musl, T.getEnvironment());
261+
256262
T = Triple("wasm64-unknown-unknown");
257263
EXPECT_EQ(Triple::wasm64, T.getArch());
258264
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
259265
EXPECT_EQ(Triple::UnknownOS, T.getOS());
260266
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
261267

268+
T = Triple("wasm64-unknown-cows-musl");
269+
EXPECT_EQ(Triple::wasm64, T.getArch());
270+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
271+
EXPECT_EQ(Triple::COWS, T.getOS());
272+
EXPECT_EQ(Triple::Musl, T.getEnvironment());
273+
262274
T = Triple("avr-unknown-unknown");
263275
EXPECT_EQ(Triple::avr, T.getArch());
264276
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
@@ -1235,11 +1247,17 @@ TEST(TripleTest, FileFormat) {
12351247

12361248
EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
12371249
EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
1250+
EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-cows-musl").getObjectFormat());
1251+
EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-cows-musl").getObjectFormat());
12381252

12391253
EXPECT_EQ(Triple::Wasm,
12401254
Triple("wasm32-unknown-unknown-wasm").getObjectFormat());
12411255
EXPECT_EQ(Triple::Wasm,
12421256
Triple("wasm64-unknown-unknown-wasm").getObjectFormat());
1257+
EXPECT_EQ(Triple::Wasm,
1258+
Triple("wasm32-unknown-cows-musl-wasm").getObjectFormat());
1259+
EXPECT_EQ(Triple::Wasm,
1260+
Triple("wasm64-unknown-cows-musl-wasm").getObjectFormat());
12431261

12441262
Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
12451263
EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());

0 commit comments

Comments
 (0)