isle/docker/build.sh
2025-05-15 17:50:16 +02:00

55 lines
1.1 KiB
Bash
Executable File

#!/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 [ "x${OCI_CMD:-}" = "x" ]; then
if whereis docker >/dev/null; then
OCI_CMD=docker
elif whereis podman >/dev/null; then
OCI_CMD=podman
else
echo "No container engine (docker/podman) found!"
exit 2
fi
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