diff --git a/docker/build.sh b/docker/build.sh index 9704e22b..e9263cb9 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -7,21 +7,6 @@ set -euxo pipefail 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 @@ -35,6 +20,29 @@ if [ "x${OCI_CMD:-}" = "x" ]; then fi fi +# on docker, --tmpfs doesn't work correctly with the old MSVC +if [ "$OCI_CMD" = "docker" ]; then + BUILDDIR="$(mktemp -d /tmp/isle-build.XXXXXX)" +fi + +# 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 () { + if ! [ "x${BUILDDIR:-}" = "x" ]; then + rm -rf "$BUILDDIR" 2>/dev/null + fi + rm -rf "$SRCDIR" 2>/dev/null +} + +trap cleanup EXIT + "$OCI_CMD" build -t isle "$SRCDIR/docker" mkdir -p result @@ -44,11 +52,17 @@ if [[ "x${JOBS:-}" == "x" ]]; then JOBS=$(nproc) fi +if ! [ "x${BUILDDIR:-}" = "x" ]; then + MOUNT_BUILDDIR=(-v "$BUILDDIR":/build) +else + MOUNT_BUILDDIR=(--tmpfs /build) +fi + "$OCI_CMD" run -it \ -e CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo" \ - -v "$SRCDIR":/isle:rw \ - -e JOBS="$JOBS" \ - --tmpfs /build \ + ${MOUNT_BUILDDIR[@]} \ + -v "$SRCDIR":/isle \ -v ./result:/install \ + -e JOBS="$JOBS" \ isle