#!/usr/bin/env sh # helper script: builds U-Boot source code # # Copyright (C) 2022 Alper Nebi Yasak # Copyright (C) 2022 Ferass El Hafidi # Copyright (C) 2023 Leah Rowe # # 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 . [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e RET=0 pdir="payload/u-boot" ubdir="" arch="" tree="" config_name="" board_dir="" our_version="$(cat version)" projectname="$(cat projectname)" export LOCALVERSION="-${projectname}-${our_version}" 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/}" done fi [ ! -d "payload/" ] && \ mkdir -p payload/ [ ! -d "${pdir}" ] && \ mkdir -p ${pdir}/ for board in "$@"; do build_uboot_payloads "${board}" || continue done printf "Done! U-Boot files are in %s/\n\n" ${pdir} exit $RET } 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} board_dir="resources/u-boot/${board}" rm -rf "${pdir}/${board}" mkdir -p "${pdir}/${board}" tree="undefined" arch="undefined" 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 target.cfg . "${board_dir}/target.cfg" # source if [ "${tree}" = "undefined" ]; then printf "build/u-boot %s: tree undefined\n" \ "${board}" RET=1 return 1 fi if [ "${arch}" = "undefined" ]; then printf "build/u-boot %s: undefined cpu type\n" \ "${board}" RET=1 return 1 fi ubdir="u-boot/${board}" if [ "${board}" != "${tree}" ]; then ubdir="u-boot/${tree}" fi if [ ! -d "${ubdir}" ]; then ./fetch_trees u-boot "$board" fi if [ ! -d "${ubdir}" ]; then printf "build/u-boot %s: uboot download failed\n" \ "${board}" RET=1 return 1 fi } check_config() { board=${1} config=${2} if [ ! -f "${config}" ]; then printf "build/u-boot %s: configs missing\n" \ ${board} RET=1 return 1 fi 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 make -C "${ubdir}" distclean } main $@