Skip to content

Commit a214e62

Browse files
committed
Rename wasm32-wasi to wasm32-wasip1.
This adds code to recognize "wasm32-wasip1", "wasm32-wasip2", and "wasm32-wasip3" as explicit targets, and adds a deprecation warning when the "wasm32-wasi" target is used, pointing users to the "wasm32-wasip1" target. Fixes #165344.
1 parent 6214dcc commit a214e62

File tree

9 files changed

+118
-10
lines changed

9 files changed

+118
-10
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,10 @@ WebAssembly Support
637637

638638
- Fix a bug so that ``__has_attribute(musttail)`` is no longer true when WebAssembly's tail-call is not enabled. (#GH163256)
639639

640+
- The `wasm32-wasi` target has been renamed to `wasm32-wasip1`. The old
641+
option is still recognized, though by default will emit a deprecation
642+
warning.
643+
640644
AVR Support
641645
^^^^^^^^^^^
642646

clang/lib/Basic/Targets.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -702,9 +702,16 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
702702
!Triple.isOSBinFormatWasm())
703703
return nullptr;
704704
switch (os) {
705-
case llvm::Triple::WASI:
706-
return std::make_unique<WASITargetInfo<WebAssembly32TargetInfo>>(Triple,
707-
Opts);
705+
case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
706+
case llvm::Triple::WASIp1:
707+
return std::make_unique<WASIP1TargetInfo<WebAssembly32TargetInfo>>(Triple,
708+
Opts);
709+
case llvm::Triple::WASIp2:
710+
return std::make_unique<WASIP2TargetInfo<WebAssembly32TargetInfo>>(Triple,
711+
Opts);
712+
case llvm::Triple::WASIp3:
713+
return std::make_unique<WASIP3TargetInfo<WebAssembly32TargetInfo>>(Triple,
714+
Opts);
708715
case llvm::Triple::Emscripten:
709716
return std::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
710717
Triple, Opts);
@@ -724,9 +731,16 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
724731
!Triple.isOSBinFormatWasm())
725732
return nullptr;
726733
switch (os) {
727-
case llvm::Triple::WASI:
728-
return std::make_unique<WASITargetInfo<WebAssembly64TargetInfo>>(Triple,
729-
Opts);
734+
case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
735+
case llvm::Triple::WASIp1:
736+
return std::make_unique<WASIP1TargetInfo<WebAssembly64TargetInfo>>(Triple,
737+
Opts);
738+
case llvm::Triple::WASIp2:
739+
return std::make_unique<WASIP2TargetInfo<WebAssembly64TargetInfo>>(Triple,
740+
Opts);
741+
case llvm::Triple::WASIp3:
742+
return std::make_unique<WASIP3TargetInfo<WebAssembly64TargetInfo>>(Triple,
743+
Opts);
730744
case llvm::Triple::Emscripten:
731745
return std::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
732746
Triple, Opts);

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -940,14 +940,45 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
940940
}
941941
};
942942

943-
// WASI target
943+
// WASIp1 target
944944
template <typename Target>
945-
class LLVM_LIBRARY_VISIBILITY WASITargetInfo
945+
class LLVM_LIBRARY_VISIBILITY WASIP1TargetInfo
946946
: public WebAssemblyOSTargetInfo<Target> {
947947
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
948948
MacroBuilder &Builder) const final {
949949
WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
950950
Builder.defineMacro("__wasi__");
951+
Builder.defineMacro("__wasip1__");
952+
}
953+
954+
public:
955+
using WebAssemblyOSTargetInfo<Target>::WebAssemblyOSTargetInfo;
956+
};
957+
958+
// WASIp2 target
959+
template <typename Target>
960+
class LLVM_LIBRARY_VISIBILITY WASIP2TargetInfo
961+
: public WebAssemblyOSTargetInfo<Target> {
962+
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
963+
MacroBuilder &Builder) const final {
964+
WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
965+
Builder.defineMacro("__wasi__");
966+
Builder.defineMacro("__wasip2__");
967+
}
968+
969+
public:
970+
using WebAssemblyOSTargetInfo<Target>::WebAssemblyOSTargetInfo;
971+
};
972+
973+
// WASIp3 target
974+
template <typename Target>
975+
class LLVM_LIBRARY_VISIBILITY WASIP3TargetInfo
976+
: public WebAssemblyOSTargetInfo<Target> {
977+
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
978+
MacroBuilder &Builder) const final {
979+
WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
980+
Builder.defineMacro("__wasi__");
981+
Builder.defineMacro("__wasip3__");
951982
}
952983

953984
public:

clang/lib/Driver/ToolChains/WebAssembly.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,12 @@ WebAssembly::WebAssembly(const Driver &D, const llvm::Triple &Triple,
265265
}
266266
getFilePaths().push_back(SysRoot + "/lib/" + MultiarchTriple);
267267
}
268+
269+
if (getTriple().getOS() == llvm::Triple::WASI) {
270+
D.Diag(diag::warn_drv_deprecated_custom)
271+
<< "--target=wasm32-wasi"
272+
<< "use --target=wasm32-wasip1 instead";
273+
}
268274
}
269275

