diff options
| Commit | 16fa3bb436676543ef2e891b3a767e792d43b0a8 (patch) | |
|---|---|---|
| Author | 2025-11-01 12:14:24 +0200 | |
| Committer | 2025-11-01 12:14:24 +0200 | |
| Files | 4aa42752ea8dab740254ea568b731720befbf06b | |
| cool-self-hosted-16fa3bb436676543ef2e891b3a767e792d43b0a8.tar cool-self-hosted-16fa3bb436676543ef2e891b3a767e792d43b0a8.tar.gz cool-self-hosted-16fa3bb436676543ef2e891b3a767e792d43b0a8.zip | ||
| Parent | 0cd43e8d48d3d250ac0715aeed94e71dc950c1f5 (diff) | |
feat!: Add compilation script
1 files changed, 56 insertions, 0 deletions
| -rwxr-xr-x | bin/coolc | 56 |
diff --git a/bin/coolc b/bin/coolc new file mode 100755 index 0000000..e59572a --- /dev/null +++ b/bin/coolc @@ -0,0 +1,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" |
