From cf8e90a245172ec5373b80a51d96a30486794619 Mon Sep 17 00:00:00 2001 From: Tom van Dijk <18gatenmaker6@gmail.com> Date: Mon, 12 May 2025 20:47:32 +0200 Subject: [PATCH] build: add build.sh convenience script for linux This makes it easier to do rebuilds using docker, because it doesn't actually modify the source tree (so that Git actually understands what you are doing with the chmodding), as all directories touched by docker are temporary, except for `result`, which is the "output". This just contains ISLE.EXE, LEGO1.DLL and LEGO1.lib. Optionally Nix can be used to speed up the "copy the source to somewhere temporary" step. Note that this doesn't work for MacOS, because this script uses `--tmpfs`, which is Linux-only. --- docker/build.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 docker/build.sh diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 00000000..e64832bc --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +# two `cd`'s so Git can find the root dir even if this script is called from +# outside the repo +cd $(dirname "${BASH_SOURCE[0]}") +cd $(git rev-parse --show-toplevel) + +# nix-store is way quicker at copying these files and only needs to do it once +# if the source doesn't change +if whereis nix-store >/dev/null; then + SRCDIR="$(nix-store --add $PWD)" +else + SRCDIR="$(mktemp -d /tmp/isle-src.XXXXXX)" + git ls-files -z | xargs -0I{} install -D {} "$SRCDIR/{}" +fi + +cleanup () { + rm -rf "$SRCDIR" 2>/dev/null +} + +trap cleanup EXIT + +declare oci_cmd + +if whereis podman >/dev/null; then + oci_cmd=podman +elif whereis docker >/dev/null; then + oci_cmd=docker +else + echo "No container engine (docker/podman) found!" + exit 2 +fi + +"$oci_cmd" build -t isle "$SRCDIR/docker" + +mkdir -p result +rm -rf result/* + +if [[ "x${JOBS:-}" == "x" ]]; then + JOBS=$(nproc) +fi + +"$oci_cmd" run -it \ + -e CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo" \ + -v "$SRCDIR":/isle:rw \ + -e JOBS="$JOBS" \ + --tmpfs /build \ + -v ./result:/install \ + isle +