From 4b2d426a206e6182f4e6676b3d6018f05d6e4d98 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 13:35:47 +0100 Subject: scripts: download: u-boot: Add help and support for multiple revisions Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/u-boot | 88 ++++++++++++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 15 deletions(-) (limited to 'resources/scripts/download') diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index 704d1c3a..ca7883ca 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -32,6 +32,12 @@ deleteblobs="true" # This script handles the internet, and Git. Both are inherently unreliable. [[ -f build_error ]] && rm -f build_error +# Make sure that older revision are first as code uses that order to +# find the latest supported revision. +supported_uboot_revisions=" \ + v2021.07 \ +" + downloadfor() { uboot_revision="v2021.07" uboot_dir="u-boot/u-boot" @@ -99,25 +105,77 @@ strip_comments() sed '/^$/d' } -printf "Downloading u-boot and (if exist in build system) applying patches\n" -downloadfor +usage() +{ + progname="./download u-boot" -rm -f "build_error" -printf "\n\n" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download latest u-boot git revision and deblob it" + printf "\t%s [revision] # %s\n" \ + "${progname}" \ + "Download given u-boot git revision and deblob it" + printf "\t%s --list-revisions # %s\n" \ + "${progname}" \ + "List supported u-boot revisions" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} -if [ "${deleteblobs}" = "true" ]; then - bloblist="resources/u-boot/default/blobs.list" +download_uboot_revision() +{ + git_revision="$1" - for blob_path in $(strip_comments "${bloblist}"); do - if echo "${blob_path}" | grep '/$' 2>&1 >/dev/null ; then - printf "Deleting blob directory: '%s/%s'\n" \ - "${uboot_dir}" "${blob_path}" - rm -rf "${uboot_dir}/${blob_path}" - else - printf "Deleting blob file: '%s/%s'\n" \ - "${uboot_dir}" "${blob_path}" - rm -f "${uboot_dir}/${blob_path}" + printf "Downloading u-boot " + printf "and (if exist in build system) applying patches\n" + downloadfor "${git_revision}" + + rm -f "build_error" + printf "\n\n" + + if [ "${deleteblobs}" = "true" ]; then + bloblist="resources/u-boot/default/blobs.list" + for blob_path in $(strip_comments "${bloblist}"); do + if echo "${blob_path}" | \ + grep '/$' 2>&1 >/dev/null ; then + printf "Deleting blob directory: '%s/%s'\n" \ + "${uboot_dir}" "${blob_path}" + rm -rf "${uboot_dir}/${blob_path}" + else + printf "Deleting blob file: '%s/%s'\n" \ + "${uboot_dir}" "${blob_path}" + rm -f "${uboot_dir}/${blob_path}" + fi + done + fi +} + +if [ $# -eq 0 ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + download_uboot_revision "${latest_revision}" + exit 0 +elif [ $# -eq 1 -a "$1" == "--help" ] ; then + usage + exit 0 +elif [ $# -eq 1 -a "$1" == "--list-revisions" ] ; then + for revision in ${supported_uboot_revisions} ; do + printf "${revision}\n" + done + exit 0 +elif [ $# -eq 1 ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$1" ] ; then + download_uboot_revision "$1" + exit 0 fi done + + printf "Error: Revision '${1}' is not supported\n" + + exit 1 fi + exit 0 -- cgit v1.2.1 From 2bb805e2e07a7d3e1268a09d720ecd13e26af418 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 14:04:16 +0100 Subject: download: Add --help in the individual download scripts This doesn't change the existing usage of the scripts: - For the Coreboot script, before this change, all arguments that were passed were considered as board to download the Coreboot source code for. Here we added the '--help' and '--list-boards' arguments, so it should not be an issue as it is extremely unlikely that a board would be called '--help' or '--list-boards'. - All the other scripts don't use any arguments so passing --help should not conflict with the existing usage. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/coreboot | 36 ++++++++++++++++++++++++++++++++ resources/scripts/download/flashrom | 17 +++++++++++++++ resources/scripts/download/grub | 17 +++++++++++++++ resources/scripts/download/ich9utils | 17 +++++++++++++++ resources/scripts/download/memtest86plus | 17 +++++++++++++++ resources/scripts/download/seabios | 17 +++++++++++++++ 6 files changed, 121 insertions(+) (limited to 'resources/scripts/download') diff --git a/resources/scripts/download/coreboot b/resources/scripts/download/coreboot index 6d0aa353..b94b1bc9 100755 --- a/resources/scripts/download/coreboot +++ b/resources/scripts/download/coreboot @@ -21,6 +21,42 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +list_supported_boards() +{ + for board in resources/coreboot/*; do + echo $board | sed 's#resources/coreboot/##' + done +} + +usage() +{ + progname="./download coreboot" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download and deblob Coreboot for all the boards" + printf "\t%s [board [board] ...] # %s\n" \ + "${progname}" \ + "Download and deblob Coreboot for the given boards" + printf "\t%s --list-boards # %s\n" \ + "${progname}" \ + "Prints this help" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "List supported boards" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -eq 1 -a "$1" == "--help" ] ; then + usage + exit 0 +elif [ $# -eq 1 -a "$1" == "--list-boards" ] ; then + list_supported_boards + exit 0 +fi + # set this when you want to modify each coreboot tree # for example, you want to test custom patches # NODELETE= ./download coreboot diff --git a/resources/scripts/download/flashrom b/resources/scripts/download/flashrom index a22f22f2..c5ff4bac 100755 --- a/resources/scripts/download/flashrom +++ b/resources/scripts/download/flashrom @@ -21,6 +21,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download flashrom" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download flashrom" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Get flashrom at the last previously tested revision # Remove the old version that may still exist: diff --git a/resources/scripts/download/grub b/resources/scripts/download/grub index 47c75bc1..97bae1ed 100755 --- a/resources/scripts/download/grub +++ b/resources/scripts/download/grub @@ -21,6 +21,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download grub" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download GRUB" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Remove the old version that may still exist # ------------------------------------------------------------------------------ diff --git a/resources/scripts/download/ich9utils b/resources/scripts/download/ich9utils index a00f27dd..d8232b03 100755 --- a/resources/scripts/download/ich9utils +++ b/resources/scripts/download/ich9utils @@ -21,6 +21,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download ich9utils" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download ich9utils" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + printf "Downloading ich9utils\n" if [ -d ich9utils ]; then diff --git a/resources/scripts/download/memtest86plus b/resources/scripts/download/memtest86plus index 1b3da822..c0897c80 100755 --- a/resources/scripts/download/memtest86plus +++ b/resources/scripts/download/memtest86plus @@ -23,6 +23,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download memtest86plus" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download MemTest86+" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Get the last version of MemTest86+ used, apply patches, build it. # Remove the old version that may exist diff --git a/resources/scripts/download/seabios b/resources/scripts/download/seabios index 58ea2bb8..a7c4ab5e 100755 --- a/resources/scripts/download/seabios +++ b/resources/scripts/download/seabios @@ -19,6 +19,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download seabios" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download SeaBIOS" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Get SeaBIOS, revert to commit last used and apply patches. # Remove the old version that may still exist -- cgit v1.2.1 From ee2731af4493e0e9510e1a5f9bb48bb91feaddcc Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 15:31:08 +0100 Subject: boot-libre: ship the blob list too This should enable various distributions and build system to reuse that blob to deblob u-boot releases themselves. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/u-boot | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) (limited to 'resources/scripts/download') diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index ca7883ca..b67d6bd0 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -110,16 +110,22 @@ usage() progname="./download u-boot" printf "Usage:\n" - printf "\t%s # %s\n" \ + printf "\t%s # %s\n" \ "${progname}" \ "Download latest u-boot git revision and deblob it" - printf "\t%s [revision] # %s\n" \ + printf "\t%s [revision] # %s\n" \ "${progname}" \ "Download given u-boot git revision and deblob it" - printf "\t%s --list-revisions # %s\n" \ + printf "\t%s --blobs-list # %s\n" \ + "${progname}" \ + "Print the path of the blobs.list file for the latest supported u-boot revision" + printf "\t%s --blobs-list [revision] # %s\n" \ + "${progname}" \ + "Print the path of the blobs.list file for the given u-boot revision" + printf "\t%s --list-revisions # %s\n" \ "${progname}" \ "List supported u-boot revisions" - printf "\t%s --help # %s\n" \ + printf "\t%s --help # %s\n" \ "${progname}" \ "Prints this help" } @@ -136,8 +142,8 @@ download_uboot_revision() printf "\n\n" if [ "${deleteblobs}" = "true" ]; then - bloblist="resources/u-boot/default/blobs.list" - for blob_path in $(strip_comments "${bloblist}"); do + blobslist="resources/u-boot/default/blobs.list" + for blob_path in $(strip_comments "${blobslist}"); do if echo "${blob_path}" | \ grep '/$' 2>&1 >/dev/null ; then printf "Deleting blob directory: '%s/%s'\n" \ @@ -152,6 +158,11 @@ download_uboot_revision() fi } +print_blobs_list_path() +{ + printf "resources/u-boot/default/blobs.list\n" +} + if [ $# -eq 0 ] ; then latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" download_uboot_revision "${latest_revision}" @@ -164,6 +175,22 @@ elif [ $# -eq 1 -a "$1" == "--list-revisions" ] ; then printf "${revision}\n" done exit 0 +elif [ $# -eq 1 -a "$1" == "--blobs-list" ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + print_blobs_list_path "${latest_revision}" + exit 0 +elif [ $# -eq 2 -a "$1" == "--blobs-list" ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$2" ] ; then + print_blobs_list_path "$2" + exit 0 + fi + done + + printf "Error: Revision '${1}' is not supported\n" + + exit 1 elif [ $# -eq 1 ] ; then found=0 for revision in ${supported_uboot_revisions} ; do -- cgit v1.2.1 From 425162db93c50033df08ada44f3a08142bf1ed12 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 17:37:26 +0100 Subject: boot-libre: add --gen-blob-script to generate a deblob script This should enable various distributions and build system to reuse the generated script to deblob u-boot releases themselves. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/u-boot | 93 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 6 deletions(-) (limited to 'resources/scripts/download') diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index b67d6bd0..8c94d338 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -105,27 +105,83 @@ strip_comments() sed '/^$/d' } +generate_deblob_script() +{ + blob_list_file="$1" + output="$2" + + # Add sheebang and copyright headers from this file + awk '{ + if ($0 !~ /^#/ && NF > 0) { + stop=1; + } + if (stop !=1) { + printf("%s\n", $0); + } + }' $0 >> ${output} + + # Add rm -rf before directories and rm -f before files + awk \ + '{ + }{ + if (NF == 0) { + printf("\n"); + } else { + if ($0 !~ /#/ && $NF ~ /\/$/) { + printf("rm -rf %s\n", $0); + } else if ($0 !~ /#/) { + printf("rm -f %s\n", $0); + } else { + # We have comments, try to see if they are + # still valid paths before the comments + comments_found=0 + last_field=0 + for(i=1; i<=NF; i++) { + if($i ~ /#/) { + comments_found=1; + } else if(comments_found != 1) { + last_field=i; + } + } + if (last_field == 0) { + printf("%s\n", $0); + } else if ($last_field ~ /\/$/) { + printf("rm -rf %s\n", $0); + } else { + printf("rm -f %s\n", $0); + } + } + } + }' "${blob_list_file}" >> "${output}" +} + usage() { progname="./download u-boot" printf "Usage:\n" - printf "\t%s # %s\n" \ + printf "\t%s # %s\n" \ "${progname}" \ "Download latest u-boot git revision and deblob it" - printf "\t%s [revision] # %s\n" \ + printf "\t%s [revision] # %s\n" \ "${progname}" \ "Download given u-boot git revision and deblob it" - printf "\t%s --blobs-list # %s\n" \ + printf "\t%s --blobs-list # %s\n" \ "${progname}" \ "Print the path of the blobs.list file for the latest supported u-boot revision" - printf "\t%s --blobs-list [revision] # %s\n" \ + printf "\t%s --blobs-list [revision] # %s\n" \ "${progname}" \ "Print the path of the blobs.list file for the given u-boot revision" - printf "\t%s --list-revisions # %s\n" \ + printf "\t%s --gen-deblob-script # %s\n" \ + "${progname}" \ + "Print the path of the generated deblob script for the latest supported u-boot revision" + printf "\t%s --gen-deblob-script [revision] # %s\n" \ + "${progname}" \ + "Print the path of the generated deblob script for the given u-boot revision" + printf "\t%s --list-revisions # %s\n" \ "${progname}" \ "List supported u-boot revisions" - printf "\t%s --help # %s\n" \ + printf "\t%s --help # %s\n" \ "${progname}" \ "Prints this help" } @@ -163,6 +219,15 @@ print_blobs_list_path() printf "resources/u-boot/default/blobs.list\n" } +print_deblob_script_path() +{ + version="$1" + path="$(mktemp)" + + generate_deblob_script "$(print_blobs_list_path ${version})" "${path}" + printf "%s\n" ${path} +} + if [ $# -eq 0 ] ; then latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" download_uboot_revision "${latest_revision}" @@ -190,6 +255,22 @@ elif [ $# -eq 2 -a "$1" == "--blobs-list" ] ; then printf "Error: Revision '${1}' is not supported\n" + exit 1 +elif [ $# -eq 1 -a "$1" == "--gen-deblob-script" ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + print_deblob_script_path "${latest_revision}" + exit 0 +elif [ $# -eq 2 -a "$1" == "--gen-deblob-script" ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$2" ] ; then + print_deblob_script_path "$2" + exit 0 + fi + done + + printf "Error: Revision '${1}' is not supported\n" + exit 1 elif [ $# -eq 1 ] ; then found=0 -- cgit v1.2.1 From 8833be159bfff1c417a7459dec323384bcbcb4d0 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 19:33:07 +0100 Subject: scripts: download: u-boot: fix u-boot repository URL Without that fix we have the following warning during the download: Cloning into 'u-boot/u-boot'... warning: redirecting to https://source.denx.de/u-boot/u-boot.git/ Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/u-boot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'resources/scripts/download') diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index 8c94d338..bd0258c0 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -65,7 +65,7 @@ downloadfor() { if [ ! -d "${uboot_dir}" ]; then printf "Download u-boot from upstream:\n" - git clone https://source.denx.de/u-boot/u-boot \ + git clone https://source.denx.de/u-boot/u-boot.git \ "${uboot_dir}" || \ rm -Rf "${uboot_dir}" if [ ! -d "${uboot_dir}" ]; then -- cgit v1.2.1