diff --git a/scripts/Dockerfile b/scripts/Dockerfile index 70671dd..5c67463 100644 --- a/scripts/Dockerfile +++ b/scripts/Dockerfile @@ -5,4 +5,8 @@ RUN /bin/bash /opt/genus/scripts/docker-install-debian-prerequisites.sh RUN rm -rf /opt/genus/scripts COPY . /opt/genus RUN ln -s /opt/genus/creative-engine /opt/creative-engine -RUN /bin/bash /opt/genus/scripts/build.sh docker-build +RUN /bin/bash /opt/genus/scripts/build.sh docker-build && \ + mkdir -p /opt/genus/bin && \ + mv /opt/genus/build/genus /opt/genus/bin && \ + rm -rf $(ls /opt/genus | grep -v ^bin$) +ENTRYPOINT /opt/genus/bin/genus diff --git a/scripts/common.sh b/scripts/common.sh index c3a312a..1cb0956 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -43,28 +43,30 @@ function ensure_cmake { uname=$(uname -s) tmpdir=$(mktemp -d) cmake="cmake-$version.$build-$uname-$arch" - cd "$tmpdir" + cd "$tmpdir" || exit 1 if curl -fsSO "https://cmake.org/files/v$version/$cmake.sh"; then + # Install binary package if we could retrieve it $SUDO mkdir -p /opt/cmake yes | $SUDO sh "$cmake.sh" --prefix=/opt/cmake || true # exits 141 on success for some reason $SUDO rm -f /usr/local/bin/cmake $SUDO ln -s "/opt/cmake/$cmake/bin/cmake" /usr/local/bin/cmake else + + # Install from source (on Raspberry Pi with Rasbian 9.6 (stretch) for example. cmake="cmake-$version.$build" curl -fsSO "https://cmake.org/files/v$version/$cmake.tar.gz" tar xfz "$cmake.tar.gz" - cd "$cmake" + cd "$cmake" || exit 1 ./configure - make + make $SUDO make install fi - # TODO: re-enable after cmake source build works - # rm -rf "$tmpdir" + rm -rf "$tmpdir" } function ensure_debian_devtools_installed { $SUDO apt-get -qq update - $SUDO apt-get -qq install --no-install-recommends build-essential git libsdl2-dev libsdl2-image-dev curl doxygen imagemagick + $SUDO apt-get -qq install --no-install-recommends build-essential git libsdl2-dev libsdl2-image-dev curl doxygen imagemagick ca-certificates openssl # Ubuntu 18.04 has an old cmake (3.9) so install a newer one from binaries from cmake ensure_cmake } @@ -148,7 +150,7 @@ function clean { } # TODO: Use otool -L and some foo to find the dependencies -# The sentinel is "/usr/local/opt" +# The sentinel is "/usr/local/opt" function copy_sdl2_libs_to_app { if [[ "$OS" == "Darwin" ]]; then export APP_DIR="$BASE_DIR/build/genus.app" @@ -156,8 +158,8 @@ function copy_sdl2_libs_to_app { export APP_RES_DIR="$APP_CNT_DIR/Resources" export APP_MACOSX_DIR="$APP_CNT_DIR/MacOS" if [[ -d "$APP_DIR" ]]; then - rm -rf "$APP_MACOSX_DIR/libs" - mkdir -p "$APP_MACOSX_DIR/libs" + rm -rf "$APP_MACOSX_DIR/libs" + mkdir -p "$APP_MACOSX_DIR/libs" cp /usr/local/opt/sdl2/lib/libSDL2.dylib "$APP_MACOSX_DIR/libs/" cp /usr/local/opt/sdl2_image/lib/libSDL2_image.dylib "$APP_MACOSX_DIR/libs/" @@ -169,49 +171,49 @@ function copy_sdl2_libs_to_app { # FIX Genus install_name_tool -change \ - /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib \ - ./libs/libSDL2.dylib \ - "$APP_MACOSX_DIR/genus" + /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib \ + ./libs/libSDL2.dylib \ + "$APP_MACOSX_DIR/genus" install_name_tool -change \ - /usr/local/opt/sdl2_image/lib/libSDL2_image-2.0.0.dylib \ - ./libs/libSDL2_image.dylib \ - "$APP_MACOSX_DIR/genus" + /usr/local/opt/sdl2_image/lib/libSDL2_image-2.0.0.dylib \ + ./libs/libSDL2_image.dylib \ + "$APP_MACOSX_DIR/genus" # FIX SDL2_image install_name_tool -change \ - /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib \ - ./libs/libSDL2.dylib \ - "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" + /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib \ + ./libs/libSDL2.dylib \ + "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" install_name_tool -change \ - /usr/local/opt/libpng/lib/libpng16.16.dylib \ - ./libs/libpng.dylib \ - "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" - install_name_tool -change \ - /usr/local/opt/jpeg/lib/libjpeg.9.dylib \ - ./libs/libjpeg.dylib \ - "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" + /usr/local/opt/libpng/lib/libpng16.16.dylib \ + ./libs/libpng.dylib \ + "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" + install_name_tool -change \ + /usr/local/opt/jpeg/lib/libjpeg.9.dylib \ + ./libs/libjpeg.dylib \ + "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" install_name_tool -change \ - /usr/local/opt/libtiff/lib/libtiff.5.dylib \ - ./libs/libtiff.dylib \ - "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" + /usr/local/opt/libtiff/lib/libtiff.5.dylib \ + ./libs/libtiff.dylib \ + "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" install_name_tool -change \ - /usr/local/opt/webp/lib/libwebp.7.dylib \ - ./libs/libwebp.dylib \ - "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" + /usr/local/opt/webp/lib/libwebp.7.dylib \ + ./libs/libwebp.dylib \ + "$APP_MACOSX_DIR/libs/libSDL2_image.dylib" # FIX TIFF install_name_tool -change \ - /usr/local/opt/jpeg/lib/libjpeg.9.dylib \ - ./libs/libjpeg.dylib \ - "$APP_MACOSX_DIR/libs/libtiff.dylib" + /usr/local/opt/jpeg/lib/libjpeg.9.dylib \ + ./libs/libjpeg.dylib \ + "$APP_MACOSX_DIR/libs/libtiff.dylib" # CREATE WRAPPER mv "$APP_MACOSX_DIR/genus" "$APP_MACOSX_DIR/genus.bin" tee "$APP_MACOSX_DIR/genus" <<-"EOF" - #!/usr/bin/env bash - MY_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" && pwd )" - (cd $MY_DIR && ./genus.bin) - EOF + #!/usr/bin/env bash + MY_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" && pwd )" + (cd $MY_DIR && ./genus.bin) + EOF chmod 0755 "$BASE_DIR/build/genus.app/Contents/MacOS/genus" # INSTALL APP.PLIST & ETC diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh index d04c825..654c646 100755 --- a/scripts/docker-build.sh +++ b/scripts/docker-build.sh @@ -9,7 +9,8 @@ set -euo pipefail IFS=$'\n\t' # Enable for enhanced debugging -#set -vx +DEBUG=${DEBUG:-/bin/false} +"$DEBUG" && set -vx # Credit to https://stackoverflow.com/a/17805088 # and http://wiki.bash-hackers.org/scripting/debuggingtips @@ -44,5 +45,19 @@ if [[ -L creative-engine ]]; then cp -a "$CREATIVE_ENGINE_DIR" . fi #shellcheck disable=SC2086,SC2048 -docker build . -t genus -f "$DIR/Dockerfile" +case $(arch) in + armv7l) + DOCKERFILE="$DIR/Dockerfile-arm.tmp" + sed -e 's/ubuntu:18.04/schachr\/raspbian-stretch:latest/' < "$DIR/Dockerfile" >"$DOCKERFILE" + ;; + x86_64) + DOCKERFILE="$DIR/Dockerfile" + ;; + *) + echo "Unsupported architecture $(arch)" + exit 1 + ;; +esac + +docker build -t genus -f "$DOCKERFILE" .