diff options
Diffstat (limited to 'resources/scripts/build/payload')
-rwxr-xr-x | resources/scripts/build/payload/u-boot | 163 |
1 files changed, 101 insertions, 62 deletions
diff --git a/resources/scripts/build/payload/u-boot b/resources/scripts/build/payload/u-boot index e75ede93..bff41400 100755 --- a/resources/scripts/build/payload/u-boot +++ b/resources/scripts/build/payload/u-boot @@ -4,6 +4,7 @@ # # Copyright (C) 2022 Alper Nebi Yasak <alpernebiyasak@gmail.com> # Copyright (C) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> +# Copyright (C) 2023 Leah Rowe <leah@libreboot.org> # # 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 @@ -22,32 +23,65 @@ set -u -e RET=0 +pdir="payload/u-boot" +ubdir="" +arch="" +ubtree="" +config_name="" +board_dir="" -# Build U-Boot -# --------------------------------------------------------------------- +our_version="$(cat version)" +projectname="$(cat projectname)" -printf "Building U-Boot payloads\n" +export LOCALVERSION="-${projectname}-${our_version}" -pdir="payload/u-boot" +main() +{ + printf "Building U-Boot payloads\n" -# Build for all boards if no argument is given -if [ "$#" -eq 0 ]; then - for board_dir in resources/u-boot/*; do - [ ! -d "${board_dir}/config/" ] && \ - continue - set -- "$@" "${board_dir#resources/u-boot/}" + # Build for all boards if no argument is given + if [ "$#" -eq 0 ]; then + for board_dir in resources/u-boot/*; do + [ ! -d "${board_dir}/config/" ] && \ + continue + set -- "$@" "${board_dir#resources/u-boot/}" + done + fi + + [ ! -d "payload/" ] && \ + mkdir -p payload/ + [ ! -d "${pdir}" ] && \ + mkdir -p ${pdir}/ + + for board in "$@"; do + build_uboot_payloads "${board}" || continue done -fi -[ ! -d "payload/" ] && mkdir -p payload/ -[ ! -d "${pdir}" ] && mkdir -p ${pdir}/ + printf "Done! U-Boot files are in %s/\n\n" ${pdir} + exit $RET +} -# Appends additional version info to U-Boot -our_version="$(cat version)" -projectname="$(cat projectname)" -export LOCALVERSION="-${projectname}-${our_version}" +build_uboot_payloads() +{ + board=${1} + + handle_dependencies "${board}" || return 1 + + for config in "${board_dir}/config"/*; do + config_name="${config#$board_dir/config/}" + + check_config "${board}" "${config}" || continue + build_uboot_elf "${config}" + + printf "build/u-boot %s: build config %s\n" \ + "${board}" "${config_name}" + done +} + +handle_dependencies() +{ + board=${1} -for board in "$@"; do board_dir="resources/u-boot/${board}" rm -rf "${pdir}/${board}" mkdir -p "${pdir}/${board}" @@ -59,7 +93,7 @@ for board in "$@"; do printf "build/u-boot %s: Missing board.cfg.\n" \ "${board}" RET=1 - continue + return 1 fi # Override the above defaults using board.cfg @@ -69,13 +103,13 @@ for board in "$@"; do printf "build/u-boot %s: ubtree undefined\n" \ "${board}" RET=1 - continue + return 1 fi if [ "${arch}" = "undefined" ]; then printf "build/u-boot %s: undefined cpu type\n" \ "${board}" RET=1 - continue + return 1 fi ubdir="u-boot/${board}" @@ -91,50 +125,55 @@ for board in "$@"; do printf "build/u-boot %s: uboot download failed\n" \ "${board}" RET=1 - continue + return 1 fi +} - for config in "${board_dir}/config"/*; do - if [ ! -f "${config}" ]; then - printf "build/u-boot %s: configs missing\n" \ - ${board} - RET=1 - continue - fi - - config_name="${config#$board_dir/config/}" - if [ "$config_name" = "default" ]; then - dest_dir="${pdir}/${board}" - else - dest_dir="${pdir}/${board}/${config_name}" - fi - mkdir -p "${dest_dir}" - - printf "build/u-boot %s: building config %s).\n" \ - ${board} ${config_name} - - make -C "${ubdir}" distclean - - cp "${config}" "${ubdir}/.config" - make -C "${ubdir}" olddefconfig - make -C "${ubdir}" -j"$(nproc)" all +check_config() +{ + board=${1} + config=${2} - for f in "${ubdir}"/u-boot "${ubdir}"/u-boot.bin \ - "${ubdir}"/u-boot.dtb \ - "${ubdir}"/u-boot.img \ - "${ubdir}"/u-boot.itb \ - "${ubdir}"/u-boot.elf; do - if [ -f "$f" ]; then - mv "$f" "${dest_dir}/" - fi - done - - make -C "${ubdir}" distclean + if [ ! -f "${config}" ]; then + printf "build/u-boot %s: configs missing\n" \ + ${board} + RET=1 + return 1 + fi - printf "build/u-boot %s: build config %s\n" \ - "${board}" "${config_name}" + if [ "$config_name" = "default" ]; then + dest_dir="${pdir}/${board}" + else + dest_dir="${pdir}/${board}/${config_name}" + fi + mkdir -p "${dest_dir}" + + printf "build/u-boot %s: building config %s).\n" \ + ${board} ${config_name} +} + +build_uboot_elf() +{ + config=${1} + + make -C "${ubdir}" distclean + + cp "${config}" "${ubdir}/.config" + make -C "${ubdir}" olddefconfig + make -C "${ubdir}" -j"$(nproc)" all + + for f in "${ubdir}"/u-boot "${ubdir}"/u-boot.bin \ + "${ubdir}"/u-boot.dtb \ + "${ubdir}"/u-boot.img \ + "${ubdir}"/u-boot.itb \ + "${ubdir}"/u-boot.elf + do + if [ -f "$f" ]; then + mv "$f" "${dest_dir}/" + fi done -done -printf "Done! U-Boot files are in %s/\n\n" ${pdir} -exit $RET + make -C "${ubdir}" distclean +} + +main $@ |