[clang] [llvm] Rename wasm32-wasi to wasm32-wasip1. (PR #165345)
Dan Gohman via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 27 19:27:37 PDT 2025
https://github.com/sunfishcode updated https://github.com/llvm/llvm-project/pull/165345
>From 4809631f529f6f83105d97a4ecbe7c8312f2c5fd Mon Sep 17 00:00:00 2001
From: Dan Gohman <dev at sunfishcode.online>
Date: Mon, 27 Oct 2025 19:13:17 -0700
Subject: [PATCH 1/2] 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.
---
clang/docs/ReleaseNotes.rst | 4 +++
clang/lib/Basic/Targets.cpp | 26 +++++++++++----
clang/lib/Basic/Targets/OSTargets.h | 35 ++++++++++++++++++--
clang/lib/Driver/ToolChains/WebAssembly.cpp | 6 ++++
clang/lib/Lex/InitHeaderSearch.cpp | 3 ++
llvm/docs/ReleaseNotes.md | 4 +++
llvm/include/llvm/TargetParser/Triple.h | 8 +++--
llvm/lib/TargetParser/Triple.cpp | 6 ++++
llvm/unittests/TargetParser/TripleTest.cpp | 36 +++++++++++++++++++++
9 files changed, 118 insertions(+), 10 deletions(-)
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index e6e33e7a9a280..82c3932fcfe18 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -576,6 +576,10 @@ NetBSD Support
WebAssembly Support
^^^^^^^^^^^^^^^^^^^
+- The `wasm32-wasi` target has been renamed to `wasm32-wasip1`. The old
+ option is still recognized, though by default will emit a deprecation
+ warning.
+
AVR Support
^^^^^^^^^^^
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index f39c698b5d734..f27f53fc1c967 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -702,9 +702,16 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
!Triple.isOSBinFormatWasm())
return nullptr;
switch (os) {
- case llvm::Triple::WASI:
- return std::make_unique<WASITargetInfo<WebAssembly32TargetInfo>>(Triple,
- Opts);
+ case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
+ case llvm::Triple::WASIp1:
+ return std::make_unique<WASIP1TargetInfo<WebAssembly32TargetInfo>>(Triple,
+ Opts);
+ case llvm::Triple::WASIp2:
+ return std::make_unique<WASIP2TargetInfo<WebAssembly32TargetInfo>>(Triple,
+ Opts);
+ case llvm::Triple::WASIp3:
+ return std::make_unique<WASIP3TargetInfo<WebAssembly32TargetInfo>>(Triple,
+ Opts);
case llvm::Triple::Emscripten:
return std::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
Triple, Opts);
@@ -724,9 +731,16 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
!Triple.isOSBinFormatWasm())
return nullptr;
switch (os) {
- case llvm::Triple::WASI:
- return std::make_unique<WASITargetInfo<WebAssembly64TargetInfo>>(Triple,
- Opts);
+ case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
+ case llvm::Triple::WASIp1:
+ return std::make_unique<WASIP1TargetInfo<WebAssembly64TargetInfo>>(Triple,
+ Opts);
+ case llvm::Triple::WASIp2:
+ return std::make_unique<WASIP2TargetInfo<WebAssembly64TargetInfo>>(Triple,
+ Opts);
+ case llvm::Triple::WASIp3:
+ return std::make_unique<WASIP3TargetInfo<WebAssembly64TargetInfo>>(Triple,
+ Opts);
case llvm::Triple::Emscripten:
return std::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
Triple, Opts);
diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h
index 4d81c9a83714d..3b7a08213962b 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -940,14 +940,45 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
}
};
-// WASI target
+// WASIp1 target
template <typename Target>
-class LLVM_LIBRARY_VISIBILITY WASITargetInfo
+class LLVM_LIBRARY_VISIBILITY WASIP1TargetInfo
: public WebAssemblyOSTargetInfo<Target> {
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
MacroBuilder &Builder) const final {
WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
Builder.defineMacro("__wasi__");
+ Builder.defineMacro("__wasip1__");
+ }
+
+public:
+ using WebAssemblyOSTargetInfo<Target>::WebAssemblyOSTargetInfo;
+};
+
+// WASIp2 target
+template <typename Target>
+class LLVM_LIBRARY_VISIBILITY WASIP2TargetInfo
+ : public WebAssemblyOSTargetInfo<Target> {
+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ MacroBuilder &Builder) const final {
+ WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
+ Builder.defineMacro("__wasi__");
+ Builder.defineMacro("__wasip2__");
+ }
+
+public:
+ using WebAssemblyOSTargetInfo<Target>::WebAssemblyOSTargetInfo;
+};
+
+// WASIp3 target
+template <typename Target>
+class LLVM_LIBRARY_VISIBILITY WASIP3TargetInfo
+ : public WebAssemblyOSTargetInfo<Target> {
+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ MacroBuilder &Builder) const final {
+ WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
+ Builder.defineMacro("__wasi__");
+ Builder.defineMacro("__wasip3__");
}
public:
diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp
index 5054868b5ff4d..67f6382c4dac9 100644
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -265,6 +265,12 @@ WebAssembly::WebAssembly(const Driver &D, const llvm::Triple &Triple,
}
getFilePaths().push_back(SysRoot + "/lib/" + MultiarchTriple);
}
+
+ if (getTriple().getOS() == llvm::Triple::WASI) {
+ D.Diag(diag::warn_drv_deprecated_custom)
+ << "--target=wasm32-wasi"
+ << "use --target=wasm32-wasip1 instead";
+ }
}
const char *WebAssembly::getDefaultLinker() const {
diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp
index 3e5f947a82cc3..e30925f4e548c 100644
--- a/clang/lib/Lex/InitHeaderSearch.cpp
+++ b/clang/lib/Lex/InitHeaderSearch.cpp
@@ -230,6 +230,9 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths(
case llvm::Triple::Solaris:
case llvm::Triple::UEFI:
case llvm::Triple::WASI:
+ case llvm::Triple::WASIp1:
+ case llvm::Triple::WASIp2:
+ case llvm::Triple::WASIp3:
case llvm::Triple::Win32:
case llvm::Triple::ZOS:
return false;
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 36383b12788f9..5b0e814bcbd65 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -139,6 +139,10 @@ Changes to the RISC-V Backend
Changes to the WebAssembly Backend
----------------------------------
+- The `wasm32-wasi` target has been renamed to `wasm32-wasip1`. The old
+ option is still recognized, though by default will emit a deprecation
+ warning.
+
Changes to the Windows Target
-----------------------------
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index 0e82dd212f34d..89bf990d83aa9 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -241,7 +241,10 @@ class Triple {
AMDPAL, // AMD PAL Runtime
HermitCore, // HermitCore Unikernel/Multikernel
Hurd, // GNU/Hurd
- WASI, // Experimental WebAssembly OS
+ WASI, // Deprecated alias of WASI 0.1; in the future will be WASI 1.0.
+ WASIp1, // WASI 0.1
+ WASIp2, // WASI 0.2
+ WASIp3, // WASI 0.3
Emscripten,
ShaderModel, // DirectX ShaderModel
LiteOS,
@@ -743,7 +746,8 @@ class Triple {
/// Tests whether the OS is WASI.
bool isOSWASI() const {
- return getOS() == Triple::WASI;
+ return getOS() == Triple::WASI || getOS() == Triple::WASIp1 ||
+ getOS() == Triple::WASIp2 || getOS() == Triple::WASIp3;
}
/// Tests whether the OS is Emscripten.
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index 11ba9ee32f66a..80d500dcc4fc6 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -324,6 +324,9 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case TvOS: return "tvos";
case UEFI: return "uefi";
case WASI: return "wasi";
+ case WASIp1: return "wasip1";
+ case WASIp2: return "wasip2";
+ case WASIp3: return "wasip3";
case WatchOS: return "watchos";
case Win32: return "windows";
case ZOS: return "zos";
@@ -735,6 +738,9 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("amdpal", Triple::AMDPAL)
.StartsWith("hermit", Triple::HermitCore)
.StartsWith("hurd", Triple::Hurd)
+ .StartsWith("wasip1", Triple::WASIp1)
+ .StartsWith("wasip2", Triple::WASIp2)
+ .StartsWith("wasip3", Triple::WASIp3)
.StartsWith("wasi", Triple::WASI)
.StartsWith("emscripten", Triple::Emscripten)
.StartsWith("shadermodel", Triple::ShaderModel)
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp
index 3e803691cfd1f..367788af6c0bd 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -614,6 +614,24 @@ TEST(TripleTest, ParsedIDs) {
EXPECT_EQ(Triple::WASI, T.getOS());
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+ T = Triple("wasm32-unknown-wasip1");
+ EXPECT_EQ(Triple::wasm32, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::WASIp1, T.getOS());
+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
+ T = Triple("wasm32-unknown-wasip2");
+ EXPECT_EQ(Triple::wasm32, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::WASIp2, T.getOS());
+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
+ T = Triple("wasm32-unknown-wasip3");
+ EXPECT_EQ(Triple::wasm32, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::WASIp3, T.getOS());
+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
T = Triple("wasm64-unknown-unknown");
EXPECT_EQ(Triple::wasm64, T.getArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
@@ -626,6 +644,24 @@ TEST(TripleTest, ParsedIDs) {
EXPECT_EQ(Triple::WASI, T.getOS());
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+ T = Triple("wasm64-unknown-wasip1");
+ EXPECT_EQ(Triple::wasm64, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::WASIp1, T.getOS());
+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
+ T = Triple("wasm64-unknown-wasip2");
+ EXPECT_EQ(Triple::wasm64, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::WASIp2, T.getOS());
+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
+ T = Triple("wasm64-unknown-wasip3");
+ EXPECT_EQ(Triple::wasm64, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::WASIp3, T.getOS());
+ EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
T = Triple("avr-unknown-unknown");
EXPECT_EQ(Triple::avr, T.getArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
>From eb1a34021caf6d7d7de106db9dac0443e9c222c9 Mon Sep 17 00:00:00 2001
From: Dan Gohman <dev at sunfishcode.online>
Date: Mon, 27 Oct 2025 19:27:22 -0700
Subject: [PATCH 2/2] formatting
---
clang/lib/Basic/Targets.cpp | 20 ++++++++++----------
llvm/include/llvm/TargetParser/Triple.h | 2 +-
llvm/lib/TargetParser/Triple.cpp | 9 ++++++---
3 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index f27f53fc1c967..35c6e278da35b 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -702,17 +702,17 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
!Triple.isOSBinFormatWasm())
return nullptr;
switch (os) {
- case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
- case llvm::Triple::WASIp1:
+ case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
+ case llvm::Triple::WASIp1:
return std::make_unique<WASIP1TargetInfo<WebAssembly32TargetInfo>>(Triple,
Opts);
- case llvm::Triple::WASIp2:
+ case llvm::Triple::WASIp2:
return std::make_unique<WASIP2TargetInfo<WebAssembly32TargetInfo>>(Triple,
Opts);
- case llvm::Triple::WASIp3:
+ case llvm::Triple::WASIp3:
return std::make_unique<WASIP3TargetInfo<WebAssembly32TargetInfo>>(Triple,
Opts);
- case llvm::Triple::Emscripten:
+ case llvm::Triple::Emscripten:
return std::make_unique<EmscriptenTargetInfo<WebAssembly32TargetInfo>>(
Triple, Opts);
@@ -731,17 +731,17 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
!Triple.isOSBinFormatWasm())
return nullptr;
switch (os) {
- case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
- case llvm::Triple::WASIp1:
+ case llvm::Triple::WASI: // Treat "wasi" as "wasip1" for now.
+ case llvm::Triple::WASIp1:
return std::make_unique<WASIP1TargetInfo<WebAssembly64TargetInfo>>(Triple,
Opts);
- case llvm::Triple::WASIp2:
+ case llvm::Triple::WASIp2:
return std::make_unique<WASIP2TargetInfo<WebAssembly64TargetInfo>>(Triple,
Opts);
- case llvm::Triple::WASIp3:
+ case llvm::Triple::WASIp3:
return std::make_unique<WASIP3TargetInfo<WebAssembly64TargetInfo>>(Triple,
Opts);
- case llvm::Triple::Emscripten:
+ case llvm::Triple::Emscripten:
return std::make_unique<EmscriptenTargetInfo<WebAssembly64TargetInfo>>(
Triple, Opts);
case llvm::Triple::UnknownOS:
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index 89bf990d83aa9..81d28798915be 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -747,7 +747,7 @@ class Triple {
/// Tests whether the OS is WASI.
bool isOSWASI() const {
return getOS() == Triple::WASI || getOS() == Triple::WASIp1 ||
- getOS() == Triple::WASIp2 || getOS() == Triple::WASIp3;
+ getOS() == Triple::WASIp2 || getOS() == Triple::WASIp3;
}
/// Tests whether the OS is Emscripten.
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index 80d500dcc4fc6..6bde5935f8ccf 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -324,9 +324,12 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case TvOS: return "tvos";
case UEFI: return "uefi";
case WASI: return "wasi";
- case WASIp1: return "wasip1";
- case WASIp2: return "wasip2";
- case WASIp3: return "wasip3";
+ case WASIp1:
+ return "wasip1";
+ case WASIp2:
+ return "wasip2";
+ case WASIp3:
+ return "wasip3";
case WatchOS: return "watchos";
case Win32: return "windows";
case ZOS: return "zos";
More information about the cfe-commits
mailing list