Skip to content

Commit 2d1da50

Browse files
committed
wasm rust support
Signed-off-by: Tonis Tiigi <[email protected]>
1 parent 68a043b commit 2d1da50

File tree

6 files changed

+82
-8
lines changed

6 files changed

+82
-8
lines changed

base/test-cargo.bats

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,13 @@ testHelloCargo() {
3030
assert_success
3131
run xx-cargo build --verbose --color=never --manifest-path=./fixtures/hello_cargo/Cargo.toml --release --target-dir /tmp/cargobuild
3232
assert_success
33-
xx-verify /tmp/cargobuild/$(xx-cargo --print-target)/release/hello_cargo
33+
sfx=""
34+
if [ "$TARGETARCH" = "wasm" ]; then
35+
sfx=".wasm"
36+
fi
37+
xx-verify /tmp/cargobuild/$(xx-cargo --print-target)/release/hello_cargo$sfx
3438
if ! xx-info is-cross; then
35-
run /tmp/cargobuild/$(xx-cargo --print-target)/release/hello_cargo
39+
run /tmp/cargobuild/$(xx-cargo --print-target)/release/hello_cargo$sfx
3640
assert_success
3741
assert_output "hello cargo"
3842
fi
@@ -87,6 +91,14 @@ testHelloCargoRustup() {
8791
testHelloCargoRustup
8892
}
8993

94+
@test "wasm-hellocargo-rustup" {
95+
export TARGETARCH=wasm
96+
export TARGETOS=wasi
97+
testHelloCargoRustup
98+
unset TARGETOS
99+
unset TARGETARCH
100+
}
101+
90102
@test "uninstall-rustup" {
91103
export PATH="$HOME/.cargo/bin:$PATH"
92104
rustup self uninstall -y

base/test-info-alpine.bats

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@ load 'assert'
9898
assert_equal "mips64le" "$(TARGETPLATFORM=linux/mips64le xx-info pkg-arch)"
9999
}
100100

101+
@test "wasm" {
102+
assert_equal "wasm32-alpine-wasi" "$(TARGETPLATFORM=wasi/wasm xx-info triple)"
103+
assert_equal "wasm64-alpine-wasi" "$(TARGETPLATFORM=wasi/wasm64 xx-info triple)"
104+
assert_equal "wasm32-alpine-wasi" "$(TARGETPLATFORM=wasi/wasm32 xx-info triple)"
105+
assert_equal "wasm32" "$(TARGETPLATFORM=linux/wasm xx-info pkg-arch)"
106+
}
107+
101108
@test "darwin" {
102109
assert_equal "x86_64-apple-macos10.6" "$(TARGETPLATFORM=darwin/amd64 xx-info triple)"
103110
assert_equal "darwin" "$(TARGETPLATFORM=darwin/amd64 xx-info os)"

base/test-info-debian.bats

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ fi
9797
assert_equal "mips64el" "$(TARGETPLATFORM=linux/mips64le xx-info pkg-arch)"
9898
}
9999

100+
@test "wasm" {
101+
assert_equal "wasm32-wasi" "$(TARGETPLATFORM=wasi/wasm xx-info triple)"
102+
assert_equal "wasm64-wasi" "$(TARGETPLATFORM=wasi/wasm64 xx-info triple)"
103+
assert_equal "wasm32-wasi" "$(TARGETPLATFORM=wasi/wasm32 xx-info triple)"
104+
assert_equal "wasm32" "$(TARGETPLATFORM=linux/wasm xx-info pkg-arch)"
105+
}
106+
100107
@test "sysroot" {
101108
assert_equal "/" "$(xx-info sysroot)"
102109
assert_equal "/" "$(TARGETPLATFORM=linux/amd64 xx-info sysroot)"

base/xx-cargo

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ fi
5555
vendor=$XX_VENDOR
5656
if [ -n "$rustup" ] || [ ! -f /etc/alpine-release ]; then
5757
export XX_VENDOR="unknown"
58+
export XX_RUSTUP=1 # this sets the correct target triple for rust libraries for subsequent calls
5859
fi
5960

6061
if [ ! -f "$done_file" ]; then
61-
xx-clang --setup-target-triple
62+
XX_RUSTUP="" xx-clang --setup-target-triple
6263
if [ ! -d "$(rustc --print sysroot)/lib/rustlib/$(xx-info)" ]; then
6364
if [ -n "$rustup" ]; then
6465
execSilent rustup target add "$(xx-info)"
@@ -73,13 +74,20 @@ if [ ! -f "$done_file" ]; then
7374
touch "$done_file"
7475
fi
7576

76-
export "CARGO_TARGET_$(xx-info | tr '[:lower:]' '[:upper:]' | tr - _)_LINKER=$(xx-info)-clang"
77+
export "CARGO_TARGET_$(xx-info | tr '[:lower:]' '[:upper:]' | tr - _)_LINKER=$(XX_RUSTUP='' XX_VENODR='' xx-info)-clang"
7778
if [ -n "$XX_RUSTFLAGS" ]; then
7879
export "CARGO_TARGET_$(xx-info | tr '[:lower:]' '[:upper:]' | tr - _)_RUSTFLAGS=$XX_RUSTFLAGS"
7980
fi
80-
export "CC_$(xx-info | tr - _)=$(xx-info)-clang"
81+
export "CC_$(xx-info | tr - _)=$(XX_RUSTUP='' XX_VENODR='' xx-info)-clang"
8182

82-
if which "qemu-$(RISCV64_TARGET_ARCH='' ARM_TARGET_ARCH='' xx-info march)" >/dev/null 2>&1; then
83+
if xx-info is-cross; then
84+
nativeRustTriple="$(TARGETPLATFORM='' TARGETPAIR='' TARGETOS='' TARGETARCH='' TARGETVARIANT='' xx-info)"
85+
nativeClangTriple="$(TARGETPLATFORM='' TARGETPAIR='' TARGETOS='' TARGETARCH='' TARGETVARIANT='' XX_RUSTUP='' XX_VENDOR='' xx-clang --print-target-triple)"
86+
export "CARGO_TARGET_$(echo "$nativeRustTriple" | tr '[:lower:]' '[:upper:]' | tr - _)_LINKER=$nativeClangTriple-clang"
87+
export "CC_$(echo "$nativeRustTriple" | tr - _)=$nativeClangTriple-clang"
88+
fi
89+
90+
if which "qemu-$(RISCV64_TARGET_ARCH='' ARM_TARGET_ARCH='' xx-info march)" >/dev/null 2>&1 && [ "$XX_OS" = "linux" ]; then
8391
export "CARGO_TARGET_$(xx-info | tr '[:lower:]' '[:upper:]' | tr - _)_RUNNER=qemu-$(RISCV64_TARGET_ARCH='' ARM_TARGET_ARCH='' xx-info march)"
8492
if [ -f /etc/alpine-release ]; then
8593
export "QEMU_LD_PREFIX=/$(RISCV64_TARGET_ARCH='' ARM_TARGET_ARCH='' xx-info)/"

base/xx-info

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ distro=""
110110
# shellcheck disable=SC1091
111111
if . /etc/os-release 2>/dev/null; then
112112
distro=$ID
113-
XX_OS_VERSION=$VERSION_ID
113+
if [ "$TARGETOS" = "linux" ] || [ "$TARGETOS" = "" ]; then
114+
XX_OS_VERSION=$VERSION_ID
115+
fi
114116
fi
115117

116118
vendor=""
@@ -130,6 +132,10 @@ case "$XX_VENDOR" in
130132
*) vendor="-${XX_VENDOR}" ;;
131133
esac
132134

135+
if [ -n "$XX_RUSTUP" ] && [ "$TARGETOS" = "wasi" ]; then
136+
vendor=""
137+
fi
138+
133139
if [ -z "$XX_LIBC" ]; then
134140
if [ "$distro" = "alpine" ]; then
135141
XX_LIBC="musl"
@@ -139,6 +145,9 @@ if [ -z "$XX_LIBC" ]; then
139145
if [ "$TARGETOS" = "windows" ]; then
140146
XX_LIBC="mingw32"
141147
fi
148+
if [ "$TARGETOS" = "wasi" ]; then
149+
XX_LIBC=""
150+
fi
142151
fi
143152

144153
# reverse lookup if no parameters given
@@ -208,6 +217,11 @@ if [ "$TARGETOS" = "darwin" ] && [ -z "$MACOSX_VERSION_MIN" ]; then
208217
fi
209218
fi
210219

220+
# normalize wasm because early implementation didn't have strict convention
221+
if [ "$TARGETARCH" = "wasm32" ]; then
222+
TARGETARCH="wasm"
223+
fi
224+
211225
case "$TARGETARCH" in
212226
"amd64")
213227
XX_MARCH="x86_64"
@@ -337,6 +351,26 @@ case "$TARGETARCH" in
337351
XX_RHEL_ARCH="mips64el"
338352
XX_TRIPLE="mips64el${vendor}-linux-${XX_LIBC}abi64"
339353
;;
354+
"wasm")
355+
XX_MARCH="wasm32"
356+
XX_DEBIAN_ARCH="wasm32"
357+
XX_ALPINE_ARCH="wasm32"
358+
XX_RHEL_ARCH="wasm32"
359+
XX_TRIPLE="wasm32${vendor}-unknown"
360+
if [ "$TARGETOS" = "wasi" ]; then
361+
XX_TRIPLE="wasm32${vendor}-wasi"
362+
fi
363+
;;
364+
"wasm64")
365+
XX_MARCH="wasm64"
366+
XX_DEBIAN_ARCH="wasm64"
367+
XX_ALPINE_ARCH="wasm64"
368+
XX_RHEL_ARCH="wasm64"
369+
XX_TRIPLE="wasm64${vendor}-unknown"
370+
if [ "$TARGETOS" = "wasi" ]; then
371+
XX_TRIPLE="wasm64${vendor}-wasi"
372+
fi
373+
;;
340374
esac
341375

342376
XX_PKG_ARCH=$TARGETARCH
@@ -395,7 +429,7 @@ case "$1" in
395429
echo "$XX_VENDOR"
396430
;;
397431
"libc") # this is not abi, just the prefix
398-
echo $XX_LIBC
432+
echo "$XX_LIBC"
399433
;;
400434
"env")
401435
echo "XX_OS=${TARGETOS}"

base/xx-verify

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ for f in "$@"; do
112112
"windows")
113113
expOS="MS Windows"
114114
;;
115+
"wasi")
116+
expOS="WebAssembly"
117+
;;
115118
esac
116119

117120
if [ -z "$expOS" ]; then
@@ -226,6 +229,9 @@ for f in "$@"; do
226229
expArch2="32-bit LSB"
227230
fi
228231
;;
232+
"wasm" | "wasm64")
233+
expArch="WebAssembly"
234+
;;
229235
esac
230236

231237
if [ -z "$expArch" ]; then

0 commit comments

Comments
 (0)