From 7b23f41fd4c5b109752490b203a1fe8a92070843 Mon Sep 17 00:00:00 2001 From: X-Ryl669 Date: Wed, 17 Feb 2021 01:41:00 +0100 Subject: [PATCH] Fix/improve configs build script (#21086) --- Marlin/src/pins/pins.h | 2 + buildroot/bin/build_all_examples | 103 ++++++++++++++++++------------- buildroot/bin/build_example | 44 ++++++------- buildroot/bin/mftest | 3 +- 4 files changed, 83 insertions(+), 69 deletions(-) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 737c8869d1..62545037da 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -252,6 +252,8 @@ #include "mega/pins_WANHAO_ONEPLUS.h" // ATmega2560 env:mega2560 #elif MB(OVERLORD) #include "mega/pins_OVERLORD.h" // ATmega2560 env:mega2560 +#elif MB(HJC2560C_REV1) + #include "mega/pins_HJC2560C_REV1.h" // ATmega2560 env:mega2560 #elif MB(HJC2560C_REV2) #include "mega/pins_HJC2560C_REV2.h" // ATmega2560 env:mega2560 #elif MB(LEAPFROG_XEED2015) diff --git a/buildroot/bin/build_all_examples b/buildroot/bin/build_all_examples index 29256de69c..91870ab156 100755 --- a/buildroot/bin/build_all_examples +++ b/buildroot/bin/build_all_examples @@ -1,62 +1,81 @@ #!/usr/bin/env bash +# +# build_all_examples base_branch [resume_point] +# -echo "This script will attempt to build Marlin for all known configurations." -echo "In case of failure, the current configuration remains in your repository." -echo "To revert to your current version, run 'git checkout -f'." - -self=`basename "$0"` -HERE=`dirname "$0"` +GITREPO=https://github.com/MarlinFirmware/Configurations.git +STAT_FILE=./.pio/.buildall # Check dependencies -which curl 1>/dev/null 2>&1 || { echo "curl not found, please install it"; exit ; } -which git 1>/dev/null 2>&1 || { echo "git not found, please install it"; exit ; } -if [ -z "$1" ]; then - echo "" - echo "ERROR: " - echo " Expected parameter: $self base_branch [resume_point]" - echo " with:" - echo " base_branch The branch in the Configuration repository to use" - echo " resume_point If not empty, resume building from this board" +which curl 1>/dev/null 2>&1 || { echo "curl not found! Please install it."; exit ; } +which git 1>/dev/null 2>&1 || { echo "git not found! Please install it."; exit ; } +SED=$(command -v gsed 2>/dev/null || command -v sed 2>/dev/null) +[[ -z "$SED" ]] && { echo "No sed found, please install sed" ; exit 1 ; } + +SELF=`basename "$0"` +HERE=`dirname "$0"` + +# Check if called in the right location +[[ -e "Marlin/src" ]] || { echo -e "This script must be called from a Marlin working copy with:\n ./buildroot/bin/$SELF $1" ; exit ; } + +if [[ $# -lt 1 || $# -gt 2 ]]; then + echo "Usage: $SELF base_branch [resume_point] + base_branch - Configuration branch to download and build + resume_point - Configuration path to start from" exit fi -# Check if called in the right folder -if [ ! -e "Marlin/src" ]; then - echo "This script must be called from the root folder of a Marlin repository, please navigate to this folder and call:" - echo "buildroot/ci-check/$self $1" - exit +echo "This script downloads all Configurations and builds Marlin with each one." +echo "On failure the last-built configs will be left in your working copy." +echo "Restore your configs with 'git checkout -f' or 'git reset --hard HEAD'." + +# If -c is given start from the last attempted build +if [[ $1 == '-c' ]]; then + if [[ -f "$STAT_FILE" ]]; then + read BRANCH FIRST_CONF <"$STAT_FILE" + else + echo "Nothing to continue" + exit + fi +else + BRANCH=${1:-"import-2.0.x"} + FIRST_CONF=$2 fi # Check if the current repository has unmerged changes -if [ -z "$2" ]; then - git diff --quiet || { echo "Your current repository is not clean. Either commit your change or stash them, and re-run this script"; exit ; } +if [[ -z "$FIRST_CONF" ]]; then + git diff --quiet || { echo "The working copy is modified. Commit or stash changes before proceeding."; exit ; } else - echo "Resuming from $2" + echo "Resuming from $FIRST_CONF" fi -TMPDIR=`mktemp -d` +# Create a temporary folder inside .pio +TMP=./.pio/build-$BRANCH +[[ -d "$TMP" ]] || mkdir -p $TMP -# Ok, let's do our stuff now -# First extract the current temporary folder -echo "Fetching configuration repository" -if [ ! -e "$TMPDIR/README.md" ]; then - git clone --single-branch --branch "$1" https://github.com/MarlinFirmware/Configurations.git "$TMPDIR" || { echo "Failed to clone the configuration repository"; exit ; } - rm -r $TMPDIR/.git +# Download Configurations into the temporary folder +if [[ ! -e "$TMP/README.md" ]]; then + echo "Downloading Configurations from GitHub into $TMP" + git clone --depth=1 --single-branch --branch "$BRANCH" $GITREPO "$TMP" || { echo "Failed to clone the configuration repository"; exit ; } +else + echo "Using previously downloaded Configurations at $TMP" fi -echo -echo "Start building now..." -echo "=====================" +echo -e "Start building now...\n=====================" shopt -s nullglob -for config in $TMPDIR/config/examples/*/; do - [ -d "${config}" ] || continue - base=`basename "$config"` - if [ ! -z "$2" ] && [ "$2" != "$base" ]; then - echo "Skipping $base..." - continue - fi - "$HERE/build_example" "internal" "$TMPDIR" "$base" || { echo "Failed to build $base"; exit ; } +IFS=' +' +CONF_TREE=$( ls -d "$TMP"/config/examples/*/ "$TMP"/config/examples/*/*/ "$TMP"/config/examples/*/*/*/ "$TMP"/config/examples/*/*/*/*/ | grep -vE ".+\.(\w+)$" ) +for CONF in $CONF_TREE ; do + DIR=$( echo $CONF | sed "s|$TMP/config/examples/||" ) + [[ ! -z $FIRST_CONF ]] && [[ $FIRST_CONF != $DIR && "$FIRST_CONF/" != $DIR ]] && continue + unset FIRST_CONF + compgen -G "${CONF}Con*.h" > /dev/null || continue + echo -e "$BRANCH\n$DIR" >"$STAT_FILE" + "$HERE/build_example" "internal" "$TMP" "$DIR" || { echo "Failed to build $DIR"; exit ; } done -rm -r "$TMPDIR" +# Delete the temp folder and build state +[[ -e "$TMP/config/examples" ]] && rm -rf "$TMP" +rm "$STAT_FILE" diff --git a/buildroot/bin/build_example b/buildroot/bin/build_example index 8f2d9d3c33..3c19b7b626 100755 --- a/buildroot/bin/build_example +++ b/buildroot/bin/build_example @@ -1,35 +1,29 @@ #!/usr/bin/env bash +# +# build_example +# +# Usage: build_example internal config-home config-folder +# -if [ "$1" != "internal" ]; then - echo "Don't call this script directly, use build_all_examples instead." - exit 1 -fi - -SED=$(which gsed || which sed) -HERE=`dirname "$0"` +# Require 'internal' as the first argument +[[ "$1" == "internal" ]] || { echo "Don't call this script directly, use build_all_examples instead." ; exit 1 ; } echo "Testing $3:" -shopt -s nullglob -for sub in find $2/config/examples/$3 -type d; do - [[ -d $sub ]] || continue - base=`basename "$sub"` +SUB=$2/config/examples/$3 +[[ -d "$SUB" ]] || { echo "$SUB is not a good path" ; exit 1 ; } - if [[ ! -f $sub/Configuration.h ]] && [[ ! -f $sub/Configuration_adv.h ]]; then - echo "No configuration files found in $sub" - continue - fi +compgen -G "${SUB}Con*.h" > /dev/null || { echo "No configuration files found in $SUB" ; exit 1 ; } - echo "Getting configuration files from $sub" - cp "$2/config/default"/*.h Marlin/ - cp "$sub"/Configuration.h Marlin/ 2>/dev/null - cp "$sub"/Configuration_adv.h Marlin/ 2>/dev/null - cp "$sub"/_Bootscreen.h Marlin/ 2>/dev/null - cp "$sub"/_Statusscreen.h Marlin/ 2>/dev/null +echo "Getting configuration files from $SUB" +cp "$2/config/default"/*.h Marlin/ +cp "$SUB"/Configuration.h Marlin/ 2>/dev/null +cp "$SUB"/Configuration_adv.h Marlin/ 2>/dev/null +cp "$SUB"/_Bootscreen.h Marlin/ 2>/dev/null +cp "$SUB"/_Statusscreen.h Marlin/ 2>/dev/null - echo "Building the firmware now..." - echo "$HERE/mftest" -a || exit 1 -done +echo "Building the firmware now..." +HERE=`dirname "$0"` +$HERE/mftest -a || { echo "Failed"; exit 1; } echo "Success" -exit 0 diff --git a/buildroot/bin/mftest b/buildroot/bin/mftest index 661566a88d..4626352f7a 100755 --- a/buildroot/bin/mftest +++ b/buildroot/bin/mftest @@ -6,7 +6,6 @@ # mftest [name] [index] [-y] Set config options and optionally build a test # -MFINFO=$(mfinfo) || exit 1 [[ -d Marlin/src ]] || { echo "Please 'cd' to the Marlin repo root." ; exit 1 ; } perror() { echo -e "$0: \033[0;31m$1 -- $2\033[0m" ; } @@ -37,7 +36,7 @@ env shortcuts: tree due esp lin lpc|lpc8 lpc9 m128 m256|mega stm|f1 f4 f7 s6 tee TESTPATH=buildroot/tests -STATE_FILE=$( echo ./.pio/.mftestrc ) +STATE_FILE="./.pio/.mftestrc" SED=$(which gsed || which sed) shopt -s extglob nocasematch