test/runtime/run 2.5 KiB raw
1
#!/bin/sh
2
# Compile, cancel, and retry a package through scheduled user calls.
3
set -eu
4
emulator=${RAD_EMULATOR:-emulator}
5
fixture=runtime
6
work=$(mktemp -d)
7
trap 'rm -rf "$work"' EXIT HUP INT TERM
8
mkdir "$work/spin"
9
cp "test/$fixture/spin.rad" "$work/spin.rad"
10
cp kernel/kernel/abi.rad kernel/kernel/sys.rad "$work/spin/"
11
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/radiance.rv64.dev \
12
    -pkg spin -mod "$work/spin.rad" -mod "$work/spin/abi.rad" -mod "$work/spin/sys.rad" -entry spin -ril "$work"
13
cp test/loader/loaded.rad "$work/loaded.rad"
14
index=0
15
while [ "$index" -lt 128 ]; do
16
    printf '\n/// Compute a distinct exported value.\nexport fn value%s(input: u64) -> u64 { return input + %s; }\n' "$index" "$index" >> "$work/loaded.rad"
17
    index=$((index + 1))
18
done
19
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/radiance.rv64.dev \
20
    -pkg loaded -mod "$work/loaded.rad" -entry loaded -ril "$work"
21
cp kernel/kernel.rad "$work/kernel.rad"
22
printf '\nexport mod dispatchinput;\nexport mod dispatchcheck;\n' >> "$work/kernel.rad"
23
mkdir "$work/kernel"
24
cp kernel/kernel/*.rad "$work/kernel/"
25
cp "test/$fixture/kernel/dispatchcheck.rad" "$work/kernel/"
26
length=$(wc -c < "$work/spin.ril")
27
printf '//! Binary user loop.\n/// Complete trusted input package.\nexport static INPUT: [u8; %s] = [\n' "$length" > "$work/kernel/dispatchinput.rad"
28
od -An -v -tu1 "$work/spin.ril" | awk '{ for (i = 1; i <= NF; i++) printf "%s,", $i; print "" }' >> "$work/kernel/dispatchinput.rad"
29
printf '];\n' >> "$work/kernel/dispatchinput.rad"
30
length=$(wc -c < "$work/loaded.ril")
31
printf '\n/// Package compiled by scheduled user calls.\nexport static PAYLOAD: [u8; %s] = [\n' "$length" >> "$work/kernel/dispatchinput.rad"
32
od -An -v -tu1 "$work/loaded.ril" | awk '{ for (i = 1; i <= NF; i++) printf "%s,", $i; print "" }' >> "$work/kernel/dispatchinput.rad"
33
printf '];\n' >> "$work/kernel/dispatchinput.rad"
34
sh test/acceptance/compile "$emulator" "$work"
35
cat "test/$fixture/machine.ras" kernel/kernel/*.ras > "$work/dispatch.ras"
36
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/kernel.build.rv64 \
37
    -- "$work/std.ril" "$work/kernel.ril" "$work/dispatch.ras" "$work/dispatch.rv64"
38
if [ "${KERNEL_REPLAY:-0}" = 1 ]; then
39
    sh test/acceptance/replay runtime "$emulator" "$work/dispatch.rv64" 1
40
else
41
    "$emulator" -machine -harts=1 -memory-size=262144 -max-steps=2000000000 -run "$work/dispatch.rv64"
42
fi
43
printf 'runtime: scheduled cancellation, retry, and publication passed\n'