merge coreboot/u-boot download logic to one script

they are fundamentally the same, in an lbmk context.

they are downloaded in the same way, and compiled in
the same way!

(Kconfig infrastructure, board-specific code, the way
submodules are used in git, etc)

~200 sloc reduction in resources/scripts

the audit begins

Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
Leah Rowe
2023-08-16 21:34:21 +01:00
parent 2453c303e6
commit 59dba6cfcd
136 changed files with 642 additions and 884 deletions
+14 -14
View File
@@ -63,19 +63,19 @@ if [ ! -d "resources/coreboot/${board}" ]; then
exit 1
fi
if [ ! -f "resources/coreboot/${board}/board.cfg" ]; then
printf "build/roms: Missing board.cfg for target: %s\n" ${board}
if [ ! -f "resources/coreboot/${board}/target.cfg" ]; then
printf "build/roms: Missing target.cfg for target: %s\n" ${board}
exit 1
fi
grub_scan_disk="undefined"
cbtree="undefined"
romtype="normal" # optional parameter in board.cfg. "normal" is default
tree="undefined"
romtype="normal" # optional parameter in target.cfg. "normal" is default
arch="undefined"
# Disable all payloads by default.
# board.cfg files have to specifically enable [a] payload(s)
# target.cfg files have to specifically enable [a] payload(s)
payload_grub="n"
payload_grub_withseabios="n" # seabios chainloaded from grub
payload_seabios="n"
@@ -86,8 +86,8 @@ payload_uboot="n"
uboot_config="undefined"
# ditto option whether to compile ada in crossgcc:
crossgcc_ada="y" # yes by default
# Override the above defaults using board.cfg
. "resources/coreboot/${board}/board.cfg"
# Override the above defaults using target.cfg
. "resources/coreboot/${board}/target.cfg"
if [ "${grub_scan_disk}" = "undefined" ]; then
printf "build/roms: Target '%s' does not define grub_scan_disk. " \
@@ -106,7 +106,7 @@ if [ "${grub_scan_disk}" != "both" ] && \
# erroring out would be silly. just use the default
fi
if [ "${cbtree}" = "undefined" ]; then
if [ "${tree}" = "undefined" ]; then
printf "build/roms: Target '%s' does not define a coreboot tree. " \
${board}
printf "Skipping build.\n"
@@ -196,17 +196,17 @@ fi
romdir="bin/${board}"
cbdir="coreboot/${board}"
if [ "${board}" != "${cbtree}" ]; then
cbdir="coreboot/${cbtree}"
if [ "${board}" != "${tree}" ]; then
cbdir="coreboot/${tree}"
fi
cbfstool="cbutils/${cbtree}/cbfstool"
cbfstool="cbutils/${tree}/cbfstool"
corebootrom="${cbdir}/build/coreboot.rom"
seavgabiosrom="payload/seabios/seavgabios.bin"
./build module cbutils ${cbtree} || exit 1
./build module cbutils ${tree} || exit 1
if [ ! -d "${cbdir}" ]; then
./download coreboot ${cbtree}
./fetch_trees coreboot ${tree}
fi
cat version > "${cbdir}/.coreboot-version"
@@ -554,7 +554,7 @@ mkGrubRom() {
backgroundfile="background1280x800.png"
if [ "${board}" = "x60" ] || [ "${board}" = "t60_intelgpu" ]; then
# TODO: don't hardcode this. do it in board.cfg per board
# TODO: don't hardcode this. do it in target.cfg per board
backgroundfile="background1024x768.png"
fi
backgroundfile="resources/grub/background/${backgroundfile}"
+6 -6
View File
@@ -32,21 +32,21 @@ rm -Rf cbutils
[ ! -d "coreboot/" ] && exit 0
for cbtree in coreboot/*; do
if [ "${cbtree##*/}" = "coreboot" ]; then
for tree in coreboot/*; do
if [ "${tree##*/}" = "coreboot" ]; then
continue
fi
if [ ! -d "${cbtree}" ]; then
if [ ! -d "${tree}" ]; then
continue
fi
# Clean coreboot, of course
make -C "${cbtree}/" distclean
make -C "${tree}/" distclean
# Clean its utilities as well
for util in cbfstool ifdtool nvramtool cbmem; do
make distclean -C "${cbtree}/util/${util}/"
make distclean -C "${tree}/util/${util}/"
done
make distclean -C "${cbtree}/payloads/libpayload/"
make distclean -C "${tree}/payloads/libpayload/"
done
printf "\n\n"
+14 -14
View File
@@ -41,34 +41,34 @@ build_for_mainboard() {
board="${1}"
[ ! -d "resources/coreboot/${board}" ] && \
continue
[ ! -f "resources/coreboot/${board}/board.cfg" ] && \
[ ! -f "resources/coreboot/${board}/target.cfg" ] && \
continue
cbtree="undefined"
. "resources/coreboot/${board}/board.cfg" # source
if [ "${cbtree}" = "undefined" ]; then
printf "build/cbutils: improper cbtree definition for '%s'" \
tree="undefined"
. "resources/coreboot/${board}/target.cfg" # source
if [ "${tree}" = "undefined" ]; then
printf "build/cbutils: improper tree definition for '%s'" \
"${board}"
return 1
fi
buildutils "${cbtree}" || return 1
buildutils "${tree}" || return 1
}
buildutils() {
cbtree="${1}"
if [ ! -d "coreboot/${cbtree}/" ]; then
./download coreboot $cbtree || return 1
tree="${1}"
if [ ! -d "coreboot/${tree}/" ]; then
./fetch_trees coreboot $tree || return 1
fi
for util in cbfstool ifdtool; do
[ -f "cbutils/${cbtree}/${util}" ] \
[ -f "cbutils/${tree}/${util}" ] \
&& continue
if [ ! -d "cbutils/${cbtree}" ]; then
mkdir -p "cbutils/${cbtree}" || return 1
if [ ! -d "cbutils/${tree}" ]; then
mkdir -p "cbutils/${tree}" || return 1
fi
utildir="coreboot/${cbtree}/util/${util}"
utildir="coreboot/${tree}/util/${util}"
make distclean -C "${utildir}" || return 1
make -j$(nproc) -C "${utildir}" || return 1
mv "${utildir}/${util}" "cbutils/${cbtree}" || return 1
mv "${utildir}/${util}" "cbutils/${tree}" || return 1
make distclean -C "${utildir}" || return 1
done
}
+11 -11
View File
@@ -26,7 +26,7 @@ RET=0
pdir="payload/u-boot"
ubdir=""
arch=""
ubtree=""
tree=""
config_name=""
board_dir=""
@@ -86,21 +86,21 @@ handle_dependencies()
rm -rf "${pdir}/${board}"
mkdir -p "${pdir}/${board}"
ubtree="undefined"
tree="undefined"
arch="undefined"
if [ ! -f "${board_dir}/board.cfg" ]; then
printf "build/u-boot %s: Missing board.cfg.\n" \
if [ ! -f "${board_dir}/target.cfg" ]; then
printf "build/u-boot %s: Missing target.cfg.\n" \
"${board}"
RET=1
return 1
fi
# Override the above defaults using board.cfg
. "${board_dir}/board.cfg" # source
# Override the above defaults using target.cfg
. "${board_dir}/target.cfg" # source
if [ "${ubtree}" = "undefined" ]; then
printf "build/u-boot %s: ubtree undefined\n" \
if [ "${tree}" = "undefined" ]; then
printf "build/u-boot %s: tree undefined\n" \
"${board}"
RET=1
return 1
@@ -113,12 +113,12 @@ handle_dependencies()
fi
ubdir="u-boot/${board}"
if [ "${board}" != "${ubtree}" ]; then
ubdir="u-boot/${ubtree}"
if [ "${board}" != "${tree}" ]; then
ubdir="u-boot/${tree}"
fi
if [ ! -d "${ubdir}" ]; then
./download u-boot "$board"
./fetch_trees u-boot "$board"
fi
if [ ! -d "${ubdir}" ]; then
+6 -6
View File
@@ -24,14 +24,14 @@ set -u -e
projectname="$(cat projectname)"
version="version-unknown"
versiondate="version-date-unknown"
cbtree="default"
tree="default"
target=""
CONFIG_HAVE_MRC=""
CONFIG_HAVE_ME_BIN=""
CONFIG_KBC1126_FIRMWARE=""
CONFIG_INCLUDE_SMSC_SCH5545_EC_FW=""
ifdtool="cbutils/${cbtree}/ifdtool"
cbfstool="cbutils/${cbtree}/cbfstool"
ifdtool="cbutils/${tree}/ifdtool"
cbfstool="cbutils/${tree}/cbfstool"
main()
{
@@ -118,10 +118,10 @@ strip_archive()
{
romdir=${1}
if [ ! -d coreboot/${cbtree} ]; then
./download coreboot ${cbtree} || exit 1
if [ ! -d coreboot/${tree} ]; then
./fetch_trees coreboot ${tree} || exit 1
fi
./build module cbutils ${cbtree} || exit 1
./build module cbutils ${tree} || exit 1
rm -Rf "${romdir}_tmp" # dirty hack, to reduce disk io later
# rather than using /tmp, which might not be tmpfs
+12 -7
View File
@@ -23,13 +23,15 @@ set -u -e
projectname="$(cat projectname)"
modlist="coreboot flashrom grub memtest86plus seabios me_cleaner u-boot"
modlist="${modlist} bios_extract biosutilities uefitool"
trees_gitclone_list="coreboot u-boot"
simple_gitclone_list="flashrom grub memtest86plus seabios me_cleaner uefitool"
simple_gitclone_list="${simple_gitclone_list} bios_extract biosutilities"
dirlist="resources util" # do not add blobs directory here. it's handled below
filelist="lbmk blobutil modify download build README.md COPYING Makefile update"
filelist="${filelist} version versiondate projectname .gitcheck gitclone"
filelist="${filelist} fetch_trees"
version="version-unknown"
versiondate="version-date-unknown"
@@ -75,16 +77,19 @@ create_release_directory()
download_modules()
{
for modname in ${modlist}; do
if [ ! -d "${modname}/" ]; then
./download ${modname}
fi
for modname in ${trees_gitclone_list}; do
[ ! -d "${modname}" ] && \
./fetch_trees ${modname}
done
for modname in ${simple_gitclone_list}; do
[ ! -d "${modname}/" ] && \
./download ${modname}
done
}
copy_files()
{
for dir in ${modlist} ${dirlist}; do
for dir in ${simple_gitclone_list} ${dirlist}; do
cp -R "${dir}/" "${srcdir}/"
done
+7 -7
View File
@@ -44,20 +44,20 @@ main()
modifyconf() {
board="$1"
if [ ! -f "resources/coreboot/${board}/board.cfg" ]; then
printf "\nmodify/config/coreboot: no board.cfg for: %s\n" \
if [ ! -f "resources/coreboot/${board}/target.cfg" ]; then
printf "\nmodify/config/coreboot: no target.cfg for: %s\n" \
"${board}"
fi
cbtree=""
. "resources/coreboot/${board}/board.cfg" # source
tree=""
. "resources/coreboot/${board}/target.cfg" # source
if [ -z ${cbtree} ]; then
if [ -z ${tree} ]; then
return 0
fi
cbdir="coreboot/${cbtree}"
cbdir="coreboot/${tree}"
if [ ! -d "${cbdir}" ]; then
./download coreboot ${cbtree}
./fetch_trees coreboot ${tree}
fi
for cbcfg in resources/coreboot/${board}/config/*; do
+7 -7
View File
@@ -44,22 +44,22 @@ main()
modifyconf()
{
board="$1"
if [ ! -f "resources/u-boot/${board}/board.cfg" ]; then
printf "\nmodify/config/u-boot: no board.cfg for: %s\n" \
if [ ! -f "resources/u-boot/${board}/target.cfg" ]; then
printf "\nmodify/config/u-boot: no target.cfg for: %s\n" \
"${board}"
return 0
fi
ubtree="undefined"
. "resources/u-boot/${board}/board.cfg" # source
tree="undefined"
. "resources/u-boot/${board}/target.cfg" # source
if [ "${ubtree}" = "undefined" ]; then
if [ "${tree}" = "undefined" ]; then
return 0
fi
ubdir="u-boot/${ubtree}"
ubdir="u-boot/${tree}"
if [ ! -d "${ubdir}" ]; then
./download u-boot ${ubtree}
./fetch_trees u-boot ${tree}
fi
for ubcfg in resources/u-boot/${board}/config/*; do
+4 -4
View File
@@ -63,8 +63,8 @@ main()
if [ ! -d "${boarddir}" ]; then
fail "Target not defined"
elif [ ! -f "${boarddir}/board.cfg" ]; then
fail "Target missing board.cfg"
elif [ ! -f "${boarddir}/target.cfg" ]; then
fail "Target missing target.cfg"
fi
detect_firmware || exit 0
@@ -78,7 +78,7 @@ detect_firmware()
{
set -- "${boarddir}/config/"*
. ${1} 2>/dev/null
. "${boarddir}/board.cfg"
. "${boarddir}/target.cfg"
if [ "${CONFIG_HAVE_MRC}" = "y" ]; then
needs="${needs} MRC"
@@ -189,7 +189,7 @@ build_dependencies()
fi
if [ ! -d ${cbdir} ]; then
printf "downloading coreboot\n"
./download coreboot default \
./fetch_trees coreboot default \
|| fail "could not download coreboot"
fi
if [ ! -d bios_extract ]; then
+5 -5
View File
@@ -49,8 +49,8 @@ check_board()
fail "file does not exist: ${vendor_rom}"
elif [ ! -d "${boarddir}" ]; then
fail "build/roms ${board}: target not defined"
elif [ ! -f "${boarddir}/board.cfg" ]; then
fail "build/roms ${board}: missing board.cfg"
elif [ ! -f "${boarddir}/target.cfg" ]; then
fail "build/roms ${board}: missing target.cfg"
fi
}
@@ -66,11 +66,11 @@ build_dependencies()
if [ ! -d ${cbdir} ]; then
printf "downloading coreboot\n"
./download coreboot default \
./fetch_trees coreboot default \
|| fail "could not download coreboot"
else
printf "coreboot already downloaded. Skipping.\n"
printf "run ./download coreboot to manually overwrite\n"
printf "run ./fetch_trees coreboot to manually overwrite\n"
fi
if ! [ -f ${ifdtool} ]; then
@@ -86,7 +86,7 @@ extract_blobs()
set -- "${boarddir}/config/"*
. ${1} 2>/dev/null
. "${boarddir}/board.cfg"
. "${boarddir}/target.cfg"
if [ "$CONFIG_HAVE_MRC" = "y" ]; then
printf 'haswell board detected, downloading mrc\n'
+2 -2
View File
@@ -142,7 +142,7 @@ build_dependencies()
{
if [ ! -d ${cbdir} ]; then
printf "downloading coreboot\n"
./download coreboot default
./fetch_trees coreboot default
fi
./build module cbutils default || fail "could not build cbutils"
@@ -200,7 +200,7 @@ patch_rom()
set -- "${boarddir}/config/"*
. ${1} 2>/dev/null
. "${boarddir}/board.cfg"
. "${boarddir}/target.cfg"
if [ "$CONFIG_HAVE_MRC" = "y" ]; then
inject_blob_intel_mrc "${rom}"
+7 -7
View File
@@ -53,15 +53,15 @@ updateconf()
boarddir="${cbcfgsdir}/${board}"
if [ -f "${boarddir}/board.cfg" ]; then
cbtree="undefined"
. "${boarddir}/board.cfg" # source
if [ "${cbtree}" = "undefined" ]; then
if [ -f "${boarddir}/target.cfg" ]; then
tree="undefined"
. "${boarddir}/target.cfg" # source
if [ "${tree}" = "undefined" ]; then
return 0
fi
cbdir="coreboot/${cbtree}"
cbdir="coreboot/${tree}"
if [ ! -d "${cbdir}" ]; then
./download coreboot ${cbtree}
./fetch_trees coreboot ${tree}
fi
for cbcfg in "${boarddir}/config/"*; do
if [ ! -f "${cbcfg}" ]; then
@@ -74,7 +74,7 @@ updateconf()
make distclean -BC "${cbdir}"
done
else
printf "\nupdate/config/coreboot: no board.cfg for: %s\n" \
printf "\nupdate/config/coreboot: no target.cfg for: %s\n" \
${board}
fi
}
-183
View File
@@ -1,183 +0,0 @@
#!/usr/bin/env sh
# helper script: download coreboot
#
# Copyright (C) 2014-2016,2020,2021,2023 Leah Rowe <info@minifree.org>
# Copyright (C) 2022 Alper Nebi Yasak <alpernebiyasak@gmail.com>
# Copyright (C) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
_board=""
cbtree=""
cbrevision=""
cbcfgsdir="resources/coreboot"
main()
{
rm -f ${cbcfgsdir}/*/seen
printf "Downloading coreboot and (if available) applying patches\n"
boards=""
if [ $# -gt 0 ]; then
boards=$@
else
for board in "${cbcfgsdir}/"*; do
[ ! -d "${board}" ] && continue
boards="${boards} ${board##*/}"
done
fi
for board in ${boards}; do
rm -f "${cbcfgsdir}"/*/seen
download_coreboot_for_board "${board}"
done
rm -f ${cbcfgsdir}/*/seen
}
download_coreboot_for_board()
{
_board="${1}"
cbtree="undefined"
cbrevision="undefined"
fetch_coreboot_config "${_board}" || exit 1
rm -f "${cbcfgsdir}"/*/seen
if [ -d "coreboot/${cbtree}" ]; then
printf "REMARK: download/coreboot %s: exists. Skipping.\n" \
${cbtree}
[ "${cbtree}" != "${1}" ] && \
printf "(for board: '%s}')\n" ${1}
return 0
fi
gitclone_coreboot_from_upstream || exit 1
prepare_new_coreboot_tree "${1}" "${cbtree}" "${cbrevision}" \
|| exit 1
}
fetch_coreboot_config()
{
_board=${1}
while true; do
cbrevision="undefined"
cbtree="undefined"
check_config_for_board "${_board}" || return 1
# This is to override $cbrevision and $cbtree
. "${cbcfgsdir}/${_board}/board.cfg" || exit 1
if [ "${_board}" != "${cbtree}" ]; then
_board="${cbtree}"
continue
elif [ "${cbtree}" = "undefined" ]; then
printf "ERROR: download/coreboot:"
printf " tree name undefined for '%s\n'" \
${_board}
return 1
elif [ "${cbrevision}" = "undefined" ]; then
printf "ERROR: download/coreboot:"
printf " commit ID undefined for '%s'\n" \
${_board}
return 1
else
break
fi
done
}
check_config_for_board()
{
_board=${1}
if [ ! -f "${cbcfgsdir}/${_board}/board.cfg" ]; then
printf "ERROR: download/coreboot: board.cfg does not"
printf " exist for '%s'\n" ${_board}
return 1
elif [ -f "${cbcfgsdir}/${_board}/seen" ]; then
printf "ERROR: download/coreboot: logical loop:"
printf " '%s' board.cfg refers to another tree," ${_board}
printf " which ultimately refers back to '%s'." ${_board}
return 1
fi
touch "${cbcfgsdir}/${_board}/seen"
}
gitclone_coreboot_from_upstream()
{
[ ! -d coreboot ] && \
mkdir -p coreboot
[ ! -d coreboot ] && \
return 1
[ -d coreboot/coreboot ] && \
return 0
./gitclone coreboot || \
return 1
}
prepare_new_coreboot_tree()
{
target=${1}
cbtree=${2}
cbrevision=${3}
printf "Preparing coreboot tree: %s\n" ${cbtree}
[ "${cbtree}" != "${target}" ] && \
printf "(for board: %s)\n" "${target}"
cp -R coreboot/coreboot "coreboot/${cbtree}" || exit 1
(
cd "coreboot/${cbtree}" \
|| err "cannot cd to coreboot/${cbtree}"
git reset --hard ${cbrevision} \
|| err "cannot reset coreboot revision for tree, ${cbtree}"
git submodule update --init --checkout \
|| err "cannot update coreboot submodules for tree, ${cbtree}"
for patch in ../../"${cbcfgsdir}"/"${cbtree}"/patches/*.patch; do
[ ! -f "${patch}" ] && \
continue
if ! git am "${patch}"; then
git am --abort
err "cannot patch ${cbtree}"
fi
done
# extra.sh can be used for anything
# but should *only* be a last resort
if [ -f "../../${cbcfgsdir}/${cbtree}/extra.sh" ]; then
"../../${cbcfgsdir}/${cbtree}/extra.sh" || \
err "${cbtree} extra.sh"
fi
)
}
err()
{
printf "ERROR: %s: %s\n" $0 $1 1>&2
exit 1
}
main $@
+1 -1
View File
@@ -74,7 +74,7 @@ check_existing()
build_dependencies()
{
if [ ! -d "${cbdir}/" ]; then
./download coreboot default || return 1
./fetch_trees coreboot default || return 1
fi
./build module cbutils default || return 1
return 0
-262
View File
@@ -1,262 +0,0 @@
#!/usr/bin/env sh
# helper script: download u-boot
#
# Copyright (C) 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
# Copyright (C) 2022 Alper Nebi Yasak <alpernebiyasak@gmail.com>
# Copyright (C) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
[ -f build_error ] && rm -f build_error
list_supported_boards() {
for board in resources/u-boot/*; do
if [ -d ${board} ]; then
echo "${board#resources/u-boot/}"
fi
done
}
downloadfor() {
board="${1}"
# The loop will always exit, but this while loop is crafted
# such that a tree referencing a tree that references another tree is possible
# (and so on)
while true; do
ubrevision="undefined"
ubtree="undefined"
if [ ! -f "resources/u-boot/${board}/board.cfg" ]; then
printf "ERROR: %s: board.cfg does not exist for '%s'\n" \
"download/u-boot" "${board}"
return 1
fi
if [ -f "resources/u-boot/${board}/seen" ]; then
printf "ERROR: %s: logical loop; '%s' board.cfg refers to another tree, which ultimately refers back to '%s'.\n" \
"download/u-boot" "${board}" "${board}"
return 1
fi
# This is to override $ubrevision and $ubtree
. "resources/u-boot/${board}/board.cfg" || touch build_error
if [ -f build_error ]; then
printf "ERROR: %s: problem sourcing %s/board.cfg\n" \
"download/u-boot" "${board}"
return 1
fi
touch "resources/u-boot/${board}/seen"
if [ "${board}" != "${ubtree}" ]; then
board="${ubtree}"
else
if [ "${ubtree}" = "undefined" ]; then
printf "ERROR: %s: tree name undefined for '%s\n'" \
"download/u-boot" "${board}"
return 1
fi
if [ "${ubrevision}" = "undefined" ]; then
printf "ERROR: %s: commit ID undefined for '%s'\n" \
"download/u-boot" "${board}"
return 1
fi
break
fi
done
rm -f resources/u-boot/*/seen
ubtree="u-boot/${ubtree}"
if [ -d "${ubtree}" ]; then
printf \
"REMARK: '%s' directory already exists. Skipping setup.\n" \
"${ubtree}"
if [ "${ubtree}" != "u-boot/${board}" ]; then
printf "(for board: '${board}')\n"
fi
return 0
fi
if [ ! -d "u-boot" ]; then
mkdir -p "u-boot"
fi
if [ ! -d "u-boot" ]; then
printf \
"ERROR: '%s' directory not created. Check file system permissions\n" \
"u-boot"
return 1
fi
uboot_dir="u-boot/u-boot"
if [ ! -d "${uboot_dir}/.git" ] && [ -d "${uboot_dir}" ]; then
rm -Rf "${uboot_dir}"
fi
if [ ! -d "${uboot_dir}" ]; then
printf "Download u-boot from upstream:\n"
git clone https://source.denx.de/u-boot/u-boot.git \
"${uboot_dir}" || \
rm -Rf "${uboot_dir}"
if [ ! -d "${uboot_dir}" ]; then
printf "WARNING: Upstream failed. Trying backup github repository:\n"
git clone https://github.com/u-boot/u-boot.git \
"${uboot_dir}" || \
rm -Rf coreboot
fi
if [ ! -d "${uboot_dir}" ]; then
printf \
"ERROR: %s: Problem with git-clone. Network issue?\n" \
"download/u-boot"
return 1
fi
fi
git -C "${uboot_dir}" fetch origin "${ubrevision}" || touch build_error
if [ -f build_error ]; then
printf \
"ERROR: %s: Problem with git-fetch. Network issue?\n" \
"download/u-boot"
return 1
fi
cp -R "${uboot_dir}" "${ubtree}" || touch build_error
if [ -f build_error ]; then
printf "ERROR: %s: Unable to copy directory. Check file system permissions or free space.\n" \
"download/u-boot"
rm -Rf "${ubtree}/"
return 1
fi
git -C "${ubtree}" reset --hard ${ubrevision} || \
touch build_error
if [ -f build_error ]; then
printf \
"ERROR: %s: Unable to reset to commit ID/tag '%s' for board '%s' on tree '%s'\n" \
"download/u-boot" "${ubrevision}" "${board}" "${ubtree}"
return 1
fi
git -C "${ubtree}" submodule update --init || touch build_error
if [ -f build_error ]; then
printf "ERROR: %s: Unable to update submodules for tree '%s'\n" \
"${ubtree}"
return 1
fi
for patch in resources/u-boot/${board}/patches/*.patch; do
if [ ! -f "${patch}" ]; then
continue
fi
git -C "${ubtree}" am "$(pwd)/${patch}" || touch build_error
if [ -f build_error ]; then
printf "ERROR: %s: Unable to apply patch '%s' for board '%s' on tree '%s'" \
"download/u-boot" "${patch}" "${board}" "${ubtree}"
git -C "${ubtree}" am --abort
return 1
fi
done
# extra.sh could be used to patch submodules, if you wanted to
# It's impossible to predict what submodules will be available, and
# it's rare that you'd want to patch them, so this is handled by
# extra.sh on a per-board basis
# In fact, extra.sh can be used for anything you want.
if [ -f "resources/u-boot/${board}/extra.sh" ]; then
( cd "${ubtree}" && "../../resources/u-boot/${board}/extra.sh"; ) || touch build_error
if [ -f build_error ]; then
return 1
fi
return 0
else
return 0
fi
}
strip_comments()
{
file="$1"
# Remove comments
sed 's/#.*//' "${file}" | \
# Remove lines composed of whitespaces only
sed '/^\W\+$/d' | \
# Remove empty lines
sed '/^$/d'
}
usage()
{
progname="./download u-boot"
printf "Usage:\n"
printf "\t%s # %s\n" \
"${progname}" \
"Download u-boot for all boards"
printf "\t%s [board] # %s\n" \
"${progname}" \
"Download u-boot for the given board"
printf "\t%s --list-boards # %s\n" \
"${progname}" \
"List supported boards"
printf "\t%s --help # %s\n" \
"${progname}" \
"Prints this help"
}
download_uboot_board()
{
board="${1}"
ubtree="u-boot/${board}"
printf "Downloading u-boot "
printf "and (if exist in build system) applying patches\n"
downloadfor "${board}"
rm -f "build_error"
printf "\n\n"
}
if [ $# -eq 0 ] ; then
for board in $(list_supported_boards); do
download_uboot_board "${board}"
done
exit 0
elif [ $# -eq 1 ] && [ "$1" = "--help" ] ; then
usage
exit 0
elif [ $# -eq 1 ] && [ "$1" = "--list-boards" ] ; then
list_supported_boards
exit 0
elif [ $# -eq 1 ] ; then
for board in $(list_supported_boards) ; do
if [ "$board" = "$1" ] ; then
download_uboot_board "$1"
exit 0
fi
done
printf "Error: Board '${1}' is not supported\n"
exit 1
fi
exit 0
+13 -13
View File
@@ -31,38 +31,38 @@ printf "Updating U-Boot configs\n"
# Build ROM images for supported boards
updateconf() {
board="$1"
if [ -f "resources/u-boot/${board}/board.cfg" ]; then
ubtree="undefined"
. "resources/u-boot/${board}/board.cfg" # source
if [ "${ubtree}" = "undefined" ]; then
if [ -f "resources/u-boot/${board}/target.cfg" ]; then
tree="undefined"
. "resources/u-boot/${board}/target.cfg" # source
if [ "${tree}" = "undefined" ]; then
return 0
fi
if [ ! -d "u-boot/${ubtree}" ]; then
./download u-boot ${ubtree}
if [ ! -d "u-boot/${tree}" ]; then
./fetch_trees u-boot ${tree}
fi
for ubcfg in resources/u-boot/${board}/config/*; do
if [ ! -f ${ubcfg} ]; then
continue
fi
(
cd u-boot/${ubtree}/
cd u-boot/${tree}/
rm -f .config*
make distclean
)
mv $ubcfg u-boot/${ubtree}/.config
mv $ubcfg u-boot/${tree}/.config
(
cd u-boot/${ubtree}/
cd u-boot/${tree}/
make oldconfig
)
mv u-boot/${ubtree}/.config $ubcfg
rm -f u-boot/${ubtree}/.config*
mv u-boot/${tree}/.config $ubcfg
rm -f u-boot/${tree}/.config*
(
cd u-boot/${ubtree}/
cd u-boot/${tree}/
make distclean
)
done
else
printf "\nupdate/config/u-boot: no board.cfg for: %s\n" "${board}"
printf "\nupdate/config/u-boot: no target.cfg for: %s\n" "${board}"
fi
}