From afca5d9fef750ece89677d2c04e9a7e0d5f84a1e Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sat, 4 Apr 2020 17:50:49 +0100 Subject: [PATCH] OpenDingux/RetroFW build cleanup 1. Now that all the buildroots we need are open-source, use defconfigs that ship with them instead of rolling our own. 2. New script: Packagaging/OpenDingux/build-all.sh 3. To avoid polluting top-level home directory, buildroot location changed to `~/devilutionx-buildroot/$BUILDROOT_TARGET`. 4. Move OPK packaging script to its own file. This is to be able to make a package for devilutionX in the buildroot itself. --- Packaging/OpenDingux/build-all.sh | 11 +++ Packaging/OpenDingux/build.sh | 74 ++++++------------- Packaging/OpenDingux/package-opk.sh | 43 +++++++++++ .../OpenDingux/retrofw_devilutionx_defconfig | 9 --- .../OpenDingux/rg350_devilutionx_defconfig | 20 ----- Packaging/OpenDingux/targets.sh | 25 +++++++ 6 files changed, 103 insertions(+), 79 deletions(-) create mode 100755 Packaging/OpenDingux/build-all.sh create mode 100755 Packaging/OpenDingux/package-opk.sh delete mode 100644 Packaging/OpenDingux/retrofw_devilutionx_defconfig delete mode 100644 Packaging/OpenDingux/rg350_devilutionx_defconfig create mode 100755 Packaging/OpenDingux/targets.sh diff --git a/Packaging/OpenDingux/build-all.sh b/Packaging/OpenDingux/build-all.sh new file mode 100755 index 000000000..7d9831ce6 --- /dev/null +++ b/Packaging/OpenDingux/build-all.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")/../.." + +source Packaging/OpenDingux/targets.sh + +for target in "${VALID_TARGETS[@]}"; do + Packaging/OpenDingux/build.sh "$target" +done diff --git a/Packaging/OpenDingux/build.sh b/Packaging/OpenDingux/build.sh index 9d4aa9560..21840d57c 100755 --- a/Packaging/OpenDingux/build.sh +++ b/Packaging/OpenDingux/build.sh @@ -2,48 +2,38 @@ set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")/../.." + +source Packaging/OpenDingux/targets.sh +source Packaging/OpenDingux/package-opk.sh + usage() { - echo "Usage: build.sh [target]" - echo " target: target platform: rg350, gkd350h, or retrofw" + echo "Usage: build.sh [target]" + usage_target } -if [[ $# -ne 1 ]]; then - echo "Error: target is missing" - usage - exit 1 -fi - -if [[ $1 != rg350 ]] && [[ $1 != retrofw ]] && [[ $1 != gkd350h ]]; then - echo "Error: invalid target" - usage - exit 1 +if ! check_target "$@"; then + usage + exit 64 fi -cd "$(dirname "${BASH_SOURCE[0]}")/../.." - -declare -r TARGET="${1}" +declare -r TARGET="$1" declare -r BUILD_DIR="build-${TARGET}" - declare -rA BUILDROOT_REPOS=( [retrofw]=https://github.com/retrofw/buildroot.git [rg350]=https://github.com/tonyjih/RG350_buildroot.git ) +declare -rA BUILDROOT_DEFCONFIGS=( + [retrofw]='RetroFW_defconfig BR2_EXTERNAL=retrofw' + [rg350]='rg350_defconfig BR2_EXTERNAL=board/opendingux' +) -declare BUILDROOT_DEFCONFIG -declare BUILDROOT_REPO - -set_buildroot_vars() { - BUILDROOT_DEFCONFIG="$1_devilutionx_defconfig" - BUILDROOT_REPO="${BUILDROOT_REPOS[$1]}" - BUILDROOT="${BUILDROOT:-$HOME/buildroot-$1-devilutionx}" -} - -# Use the rg350 buildroot for gkd350h because gkd350h buildroot is not open-source. +declare BUILDROOT_TARGET="$TARGET" if [[ $TARGET == gkd350h ]]; then - set_buildroot_vars rg350 -else - set_buildroot_vars "$TARGET" + # Use the rg350 buildroot for gkd350h because gkd350h buildroot is not open-source. + BUILDROOT_TARGET=rg350 fi +BUILDROOT="${BUILDROOT:-$HOME/devilutionx-buildroots/$BUILDROOT_TARGET}" main() { >&2 echo "Building for target ${TARGET} in ${BUILD_DIR}" @@ -51,20 +41,21 @@ main() { prepare_buildroot make_buildroot build - package + package_opk } prepare_buildroot() { if [[ -d $BUILDROOT ]]; then return fi - git clone --depth=1 "${BUILDROOT_REPOS[$TARGET]}" "$BUILDROOT" + git clone --depth=1 "${BUILDROOT_REPOS[$BUILDROOT_TARGET]}" "$BUILDROOT" + cd "$BUILDROOT" + make ${BUILDROOT_DEFCONFIGS[$BUILDROOT_TARGET]} + cd - } make_buildroot() { - cp "Packaging/OpenDingux/$BUILDROOT_DEFCONFIG" "$BUILDROOT/configs/" cd "$BUILDROOT" - make "$BUILDROOT_DEFCONFIG" BR2_JLEVEL=0 make toolchain libzip sdl sdl_mixer sdl_ttf cd - } @@ -79,21 +70,4 @@ build() { cd - } -package() { - local ext=gcw0 - if [[ $TARGET == retrofw ]]; then - ext=retrofw - fi - local -r tmp="${BUILD_DIR}/opk" - rm -rf "$tmp" - mkdir -p "$tmp" - cp "Packaging/OpenDingux/${TARGET}.desktop" "${tmp}/default.${ext}.desktop" - cp "Packaging/OpenDingux/${TARGET}-manual.txt" "${tmp}/readme.${ext}.txt" - mksquashfs "${BUILD_DIR}/devilutionx" \ - "${tmp}/default.${ext}.desktop" "${tmp}/readme.${ext}.txt" \ - Packaging/resources/Diablo_32.png Packaging/resources/CharisSILB.ttf \ - "${BUILD_DIR}/devilutionx-${TARGET}.opk" \ - -all-root -no-xattrs -noappend -no-exports -} - main diff --git a/Packaging/OpenDingux/package-opk.sh b/Packaging/OpenDingux/package-opk.sh new file mode 100755 index 000000000..582c68671 --- /dev/null +++ b/Packaging/OpenDingux/package-opk.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +package_opk() { + local ext + if [[ $TARGET == rg350 ]] || [[ $TARGET == gkd350h ]]; then + ext=gcw0 + else + ext="$TARGET" + fi + local -r tmp="${BUILD_DIR}/opk" + set -x + rm -rf "$tmp" + mkdir -p "$tmp" + cp "Packaging/OpenDingux/${TARGET}.desktop" "${tmp}/default.${ext}.desktop" + cp "Packaging/OpenDingux/${TARGET}-manual.txt" "${tmp}/readme.${ext}.txt" + mksquashfs "${BUILD_DIR}/devilutionx" \ + "${tmp}/default.${ext}.desktop" "${tmp}/readme.${ext}.txt" \ + Packaging/resources/Diablo_32.png Packaging/resources/CharisSILB.ttf \ + "${BUILD_DIR}/devilutionx-${TARGET}.opk" \ + -all-root -no-xattrs -noappend -no-exports -no-progress +} + +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + set -euo pipefail + + cd "$(dirname "${BASH_SOURCE[0]}")/../.." + + source Packaging/OpenDingux/targets.sh + + usage() { + echo "Usage: package-opk.sh [target]" + usage_target + } + + if ! check_target "$@"; then + usage + exit 64 + fi + + declare -r TARGET="$1" + declare -r BUILD_DIR="build-${TARGET}" + package_opk +fi diff --git a/Packaging/OpenDingux/retrofw_devilutionx_defconfig b/Packaging/OpenDingux/retrofw_devilutionx_defconfig deleted file mode 100644 index 5c27fefd6..000000000 --- a/Packaging/OpenDingux/retrofw_devilutionx_defconfig +++ /dev/null @@ -1,9 +0,0 @@ -BR2_mipsel=y -# BR2_MIPS_SOFT_FLOAT is not set -BR2_TOOLCHAIN_BUILDROOT_WCHAR=y -BR2_TOOLCHAIN_BUILDROOT_CXX=y -BR2_PACKAGE_SDL=y -BR2_PACKAGE_SDL_MIXER=y -BR2_PACKAGE_SDL_TTF=y -BR2_PACKAGE_LIBZIP=y -BR2_PACKAGE_LIBSODIUM=y diff --git a/Packaging/OpenDingux/rg350_devilutionx_defconfig b/Packaging/OpenDingux/rg350_devilutionx_defconfig deleted file mode 100644 index 40457fc24..000000000 --- a/Packaging/OpenDingux/rg350_devilutionx_defconfig +++ /dev/null @@ -1,20 +0,0 @@ -BR2_mipsel=y -BR2_mips_xburst=y -# BR2_MIPS_SOFT_FLOAT is not set -BR2_OPTIMIZE_2=y -BR2_KERNEL_HEADERS_3_12=y -BR2_UCLIBC_CONFIG="board/opendingux/gcw0/uclibc.config" -BR2_TOOLCHAIN_BUILDROOT_LARGEFILE=y -BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y -BR2_TOOLCHAIN_BUILDROOT_WCHAR=y -BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="--enable-lto" -BR2_GCC_VERSION_5_X=y -BR2_EXTRA_GCC_CONFIG_OPTIONS="--enable-lto" -BR2_TOOLCHAIN_BUILDROOT_CXX=y -BR2_PACKAGE_SDL=y -BR2_PACKAGE_SDL_MIXER=y -BR2_PACKAGE_SDL_TTF=y -BR2_PACKAGE_ETNA_VIV=y -BR2_PACKAGE_ETNA_VIV_ABIV4=y -BR2_PACKAGE_MESA3D_ETNA_VIV=y -BR2_PACKAGE_LIBZIP=y diff --git a/Packaging/OpenDingux/targets.sh b/Packaging/OpenDingux/targets.sh new file mode 100755 index 000000000..c58313b81 --- /dev/null +++ b/Packaging/OpenDingux/targets.sh @@ -0,0 +1,25 @@ +declare -ra VALID_TARGETS=( + retrofw + rg350 +) + +usage_target() { + echo -n " target: target platform:" + printf " %s" "${VALID_TARGETS[@]}" + echo +} + +check_target() { + if [[ $# -eq 0 ]] || [[ -z $1 ]]; then + echo "Error: target is missing" + return 1 + fi + + for target in "${VALID_TARGETS[@]}"; do + if [[ $target == $1 ]]; then + return 0 + fi + done + echo "Error: invalid target" + return 1 +}