Skip to content

Commit 5b7343b

Browse files
committed
Auto merge of #122170 - alexcrichton:rename-wasi-threads, r=petrochenkov
Rename `wasm32-wasi-preview1-threads` to `wasm32-wasip1-threads` This commit renames the current `wasm32-wasi-preview1-threads` target to `wasm32-wasip1-threads`. The need for this rename is a bit unfortunate as the previous name was chosen in an attempt to be future-compatible with other WASI targets. Originally this target was proposed to be `wasm32-wasi-threads`, and that's what was originally implemented in wasi-sdk as well. After discussion though and with the plans for the upcoming component-model target (now named `wasm32-wasip2`) the "preview1" naming was chosen for the threads-based target. The WASI subgroup later decided that it was time to drop the "preview" terminology and recommends "pX" instead, hence previous PRs to add `wasm32-wasip2` and rename `wasm32-wasi` to `wasm32-wasip1`. So, with all that history, the "proper name" for this target is different than its current name, so one way or another a rename is required. This PR proposes renaming this target cold-turkey, unlike `wasm32-wasi` which is having a long transition period to change its name. The threads-based target is predicted to see only a fraction of the traffic of `wasm32-wasi` due to the unstable nature of the WASI threads proposal itself. While I was here I updated the in-tree documentation in the target spec file itself as most of the documentation was copied from the original WASI target and wasn't as applicable to this target. Also, as an aside, I can at least try to apologize for all the naming confusion here, but this is hopefully the last WASI-related rename.
2 parents b0170b6 + e1e9d38 commit 5b7343b

File tree

12 files changed

+107
-169
lines changed

12 files changed

+107
-169
lines changed

