blob: e59572afbcd0a36f213988676804834855205176 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#!/usr/bin/env sh
: "${CONTAINER:=cool-session}"
: "${CONTAINER_HOME:=/home/student/$USER}"
: "${CONTAINER_URL:=ghcr.io/aristotelis2002/uni-cool}"
: "${COOLC_PATH:=/usr/class/bin/coolc}"
: "${SPIM_PATH:=/usr/class/bin/spim}"
: "${EXEC_EXTENSION:=out}"
container_relative_path() {
__file="$(realpath "$1")"
__file="$CONTAINER_HOME${__file##$HOME}"
echo "$__file"
}
if ! command -v docker >/dev/null 2>&1
then
echo 'You must install docker on your machine!'
exit 1
fi
if [ -z "$(docker ps -qa -f name="$CONTAINER")" ]
then
echo "Container image '$CONTAINER' doesn't exist, creating..."
docker pull ghcr.io/aristotelis2002/uni-cool:latest
docker run -td --name "$CONTAINER" --mount type=bind,src="$HOME",dst="$CONTAINER_HOME" "$CONTAINER_URL"
fi
if [ "$(docker inspect -f '{{.State.Running}}' "$CONTAINER")" = 'false' ]
then
echo "Container image '$CONTAINER' isn't running, starting..."
docker start "$CONTAINER"
fi
files=
bin=
exec=
for file in "$@"
do
[ -z "$exec" ] && exec="${file%\.*}.s"
file="$(container_relative_path "$file")"
files="$files $file"
[ -z "$bin" ] && bin="${file%\.*}.s"
done
eval "docker exec -u root -w '$(container_relative_path .)' '$CONTAINER' '$COOLC_PATH' $files || exit \$?"
exec="${exec%\.s}.$EXEC_EXTENSION"
cat <<EXECUTABLE > "$exec"
#!/usr/bin/env sh
eval "docker exec -u root -w '$(container_relative_path .)' '$CONTAINER' '$SPIM_PATH' -file '$bin'" \
| sed '1,5d;/^COOL program successfully executed$/d;\$s/COOL program successfully executed$//'
EXECUTABLE
chmod +x "$exec"
|