Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit16fa3bb436676543ef2e891b3a767e792d43b0a8 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-11-01 12:14:24 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-11-01 12:14:24 +0200
Files4aa42752ea8dab740254ea568b731720befbf06b
cool-self-hosted-16fa3bb436676543ef2e891b3a767e792d43b0a8.tar
cool-self-hosted-16fa3bb436676543ef2e891b3a767e792d43b0a8.tar.gz
cool-self-hosted-16fa3bb436676543ef2e891b3a767e792d43b0a8.zip
Parent0cd43e8d48d3d250ac0715aeed94e71dc950c1f5 (diff)
feat!: Add compilation script
1 files changed, 56 insertions, 0 deletions
-rwxr-xr-xbin/coolc56
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"