270276
const char *WebAssembly::getDefaultLinker() const {

clang/lib/Lex/InitHeaderSearch.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths(
230230
case llvm::Triple::Solaris:
231231
case llvm::Triple::UEFI:
232232
case llvm::Triple::WASI:
233+
case llvm::Triple::WASIp1:
234+
case llvm::Triple::WASIp2:
235+
case llvm::Triple::WASIp3:
233236
case llvm::Triple::Win32:
234237
case llvm::Triple::ZOS:
235238
return false;

llvm/docs/ReleaseNotes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,10 @@ Changes to the RISC-V Backend
153153
Changes to the WebAssembly Backend
154154
----------------------------------
155155

156+
- The `wasm32-wasi` target has been renamed to `wasm32-wasip1`. The old
157+
option is still recognized, though by default will emit a deprecation
158+
warning.
159+
156160
Changes to the Windows Target
157161
-----------------------------
158162

llvm/include/llvm/TargetParser/Triple.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,10 @@ class Triple {
241241
AMDPAL, // AMD PAL Runtime
242242
HermitCore, // HermitCore Unikernel/Multikernel
243243
Hurd, // GNU/Hurd
244-
WASI, // Experimental WebAssembly OS
244+
WASI, // Deprecated alias of WASI 0.1; in the future will be WASI 1.0.
245+
WASIp1, // WASI 0.1
246+
WASIp2, // WASI 0.2
247+
WASIp3, // WASI 0.3
245248
Emscripten,
246249
ShaderModel, // DirectX ShaderModel
247250
LiteOS,
@@ -757,7 +760,8 @@ class Triple {
757760

758761
/// Tests whether the OS is WASI.
759762
bool isOSWASI() const {
760-
return getOS() == Triple::WASI;
763+
return getOS() == Triple::WASI || getOS() == Triple::WASIp1 ||
764+
getOS() == Triple::WASIp2 || getOS() == Triple::WASIp3;
761765
}
762766

763767
/// Tests whether the OS is Emscripten.

llvm/lib/TargetParser/Triple.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,9 @@ StringRef Triple::getOSTypeName(OSType Kind) {
324324
case TvOS: return "tvos";
325325
case UEFI: return "uefi";
326326
case WASI: return "wasi";
327+
case WASIp1: return "wasip1";
328+
case WASIp2: return "wasip2";
329+
case WASIp3: return "wasip3";
327330
case WatchOS: return "watchos";
328331
case Win32: return "windows";
329332
case ZOS: return "zos";
@@ -735,6 +738,9 @@ static Triple::OSType parseOS(StringRef OSName) {
735738
.StartsWith("amdpal", Triple::AMDPAL)
736739
.StartsWith("hermit", Triple::HermitCore)
737740
.StartsWith("hurd", Triple::Hurd)
741+
.StartsWith("wasip1", Triple::WASIp1)
742+
.StartsWith("wasip2", Triple::WASIp2)
743+
.StartsWith("wasip3", Triple::WASIp3)
738744
.StartsWith("wasi", Triple::WASI)
739745
.StartsWith("emscripten", Triple::Emscripten)
740746
.StartsWith("shadermodel", Triple::ShaderModel)

llvm/unittests/TargetParser/TripleTest.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,24 @@ TEST(TripleTest, ParsedIDs) {
614614
EXPECT_EQ(Triple::WASI, T.getOS());
615615
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
616616

617+
T = Triple("wasm32-unknown-wasip1");
618+
EXPECT_EQ(Triple::wasm32, T.getArch());
619+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
620+
EXPECT_EQ(Triple::WASIp1, T.getOS());
621+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
622+
623+
T = Triple("wasm32-unknown-wasip2");
624+
EXPECT_EQ(Triple::wasm32, T.getArch());
625+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
626+
EXPECT_EQ(Triple::WASIp2, T.getOS());
627+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
628+
629+
T = Triple("wasm32-unknown-wasip3");
630+
EXPECT_EQ(Triple::wasm32, T.getArch());
631+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
632+
EXPECT_EQ(Triple::WASIp3, T.getOS());
633+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
634+
617635
T = Triple("wasm64-unknown-unknown");
618636
EXPECT_EQ(Triple::wasm64, T.getArch());
619637
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
@@ -626,6 +644,24 @@ TEST(TripleTest, ParsedIDs) {
626644
EXPECT_EQ(Triple::WASI, T.getOS());
627645
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
628646

647+
T = Triple("wasm64-unknown-wasip1");
648+
EXPECT_EQ(Triple::wasm64, T.getArch());
649+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
650+
EXPECT_EQ(Triple::WASIp1, T.getOS());
651+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
652+
653+
T = Triple("wasm64-unknown-wasip2");
654+
EXPECT_EQ(Triple::wasm64, T.getArch());
655+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
656+
EXPECT_EQ(Triple::WASIp2, T.getOS());
657+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
658+
659+
T = Triple("wasm64-unknown-wasip3");
660+
EXPECT_EQ(Triple::wasm64, T.getArch());
661+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
662+
EXPECT_EQ(Triple::WASIp3, T.getOS());
663+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
664+
629665
T = Triple("avr-unknown-unknown");
630666
EXPECT_EQ(Triple::avr, T.getArch());
631667
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());

0 commit comments

Comments
 (0)