compiler/rustc_target/src/spec/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1596,7 +1596,7 @@ supported_targets! {
15961596
("wasm32-wasi", wasm32_wasi),
15971597
("wasm32-wasip1", wasm32_wasip1),
15981598
("wasm32-wasip2", wasm32_wasip2),
1599-
("wasm32-wasi-preview1-threads", wasm32_wasi_preview1_threads),
1599+
("wasm32-wasip1-threads", wasm32_wasip1_threads),
16001600
("wasm64-unknown-unknown", wasm64_unknown_unknown),
16011601

16021602
("thumbv6m-none-eabi", thumbv6m_none_eabi),

compiler/rustc_target/src/spec/targets/wasm32_wasi_preview1_threads.rs

-139
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
//! The `wasm32-wasip1-threads` target is an extension of the `wasm32-wasip1`
2+
//! target where threads are enabled by default for all crates. This target
3+
//! should be considered "in flux" as WASI itself has moved on from "p1" to "p2"
4+
//! now and threads in "p2" are still under heavy design.
5+
//!
6+
//! This target inherits most of the other aspects of `wasm32-wasip1`.
7+
//!
8+
//! Historically this target was known as `wasm32-wasi-preview1-threads`.
9+
10+
use crate::spec::{base, crt_objects, Cc, LinkSelfContainedDefault, LinkerFlavor, Target};
11+
12+
pub fn target() -> Target {
13+
let mut options = base::wasm::options();
14+
15+
options.os = "wasi".into();
16+
17+
options.add_pre_link_args(
18+
LinkerFlavor::WasmLld(Cc::No),
19+
&["--import-memory", "--export-memory", "--shared-memory"],
20+
);
21+
options.add_pre_link_args(
22+
LinkerFlavor::WasmLld(Cc::Yes),
23+
&[
24+
"--target=wasm32-wasip1-threads",
25+
"-Wl,--import-memory",
26+
"-Wl,--export-memory,",
27+
"-Wl,--shared-memory",
28+
],
29+
);
30+
31+
options.pre_link_objects_self_contained = crt_objects::pre_wasi_self_contained();
32+
options.post_link_objects_self_contained = crt_objects::post_wasi_self_contained();
33+
34+
// FIXME: Figure out cases in which WASM needs to link with a native toolchain.
35+
options.link_self_contained = LinkSelfContainedDefault::True;
36+
37+
// Right now this is a bit of a workaround but we're currently saying that
38+
// the target by default has a static crt which we're taking as a signal
39+
// for "use the bundled crt". If that's turned off then the system's crt
40+
// will be used, but this means that default usage of this target doesn't
41+
// need an external compiler but it's still interoperable with an external
42+
// compiler if configured correctly.
43+
options.crt_static_default = true;
44+
options.crt_static_respected = true;
45+
46+
// Allow `+crt-static` to create a "cdylib" output which is just a wasm file
47+
// without a main function.
48+
options.crt_static_allows_dylibs = true;
49+
50+
// WASI's `sys::args::init` function ignores its arguments; instead,
51+
// `args::args()` makes the WASI API calls itself.
52+
options.main_needs_argc_argv = false;
53+
54+
// And, WASI mangles the name of "main" to distinguish between different
55+
// signatures.
56+
options.entry_name = "__main_void".into();
57+
58+
options.singlethread = false;
59+
options.features = "+atomics,+bulk-memory,+mutable-globals".into();
60+
61+
Target {
62+
llvm_target: "wasm32-wasi".into(),
63+
metadata: crate::spec::TargetMetadata {
64+
description: None,
65+
tier: None,
66+
host_tools: None,
67+
std: None,
68+
},
69+
pointer_width: 32,
70+
data_layout: "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20".into(),
71+
arch: "wasm32".into(),
72+
options,
73+
}
74+
}

src/ci/docker/host-x86_64/dist-various-2/Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia
113113
ENV TARGETS=$TARGETS,wasm32-unknown-unknown
114114
ENV TARGETS=$TARGETS,wasm32-wasi
115115
ENV TARGETS=$TARGETS,wasm32-wasip1
116-
ENV TARGETS=$TARGETS,wasm32-wasi-preview1-threads
116+
ENV TARGETS=$TARGETS,wasm32-wasip1-threads
117117
ENV TARGETS=$TARGETS,sparcv9-sun-solaris
118118
ENV TARGETS=$TARGETS,x86_64-pc-solaris
119119
ENV TARGETS=$TARGETS,x86_64-unknown-linux-gnux32
@@ -138,7 +138,7 @@ RUN ln -s /usr/include/x86_64-linux-gnu/asm /usr/local/include/asm
138138
ENV RUST_CONFIGURE_ARGS --enable-extended --enable-lld --enable-llvm-bitcode-linker --disable-docs \
139139
--set target.wasm32-wasi.wasi-root=/wasm32-wasip1 \
140140
--set target.wasm32-wasip1.wasi-root=/wasm32-wasip1 \
141-
--set target.wasm32-wasi-preview1-threads.wasi-root=/wasm32-wasi-preview1-threads \
141+
--set target.wasm32-wasip1-threads.wasi-root=/wasm32-wasip1-threads \
142142
--musl-root-armv7=/musl-armv7
143143

144144
ENV SCRIPT python3 ../x.py dist --host='' --target $TARGETS

src/ci/docker/host-x86_64/dist-various-2/build-wasi-threads-toolchain.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ make -j$(nproc) \
1616
NM="$bin/llvm-nm" \
1717
AR="$bin/llvm-ar" \
1818
THREAD_MODEL=posix \
19-
INSTALL_DIR=/wasm32-wasi-preview1-threads \
19+
INSTALL_DIR=/wasm32-wasip1-threads \
2020
install
2121

2222
cd ..

src/doc/rustc/src/SUMMARY.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
- [*-unknown-openbsd](platform-support/openbsd.md)
6363
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
6464
- [wasm32-wasip1](platform-support/wasm32-wasip1.md)
65-
- [wasm32-wasi-preview1-threads](platform-support/wasm32-wasi-preview1-threads.md)
65+
- [wasm32-wasip1-threads](platform-support/wasm32-wasip1-threads.md)
6666
- [wasm32-wasip2](platform-support/wasm32-wasip2.md)
6767
- [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
6868
- [\*-win7-windows-msvc](platform-support/win7-windows-msvc.md)

src/doc/rustc/src/platform-support.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ target | std | notes
190190
`wasm32-unknown-unknown` | ✓ | WebAssembly
191191
`wasm32-wasi` | ✓ | WebAssembly with WASI (undergoing a [rename to `wasm32-wasip1`][wasi-rename])
192192
[`wasm32-wasip1`](platform-support/wasm32-wasip1.md) | ✓ | WebAssembly with WASI
193-
[`wasm32-wasi-preview1-threads`](platform-support/wasm32-wasi-preview1-threads.md) | ✓ | | WebAssembly with WASI Preview 1 and threads
193+
[`wasm32-wasip1-threads`](platform-support/wasm32-wasip1-threads.md) | ✓ | | WebAssembly with WASI Preview 1 and threads
194194
`x86_64-apple-ios` | ✓ | 64-bit x86 iOS
195195
[`x86_64-fortanix-unknown-sgx`](platform-support/x86_64-fortanix-unknown-sgx.md) | ✓ | [Fortanix ABI] for 64-bit Intel SGX
196196
`x86_64-fuchsia` | ✓ | Alias for `x86_64-unknown-fuchsia`

src/doc/rustc/src/platform-support/wasm32-wasi-preview1-threads.md src/doc/rustc/src/platform-support/wasm32-wasip1-threads.md

+21-17
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
# `wasm32-wasi-preview1-threads`
1+
# `wasm32-wasip1-threads`
22

33
**Tier: 2**
44

5-
The `wasm32-wasi-preview1-threads` target is a new and still (as of July 2023) an
6-
experimental target. This target is an extension to `wasm32-wasi-preview1` target,
5+
The `wasm32-wasip1-threads` target is a new and still (as of July 2023) an
6+
experimental target. This target is an extension to `wasm32-wasip1` target,
77
originally known as `wasm32-wasi`. It extends the original target with a
8-
standardized set of syscalls that are intended to empower WebAssembly binaries with
9-
native multi threading capabilities.
8+
standardized set of syscalls that are intended to empower WebAssembly binaries
9+
with native multi threading capabilities.
10+
11+
> **Note**: Prior to March 2024 this target was known as
12+
> `wasm32-wasi-preview1-threads`, and even longer before that it was known as
13+
> `wasm32-wasi-threads`.
1014
1115
[wasi-threads]: https://github.com/WebAssembly/wasi-threads
1216
[threads]: https://github.com/WebAssembly/threads
@@ -26,11 +30,11 @@ This target is cross-compiled. The target supports `std` fully.
2630
The Rust target definition here is interesting in a few ways. We want to
2731
serve two use cases here with this target:
2832
* First, we want Rust usage of the target to be as hassle-free as possible,
29-
ideally avoiding the need to configure and install a local wasm32-wasi-preview1-threads
33+
ideally avoiding the need to configure and install a local wasm32-wasip1-threads
3034
toolchain.
3135
* Second, one of the primary use cases of LLVM's new wasm backend and the
3236
wasm support in LLD is that any compiled language can interoperate with
33-
any other. The `wasm32-wasi-preview1-threads` target is the first with a viable C
37+
any other. The `wasm32-wasip1-threads` target is the first with a viable C
3438
standard library and sysroot common definition, so we want Rust and C/C++
3539
code to interoperate when compiled to `wasm32-unknown-unknown`.
3640

@@ -49,7 +53,7 @@ some copied crt startup object files to ensure that you can download the
4953
wasi target for Rust and you're off to the races, no further configuration
5054
necessary.
5155
All in all, by default, no external dependencies are required. You can
52-
compile `wasm32-wasi-preview1-threads` binaries straight out of the box. You can't, however,
56+
compile `wasm32-wasip1-threads` binaries straight out of the box. You can't, however,
5357
reliably interoperate with C code in this mode (yet).
5458
### Interop with C required
5559
For the second goal we repurpose the `target-feature` flag, meaning that
@@ -59,18 +63,18 @@ you'll need to do a few things to have C/Rust code interoperate.
5963
not be used.
6064
2. If you're using rustc to build a linked artifact then you'll need to
6165
specify `-C linker` to a `clang` binary that supports
62-
`wasm32-wasi-preview1-threads` and is configured with the `wasm32-wasi-preview1-threads` sysroot. This
66+
`wasm32-wasip1-threads` and is configured with the `wasm32-wasip1-threads` sysroot. This
6367
will cause Rust code to be linked against the libc.a that the specified
6468
`clang` provides.
6569
3. If you're building a staticlib and integrating Rust code elsewhere, then
6670
compiling with `-C target-feature=-crt-static` is all you need to do.
6771

6872
All in all, by default, no external dependencies are required. You can
69-
compile `wasm32-wasi-preview1-threads` binaries straight out of the box. You can't, however,
73+
compile `wasm32-wasip1-threads` binaries straight out of the box. You can't, however,
7074
reliably interoperate with C code in this mode (yet).
7175

7276

73-
Also note that at this time the `wasm32-wasi-preview1-threads` target assumes the
77+
Also note that at this time the `wasm32-wasip1-threads` target assumes the
7478
presence of other merged wasm proposals such as (with their LLVM feature flags):
7579

7680
* [Bulk memory] - `+bulk-memory`
@@ -106,7 +110,7 @@ https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-20
106110
and specify path to *wasi-root* `.cargo/config.toml`
107111

108112
```toml
109-
[target.wasm32-wasi-preview1-threads]
113+
[target.wasm32-wasip1-threads]
110114
wasi-root = ".../wasi-libc/sysroot"
111115
```
112116

@@ -118,13 +122,13 @@ After that users can build this by adding it to the `target` list in
118122
From Rust Nightly 1.71.1 (2023-08-03) on the artifacts are shipped pre-compiled:
119123

120124
```text
121-
rustup target add wasm32-wasi-preview1-threads --toolchain nightly
125+
rustup target add wasm32-wasip1-threads --toolchain nightly
122126
```
123127

124128
Rust programs can be built for that target:
125129

126130
```text
127-
rustc --target wasm32-wasi-preview1-threads your-code.rs
131+
rustc --target wasm32-wasip1-threads your-code.rs
128132
```
129133

130134
## Cross-compilation
@@ -133,16 +137,16 @@ This target can be cross-compiled from any hosts.
133137

134138
## Testing
135139

136-
Currently testing is not well supported for `wasm32-wasi-preview1-threads` and the
140+
Currently testing is not well supported for `wasm32-wasip1-threads` and the
137141
Rust project doesn't run any tests for this target. However the UI testsuite can be run
138142
manually following this instructions:
139143

140144
0. Ensure [wamr](https://github.com/bytecodealliance/wasm-micro-runtime), [wasmtime](https://github.com/bytecodealliance/wasmtime)
141145
or another engine that supports `wasi-threads` is installed and can be found in the `$PATH` env variable.
142146
1. Clone master branch.
143147
2. Apply such [a change](https://github.com/g0djan/rust/compare/godjan/wasi-threads...g0djan:rust:godjan/wasi-run-ui-tests?expand=1) with an engine from the step 1.
144-
3. Run `./x.py test --target wasm32-wasi-preview1-threads tests/ui` and save the list of failed tests.
148+
3. Run `./x.py test --target wasm32-wasip1-threads tests/ui` and save the list of failed tests.
145149
4. Checkout branch with your changes.
146150
5. Apply such [a change](https://github.com/g0djan/rust/compare/godjan/wasi-threads...g0djan:rust:godjan/wasi-run-ui-tests?expand=1) with an engine from the step 1.
147-
6. Run `./x.py test --target wasm32-wasi-preview1-threads tests/ui` and save the list of failed tests.
151+
6. Run `./x.py test --target wasm32-wasip1-threads tests/ui` and save the list of failed tests.
148152
7. For both lists of failed tests run `cat list | sort > sorted_list` and compare it with `diff sorted_list1 sorted_list2`.

src/doc/rustc/src/platform-support/wasm32-wasip1.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ this target are:
4949

5050
This target is cross-compiled. The target includes support for `std` itself,
5151
but not all of the standard library works. For example spawning a thread will
52-
always return an error (see the `wasm32-wasi-preview1-threads` target for
52+
always return an error (see the `wasm32-wasip1-threads` target for
5353
example). Another example is that spawning a process will always return an
5454
error. Operations such as opening a file, however, will be implemented by
5555
calling WASI-defined APIs.

src/tools/build-manifest/src/main.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ static TARGETS: &[&str] = &[
149149
"wasm32-unknown-unknown",
150150
"wasm32-wasi",
151151
"wasm32-wasip1",
152-
"wasm32-wasi-preview1-threads",
152+
"wasm32-wasip1-threads",
153153
"x86_64-apple-darwin",
154154
"x86_64-apple-ios",
155155
"x86_64-fortanix-unknown-sgx",

0 commit comments

Comments
 (0)