diff options
author | Leah Rowe <leah@libreboot.org> | 2024-04-26 19:41:00 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2024-04-26 20:36:42 +0100 |
commit | ce7fd754a3d831c563a8589f1cc35e55ce027814 (patch) | |
tree | d6cd5435b7759e919dd34a42243cb3b4e191ce2f /script/build/roms | |
parent | a2f423535840382d72bfa1ae1e1cb5c06e4f8604 (diff) |
build/roms: report status when building images
export LBMK_VERSION_TYPE=x
x can be: stable, unstable
in target.cfg files, specify:
status=x
x can be: stable, unstable, broken, untested
if unset, lbmk defaults to "unknown"
if LBMK_VERSION_TYPE is set, no confirmation is asked
if the given target matches what's set (but what's set
in that environmental variable can only be stable or
unstable)
if LBMK_RELEASE="y", no confirmation is asked, unless
the target is something other than stable/unstable
"unstable" means it works, but has a few non-breaking
bugs, e.g. broken s3 on dell e6400
whereas, if raminit regularly fails or it is so absolutely
unreliable as to be unusable, then the board should be
declared "broken"
untested means: it has not been tested
With this change, it should now be easier to track whether
a given board is tested, in preparation for releases. When
working on trees/boards, status can be set for targets.
Also: in the board directory, you can add a "warn.txt" file
which will display a message. For example, if a board has a
particular quirk to watch out for, write that there. The message
will be printed during the build process, to stdout.
If status is anything *other* than stable, or it is unstable
but LBMK_VERSION_TYPE is not set to "unstable", and not building
a release, a confirmation is passed.
If the board is not specified as stable or unstable, during
a release build, the build is skipped and the ROM is not
provided in that release; this is in *addition* to
release="n" or release="y" that can be set in target.cfg,
which will skip the release build for that target if "n"
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'script/build/roms')
-rwxr-xr-x | script/build/roms | 66 |
1 files changed, 60 insertions, 6 deletions
diff --git a/script/build/roms b/script/build/roms index 5fdc05c9..2269e714 100755 --- a/script/build/roms +++ b/script/build/roms @@ -21,9 +21,10 @@ cfgsdir="config/coreboot" pv="payload_grub payload_grub_withseabios payload_seabios payload_memtest t" pv="${pv} payload_seabios_withgrub payload_seabios_grubonly payload_uboot memtest_bin" v="romdir cbrom initmode displaymode cbcfg targetdir tree keymaps release" -v="${v} grub_timeout ubdir board grub_scan_disk uboot_config" +v="${v} grub_timeout ubdir board grub_scan_disk uboot_config status" eval "$(setvars "n" ${pv})" -eval "$(setvars "" ${v} boards _displaymode _payload _keyboard all targets)" +eval "$(setvars "" ${v} boards _displaymode _payload _keyboard all targets \ + skipped)" main() { @@ -55,20 +56,31 @@ main() eval "$(setvars "n" ${pv}) $(setvars "" ${v})" grub_background="background1280x800.png" board="${x}" + configure_target + [ "$board" = "$tree" ] && \ + return 1 + + handle_status # exclude certain targets from the release - if [ "$release" = "n" ] && [ "$lbmk_release" = "y" ]; then - printf "Skipping target: %s\n" "$x" - continue - fi + skip_board && \ + printf "Skip target %s(%s)\n" "$board" "$status" && \ + skipped="* $board($status)\n$skipped" && continue build_payloads build_target_mainboard + [ -d "bin/${board}" ] || continue targets="* bin/${board}\n${targets}" done + if [ -n "$skipped" ]; then + printf "\nThese targets were skipped:\n" + eval "printf \"${skipped}\"" + printf "^^ These targets were skipped.\n\n" + fi + [ -z "${targets}" ] && $err "No ROM images were compiled" printf "\nROM images available in these directories:\n" eval "printf \"${targets}\"" @@ -125,6 +137,48 @@ configure_target() eval "payload_${_payload}=y" } +handle_status() +{ + [ "$status" = "stable" ] || [ "$status" = "unstable" ] || \ + [ "$status" = "broken" ] || [ "$status" = "untested" ] || \ + status="unknown" + + printf "Handling target: %s (status=%s)\n" "$board" "$status" + + [ "$status" = "broken" ] && release="n" + [ "$status" = "unknown" ] && release="n" + [ "$status" = "untested" ] && release="n" + + [ "$status" != "stable" ] && [ "$status" != "$release_type" ] && \ + printf "WARNING: %s not marked stable (status=%s):\n\n" \ + "$board" "$status"; return 0 +} + +skip_board() +{ + [ "$release" = "n" ] && [ "$lbmk_release" = "y" ] && \ + return 0 + [ -n "$release_type" ] && [ "$status" = "$release_type" ] && \ + return 1 + + if [ "$lbmk_release" != "y" ] && [ "$status" != "stable" ] && \ + [ "$status" != "$release_type" ]; then + if [ -f "$targetdir/warn.txt" ]; then + printf "Regarding board '%s' (status '%s'):\n" \ + "$board" "$status" + cat -u "$targetdir/warn.txt" || \ + $err "!cat $targetdir/warn.txt" + fi + while true; do + printf "Board %s has status '%s'. Skip? [y/n]" \ + "$board" "$status" + read -r skip + [ "$skip" = "y" ] && return 0 + [ "$skip" = "n" ] && return 1; continue + done + fi; return 1 +} + build_payloads() { romdir="bin/${board}" |