diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3c0b3f7..01f0daf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - ARCH: [x86_64, i386] + ARCH: [x86_64, i386, armhf, aarch64] name: AppImage ${{ matrix.ARCH }} runs-on: ubuntu-20.04 diff --git a/ci/build-appimage.sh b/ci/build-appimage.sh index d7b23a2..087f72b 100755 --- a/ci/build-appimage.sh +++ b/ci/build-appimage.sh @@ -20,41 +20,18 @@ cleanup() { trap cleanup EXIT # store repo root as variable -REPO_ROOT=$(readlink -f $(dirname $(dirname "$0"))) -OLD_CWD=$(readlink -f .) +REPO_ROOT="$(readlink -f "$(dirname "$(dirname "$0")")")" +OLD_CWD="$(readlink -f .)" pushd "$BUILD_DIR" -if [ "$ARCH" == "x86_64" ]; then - EXTRA_CMAKE_ARGS=() -elif [ "$ARCH" == "i386" ]; then - EXTRA_CMAKE_ARGS=("-DCMAKE_TOOLCHAIN_FILE=$REPO_ROOT/cmake/toolchains/i386-linux-gnu.cmake") -else - echo "Architecture not supported: $ARCH" 1>&2 - exit 1 -fi - -cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -DUSE_CCACHE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo "${EXTRA_CMAKE_ARGS[@]}" - -make -j$(nproc) +bash "$REPO_ROOT"/ci/build-bundle.sh -make install DESTDIR=AppDir - -AIK_ARCH="$ARCH" -[ "$ARCH" == "i386" ] && AIK_ARCH="i686" +mv linuxdeploy-plugin-appimage-bundle AppDir wget https://github.com/TheAssassin/linuxdeploy/releases/download/continuous/linuxdeploy-"$ARCH".AppImage chmod +x linuxdeploy-"$ARCH".AppImage -# bundle appimagetool -wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-"$AIK_ARCH".AppImage - -chmod +x appimagetool-"$AIK_ARCH".AppImage - -./appimagetool-"$AIK_ARCH".AppImage --appimage-extract -mv squashfs-root/ AppDir/appimagetool-prefix/ -ln -s ../../appimagetool-prefix/AppRun AppDir/usr/bin/appimagetool - export UPD_INFO="gh-releases-zsync|linuxdeploy|linuxdeploy-plugin-appimage|continuous|linuxdeploy-plugin-appimage-$ARCH.AppImage" # deploy linuxdeploy-plugin-appimage diff --git a/ci/build-bundle.sh b/ci/build-bundle.sh new file mode 100755 index 0000000..e868a75 --- /dev/null +++ b/ci/build-bundle.sh @@ -0,0 +1,59 @@ +#! /bin/bash + +set -euxo pipefail + +# use RAM disk if possible +if [ "${CI:-}" == "" ] && [ -d /docker-ramdisk ]; then + TEMP_BASE=/docker-ramdisk +else + TEMP_BASE=/tmp +fi + +BUILD_DIR=$(mktemp -d -p "$TEMP_BASE" linuxdeploy-plugin-appimage-build-XXXXXX) + +cleanup() { + if [ -d "$BUILD_DIR" ]; then + rm -rf "$BUILD_DIR" + fi +} + +trap cleanup EXIT + +# store repo root as variable +REPO_ROOT="$(readlink -f "$(dirname "$(dirname "$0")")")" +OLD_CWD="$(readlink -f .)" + +pushd "$BUILD_DIR" + +case "$ARCH" in + x86_64|armhf|aarch64) + AIK_ARCH="$ARCH" + ;; + i386) + AIK_ARCH="i686" + ;; + *) + echo "Architecture not supported: $ARCH" 1>&2 + exit 1 + ;; +esac + +cmake -G Ninja "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -DUSE_CCACHE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo "${EXTRA_CMAKE_ARGS[@]}" + +nprocs="$(nproc)" +[[ "$nprocs" -gt 2 ]] && nprocs="$(nproc --ignore=1)" + +ninja -v -j"$nprocs" + +env DESTDIR=linuxdeploy-plugin-appimage-bundle ninja -v install + +# linuxdeploy-plugin-appimage-bundle appimagetool +wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-"$AIK_ARCH".AppImage + +chmod +x appimagetool-"$AIK_ARCH".AppImage + +./appimagetool-"$AIK_ARCH".AppImage --appimage-extract +mv squashfs-root/ linuxdeploy-plugin-appimage-bundle/appimagetool-prefix/ +ln -s ../../appimagetool-prefix/AppRun linuxdeploy-plugin-appimage-bundle/usr/bin/appimagetool + +mv linuxdeploy-plugin-appimage-bundle "$OLD_CWD" diff --git a/ci/build-in-docker.sh b/ci/build-in-docker.sh index 9faff62..2e8f0c4 100644 --- a/ci/build-in-docker.sh +++ b/ci/build-in-docker.sh @@ -59,7 +59,7 @@ docker run \ <<\EOF apt-get update -apt-get install -y gcc g++ cmake git wget file curl +apt-get install -y gcc g++ ninja-build cmake git wget file curl bash -euxo pipefail ci/build-appimage.sh diff --git a/cmake/toolchains/i386-linux-gnu.cmake b/cmake/toolchains/i386-linux-gnu.cmake deleted file mode 100644 index 65c7b8b..0000000 --- a/cmake/toolchains/i386-linux-gnu.cmake +++ /dev/null @@ -1,5 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux CACHE STRING "" FORCE) -set(CMAKE_SYSTEM_PROCESSOR i386 CACHE STRING "" FORCE) - -set(CMAKE_C_FLAGS "-m32" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS "-m32" CACHE STRING "" FORCE)