build/roms_helper: move logic into main()
logic will be split from main into smaller functions, in follow-up commitsfsdg20230625
parent
df611f9bc1
commit
bceb5f2eb4
|
@ -36,36 +36,7 @@ kmapdir="resources/grub/keymap"
|
|||
displaymodes=""
|
||||
payloads=""
|
||||
keyboard_layouts=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case ${1} in
|
||||
-d)
|
||||
displaymodes="${displaymodes}${2}"
|
||||
shift ;;
|
||||
-p)
|
||||
payloads="${payloads}${2}"
|
||||
shift ;;
|
||||
-k)
|
||||
keyboard_layouts="${keyboard_layouts}${2}"
|
||||
shift ;;
|
||||
*)
|
||||
board=${1} ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
printf "board is %s , kb is %s , displaymode is %s , payloads is %s\n" \
|
||||
${board} ${keyboard_layouts} ${displaymodes} ${payloads}
|
||||
|
||||
if [ ! -d "${cbcfgdir}/${board}" ]; then
|
||||
printf "build/roms: Target not defined: %s\n" ${board}
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "${cbcfgdir}/${board}/board.cfg" ]; then
|
||||
printf "build/roms: Missing board.cfg for target: %s\n" ${board}
|
||||
exit 1
|
||||
fi
|
||||
|
||||
board=""
|
||||
|
||||
grub_scan_disk="undefined"
|
||||
cbtree="undefined"
|
||||
|
@ -75,227 +46,304 @@ arch="undefined"
|
|||
# Disable all payloads by default.
|
||||
# board.cfg files have to specifically enable [a] payload(s)
|
||||
payload_grub="n"
|
||||
payload_grub_withseabios="n" # seabios chainloaded from grub
|
||||
payload_grub_wseabios="n" # seabios chainloaded from grub
|
||||
payload_seabios="n"
|
||||
payload_seabios_withgrub="n" # i386-coreboot grub from SeaBIOS boot menu
|
||||
payload_seabios_wgrub="n" # i386-coreboot grub from SeaBIOS boot menu
|
||||
payload_memtest="n"
|
||||
payload_uboot="n"
|
||||
uboot_config="undefined"
|
||||
# Override the above defaults using board.cfg
|
||||
. "${cbcfgdir}/${board}/board.cfg"
|
||||
|
||||
if [ "${grub_scan_disk}" = "undefined" ]; then
|
||||
printf "build/roms: Target '%s' does not define grub_scan_disk. " \
|
||||
${board}
|
||||
printf "Defaulting to 'both'.\n"
|
||||
grub_scan_disk="both"
|
||||
fi
|
||||
romdir=""
|
||||
cbdir=""
|
||||
cbfstool=""
|
||||
corebootrom=""
|
||||
seavgabiosrom=""
|
||||
|
||||
if [ "${grub_scan_disk}" != "both" ] && \
|
||||
[ "${grub_scan_disk}" != "ata" ] && \
|
||||
[ "${grub_scan_disk}" != "ahci" ]; then
|
||||
printf "build/roms: Target '%s' defines bad grub_scan_disk option. " \
|
||||
${board}
|
||||
printf "Defaulting to 'both'.\n"
|
||||
grub_scan_disk="both"
|
||||
# erroring out would be silly. just use the default
|
||||
fi
|
||||
CROSS_COMPILE=""
|
||||
|
||||
if [ "${cbtree}" = "undefined" ]; then
|
||||
printf "build/roms: Target '%s' does not define a coreboot tree. " \
|
||||
${board}
|
||||
printf "Skipping build.\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ "${arch}" = "undefined" ]; then
|
||||
printf "build/roms: Target '%s' does not define a CPU type. " \
|
||||
${board}
|
||||
printf "Skipping build.\n"
|
||||
exit 1
|
||||
fi
|
||||
main()
|
||||
{
|
||||
while [ $# -gt 0 ]; do
|
||||
case ${1} in
|
||||
-d)
|
||||
displaymodes="${displaymodes}${2}"
|
||||
shift ;;
|
||||
-p)
|
||||
payloads="${payloads}${2}"
|
||||
shift ;;
|
||||
-k)
|
||||
keyboard_layouts="${keyboard_layouts}${2}"
|
||||
shift ;;
|
||||
*)
|
||||
board=${1} ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "${payload_memtest}" != "n" ] && \
|
||||
[ "${payload_memtest}" != "y" ]; then
|
||||
payload_memtest="n"
|
||||
fi
|
||||
if [ "${payload_grub_withseabios}" = "y" ]; then
|
||||
payload_grub="y"
|
||||
fi
|
||||
if [ "${payload_grub_withseabios}" = "y" ]; then
|
||||
payload_seabios="y"
|
||||
payload_seabios_withgrub="y"
|
||||
fi
|
||||
if [ "${payload_seabios_withgrub}" = "y" ]; then
|
||||
payload_seabios="y"
|
||||
fi
|
||||
# NOTE: reverse logic must NOT be applied. If SeaBIOS-with-GRUB works, that
|
||||
# doesn't necessarily mean GRUb-with-SeaBIOS will. For example, the board
|
||||
# might have an external GPU, where it's recommended to boot SeaBIOS first
|
||||
if [ "${payload_grub}" != "y" ] && [ "${payload_seabios}" != "y" ] \
|
||||
&& [ "${payload_uboot}" != "y" ]; then
|
||||
for configfile in "${cbcfgdir}/${board}/config/"*; do
|
||||
if [ ! -e "${configfile}" ]; then
|
||||
continue
|
||||
fi
|
||||
printf "ERROR build/roms: Target '%s' defines no payload. " \
|
||||
${board}
|
||||
printf "Exiting.\n"
|
||||
printf "board %s , kb %s , displaymode %s , payloads %s\n" \
|
||||
${board} ${keyboard_layouts} ${displaymodes} \
|
||||
${payloads}
|
||||
|
||||
if [ "${board}" = "" ]; then
|
||||
printf "build/roms: undefined board. Exiting\n"
|
||||
exit 1
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${payload_uboot}" != "n" ] && \
|
||||
[ "${payload_uboot}" != "y" ]; then
|
||||
payload_uboot="n"
|
||||
fi
|
||||
|
||||
if [ "${payload_uboot}" = "y" ] && \
|
||||
[ "${uboot_config}" = "undefined" ]; then
|
||||
uboot_config="default"
|
||||
fi
|
||||
|
||||
# Override all payload directives with cmdline args
|
||||
if [ ! -z ${payloads} ]; then
|
||||
echo "setting payloads $payloads"
|
||||
payload_grub="n"
|
||||
payload_grub_withseabios="n" # seabios chainloaded from grub
|
||||
payload_seabios="n"
|
||||
payload_seabios_withgrub="n" # i386-coreboot grub from SeaBIOS menu
|
||||
payload_uboot="n"
|
||||
payload_memtest="n"
|
||||
|
||||
for payload in ${payloads} ; do
|
||||
eval "payload_${payload}=y"
|
||||
done
|
||||
fi
|
||||
|
||||
romdir="bin/${board}"
|
||||
cbdir="coreboot/${board}"
|
||||
if [ "${board}" != "${cbtree}" ]; then
|
||||
cbdir="coreboot/${cbtree}"
|
||||
fi
|
||||
cbfstool="${cbdir}/util/cbfstool/cbfstool"
|
||||
corebootrom="${cbdir}/build/coreboot.rom"
|
||||
seavgabiosrom="payload/seabios/seavgabios.bin"
|
||||
|
||||
if [ ! -d "${cbdir}" ]; then
|
||||
./download coreboot ${cbtree}
|
||||
fi
|
||||
|
||||
cat version > "${cbdir}/.coreboot-version"
|
||||
|
||||
if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ]; then
|
||||
# Even for 64-bit machines, coreboot builds 32-bit ROM
|
||||
# images, so we only need to worry about i386-elf
|
||||
make -C "${cbdir}" crossgcc-i386 CPUS=$(nproc)
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
x86*|i*86|amd64) : ;;
|
||||
*) export CROSS_COMPILE=i386-elf- ;;
|
||||
esac
|
||||
elif [ "${arch}" = "ARMv7" ]; then
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/arm-eabi/" ]; then
|
||||
make -C "${cbdir}" crossgcc-arm CPUS=$(nproc)
|
||||
if [ ! -d "${cbcfgdir}/${board}" ]; then
|
||||
printf "build/roms: Target not defined: %s\n" ${board}
|
||||
exit 1
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
arm|arm32|armv6*|armv7*) : ;;
|
||||
*) export CROSS_COMPILE=arm-eabi- ;;
|
||||
esac
|
||||
elif [ "${arch}" = "AArch64" ]; then
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/aarch64-elf/" ]; then
|
||||
make -C "${cbdir}" crossgcc-aarch64 CPUS=$(nproc)
|
||||
if [ ! -f "${cbcfgdir}/${board}/board.cfg" ]; then
|
||||
printf "build/roms %s: Missing board.cfg\n" ${board}
|
||||
exit 1
|
||||
fi
|
||||
# aarch64 also needs armv7 toolchain for arm-trusted-firmware
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/arm-eabi/" ]; then
|
||||
make -C "${cbdir}" crossgcc-arm CPUS=$(nproc)
|
||||
|
||||
# Override the above defaults using board.cfg
|
||||
. "${cbcfgdir}/${board}/board.cfg"
|
||||
|
||||
if [ "${grub_scan_disk}" = "undefined" ]; then
|
||||
printf "build/roms '%s': grub_scan_disk is undefined. " \
|
||||
${board}
|
||||
printf "Defaulting to 'both'.\n"
|
||||
grub_scan_disk="both"
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
arm64|aarch64) : ;;
|
||||
*) export CROSS_COMPILE=aarch64-elf- ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
export PATH="$(pwd)/${cbdir}/util/crossgcc/xgcc/bin:$PATH"
|
||||
|
||||
if [ ! -f "${cbfstool}" ]; then
|
||||
./build module cbutils ${cbtree} || exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "${seavgabiosrom}" ] \
|
||||
|| [ ! -f payload/seabios/seabios_libgfxinit.elf ] \
|
||||
|| [ ! -f payload/seabios/seabios_vgarom.elf ] \
|
||||
|| [ ! -f payload/seabios/seabios_normal.elf ]; then
|
||||
if [ "${payload_seabios}" = "y" ]; then
|
||||
./build payload seabios
|
||||
elif [ "${payload_grub}" = "y" ] \
|
||||
&& [ "${payload_grub_withseabios}" = "y" ]; then
|
||||
./build payload seabios
|
||||
if [ "${grub_scan_disk}" != "both" ] && \
|
||||
[ "${grub_scan_disk}" != "ata" ] && \
|
||||
[ "${grub_scan_disk}" != "ahci" ]; then
|
||||
printf "build/roms '%s': invalid grub_scan_disk config. " \
|
||||
${board}
|
||||
printf "Defaulting to 'both'.\n"
|
||||
grub_scan_disk="both"
|
||||
# erroring out would be silly. just use the default
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${payload_memtest}" = "y" ]; then
|
||||
if [ ! -f "memtest86plus/memtest" ]; then
|
||||
./build module memtest86plus
|
||||
if [ "${cbtree}" = "undefined" ]; then
|
||||
printf "build/roms '%s': undefined coreboot tree. " \
|
||||
${board}
|
||||
printf "Skipping build.\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ "${arch}" = "undefined" ]; then
|
||||
printf "build/roms '%s': undefined CPU type. " \
|
||||
${board}
|
||||
printf "Skipping build.\n"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -d "${romdir}/" ] || mkdir -p "${romdir}/"
|
||||
rm -f "${romdir}"/*
|
||||
if [ "${payload_memtest}" != "n" ] && \
|
||||
[ "${payload_memtest}" != "y" ]; then
|
||||
payload_memtest="n"
|
||||
fi
|
||||
if [ "${payload_grub_wseabios}" = "y" ]; then
|
||||
payload_grub="y"
|
||||
fi
|
||||
if [ "${payload_grub_wseabios}" = "y" ]; then
|
||||
payload_seabios="y"
|
||||
payload_seabios_wgrub="y"
|
||||
fi
|
||||
if [ "${payload_seabios_wgrub}" = "y" ]; then
|
||||
payload_seabios="y"
|
||||
fi
|
||||
# NOTE: reverse logic must NOT be applied. If SeaBIOS-with-GRUB works,
|
||||
# that doesn't mean GRUB-with-SeaBIOS will. For example, the board
|
||||
# might have an external GPU, where SeaBIOS should be booted first
|
||||
if [ "${payload_grub}" != "y" ] && [ "${payload_seabios}" != "y" ] \
|
||||
&& [ "${payload_uboot}" != "y" ]; then
|
||||
for configfile in "${cbcfgdir}/${board}/config/"*; do
|
||||
if [ ! -e "${configfile}" ]; then
|
||||
continue
|
||||
fi
|
||||
printf "build/roms %s: Payload undefined. Exiting.\n" \
|
||||
${board}
|
||||
exit 1
|
||||
done
|
||||
fi
|
||||
if [ "${payload_uboot}" != "n" ] && \
|
||||
[ "${payload_uboot}" != "y" ]; then
|
||||
payload_uboot="n"
|
||||
fi
|
||||
if [ "${payload_uboot}" = "y" ] && \
|
||||
[ "${uboot_config}" = "undefined" ]; then
|
||||
uboot_config="default"
|
||||
fi
|
||||
# Override all payload directives with cmdline args
|
||||
if [ ! -z ${payloads} ]; then
|
||||
echo "setting payloads $payloads"
|
||||
payload_grub="n"
|
||||
payload_grub_wseabios="n" # seabios chainloaded from grub
|
||||
payload_seabios="n"
|
||||
payload_seabios_wgrub="n" # grub from SeaBIOS menu
|
||||
payload_uboot="n"
|
||||
payload_memtest="n"
|
||||
|
||||
if [ "${payload_grub}" = "y" ] \
|
||||
|| [ "${payload_seabios_withgrub}" = "y" ]; then
|
||||
if [ -f "payload/grub/grub_usqwerty.cfg" ]; then
|
||||
sha1sumcmd="sha1sum resources/grub/config/grub.cfg"
|
||||
grubrefchecksum="$(${sha1sumcmd} | awk '{print $1}')"
|
||||
for payload in ${payloads} ; do
|
||||
eval "payload_${payload}=y"
|
||||
done
|
||||
fi
|
||||
|
||||
sha1sumcmd="sha1sum payload/grub/grub_usqwerty.cfg"
|
||||
grubbuildchecksum="$(${sha1sumcmd} | awk '{print $1}')"
|
||||
romdir="bin/${board}"
|
||||
cbdir="coreboot/${board}"
|
||||
if [ "${board}" != "${cbtree}" ]; then
|
||||
cbdir="coreboot/${cbtree}"
|
||||
fi
|
||||
cbfstool="${cbdir}/util/cbfstool/cbfstool"
|
||||
corebootrom="${cbdir}/build/coreboot.rom"
|
||||
seavgabiosrom="payload/seabios/seavgabios.bin"
|
||||
|
||||
if [ "${grubrefchecksum}" != "${grubbuildchecksum}" ]; then
|
||||
rm -Rf payload/grub/
|
||||
printf "Changes detected to GRUB. Re-building now:\n"
|
||||
if [ ! -d "${cbdir}" ]; then
|
||||
./download coreboot ${cbtree}
|
||||
fi
|
||||
cat version > "${cbdir}/.coreboot-version"
|
||||
|
||||
if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ]; then
|
||||
# Even for 64-bit machines, coreboot builds 32-bit ROM
|
||||
# images, so we only need to worry about i386-elf
|
||||
make -C "${cbdir}" crossgcc-i386 CPUS=$(nproc)
|
||||
fi
|
||||
else
|
||||
printf "Required GRUB payloads not yet built. Building now:\n"
|
||||
rm -Rf payload/grub/ # just in case
|
||||
case "$(uname -m)" in
|
||||
x86*|i*86|amd64) : ;;
|
||||
*) export CROSS_COMPILE=i386-elf- ;;
|
||||
esac
|
||||
elif [ "${arch}" = "ARMv7" ]; then
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/arm-eabi/" ]; then
|
||||
make -C "${cbdir}" crossgcc-arm CPUS=$(nproc)
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
arm|arm32|armv6*|armv7*) : ;;
|
||||
*) export CROSS_COMPILE=arm-eabi- ;;
|
||||
esac
|
||||
elif [ "${arch}" = "AArch64" ]; then
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/aarch64-elf/" ]; then
|
||||
make -C "${cbdir}" crossgcc-aarch64 CPUS=$(nproc)
|
||||
fi
|
||||
# aarch64 also needs armv7 toolchain for arm-trusted-firmware
|
||||
if [ ! -d "${cbdir}/util/crossgcc/xgcc/arm-eabi/" ]; then
|
||||
make -C "${cbdir}" crossgcc-arm CPUS=$(nproc)
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
arm64|aarch64) : ;;
|
||||
*) export CROSS_COMPILE=aarch64-elf- ;;
|
||||
esac
|
||||
fi
|
||||
for keymapfile in ${kmapdir}/*; do
|
||||
if [ ! -f "${keymapfile}" ]; then
|
||||
continue
|
||||
|
||||
export PATH="$(pwd)/${cbdir}/util/crossgcc/xgcc/bin:$PATH"
|
||||
|
||||
if [ ! -f "${cbfstool}" ]; then
|
||||
./build module cbutils ${cbtree} || exit 1
|
||||
fi
|
||||
if [ ! -f "${seavgabiosrom}" ] \
|
||||
|| [ ! -f payload/seabios/seabios_libgfxinit.elf ] \
|
||||
|| [ ! -f payload/seabios/seabios_vgarom.elf ] \
|
||||
|| [ ! -f payload/seabios/seabios_normal.elf ]; then
|
||||
if [ "${payload_seabios}" = "y" ]; then
|
||||
./build payload seabios
|
||||
elif [ "${payload_grub}" = "y" ] \
|
||||
&& [ "${payload_grub_wseabios}" = "y" ]
|
||||
then
|
||||
./build payload seabios
|
||||
fi
|
||||
fi
|
||||
if [ "${payload_memtest}" = "y" ]; then
|
||||
if [ ! -f "memtest86plus/memtest" ]; then
|
||||
./build module memtest86plus
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -d "${romdir}/" ] || mkdir -p "${romdir}/"
|
||||
rm -f "${romdir}"/*
|
||||
|
||||
if [ "${payload_grub}" = "y" ] \
|
||||
|| [ "${payload_seabios_wgrub}" = "y" ]; then
|
||||
if [ -f "payload/grub/grub_usqwerty.cfg" ]; then
|
||||
sha1cmd="sha1sum resources/grub/config/grub.cfg"
|
||||
grubrefchecksum="$(${sha1cmd} | awk '{print $1}')"
|
||||
|
||||
sha1cmd="sha1sum payload/grub/grub_usqwerty.cfg"
|
||||
grubsha1="$(${sha1cmd} | awk '{print $1}')"
|
||||
|
||||
if [ "${grubrefchecksum}" != "${grubsha1}" ]; then
|
||||
rm -Rf payload/grub/
|
||||
printf "GRUB change detected. Rebuilding:\n"
|
||||
fi
|
||||
else
|
||||
printf "GRUB payloads needed. Building:\n"
|
||||
rm -Rf payload/grub/ # just in case
|
||||
fi
|
||||
for keymapfile in ${kmapdir}/*; do
|
||||
if [ ! -f "${keymapfile}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
keymap="${keymapfile##*/}"
|
||||
keymap="${keymap%.gkb}"
|
||||
|
||||
grubelf="payload/grub/grub_${keymap}.elf"
|
||||
grubcfg="payload/grub/grub_${keymap}.cfg"
|
||||
grubtestcfg="payload/grub/grub_${keymap}_test.cfg"
|
||||
|
||||
if [ ! -f "${grubelf}" ] || [ ! -f "${grubcfg}" ] || \
|
||||
[ ! -f "${grubtestcfg}" ]; then
|
||||
./build payload grub
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${payload_uboot}" = "y" ]; then
|
||||
ubdir=""
|
||||
if [ "${uboot_config}" = "default" ]; then
|
||||
ubdir="payload/u-boot/${board}"
|
||||
else
|
||||
ubdir="payload/u-boot/${board}/${uboot_config}"
|
||||
fi
|
||||
|
||||
keymap="${keymapfile##*/}"
|
||||
keymap="${keymap%.gkb}"
|
||||
|
||||
grubelf="payload/grub/grub_${keymap}.elf"
|
||||
grubcfg="payload/grub/grub_${keymap}.cfg"
|
||||
grubtestcfg="payload/grub/grub_${keymap}_test.cfg"
|
||||
|
||||
if [ ! -f "${grubelf}" ] || [ ! -f "${grubcfg}" ] || \
|
||||
[ ! -f "${grubtestcfg}" ]; then
|
||||
./build payload grub
|
||||
if [ -f "${ubdir}/u-boot.elf" ]; then
|
||||
ubootelf="${ubdir}/u-boot.elf"
|
||||
elif [ -f "${ubdir}/u-boot" ]; then
|
||||
ubootelf="${ubdir}/u-boot"
|
||||
else
|
||||
printf "U-Boot needed. Building:\n"
|
||||
rm -Rf "payload/u-boot/${board}" # just in case
|
||||
./build payload u-boot "${board}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${payload_uboot}" = "y" ]; then
|
||||
if [ "${uboot_config}" = "default" ]; then
|
||||
ubdir="payload/u-boot/${board}"
|
||||
else
|
||||
ubdir="payload/u-boot/${board}/${uboot_config}"
|
||||
fi
|
||||
|
||||
if [ -f "${ubdir}/u-boot.elf" ]; then
|
||||
ubootelf="${ubdir}/u-boot.elf"
|
||||
elif [ -f "${ubdir}/u-boot" ]; then
|
||||
ubootelf="${ubdir}/u-boot"
|
||||
if [ -z ${displaymodes} ]; then
|
||||
initmode="libgfxinit"
|
||||
for displaymode in corebootfb txtmode; do
|
||||
_cbcfg="${cbcfgdir}/${board}/config/${initmode}"
|
||||
_cbcfg="${_cbcfg}_${displaymode}"
|
||||
mkRoms "${_cbcfg}" "${displaymode}" "${initmode}"
|
||||
done
|
||||
|
||||
initmode="vgarom"
|
||||
for displaymode in vesafb txtmode; do
|
||||
_cbcfg="${cbcfgdir}/${board}/config/${initmode}"
|
||||
_cbcfg="${_cbcfg}_${displaymode}"
|
||||
mkRoms "${_cbcfg}" "${displaymode}" "${initmode}"
|
||||
done
|
||||
|
||||
initmode="normal"
|
||||
displaymode="txtmode"
|
||||
_cbcfg="${cbcfgdir}/${board}/config/${initmode}"
|
||||
mkRoms "${_cbcfg}" "${displaymode}" "${initmode}"
|
||||
|
||||
else
|
||||
printf "Required U-Boot payload not yet built. Building now\n"
|
||||
rm -Rf "payload/u-boot/${board}" # just in case
|
||||
./build payload u-boot "${board}"
|
||||
echo "special displaymode defined as $displaymodes"
|
||||
for initmode in vgarom libgfxinit; do
|
||||
for displaymode in ${displaymodes}; do
|
||||
_cbcfg="${cbcfgdir}/${board}/config/"
|
||||
_cbcfg="${_cbcfg}${initmode}_${displaymode}"
|
||||
mkRoms "${_cbcfg}" "${displaymode}" \
|
||||
"${initmode}"
|
||||
done
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
(
|
||||
cd "${cbdir}"
|
||||
make distclean # TODO: do make clean instead (avoid re-building utils)
|
||||
)
|
||||
}
|
||||
|
||||
# it is assumed that no other work will be done on the ROM
|
||||
# after calling this function. therefore this function is "final"
|
||||
|
@ -350,10 +398,10 @@ moverom()
|
|||
mkCoreboot()
|
||||
{
|
||||
cbdir="${1}" # eg. coreboot/default
|
||||
cbcfgpath="${2}" # eg. ${cbcfgdir}/e6400nvidia_4mb/config/normal
|
||||
if [ ! -f "${cbcfgpath}" ]; then
|
||||
_cbcfg="${2}" # eg. ${cbcfgdir}/e6400nvidia_4mb/config/normal
|
||||
if [ ! -f "${_cbcfg}" ]; then
|
||||
printf "\nmkCoreboot: coreboot config '%s' does not exist. " \
|
||||
${cbcfgpath}
|
||||
${_cbcfg}
|
||||
printf "Skipping build.\n"
|
||||
return 0
|
||||
fi
|
||||
|
@ -372,7 +420,7 @@ mkCoreboot()
|
|||
mv "${cbdir}/cbfstool" "${cbfstool}"
|
||||
fi
|
||||
)
|
||||
cp "${cbcfgpath}" "${cbdir}"/.config
|
||||
cp "${_cbcfg}" "${cbdir}"/.config
|
||||
./build module cbutils ${cbdir#coreboot/} || exit 1
|
||||
(
|
||||
cd "${cbdir}"
|
||||
|
@ -512,15 +560,15 @@ mkRomsWithGrub()
|
|||
tmprompath="${1}"
|
||||
initmode="${2}"
|
||||
displaymode="${3}"
|
||||
firstpayloadname="${4}" # allow values: grub, seabios, seabios_withgrub
|
||||
firstpayloadname="${4}" # allow values: grub, seabios, seabios_wgrub
|
||||
|
||||
x=${tmprompath}
|
||||
y=${initmode}
|
||||
if [ "${payload_grub_withseabios}" = "y" ] \
|
||||
if [ "${payload_grub_wseabios}" = "y" ] \
|
||||
&& [ "${firstpayloadname}" = "grub" ]; then
|
||||
mv "$(mkSeabiosRom "${x}" "seabios.elf" "${y}")" \
|
||||
"${tmprompath}"
|
||||
elif [ "${payload_seabios_withgrub}" ] \
|
||||
elif [ "${payload_seabios_wgrub}" ] \
|
||||
&& [ "${firstpayloadname}" != "grub" ]; then
|
||||
mv "$(mkSeabiosRom "${x}" "fallback/payload" "${y}")" \
|
||||
"${tmprompath}"
|
||||
|
@ -569,18 +617,18 @@ mkRomsWithGrub()
|
|||
# Main ROM building function. This calls all other functions
|
||||
mkRoms()
|
||||
{
|
||||
cbcfgpath="${1}"
|
||||
_cbcfg="${1}"
|
||||
displaymode="${2}"
|
||||
initmode="${3}"
|
||||
|
||||
if [ ! -f "${cbcfgpath}" ]; then
|
||||
if [ ! -f "${_cbcfg}" ]; then
|
||||
printf "'%s' does not exist. Skipping build for %s %s %s\n" \
|
||||
${cbcfgpath} ${board} \
|
||||
${_cbcfg} ${board} \
|
||||
${displaymode} ${initmode}
|
||||
return 0
|
||||
fi
|
||||
|
||||
mkCoreboot "${cbdir}" "${cbcfgpath}"
|
||||
mkCoreboot "${cbdir}" "${_cbcfg}"
|
||||
|
||||
if [ "${displaymode}" = "txtmode" ] \
|
||||
&& [ "${payload_memtest}" = "y" ]; then
|
||||
|
@ -590,7 +638,7 @@ mkRoms()
|
|||
fi
|
||||
|
||||
if [ "${payload_seabios}" = "y" ]; then
|
||||
if [ "${payload_seabios_withgrub}" = "n" ]; then
|
||||
if [ "${payload_seabios_wgrub}" = "n" ]; then
|
||||
x=${corebootrom}
|
||||
y=${initmode}
|
||||
t=$(mkSeabiosRom "$x" "fallback/payload" "$y")
|
||||
|
@ -633,36 +681,4 @@ mkRoms()
|
|||
fi
|
||||
}
|
||||
|
||||
if [ -z ${displaymodes} ]; then
|
||||
initmode="libgfxinit"
|
||||
for displaymode in corebootfb txtmode; do
|
||||
cbcfgpath="${cbcfgdir}/${board}/config/${initmode}_$displaymode"
|
||||
mkRoms "${cbcfgpath}" "${displaymode}" "${initmode}"
|
||||
done
|
||||
|
||||
initmode="vgarom"
|
||||
for displaymode in vesafb txtmode; do
|
||||
cbcfgpath="${cbcfgdir}/${board}/config/${initmode}_$displaymode"
|
||||
mkRoms "${cbcfgpath}" "${displaymode}" "${initmode}"
|
||||
done
|
||||
|
||||
initmode="normal"
|
||||
displaymode="txtmode"
|
||||
cbcfgpath="${cbcfgdir}/${board}/config/${initmode}"
|
||||
mkRoms "${cbcfgpath}" "${displaymode}" "${initmode}"
|
||||
|
||||
else
|
||||
echo "special displaymode defined as $displaymodes"
|
||||
for initmode in vgarom libgfxinit; do
|
||||
for displaymode in ${displaymodes}; do
|
||||
cbcfgpath="${cbcfgdir}/${board}/config/${initmode}_"
|
||||
cbcfgpath="${cbcfgpath}${displaymode}"
|
||||
mkRoms "${cbcfgpath}" "${displaymode}" "${initmode}"
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
(
|
||||
cd "${cbdir}"
|
||||
make distclean
|
||||
)
|
||||
main $@
|
||||
|
|
Loading…
Reference in New Issue