From d13d930804a8854b3b170a06f891ecb0e3cc136d Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 5 May 2024 04:41:51 +0100 Subject: [PATCH 0001/1230] build/roms: allow searching status by mismatch for example: ./build roms list stable this lists all images that are marked "stable" now: ./build roms list _stable this lists all images that are *not* marked stable this will help me keep track during development Signed-off-by: Leah Rowe --- script/build/roms | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/script/build/roms b/script/build/roms index 0b10e78a..0e292243 100755 --- a/script/build/roms +++ b/script/build/roms @@ -74,8 +74,16 @@ main() if [ "$listboards" = "y" ]; then [ -z "$list_type" ] && printf "%s\n" "$board" for _list_type in $list_type; do - [ "$status" != "$_list_type" ] && continue - printf "%s\n" "$board" + if [ "${_list_type#_}" = "$_list_type" ]; then + [ "$status" != "$_list_type" ] && \ + continue + printf "%s\n" "$board" + else + [ "$status" = "${_list_type#_}" ] && \ + continue + printf "%s\n" "$board" + break + fi done; continue fi From 2fcbff68fc79112a06a76933c1d5fdb167c259b3 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 5 May 2024 05:09:23 +0100 Subject: [PATCH 0002/1230] build/roms: split up main() it's starting to get a big big, so break it up Signed-off-by: Leah Rowe --- script/build/roms | 81 +++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/script/build/roms b/script/build/roms index 0e292243..3d5a3f5c 100755 --- a/script/build/roms +++ b/script/build/roms @@ -62,41 +62,7 @@ main() $err "Cannot generate list of boards for building" for x in ${boards}; do - eval "$(setvars "n" ${pv}) $(setvars "" ${v})" - grub_background="background1280x800.png" - board="${x}" - status="unknown" - - configure_target - [ "$board" = "$tree" ] && \ - continue - - if [ "$listboards" = "y" ]; then - [ -z "$list_type" ] && printf "%s\n" "$board" - for _list_type in $list_type; do - if [ "${_list_type#_}" = "$_list_type" ]; then - [ "$status" != "$_list_type" ] && \ - continue - printf "%s\n" "$board" - else - [ "$status" = "${_list_type#_}" ] && \ - continue - printf "%s\n" "$board" - break - fi - done; continue - fi - - # exclude certain targets from the release - 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}" + handle_target done [ "$listboards" = "y" ] && return 0 @@ -115,6 +81,31 @@ main() printf "DO NOT flash images from elf/ - please use bin/ instead.\n" } +handle_target() +{ + eval "$(setvars "n" ${pv}) $(setvars "" ${v})" + grub_background="background1280x800.png" + board="${x}" + status="unknown" + + configure_target + [ "$board" = "$tree" ] && \ + return 0 + + print_target_name && return 0 + + # exclude certain targets from the release + skip_board && \ + printf "Skip target %s(%s)\n" "$board" "$status" && \ + skipped="* $board($status)\n$skipped" && return 0 + + build_payloads + build_target_mainboard + + [ -d "bin/${board}" ] || return 0 + targets="* bin/${board}\n${targets}" +} + configure_target() { targetdir="${cfgsdir}/${board}" @@ -163,6 +154,26 @@ configure_target() eval "payload_${_payload}=y" } +print_target_name() +{ + [ "$listboards" = "y" ] || return 1 + + [ -z "$list_type" ] && printf "%s\n" "$board" + + for _list_type in $list_type; do + if [ "${_list_type#_}" = "$_list_type" ]; then + [ "$status" != "$_list_type" ] && \ + continue + printf "%s\n" "$board" + break + elif [ "$status" != "${_list_type#_}" ]; then + printf "%s\n" "$board" + break + fi + done + return 0 +} + skip_board() { if [ "$listboards" != "y" ] && [ "$status" != "stable" ]; then From 580a5559480153f4b3e1983ccdce8e5a2c82c68d Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 5 May 2024 05:18:12 +0100 Subject: [PATCH 0003/1230] build/roms: don't use exit status from skip_board the printf could potentially return non-zero, which might make the script not skip a given target Signed-off-by: Leah Rowe --- script/build/roms | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/script/build/roms b/script/build/roms index 3d5a3f5c..81ecd879 100755 --- a/script/build/roms +++ b/script/build/roms @@ -95,9 +95,11 @@ handle_target() print_target_name && return 0 # exclude certain targets from the release - skip_board && \ - printf "Skip target %s(%s)\n" "$board" "$status" && \ - skipped="* $board($status)\n$skipped" && return 0 + if skip_board; then + printf "Skip target %s(%s)\n" "$board" "$status" + skipped="* $board($status)\n$skipped" + return 0 + fi build_payloads build_target_mainboard From aa5937edd52a80a5385b8feb4275e5f005fb92d9 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 5 May 2024 05:28:06 +0100 Subject: [PATCH 0004/1230] build/roms: don't rely on x in handle_target x is part of the for loop in main() and may or not still be available from handle_target, depending on your implementation of sh, but this should not be assumed do it properly Signed-off-by: Leah Rowe --- script/build/roms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/build/roms b/script/build/roms index 81ecd879..032c0a57 100755 --- a/script/build/roms +++ b/script/build/roms @@ -62,7 +62,7 @@ main() $err "Cannot generate list of boards for building" for x in ${boards}; do - handle_target + handle_target "$x" done [ "$listboards" = "y" ] && return 0 @@ -85,7 +85,7 @@ handle_target() { eval "$(setvars "n" ${pv}) $(setvars "" ${v})" grub_background="background1280x800.png" - board="${x}" + board="$1" status="unknown" configure_target From 58400fc4a5b2a8e9d7eecffe3d9097db43599c5d Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Mon, 6 May 2024 16:13:13 +0100 Subject: [PATCH 0005/1230] err.sh: correct copyright info i replaced 2022, 2023 with 2022, 2024 when updating the years, as per modifications, but the 2023 copyright doesn't become invalidated change it to 2022-2024 instead, which is correct Signed-off-by: Leah Rowe --- include/err.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/err.sh b/include/err.sh index a25effe6..66338337 100755 --- a/include/err.sh +++ b/include/err.sh @@ -1,5 +1,5 @@ # SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2022, 2024 Leah Rowe +# SPDX-FileCopyrightText: 2022-2024 Leah Rowe export LC_COLLATE=C export LC_ALL=C From 5e4009b539b0c1bbb14eea8f8cd892d3933c3355 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Mon, 6 May 2024 22:54:55 +0100 Subject: [PATCH 0006/1230] merge include/err.sh with include/option.sh Signed-off-by: Leah Rowe --- build | 1 - include/err.sh | 95 -------------------------------------- include/option.sh | 101 ++++++++++++++++++++++++++++++++++++++--- script/build/roms | 1 - script/build/serprog | 2 +- script/update/release | 1 - script/update/trees | 1 - script/vendor/download | 1 - script/vendor/inject | 1 - 9 files changed, 95 insertions(+), 109 deletions(-) delete mode 100755 include/err.sh diff --git a/build b/build index 277390fd..4c6a2916 100755 --- a/build +++ b/build @@ -7,7 +7,6 @@ set -u -e -. "include/err.sh" . "include/option.sh" eval "$(setvars "" option aur_notice)" diff --git a/include/err.sh b/include/err.sh deleted file mode 100755 index 66338337..00000000 --- a/include/err.sh +++ /dev/null @@ -1,95 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2022-2024 Leah Rowe - -export LC_COLLATE=C -export LC_ALL=C - -version=""; versiondate=""; projectname=""; _nogit="" -err="err_"; tmpdir=""; lbmk_status="" - -# if "y": a coreboot target won't be built if target.cfg says release="n" -# (this is used to exclude certain build targets from releases) -lbmk_release= -set | grep LBMK_RELEASE 1>/dev/null 2>/dev/null || lbmk_release="n" || : -[ -z "$lbmk_release" ] && lbmk_release="$LBMK_RELEASE" -[ "$lbmk_release" = "n" ] || [ "$lbmk_release" = "y" ] || lbmk_release="n" -export LBMK_RELEASE="$lbmk_release" - -# if set to n via export, status checks will be skipped during -# all builds, and all targets will be built regardless of status. -# this replicates the old behaviour of lbmk, prior to the checks. -set | grep LBMK_STATUS 1>/dev/null 2>/dev/null && lbmk_status="$LBMK_STATUS" -[ "$lbmk_status" = "y" ] || [ "$lbmk_status" = "n" ] || lbmk_status="y" -export LBMK_STATUS="$lbmk_status" - -tmpdir_was_set="y" -set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n" -if [ "${tmpdir_was_set}" = "y" ]; then - [ "${TMPDIR%_*}" = "/tmp/lbmk" ] || tmpdir_was_set="n" -fi -if [ "${tmpdir_was_set}" = "n" ]; then - export TMPDIR="/tmp" - tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)" - export TMPDIR="${tmpdir}" -else - export TMPDIR="${TMPDIR}" - tmpdir="${TMPDIR}" -fi - -x_() { - [ $# -lt 1 ] || ${@} || $err "Unhandled non-zero exit: $@"; return 0 -} - -check_git() -{ - which git 1>/dev/null 2>/dev/null || \ - git_err "git not installed. please install git-scm." - git config --global user.name 1>/dev/null 2>/dev/null || \ - git_err "git config --global user.name \"John Doe\"" - git config --global user.email 1>/dev/null 2>/dev/null || \ - git_err "git config --global user.email \"john.doe@example.com\"" -} - -git_err() -{ - printf "You need to set git name/email, like so:\n%s\n\n" "$1" 1>&2 - $err "Git name/email not configured" -} - -check_project() -{ - read -r projectname < projectname || : - - [ ! -f version ] || read -r version < version || : - version_="${version}" - [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ - version="git-$(git rev-parse HEAD 2>&1)" || version="${version_}" - - [ ! -f versiondate ] || read -r versiondate < versiondate || : - versiondate_="${versiondate}" - [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ - --pretty='%ct' HEAD)" || versiondate="${versiondate_}" - - for p in projectname version versiondate; do - eval "[ -n \"\$$p\" ] || $err \"$p unset\"" - eval "x_ printf \"%s\\n\" \"\$$p\" > $p" - done - export LOCALVERSION="-${projectname}-${version%%-*}" -} - -setvars() -{ - _setvars="" - [ $# -lt 2 ] && $err "setvars: too few arguments" - val="${1}" && shift 1 - for var in $@; do - _setvars="${var}=\"${val}\"; ${_setvars}" - done - printf "%s\n" "${_setvars% }" -} - -err_() -{ - printf "ERROR %s: %s\n" "${0}" "${1}" 1>&2 - exit 1 -} diff --git a/include/option.sh b/include/option.sh index eb792775..a117958d 100755 --- a/include/option.sh +++ b/include/option.sh @@ -3,6 +3,10 @@ # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-FileCopyrightText: 2020-2024 Leah Rowe +export LC_COLLATE=C +export LC_ALL=C + +tmpdir_was_set="y" vendir="vendorfiles" appdir="${vendir}/app" cbdir="src/coreboot/default" @@ -13,22 +17,64 @@ grubcfgsdir="config/grub" layoutdir="/boot/grub/layouts" . "${grubcfgsdir}/modules.list" tmpgit="${PWD}/tmp/gitclone" +err="err_" +err_() +{ + printf "ERROR %s: %s\n" "${0}" "${1}" 1>&2 + exit 1 +} + +setvars() +{ + _setvars="" + [ $# -lt 2 ] && $err "setvars: too few arguments" + val="${1}" && shift 1 + for var in $@; do + _setvars="${var}=\"${val}\"; ${_setvars}" + done + printf "%s\n" "${_setvars% }" +} eval "$(setvars "" CONFIG_BOARD_DELL_E6400 CONFIG_HAVE_MRC CONFIG_HAVE_ME_BIN \ - CONFIG_ME_BIN_PATH CONFIG_KBC1126_FIRMWARE CONFIG_KBC1126_FW1 \ + CONFIG_ME_BIN_PATH CONFIG_KBC1126_FIRMWARE CONFIG_KBC1126_FW1 _nogit \ CONFIG_KBC1126_FW1_OFFSET CONFIG_KBC1126_FW2 CONFIG_KBC1126_FW2_OFFSET \ - CONFIG_VGA_BIOS_FILE CONFIG_VGA_BIOS_ID CONFIG_GBE_BIN_PATH \ + CONFIG_VGA_BIOS_FILE CONFIG_VGA_BIOS_ID CONFIG_GBE_BIN_PATH tmpdir \ CONFIG_INCLUDE_SMSC_SCH5545_EC_FW CONFIG_SMSC_SCH5545_EC_FW_FILE \ - CONFIG_IFD_BIN_PATH CONFIG_MRC_FILE _dest board boarddir \ - CONFIG_HAVE_REFCODE_BLOB CONFIG_REFCODE_BLOB_FILE)" + CONFIG_IFD_BIN_PATH CONFIG_MRC_FILE _dest board boarddir lbmk_release \ + CONFIG_HAVE_REFCODE_BLOB CONFIG_REFCODE_BLOB_FILE lbmk_status threads \ + version versiondate projectname)" + +# if "y": a coreboot target won't be built if target.cfg says release="n" +# (this is used to exclude certain build targets from releases) +set | grep LBMK_RELEASE 1>/dev/null 2>/dev/null || lbmk_release="n" || : +[ -z "$lbmk_release" ] && lbmk_release="$LBMK_RELEASE" +[ "$lbmk_release" = "n" ] || [ "$lbmk_release" = "y" ] || lbmk_release="n" +export LBMK_RELEASE="$lbmk_release" + +# if set to n via export, status checks will be skipped during +# all builds, and all targets will be built regardless of status. +# this replicates the old behaviour of lbmk, prior to the checks. +set | grep LBMK_STATUS 1>/dev/null 2>/dev/null && lbmk_status="$LBMK_STATUS" +[ "$lbmk_status" = "y" ] || [ "$lbmk_status" = "n" ] || lbmk_status="y" +export LBMK_STATUS="$lbmk_status" + +set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n" +if [ "${tmpdir_was_set}" = "y" ]; then + [ "${TMPDIR%_*}" = "/tmp/lbmk" ] || tmpdir_was_set="n" +fi +if [ "${tmpdir_was_set}" = "n" ]; then + export TMPDIR="/tmp" + tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)" + export TMPDIR="${tmpdir}" +else + export TMPDIR="${TMPDIR}" + tmpdir="${TMPDIR}" +fi -threads= set | grep LBMK_THREADS 1>/dev/null 2>/dev/null && threads="$LBMK_THREADS" [ -z "$threads" ] && threads=1 - expr "X$threads" : "X-\{0,1\}[0123456789][0123456789]*$" \ 1>/dev/null 2>/dev/null || threads=1 # user specified a non-integer - export LBMK_THREADS="$threads" items() @@ -92,3 +138,44 @@ remkdir() rm -Rf "${1}" || $err "remkdir: !rm -Rf \"${1}\"" mkdir -p "${1}" || $err "remkdir: !mkdir -p \"${1}\"" } + +x_() { + [ $# -lt 1 ] || ${@} || $err "Unhandled non-zero exit: $@"; return 0 +} + +check_git() +{ + which git 1>/dev/null 2>/dev/null || \ + git_err "git not installed. please install git-scm." + git config --global user.name 1>/dev/null 2>/dev/null || \ + git_err "git config --global user.name \"John Doe\"" + git config --global user.email 1>/dev/null 2>/dev/null || \ + git_err "git config --global user.email \"john.doe@example.com\"" +} + +git_err() +{ + printf "You need to set git name/email, like so:\n%s\n\n" "$1" 1>&2 + $err "Git name/email not configured" +} + +check_project() +{ + read -r projectname < projectname || : + + [ ! -f version ] || read -r version < version || : + version_="${version}" + [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ + version="git-$(git rev-parse HEAD 2>&1)" || version="${version_}" + + [ ! -f versiondate ] || read -r versiondate < versiondate || : + versiondate_="${versiondate}" + [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ + --pretty='%ct' HEAD)" || versiondate="${versiondate_}" + + for p in projectname version versiondate; do + eval "[ -n \"\$$p\" ] || $err \"$p unset\"" + eval "x_ printf \"%s\\n\" \"\$$p\" > $p" + done + export LOCALVERSION="-${projectname}-${version%%-*}" +} diff --git a/script/build/roms b/script/build/roms index 032c0a57..6049848f 100755 --- a/script/build/roms +++ b/script/build/roms @@ -8,7 +8,6 @@ set -u -e -. "include/err.sh" . "include/option.sh" seavgabiosrom="elf/seabios/default/libgfxinit/vgabios.bin" diff --git a/script/build/serprog b/script/build/serprog index ea2c02bf..b830f26d 100755 --- a/script/build/serprog +++ b/script/build/serprog @@ -5,7 +5,7 @@ set -u -e -. "include/err.sh" +. "include/option.sh" eval "$(setvars "" pico_sdk_dir pico_src_dir stm32_src_dir boards_dir)" diff --git a/script/update/release b/script/update/release index 405fdc28..aebe6fbf 100755 --- a/script/update/release +++ b/script/update/release @@ -4,7 +4,6 @@ set -u -e -. "include/err.sh" . "include/option.sh" eval "$(setvars "" vdir relname src_dirname srcdir _xm target romdir mode)" diff --git a/script/update/trees b/script/update/trees index af80d99a..615fbbf2 100755 --- a/script/update/trees +++ b/script/update/trees @@ -6,7 +6,6 @@ set -u -e -. "include/err.sh" . "include/option.sh" . "include/git.sh" diff --git a/script/vendor/download b/script/vendor/download index b40810cc..6f1fdbbf 100755 --- a/script/vendor/download +++ b/script/vendor/download @@ -4,7 +4,6 @@ # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-FileCopyrightText: 2023-2024 Leah Rowe -. "include/err.sh" . "include/option.sh" . "include/mrc.sh" diff --git a/script/vendor/inject b/script/vendor/inject index dc12d7b5..9b6b52ea 100755 --- a/script/vendor/inject +++ b/script/vendor/inject @@ -4,7 +4,6 @@ # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-FileCopyrightText: 2023-2024 Leah Rowe -. "include/err.sh" . "include/option.sh" nvmutil="util/nvmutil/nvm" From 297af7e6d3dbf17791bffb1ede55e990b313fa0b Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 9 May 2024 13:03:35 +0100 Subject: [PATCH 0007/1230] build/roms: remove unnecessary command there is no need to return 0 at the end of a function. sh does that anyway Signed-off-by: Leah Rowe --- script/build/roms | 1 - 1 file changed, 1 deletion(-) diff --git a/script/build/roms b/script/build/roms index 6049848f..3e8b77be 100755 --- a/script/build/roms +++ b/script/build/roms @@ -172,7 +172,6 @@ print_target_name() break fi done - return 0 } skip_board() From e3cb3a4072ffc2d3db9c9363d5b2ebd58adbdfb7 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 9 May 2024 13:52:49 +0100 Subject: [PATCH 0008/1230] merge script/build/serprog with script/build/roms previous command: ./build serprog now it is: ./build roms serprog after that, it's the same arguments e.g. ./build roms serprog stm32 ./build roms serprog rp2040 further cleanup to commence Signed-off-by: Leah Rowe --- script/build/roms | 90 ++++++++++++++++++++++++++++++++++++++----- script/build/serprog | 77 ------------------------------------ script/update/release | 4 +- 3 files changed, 82 insertions(+), 89 deletions(-) delete mode 100755 script/build/serprog diff --git a/script/build/roms b/script/build/roms index 3e8b77be..4be00f85 100755 --- a/script/build/roms +++ b/script/build/roms @@ -10,10 +10,14 @@ set -u -e . "include/option.sh" +serprog_usage="usage: ./build roms serprog [board]" seavgabiosrom="elf/seabios/default/libgfxinit/vgabios.bin" grub_background="background1280x800.png" grubelf="elf/grub/grub.elf" cfgsdir="config/coreboot" +pico_src_dir="src/pico-serprog" +pico_sdk_dir="src/pico-sdk" +stm32_src_dir="src/stm32-vserprog" # Disable all payloads by default. # target.cfg files have to specifically enable [a] payload(s) @@ -21,16 +25,15 @@ 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 status" -eval "$(setvars "n" ${pv})" +eval "$(setvars "n" ${pv} serprog)" eval "$(setvars "" ${v} boards _displaymode _payload _keyboard all targets \ - skipped listboards list_type)" + skipped listboards list_type serprog_boards_dir)" main() { check_project while [ $# -gt 0 ]; do - if [ "$listboards" = "y" ]; then list_type="$list_type $1" list_type="${list_type# }" @@ -46,6 +49,9 @@ main() $err "Cannot generate list of boards for list" listboards="y" shift 1; continue ;; + serprog) + serprog="y" + shift 1; break ;; -d) _displaymode="${2}" ;; -p) _payload="${2}" ;; -k) _keyboard="${2}" ;; @@ -57,12 +63,16 @@ main() shift 2 done - [ "${all}" != "y" ] || boards=$(items config/coreboot) || \ - $err "Cannot generate list of boards for building" - - for x in ${boards}; do - handle_target "$x" - done + if [ "$serprog" = "y" ]; then + handle_serprog $@ + return 0 + else + [ "${all}" != "y" ] || boards=$(items config/coreboot) || \ + $err "Cannot generate list of boards for building" + for x in ${boards}; do + handle_coreboot_target "$x" + done + fi [ "$listboards" = "y" ] && return 0 @@ -80,7 +90,67 @@ main() printf "DO NOT flash images from elf/ - please use bin/ instead.\n" } -handle_target() +handle_serprog() +{ + [ -z "${1+x}" ] && $err "${serprog_usage}" + [ "$1" != "rp2040" ] && [ "$1" != "stm32" ] && $err "$serprog_usage" + if [ "${1}" = "rp2040" ]; then + serprog_boards_dir=${pico_sdk_dir}/src/boards/include/boards + [ -d "$pico_src_dir" ] || x_ ./update trees -f "pico-serprog" + elif [ "${1}" = "stm32" ]; then + serprog_boards_dir=${stm32_src_dir}/boards + [ -d "$stm32_src_dir" ] || x_ ./update trees -f "stm32-vserprog" + fi + x_ mkdir -p "bin/serprog_${1}" + + if [ $# -gt 1 ] && [ "${2}" = "list" ]; then + print_serprog_boards ${serprog_boards_dir} + elif [ $# -gt 1 ]; then + build_${1}_rom "${2}" + else + printf "Building all serprog targets\n" + list_serprog_boards "${serprog_boards_dir}" | \ + while read -r board; do + build_${1}_rom "${board}" + done + fi +} + +build_rp2040_rom() +{ + board=${1} + printf "Building pico-serprog for %s\n" "${board}" + x_ cmake -DPICO_BOARD="$board" -DPICO_SDK_PATH="$pico_sdk_dir" \ + -B "${pico_src_dir}/build" "${pico_src_dir}" + x_ cmake --build "${pico_src_dir}/build" + x_ mv ${pico_src_dir}/build/pico_serprog.uf2 \ + bin/serprog_rp2040/serprog_${board}.uf2 + printf "output to bin/serprog_rp2040/serprog_%s.uf2\n" "$board" +} + +build_stm32_rom() +{ + board=${1} + printf "Building stm32-vserprog for %s\n" "${board}" + x_ make -C $stm32_src_dir libopencm3-just-make BOARD=$board + x_ make -C ${stm32_src_dir} BOARD=${board} + x_ mv ${stm32_src_dir}/stm32-vserprog.hex \ + bin/serprog_stm32/serprog_${board}.hex + printf "output to bin/serprog_stm32/serprog_%s.hex\n" "$board" +} + +print_serprog_boards() +{ + printf "Available boards:\n" + list_serprog_boards "${1}" +} + +list_serprog_boards() +{ + basename -a -s .h "${1}/"*.h || $err "list_boards $1: can't list boards" +} + +handle_coreboot_target() { eval "$(setvars "n" ${pv}) $(setvars "" ${v})" grub_background="background1280x800.png" diff --git a/script/build/serprog b/script/build/serprog deleted file mode 100755 index b830f26d..00000000 --- a/script/build/serprog +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env sh -# SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2023 Riku Viitanen -# SPDX-FileCopyrightText: 2023 Leah Rowe - -set -u -e - -. "include/option.sh" - -eval "$(setvars "" pico_sdk_dir pico_src_dir stm32_src_dir boards_dir)" - -pico_src_dir=src/pico-serprog -pico_sdk_dir=src/pico-sdk -stm32_src_dir=src/stm32-vserprog - -usage="usage: ./build firmware serprog [board]" - -main() -{ - [ -z "${1+x}" ] && $err "${usage}" - [ "$1" != "rp2040" ] && [ "$1" != "stm32" ] && $err "$usage" - if [ "${1}" = "rp2040" ]; then - boards_dir=${pico_sdk_dir}/src/boards/include/boards - [ -d "$pico_src_dir" ] || x_ ./update trees -f "pico-serprog" - elif [ "${1}" = "stm32" ]; then - boards_dir=${stm32_src_dir}/boards - [ -d "$stm32_src_dir" ] || x_ ./update trees -f "stm32-vserprog" - fi - x_ mkdir -p "bin/serprog_${1}" - - if [ $# -gt 1 ] && [ "${2}" = "list" ]; then - print_boards ${boards_dir} - elif [ $# -gt 1 ]; then - build_${1}_rom "${2}" - else - printf "Building all serprog targets\n" - list_boards "${boards_dir}" | while read -r board; do - build_${1}_rom "${board}" - done - fi -} - -build_rp2040_rom() -{ - board=${1} - printf "Building pico-serprog for %s\n" "${board}" - x_ cmake -DPICO_BOARD="$board" -DPICO_SDK_PATH="$pico_sdk_dir" \ - -B "${pico_src_dir}/build" "${pico_src_dir}" - x_ cmake --build "${pico_src_dir}/build" - x_ mv ${pico_src_dir}/build/pico_serprog.uf2 \ - bin/serprog_rp2040/serprog_${board}.uf2 - printf "output to bin/serprog_rp2040/serprog_%s.uf2\n" "$board" -} - -build_stm32_rom() -{ - board=${1} - printf "Building stm32-vserprog for %s\n" "${board}" - x_ make -C $stm32_src_dir libopencm3-just-make BOARD=$board - x_ make -C ${stm32_src_dir} BOARD=${board} - x_ mv ${stm32_src_dir}/stm32-vserprog.hex \ - bin/serprog_stm32/serprog_${board}.hex - printf "output to bin/serprog_stm32/serprog_%s.hex\n" "$board" -} - -print_boards() -{ - printf "Available boards:\n" - list_boards "${1}" -} - -list_boards() -{ - basename -a -s .h "${1}/"*.h || $err "list_boards $1: can't list boards" -} - -main $@ diff --git a/script/update/release b/script/update/release index aebe6fbf..c78b5fce 100755 --- a/script/update/release +++ b/script/update/release @@ -106,8 +106,8 @@ fetch_trees() mkrom_images() { ./build roms all || $err "${_xm}: roms-all" - ./build serprog rp2040 || $err "${_xm}: rp2040" - ./build serprog stm32 || $err "${_xm}: stm32" + ./build roms serprog rp2040 || $err "${_xm}: rp2040" + ./build roms serprog stm32 || $err "${_xm}: stm32" for rombuild in bin/*; do [ -d "${rombuild}" ] || continue From 38aaaecf6b8aa9b58f56dff930139e070b1649dc Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 9 May 2024 13:56:35 +0100 Subject: [PATCH 0009/1230] build/roms: print serprog help Signed-off-by: Leah Rowe --- script/build/roms | 3 +++ 1 file changed, 3 insertions(+) diff --git a/script/build/roms b/script/build/roms index 4be00f85..0525091b 100755 --- a/script/build/roms +++ b/script/build/roms @@ -558,6 +558,9 @@ usage() ./build roms list + Can also build serprog images: + ${serprog_usage} + to see targets of only a given status (stable, unstable, broken, untested and unknown), try e.g. From fb8d0c86c44ba98cc770222edcb18f0a492aa37a Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 9 May 2024 14:31:43 +0100 Subject: [PATCH 0010/1230] build: exit if not running from lbmk directory there's no portable(posix) way to check when running from a symlink to lbmk in the current work directory for example: ln -s lbmk/build lbmktest ./lbmktest roms list this would pass the new test, and first try to include option.sh. in practise, the user probably doesn't happen to have include/option.sh in their current path i can use readlink here, but again not portable the current check will suffice. it also works when the symlink is called from $PATH e.g. /usr/bin/lbmktest exists and you do: lbmktest roms list Signed-off-by: Leah Rowe --- build | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build b/build index 4c6a2916..59bd78d8 100755 --- a/build +++ b/build @@ -7,6 +7,11 @@ set -u -e +if [ "./${0##*/}" != "${0}" ]; then + printf "You must run this in the lbmk work directory.\n" 1>&2 + exit 1 +fi + . "include/option.sh" eval "$(setvars "" option aur_notice)" From 052414c0ca9c965abc2181491344aa27bc4501f4 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 9 May 2024 14:48:14 +0100 Subject: [PATCH 0011/1230] build: further prevent non-lbmk-work-directory this is a follow-up to the previous commit again, there's no posix way to check the path to the file at argument 0, because readlink (utility) isn't defined in posix (the C function is defined, but not the utility included on many unices) check whether "build" (file) exists, and whether it is a symlink; if the latter, then we are definitely not in the lbmk work directory! Signed-off-by: Leah Rowe --- build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build b/build index 59bd78d8..1c78f280 100755 --- a/build +++ b/build @@ -7,7 +7,7 @@ set -u -e -if [ "./${0##*/}" != "${0}" ]; then +if [ "./${0##*/}" != "${0}" ] || [ ! -f "build" ] || [ -L "build" ]; then printf "You must run this in the lbmk work directory.\n" 1>&2 exit 1 fi From e1ea5dd0fdfa017f05a5a828ae6091145b349578 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Fri, 10 May 2024 05:48:57 +0100 Subject: [PATCH 0012/1230] bump seabios to e5f2e4c69643bc3cd385306a9e5d29e11578148c changes upstream, relative to the previous revision: * e5f2e4c6 pciinit: don't misalign large BARs * 731c88d5 stdvgaio: Only read/write one color palette entry at a time * c5a361c0 stdvga: Add stdvga_set_vertical_size() helper function * 22c91412 stdvga: Rename stdvga_get_vde() to stdvga_get_vertical_size() * 549463db stdvga: Rename stdvga_set_scan_lines() to stdvga_set_character_height() * c67914ac stdvga: Rename stdvga_set_text_block_specifier() to stdvga_set_font_location() * aa94925d stdvga: Rework stdvga palette index paging interface functions * 8de51a5a stdvga: Rename stdvga_toggle_intensity() to stdvga_set_palette_blinking() * 96c7781f stdvga: Add comments to interface functions in stdvga.c * 2996819f stdvga: Rename CGA palette functions * 91368088 stdvgamodes: Improve naming of dac palette tables * 70f43981 stdvgamodes: No need to store pelmask in vga_modes[] * 1588fd14 vgasrc: Rename vgahw_get_linesize() to vgahw_minimum_linelength() * d73e18bb vgasrc: Use curmode_g instead of vmode_g when mode is the current video mode * 192e23b7 vbe: implement function 09h (get/set palette data) * 3722c21d vgasrc: round up save/restore size * 5d87ff25 vbe: Add VBE 2.0+ OemData field to struct vbe_info * 163fd9f0 fix smbios blob length overflow * 82faf1d5 Add LBA 64bit support for reads beyond 2TB. * 3f082f38 Add AHCI Power ON + ICC_ACTIVE into port setup code * 3ae88886 esp-scsi: terminate DMA transfer when ESP data transfer completes * a6ed6b70 limit address space used for pci devices. Signed-off-by: Leah Rowe --- config/seabios/default/target.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/seabios/default/target.cfg b/config/seabios/default/target.cfg index 8ab09802..bc7cc9fc 100644 --- a/config/seabios/default/target.cfg +++ b/config/seabios/default/target.cfg @@ -1,2 +1,2 @@ tree="default" -rev="1e1da7a963007d03a4e0e9a9e0ff17990bb1608d" +rev="e5f2e4c69643bc3cd385306a9e5d29e11578148c" From 5f63b594fa3b0f111518f1e292bfb7163bec8be9 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 11 May 2024 03:52:52 +0100 Subject: [PATCH 0013/1230] merge script/update/release into build the main script isn't that big, and since the main purpose of lbmk is geared toward the releases, it makes sense to reduce the number of scripts by merging into the main one the way this works, "./update release" still works afterward so, the way lbmk is used shall remain unchanged Signed-off-by: Leah Rowe --- build | 231 ++++++++++++++++++++++++++++++++++++++++- script/update/release | 236 ------------------------------------------ 2 files changed, 229 insertions(+), 238 deletions(-) delete mode 100755 script/update/release diff --git a/build b/build index 1c78f280..884d69de 100755 --- a/build +++ b/build @@ -1,6 +1,6 @@ #!/usr/bin/env sh # SPDX-License-Identifier: GPL-3.0-or-later -# SPDX-FileCopyrightText: 2014,2015,2020,2021,2023 Leah Rowe +# SPDX-FileCopyrightText: 2014,2015,2020-2024 Leah Rowe # SPDX-FileCopyrightText: 2015 Patrick "P. J." McDermott # SPDX-FileCopyrightText: 2015, 2016 Klemens Nanni # SPDX-FileCopyrightText: 2022, Caleb La Grange @@ -14,7 +14,8 @@ fi . "include/option.sh" -eval "$(setvars "" option aur_notice)" +eval "$(setvars "" option aur_notice vdir relname src_dirname srcdir _xm \ + target romdir mode)" err="fail" linkpath="${0}" @@ -44,6 +45,7 @@ initcmd() help) usage ${0} ;; list) items "${buildpath}" ;; version) mkversion ;; + release) shift 1; mkrelease $@ ;; *) option="${1}" return 0 ;; @@ -111,6 +113,231 @@ usage() EOF } +mkrelease() +{ + export LBMK_RELEASE="y" + export LBMK_STATUS="n" + + vdir="release" + while getopts d:m: option; do + [ -z "${OPTARG}" ] && $err "Empty argument not allowed" + case "${option}" in + d) vdir="${OPTARG}" ;; + m) mode="${OPTARG}" ;; + *) $err "Invalid option" ;; + esac + done + + check_project + + vdir="${vdir}/${version}" + relname="${projectname}-${version}" + [ "${mode}" = "u-boot" ] && relname="u-boot-for-${relname}" + src_dirname="${relname}_src" + srcdir="${vdir}/${src_dirname}" + + [ -e "${vdir}" ] && $err "already exists: \"${vdir}\"" + + mkvdir + build_release + + printf "DONE! Check release files under %s\n" "${vdir}" +} + +mkvdir() +{ + mkdir -p "${vdir}" || $err "mkvdir: !mkdir -p \"${vdir}\"" + git clone . "${srcdir}" || $err "mkdir: !gitclone \"${srcdir}\"" + insert_version_files "$srcdir" || $err "mkvdir $srcdir: versionfile" +} + +build_release() +{ + _xm="build_release ${vdir}" + ( + cd "${srcdir}" || $err "${_xm}: !cd \"${srcdir}\"" + fetch_trees + [ "${mode}" = "u-boot" ] || x_ mv src/docs docs + ) || $err "can't create release files" + + git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' \ + --abbrev-commit > "${srcdir}/CHANGELOG" || \ + $err "build_release $srcdir: couldn't generate changelog" + + ( + if [ "${mode}" = "u-boot" ]; then + cd "${srcdir}/src/" || $err "${_xm}: mktarball \"${srcdir}\"" + mktarball u-boot "../../${srcdir##*/}.tar.xz" || \ + $err "$_xm: mksrc" + # make a src archive containing only u-boot + else + cd "${srcdir%/*}" || $err "${_xm}: mktarball \"${srcdir}\"" + mktarball "${srcdir##*/}" "${srcdir##*/}.tar.xz" || \ + $err "$_xm: mksrc" + fi + ) || $err "can't create src tarball" + [ "${mode}" = "src" ] && return 0 + [ "${mode}" = "u-boot" ] && return 0 + + ( + cd "${srcdir}" || $err "${_xm}: 2 !cd \"${srcdir}\"" + mkrom_images + ) || $err "can't build rom images" + + rm -Rf "${srcdir}" || $err "!rm -Rf ${srcdir}" +} + +fetch_trees() +{ + for x in config/git/*; do + [ "${mode}" = "u-boot" ] && break + [ ! -f "${x}" ] || ./update trees -f "${x#config/git/}" || \ + $err "${_xm}: fetch ${x#config/git/}" + done + [ "${mode}" = "u-boot" ] && x_ ./update trees -f u-boot + + for x in config/*/build.list; do + [ -f "${x}" ] || continue + xp="${x#*/}"; xp="${xp%/*}" + [ -L "${xp}" ] || rm -Rf "src/${xp}/${xp}" || \ + $err "!rm -Rf \"src/${xp}/${xp}\"" + done + + find . -name ".git" -exec rm -Rf {} + || $err "$_xm: rm .git" + find . -name ".gitmodules" -exec rm -Rf {} + || $err "$_xm: rm .gitmod" + x_ rm -Rf tmp .git +} + +mkrom_images() +{ + ./build roms all || $err "${_xm}: roms-all" + ./build roms serprog rp2040 || $err "${_xm}: rp2040" + ./build roms serprog stm32 || $err "${_xm}: stm32" + + for rombuild in bin/*; do + [ -d "${rombuild}" ] || continue + handle_rom_archive "${rombuild}" + done + + mv "release/${version}/roms/" ../roms || $err "${_xm}: copy roms/" +} + +handle_rom_archive() +{ + builddir="${1}" + romdir="tmp/romdir" + rm -Rf "${romdir}" || $err "!rm romdir, handle_rom_archive" + target="${builddir##*/}" + + if [ ! -f "config/coreboot/${target}/target.cfg" ]; then + # No config, just make a tarball + tarball="release/${version}/roms/${relname}_${target}.tar.xz" + insert_copying_files "${builddir}" || \ + $err "!insert copy, handle, ${builddir}" + mktarball "${builddir}" "${tarball}" + return 0 + fi + + romdir="${romdir}/bin/${target}" + mkdir -p "${romdir}" || $err "!mkdir -p romdir, handle_rom_archive" + cp "$builddir/"* "$romdir" || $err "!cp romdir, handle_rom_archive" + + nukerom + + printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \ + "${version}" "${projectname}" "${version}" "${target##*/}" + insert_version_files "${romdir}" || \ + $err "mkrom_tarball ${romdir}: versionfile" + + insert_copying_files "$romdir" || $err "!insert copy, handle 2, $romdir" + mkrom_tarball +} + +nukerom() +{ + . "config/coreboot/${target}/target.cfg" + + # Hash the images before removing vendor files + # which "./vendor inject" uses for verification + rm -f "${romdir}/vendorhashes" || $err "!rm ${romdir}/vendorhashes" + touch "${romdir}/vendorhashes" || $err "!touch ${romdir}/vendorhashes" + ( + cd "${romdir}" || $err "!cd romdir ${romdir}, nukerom" + sha512sum ./*.rom >> vendorhashes || \ + $err "!create vendorhashes, nukerom" + ) || $err "can't create vendor hashes" + + for romfile in "${romdir}"/*.rom; do + [ -f "${romfile}" ] || continue + ./vendor inject -r "$romfile" -b "$target" -n nuke || \ + $err "!vendor inject (nuke) ${romfile}, nukerom" + done +} + +insert_copying_files() +{ + remkdir "${1}/licenses" + l="${1}/licenses" + # copy licenses to rom image archive, for completion + cp "src/grub/COPYING" "${l}/COPYING.grub" || return 1 + cp "src/coreboot/default/COPYING" "${l}/COPYING.coreboot" || return 1 + cp -R "src/coreboot/default/LICENSES" "${l}/LICENSES.coreboot" || \ + return 1 + cp "src/seabios/default/COPYING" "${l}/COPYING.coreboot" || return 1 + cp "src/seabios/default/COPYING.LESSER" "$l/COPYING.LESSER.seabios" \ + || return 1 + cp -R "src/u-boot/default/Licenses" "${l}/COPYING.u-boot" || return 1 + printf "Multiple licenses. Check corresponding %s source archive\n" \ + "${projectname}" > "${1}/COPYING" || return 1 + rm -f src/u-boot/*/test/lib/strlcat.c || return 1 +} + +mkrom_tarball() +{ + archivename="${relname}_${target##*/}" + f="release/${version}/roms/${archivename}" + mkdir -p "${f%/*}" || $err "mkrom_tarball: !mkdir -p ${f%/*}" + ( + cd "${romdir%"/bin/$target"}" || $err "!cd ${romdir%"/bin/$target"}" + mktarball "bin/${target}" "${archivename}.tar.xz" + ) || $err "can't create rom tarball" + mv "${romdir%"/bin/${target}"}/${archivename}.tar.xz"* "${f%/*}" || \ + $err "mktar ${f%/*}/${romdir%"/bin/$target"}/$archivename.tar.xz" + + printf "Created ROM archive: %s" "${f%/*}/${archivename}.tar.xz" +} + +insert_version_files() +{ + printf "%s\n" "${version}" > "${1}/version" || return 1 + printf "%s\n" "${versiondate}" > "${1}/versiondate" || return 1 + printf "%s\n" "${projectname}" > "${1}/projectname" || return 1 +} + +mktarball() +{ + # preserve timestamps for reproducible tarballs + tar_implementation=$(tar --version | head -n1) || : + + [ "${2%/*}" = "${2}" ] || \ + mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\"" + printf "\nCreating archive: %s\n\n" "$2" + if [ "${tar_implementation% *}" = "tar (GNU tar)" ]; then + tar --sort=name --owner=root:0 --group=root:0 \ + --mtime="UTC 2024-05-04" -c "$1" | xz -T$threads -9e \ + > "$2" || $err "mktarball 1, ${1}" + else + # TODO: reproducible tarballs on non-GNU systems + tar -c "$1" | xz -T$threads -9e > "$2" || \ + $err "mktarball 2, $1" + fi + ( + [ "${2%/*}" != "${2}" ] && x_ cd "${2%/*}" + sha512sum "${2##*/}" > "${2##*/}.sha512" || \ + $err "!sha512sum \"${2##*/}\" > \"${2##*/}.sha512\"" + ) || $err "failed to create tarball checksum" +} + mkversion() { printf "revision: %s %s\n" "$projectname" "$version" diff --git a/script/update/release b/script/update/release deleted file mode 100755 index c78b5fce..00000000 --- a/script/update/release +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env sh -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2020-2024 Leah Rowe - -set -u -e - -. "include/option.sh" - -eval "$(setvars "" vdir relname src_dirname srcdir _xm target romdir mode)" - -export LBMK_RELEASE="y" -export LBMK_STATUS="n" - -main() -{ - vdir="release" - while getopts d:m: option; do - [ -z "${OPTARG}" ] && $err "Empty argument not allowed" - case "${option}" in - d) vdir="${OPTARG}" ;; - m) mode="${OPTARG}" ;; - *) $err "Invalid option" ;; - esac - done - - check_project - - vdir="${vdir}/${version}" - relname="${projectname}-${version}" - [ "${mode}" = "u-boot" ] && relname="u-boot-for-${relname}" - src_dirname="${relname}_src" - srcdir="${vdir}/${src_dirname}" - - [ -e "${vdir}" ] && $err "already exists: \"${vdir}\"" - - mkvdir - build_release - - printf "DONE! Check release files under %s\n" "${vdir}" -} - -mkvdir() -{ - mkdir -p "${vdir}" || $err "mkvdir: !mkdir -p \"${vdir}\"" - git clone . "${srcdir}" || $err "mkdir: !gitclone \"${srcdir}\"" - insert_version_files "$srcdir" || $err "mkvdir $srcdir: versionfile" -} - -build_release() -{ - _xm="build_release ${vdir}" - ( - cd "${srcdir}" || $err "${_xm}: !cd \"${srcdir}\"" - fetch_trees - [ "${mode}" = "u-boot" ] || x_ mv src/docs docs - ) || $err "can't create release files" - - git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' \ - --abbrev-commit > "${srcdir}/CHANGELOG" || \ - $err "build_release $srcdir: couldn't generate changelog" - - ( - if [ "${mode}" = "u-boot" ]; then - cd "${srcdir}/src/" || $err "${_xm}: mktarball \"${srcdir}\"" - mktarball u-boot "../../${srcdir##*/}.tar.xz" || \ - $err "$_xm: mksrc" - # make a src archive containing only u-boot - else - cd "${srcdir%/*}" || $err "${_xm}: mktarball \"${srcdir}\"" - mktarball "${srcdir##*/}" "${srcdir##*/}.tar.xz" || \ - $err "$_xm: mksrc" - fi - ) || $err "can't create src tarball" - [ "${mode}" = "src" ] && return 0 - [ "${mode}" = "u-boot" ] && return 0 - - ( - cd "${srcdir}" || $err "${_xm}: 2 !cd \"${srcdir}\"" - mkrom_images - ) || $err "can't build rom images" - - rm -Rf "${srcdir}" || $err "!rm -Rf ${srcdir}" -} - -fetch_trees() -{ - for x in config/git/*; do - [ "${mode}" = "u-boot" ] && break - [ ! -f "${x}" ] || ./update trees -f "${x#config/git/}" || \ - $err "${_xm}: fetch ${x#config/git/}" - done - [ "${mode}" = "u-boot" ] && x_ ./update trees -f u-boot - - for x in config/*/build.list; do - [ -f "${x}" ] || continue - xp="${x#*/}"; xp="${xp%/*}" - [ -L "${xp}" ] || rm -Rf "src/${xp}/${xp}" || \ - $err "!rm -Rf \"src/${xp}/${xp}\"" - done - - find . -name ".git" -exec rm -Rf {} + || $err "$_xm: rm .git" - find . -name ".gitmodules" -exec rm -Rf {} + || $err "$_xm: rm .gitmod" - x_ rm -Rf tmp .git -} - -mkrom_images() -{ - ./build roms all || $err "${_xm}: roms-all" - ./build roms serprog rp2040 || $err "${_xm}: rp2040" - ./build roms serprog stm32 || $err "${_xm}: stm32" - - for rombuild in bin/*; do - [ -d "${rombuild}" ] || continue - handle_rom_archive "${rombuild}" - done - - mv "release/${version}/roms/" ../roms || $err "${_xm}: copy roms/" -} - -handle_rom_archive() -{ - builddir="${1}" - romdir="tmp/romdir" - rm -Rf "${romdir}" || $err "!rm romdir, handle_rom_archive" - target="${builddir##*/}" - - if [ ! -f "config/coreboot/${target}/target.cfg" ]; then - # No config, just make a tarball - tarball="release/${version}/roms/${relname}_${target}.tar.xz" - insert_copying_files "${builddir}" || \ - $err "!insert copy, handle, ${builddir}" - mktarball "${builddir}" "${tarball}" - return 0 - fi - - romdir="${romdir}/bin/${target}" - mkdir -p "${romdir}" || $err "!mkdir -p romdir, handle_rom_archive" - cp "$builddir/"* "$romdir" || $err "!cp romdir, handle_rom_archive" - - nukerom - - printf "Generating release/%s/roms/%s-%s_%s.tar.xz\n" \ - "${version}" "${projectname}" "${version}" "${target##*/}" - insert_version_files "${romdir}" || \ - $err "mkrom_tarball ${romdir}: versionfile" - - insert_copying_files "$romdir" || $err "!insert copy, handle 2, $romdir" - mkrom_tarball -} - -nukerom() -{ - . "config/coreboot/${target}/target.cfg" - - # Hash the images before removing vendor files - # which "./vendor inject" uses for verification - rm -f "${romdir}/vendorhashes" || $err "!rm ${romdir}/vendorhashes" - touch "${romdir}/vendorhashes" || $err "!touch ${romdir}/vendorhashes" - ( - cd "${romdir}" || $err "!cd romdir ${romdir}, nukerom" - sha512sum ./*.rom >> vendorhashes || \ - $err "!create vendorhashes, nukerom" - ) || $err "can't create vendor hashes" - - for romfile in "${romdir}"/*.rom; do - [ -f "${romfile}" ] || continue - ./vendor inject -r "$romfile" -b "$target" -n nuke || \ - $err "!vendor inject (nuke) ${romfile}, nukerom" - done -} - -insert_copying_files() -{ - remkdir "${1}/licenses" - l="${1}/licenses" - # copy licenses to rom image archive, for completion - cp "src/grub/COPYING" "${l}/COPYING.grub" || return 1 - cp "src/coreboot/default/COPYING" "${l}/COPYING.coreboot" || return 1 - cp -R "src/coreboot/default/LICENSES" "${l}/LICENSES.coreboot" || \ - return 1 - cp "src/seabios/default/COPYING" "${l}/COPYING.coreboot" || return 1 - cp "src/seabios/default/COPYING.LESSER" "$l/COPYING.LESSER.seabios" \ - || return 1 - cp -R "src/u-boot/default/Licenses" "${l}/COPYING.u-boot" || return 1 - printf "Multiple licenses. Check corresponding %s source archive\n" \ - "${projectname}" > "${1}/COPYING" || return 1 - rm -f src/u-boot/*/test/lib/strlcat.c || return 1 -} - -mkrom_tarball() -{ - archivename="${relname}_${target##*/}" - f="release/${version}/roms/${archivename}" - mkdir -p "${f%/*}" || $err "mkrom_tarball: !mkdir -p ${f%/*}" - ( - cd "${romdir%"/bin/$target"}" || $err "!cd ${romdir%"/bin/$target"}" - mktarball "bin/${target}" "${archivename}.tar.xz" - ) || $err "can't create rom tarball" - mv "${romdir%"/bin/${target}"}/${archivename}.tar.xz"* "${f%/*}" || \ - $err "mktar ${f%/*}/${romdir%"/bin/$target"}/$archivename.tar.xz" - - printf "Created ROM archive: %s" "${f%/*}/${archivename}.tar.xz" -} - -insert_version_files() -{ - printf "%s\n" "${version}" > "${1}/version" || return 1 - printf "%s\n" "${versiondate}" > "${1}/versiondate" || return 1 - printf "%s\n" "${projectname}" > "${1}/projectname" || return 1 -} - -mktarball() -{ - # preserve timestamps for reproducible tarballs - tar_implementation=$(tar --version | head -n1) || : - - [ "${2%/*}" = "${2}" ] || \ - mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\"" - printf "\nCreating archive: %s\n\n" "$2" - if [ "${tar_implementation% *}" = "tar (GNU tar)" ]; then - tar --sort=name --owner=root:0 --group=root:0 \ - --mtime="UTC 2024-05-04" -c "$1" | xz -T$threads -9e \ - > "$2" || $err "mktarball 1, ${1}" - else - # TODO: reproducible tarballs on non-GNU systems - tar -c "$1" | xz -T$threads -9e > "$2" || \ - $err "mktarball 2, $1" - fi - ( - [ "${2%/*}" != "${2}" ] && x_ cd "${2%/*}" - sha512sum "${2##*/}" > "${2##*/}.sha512" || \ - $err "!sha512sum \"${2##*/}\" > \"${2##*/}.sha512\"" - ) || $err "failed to create tarball checksum" -} - -main $@ From c8fb24bb7bd0918c4c684c13a3b2946ba67439eb Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 11 May 2024 05:17:41 +0100 Subject: [PATCH 0014/1230] build: print usage for special commands Signed-off-by: Leah Rowe --- build | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build b/build index 884d69de..3854f3e5 100755 --- a/build +++ b/build @@ -106,6 +106,11 @@ usage() possible values for 'OPTION': $(items "${buildpath}") + Special commands (consult $projectname documentation): + ./update release + ./build dependencies distroname + (replace distroname with a filename from config/dependencies/) + To know what ${projectname} version you're on, type: ${progname} version From 029291e5495bf679cb36a7500b73ff9fa1dfff35 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 11 May 2024 05:33:43 +0100 Subject: [PATCH 0015/1230] merge script/vendor/* into include/vendor.sh stub it from the main build script the commands remain identical: ./vendor download arguments_here ./vendor inject arguments_here Signed-off-by: Leah Rowe --- build | 7 + script/vendor/download => include/vendor.sh | 235 ++++++++++++++++++- script/vendor/inject | 238 -------------------- 3 files changed, 231 insertions(+), 249 deletions(-) rename script/vendor/download => include/vendor.sh (56%) delete mode 100755 script/vendor/inject diff --git a/build b/build index 3854f3e5..60877d8e 100755 --- a/build +++ b/build @@ -13,6 +13,8 @@ if [ "./${0##*/}" != "${0}" ] || [ ! -f "build" ] || [ -L "build" ]; then fi . "include/option.sh" +. "include/vendor.sh" +. "include/mrc.sh" eval "$(setvars "" option aur_notice vdir relname src_dirname srcdir _xm \ target romdir mode)" @@ -46,10 +48,13 @@ initcmd() list) items "${buildpath}" ;; version) mkversion ;; release) shift 1; mkrelease $@ ;; + inject) shift 1; vendor_inject $@ ;; + download) shift 1; vendor_download $@ ;; *) option="${1}" return 0 ;; esac + set -u -e # some commands disable them. turn them on! lbmk_exit 0 } @@ -107,6 +112,8 @@ usage() $(items "${buildpath}") Special commands (consult $projectname documentation): + ./vendor inject + ./vendor download ./update release ./build dependencies distroname (replace distroname with a filename from config/dependencies/) diff --git a/script/vendor/download b/include/vendor.sh similarity index 56% rename from script/vendor/download rename to include/vendor.sh index 6f1fdbbf..a987c4aa 100755 --- a/script/vendor/download +++ b/include/vendor.sh @@ -1,14 +1,8 @@ -#!/usr/bin/env sh # SPDX-License-Identifier: GPL-3.0-only # SPDX-FileCopyrightText: 2022 Caleb La Grange # SPDX-FileCopyrightText: 2022 Ferass El Hafidi # SPDX-FileCopyrightText: 2023-2024 Leah Rowe -. "include/option.sh" -. "include/mrc.sh" - -export PATH="${PATH}:/sbin" - _ua="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" _7ztest="a" @@ -16,14 +10,19 @@ e6400_unpack="${PWD}/src/bios_extract/dell_inspiron_1100_unpacker.py" me7updateparser="${PWD}/util/me7_update_parser/me7_update_parser.py" pfs_extract="${PWD}/src/biosutilities/Dell_PFS_Extract.py" uefiextract="${PWD}/src/uefitool/uefiextract" +nvmutil="util/nvmutil/nvm" eval "$(setvars "" _b _dl EC_url EC_url_bkup EC_hash DL_hash DL_url DL_url_bkup \ E6400_VGA_DL_hash E6400_VGA_DL_url E6400_VGA_DL_url_bkup E6400_VGA_offset \ E6400_VGA_romname SCH5545EC_DL_url SCH5545EC_DL_url_bkup SCH5545EC_DL_hash \ - tree mecleaner kbc1126_ec_dump MRC_refcode_cbtree cbfstoolref MRC_refcode_gbe)" + tree mecleaner kbc1126_ec_dump MRC_refcode_cbtree MRC_refcode_gbe new_mac \ + cbfstoolref release nukemode modifygbe rom archive)" -main() +vendor_download() { + set +u +e + export PATH="${PATH}:/sbin" + [ $# -gt 0 ] || $err "No argument given" board="${1}" boarddir="${cbcfgsdir}/${board}" @@ -33,7 +32,7 @@ main() detect_firmware && exit 0 scan_config "${_b}" "config/vendor" - build_dependencies + build_dependencies_download download_vendorfiles } @@ -48,6 +47,7 @@ detect_firmware() set -- "${boarddir}/config/"* . "${1}" 2>/dev/null . "${boarddir}/target.cfg" 2>/dev/null + [ -z "$tree" ] && $err "detect_firmware $boarddir: tree undefined" cbdir="src/coreboot/$tree" cbfstool="cbutils/$tree/cbfstool" @@ -62,7 +62,7 @@ detect_firmware() printf "Vendor files not needed for: %s\n" "${board}" 1>&2 } -build_dependencies() +build_dependencies_download() { [ -d "${cbdir}" ] || x_ ./update trees -f coreboot ${cbdir##*/} for d in uefitool biosutilities bios_extract; do @@ -169,6 +169,7 @@ extract_intel_me() [ -f "${_me}" ] && return 0 sdir="$(mktemp -d)" + [ -z "$sdir" ] && return 0 mkdir -p "$sdir" || $err "extract_intel_me: !mkdir -p \"$sdir\"" ( [ "${cdir#/a}" != "$cdir" ] && cdir="${cdir#/}" @@ -262,4 +263,216 @@ extract_sch5545ec() $err "extract_sch5545ec: cannot copy sch5545ec firmware file" } -main $@ +vendor_inject() +{ + set +u +e + + [ $# -lt 1 ] && $err "No options specified." + [ "${1}" = "listboards" ] && eval "items config/coreboot || :; exit 0" + + archive="${1}" + + while getopts n:r:b:m: option; do + case "${option}" in + n) nukemode="${OPTARG}" ;; + r) rom=${OPTARG} ;; + b) board=${OPTARG} ;; + m) modifygbe=true + new_mac=${OPTARG} ;; + *) : ;; + esac + done + + check_board + build_dependencies_inject + inject_vendorfiles + [ "${nukemode}" = "nuke" ] && return 0 + printf "Friendly reminder (this is *not* an error message):\n" + printf "Please ensure that the files were inserted correctly.\n" +} + +check_board() +{ + failcheck="n" + check_release "${archive}" || failcheck="y" + if [ "${failcheck}" = "y" ]; then + [ -f "$rom" ] || $err "check_board \"$rom\": invalid path" + [ -z "${rom+x}" ] && $err "check_board: no rom specified" + [ -n "${board+x}" ] || board=$(detect_board "${rom}") + else + release="y" + board=$(detect_board "${archive}") + fi + + boarddir="${cbcfgsdir}/${board}" + [ -d "$boarddir" ] || $err "check_board: board $board missing" + [ -f "$boarddir/target.cfg" ] || \ + $err "check_board $board: target.cfg missing" + . "$boarddir/target.cfg" 2>/dev/null + [ -z "$tree" ] && $err "check_board $board: tree undefined"; return 0 +} + +check_release() +{ + [ -f "${archive}" ] || return 1 + [ "${archive##*.}" = "xz" ] || return 1 + printf "%s\n" "Release archive ${archive} detected" +} + +# This function tries to determine the board from the filename of the rom. +# It will only succeed if the filename is not changed from the build/download +detect_board() +{ + path="${1}" + filename=$(basename "${path}") + case ${filename} in + grub_*) + board=$(echo "${filename}" | cut -d '_' -f2-3) ;; + seabios_withgrub_*) + board=$(echo "${filename}" | cut -d '_' -f3-4) ;; + *.tar.xz) + _stripped_prefix=${filename#*_} + board="${_stripped_prefix%.tar.xz}" ;; + *) + $err "detect_board $filename: could not detect board type" + esac + printf "%s\n" "${board}" +} + +build_dependencies_inject() +{ + cbdir="src/coreboot/$tree" + cbfstool="cbutils/$tree/cbfstool" + ifdtool="cbutils/$tree/ifdtool" + [ -d "${cbdir}" ] || x_ ./update trees -f coreboot $tree + if [ ! -f "${cbfstool}" ] || [ ! -f "${ifdtool}" ]; then + x_ ./update trees -b coreboot utils $tree + fi + [ -z "$new_mac" ] || [ -f "$nvmutil" ] || x_ make -C util/nvmutil + [ "$nukemode" = "nuke" ] || x_ ./vendor download $board; return 0 +} + +inject_vendorfiles() +{ + [ "${release}" != "y" ] && eval "patch_rom \"$rom\"; return 0" + patch_release_roms +} + +patch_release_roms() +{ + _tmpdir="tmp/romdir" + remkdir "${_tmpdir}" + tar -xf "${archive}" -C "${_tmpdir}" || \ + $err "patch_release_roms: !tar -xf \"$archive\" -C \"$_tmpdir\"" + + for x in "${_tmpdir}"/bin/*/*.rom ; do + printf "patching rom: %s\n" "$x" + patch_rom "${x}" + done + + ( + cd "${_tmpdir}/bin/"* || \ + $err "patch_release_roms: !cd ${_tmpdir}/bin/*" + + # NOTE: For compatibility with older rom releases, defer to sha1 + [ "${nukemode}" = "nuke" ] || sha512sum --status -c vendorhashes || \ + sha1sum --status -c vendorhashes || sha512sum --status -c \ + blobhashes || sha1sum --status -c blobhashes || \ + $err "patch_release_roms: ROMs did not match expected hashes" + ) || $err "can't verify vendor hashes" + + [ "${modifygbe}" = "true" ] && \ + for x in "${_tmpdir}"/bin/*/*.rom ; do + modify_gbe "${x}" + done + + [ -d bin/release ] || x_ mkdir -p bin/release + x_ mv "${_tmpdir}"/bin/* bin/release/ + x_ rm -Rf "${_tmpdir}" + + printf "Success! Your ROMs are in bin/release\n" +} + +patch_rom() +{ + rom="${1}" + + check_defconfig "$boarddir" && $err "patch_rom $boarddir: no configs" + + set -- "${boarddir}/config/"* + . "${1}" 2>/dev/null + + [ "$CONFIG_HAVE_MRC" = "y" ] && \ + inject "mrc.bin" "${CONFIG_MRC_FILE}" "mrc" "0xfffa0000" + [ -n "$CONFIG_HAVE_REFCODE_BLOB" ] && \ + inject "fallback/refcode" "$CONFIG_REFCODE_BLOB_FILE" "stage" + [ "${CONFIG_HAVE_ME_BIN}" = "y" ] && \ + inject "IFD" "${CONFIG_ME_BIN_PATH}" "me" + [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ] && \ + inject "ecfw1.bin" "$CONFIG_KBC1126_FW1" "raw" \ + "${CONFIG_KBC1126_FW1_OFFSET}" && \ + inject "ecfw2.bin" "$CONFIG_KBC1126_FW2" "raw" \ + "${CONFIG_KBC1126_FW2_OFFSET}" + [ -n "$CONFIG_VGA_BIOS_FILE" ] && [ -n "$CONFIG_VGA_BIOS_ID" ] && \ + inject "pci${CONFIG_VGA_BIOS_ID}.rom" \ + "${CONFIG_VGA_BIOS_FILE}" "optionrom" + [ "${CONFIG_INCLUDE_SMSC_SCH5545_EC_FW}" = "y" ] && \ + [ -n "${CONFIG_SMSC_SCH5545_EC_FW_FILE}" ] && \ + inject "sch5545_ecfw.bin" "$CONFIG_SMSC_SCH5545_EC_FW_FILE" raw + [ "${modifygbe}" = "true" ] && ! [ "${release}" = "y" ] && \ + inject "IFD" "${CONFIG_GBE_BIN_PATH}" "GbE" + + printf "ROM image successfully patched: %s\n" "${rom}" +} + +inject() +{ + [ $# -lt 3 ] && \ + $err "inject $@, $rom: usage: inject name path type (offset)" + + eval "$(setvars "" cbfsname _dest _t _offset)" + cbfsname="${1}" + _dest="${2##*../}" + _t="${3}" + [ $# -gt 3 ] && _offset="-b ${4}" && [ -z "${4}" ] && \ + $err "inject $@, $rom: offset passed, but empty (not defined)" + + [ -z "${_dest}" ] && $err "inject $@, ${rom}: empty destination path" + [ ! -f "${_dest}" ] && [ "${nukemode}" != "nuke" ] && \ + $err "inject_${dl_type}: file missing, ${_dest}" + + [ "$nukemode" = "nuke" ] || \ + printf "Inserting %s/%s in file: %s\n" "$cbfsname" "$_t" "$rom" + + if [ "${_t}" = "GbE" ]; then + x_ mkdir -p tmp + cp "${_dest}" "tmp/gbe.bin" || \ + $err "inject: !cp \"${_dest}\" \"tmp/gbe.bin\"" + _dest="tmp/gbe.bin" + "${nvmutil}" "${_dest}" setmac "${new_mac}" || \ + $err "inject ${_dest}: can't change mac address" + fi + if [ "${cbfsname}" = "IFD" ]; then + if [ "${nukemode}" != "nuke" ]; then + "$ifdtool" -i ${_t}:${_dest} "$rom" -O "$rom" || \ + $err "inject: can't insert $_t ($dest) into $rom" + else + "$ifdtool" --nuke $_t "$rom" -O "$rom" || \ + $err "inject $rom: can't nuke $_t in IFD" + fi + else + if [ "${nukemode}" != "nuke" ]; then + if [ "$_t" = "stage" ]; then # broadwell refcode + "$cbfstool" "$rom" add-stage -f "$_dest" \ + -n "$cbfsname" -t stage -c lzma + else + "$cbfstool" "$rom" add -f "$_dest" \ + -n "$cbfsname" -t $_t $_offset || \ + $err "$rom: can't insert $_t file $_dest" + fi + else + "$cbfstool" "$rom" remove -n "$cbfsname" || \ + $err "inject $rom: can't remove $cbfsname" + fi + fi +} diff --git a/script/vendor/inject b/script/vendor/inject deleted file mode 100755 index 9b6b52ea..00000000 --- a/script/vendor/inject +++ /dev/null @@ -1,238 +0,0 @@ -#!/usr/bin/env sh -# SPDX-License-Identifier: GPL-3.0-only -# SPDX-FileCopyrightText: 2022 Caleb La Grange -# SPDX-FileCopyrightText: 2022 Ferass El Hafidi -# SPDX-FileCopyrightText: 2023-2024 Leah Rowe - -. "include/option.sh" - -nvmutil="util/nvmutil/nvm" - -eval "$(setvars "" archive rom modifygbe nukemode release new_mac tree)" - -main() -{ - [ $# -lt 1 ] && $err "No options specified." - [ "${1}" = "listboards" ] && eval "items config/coreboot || :; exit 0" - - archive="${1}" - - while getopts n:r:b:m: option; do - case "${option}" in - n) nukemode="${OPTARG}" ;; - r) rom=${OPTARG} ;; - b) board=${OPTARG} ;; - m) modifygbe=true - new_mac=${OPTARG} ;; - *) : ;; - esac - done - - check_board - build_dependencies - inject_vendorfiles - [ "${nukemode}" = "nuke" ] && return 0 - printf "Friendly reminder (this is *not* an error message):\n" - printf "Please ensure that the files were inserted correctly.\n" -} - -check_board() -{ - failcheck="n" - check_release "${archive}" || failcheck="y" - if [ "${failcheck}" = "y" ]; then - [ -f "$rom" ] || $err "check_board \"$rom\": invalid path" - [ -z "${rom+x}" ] && $err "check_board: no rom specified" - [ -n "${board+x}" ] || board=$(detect_board "${rom}") - else - release="y" - board=$(detect_board "${archive}") - fi - - boarddir="${cbcfgsdir}/${board}" - [ -d "$boarddir" ] || $err "check_board: board $board missing" - [ -f "$boarddir/target.cfg" ] || \ - $err "check_board $board: target.cfg missing" - . "$boarddir/target.cfg" 2>/dev/null - [ -z "$tree" ] && $err "check_board $board: tree undefined"; return 0 -} - -check_release() -{ - [ -f "${archive}" ] || return 1 - [ "${archive##*.}" = "xz" ] || return 1 - printf "%s\n" "Release archive ${archive} detected" -} - -# This function tries to determine the board from the filename of the rom. -# It will only succeed if the filename is not changed from the build/download -detect_board() -{ - path="${1}" - filename=$(basename "${path}") - case ${filename} in - grub_*) - board=$(echo "${filename}" | cut -d '_' -f2-3) ;; - seabios_withgrub_*) - board=$(echo "${filename}" | cut -d '_' -f3-4) ;; - *.tar.xz) - _stripped_prefix=${filename#*_} - board="${_stripped_prefix%.tar.xz}" ;; - *) - $err "detect_board $filename: could not detect board type" - esac - printf "%s\n" "${board}" -} - -build_dependencies() -{ - cbdir="src/coreboot/$tree" - cbfstool="cbutils/$tree/cbfstool" - ifdtool="cbutils/$tree/ifdtool" - [ -d "${cbdir}" ] || x_ ./update trees -f coreboot $tree - if [ ! -f "${cbfstool}" ] || [ ! -f "${ifdtool}" ]; then - x_ ./update trees -b coreboot utils $tree - fi - [ -z "$new_mac" ] || [ -f "$nvmutil" ] || x_ make -C util/nvmutil - [ "$nukemode" = "nuke" ] || x_ ./vendor download $board; return 0 -} - -inject_vendorfiles() -{ - [ "${release}" != "y" ] && eval "patch_rom \"$rom\"; return 0" - patch_release_roms -} - -patch_release_roms() -{ - _tmpdir="tmp/romdir" - remkdir "${_tmpdir}" - tar -xf "${archive}" -C "${_tmpdir}" || \ - $err "patch_release_roms: !tar -xf \"$archive\" -C \"$_tmpdir\"" - - for x in "${_tmpdir}"/bin/*/*.rom ; do - printf "patching rom: %s\n" "$x" - patch_rom "${x}" - done - - ( - cd "${_tmpdir}/bin/"* || \ - $err "patch_release_roms: !cd ${_tmpdir}/bin/*" - - # NOTE: For compatibility with older rom releases, defer to sha1 - [ "${nukemode}" = "nuke" ] || sha512sum --status -c vendorhashes || \ - sha1sum --status -c vendorhashes || sha512sum --status -c \ - blobhashes || sha1sum --status -c blobhashes || \ - $err "patch_release_roms: ROMs did not match expected hashes" - ) || $err "can't verify vendor hashes" - - [ "${modifygbe}" = "true" ] && \ - for x in "${_tmpdir}"/bin/*/*.rom ; do - modify_gbe "${x}" - done - - [ -d bin/release ] || x_ mkdir -p bin/release - x_ mv "${_tmpdir}"/bin/* bin/release/ - x_ rm -Rf "${_tmpdir}" - - printf "Success! Your ROMs are in bin/release\n" -} - -patch_rom() -{ - rom="${1}" - - check_defconfig "$boarddir" && $err "patch_rom $boarddir: no configs" - - set -- "${boarddir}/config/"* - . "${1}" 2>/dev/null - - [ "$CONFIG_HAVE_MRC" = "y" ] && \ - inject "mrc.bin" "${CONFIG_MRC_FILE}" "mrc" "0xfffa0000" - [ -n "$CONFIG_HAVE_REFCODE_BLOB" ] && \ - inject "fallback/refcode" "$CONFIG_REFCODE_BLOB_FILE" "stage" - [ "${CONFIG_HAVE_ME_BIN}" = "y" ] && \ - inject "IFD" "${CONFIG_ME_BIN_PATH}" "me" - [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ] && \ - inject "ecfw1.bin" "$CONFIG_KBC1126_FW1" "raw" \ - "${CONFIG_KBC1126_FW1_OFFSET}" && \ - inject "ecfw2.bin" "$CONFIG_KBC1126_FW2" "raw" \ - "${CONFIG_KBC1126_FW2_OFFSET}" - [ -n "$CONFIG_VGA_BIOS_FILE" ] && [ -n "$CONFIG_VGA_BIOS_ID" ] && \ - inject "pci${CONFIG_VGA_BIOS_ID}.rom" \ - "${CONFIG_VGA_BIOS_FILE}" "optionrom" - [ "${CONFIG_INCLUDE_SMSC_SCH5545_EC_FW}" = "y" ] && \ - [ -n "${CONFIG_SMSC_SCH5545_EC_FW_FILE}" ] && \ - inject "sch5545_ecfw.bin" "$CONFIG_SMSC_SCH5545_EC_FW_FILE" raw - [ "${modifygbe}" = "true" ] && ! [ "${release}" = "y" ] && \ - inject "IFD" "${CONFIG_GBE_BIN_PATH}" "GbE" - - printf "ROM image successfully patched: %s\n" "${rom}" -} - -inject() -{ - [ $# -lt 3 ] && \ - $err "inject $@, $rom: usage: inject name path type (offset)" - - eval "$(setvars "" cbfsname _dest _t _offset)" - cbfsname="${1}" - _dest="${2##*../}" - _t="${3}" - [ $# -gt 3 ] && _offset="-b ${4}" && [ -z "${4}" ] && \ - $err "inject $@, $rom: offset passed, but empty (not defined)" - - [ -z "${_dest}" ] && $err "inject $@, ${rom}: empty destination path" - [ ! -f "${_dest}" ] && [ "${nukemode}" != "nuke" ] && \ - $err "inject_${dl_type}: file missing, ${_dest}" - - [ "$nukemode" = "nuke" ] || \ - printf "Inserting %s/%s in file: %s\n" "$cbfsname" "$_t" "$rom" - - if [ "${_t}" = "GbE" ]; then - x_ mkdir -p tmp - cp "${_dest}" "tmp/gbe.bin" || \ - $err "inject: !cp \"${_dest}\" \"tmp/gbe.bin\"" - _dest="tmp/gbe.bin" - "${nvmutil}" "${_dest}" setmac "${new_mac}" || \ - $err "inject ${_dest}: can't change mac address" - fi - if [ "${cbfsname}" = "IFD" ]; then - if [ "${nukemode}" != "nuke" ]; then - "$ifdtool" -i ${_t}:${_dest} "$rom" -O "$rom" || \ - $err "inject: can't insert $_t ($dest) into $rom" - else - "$ifdtool" --nuke $_t "$rom" -O "$rom" || \ - $err "inject $rom: can't nuke $_t in IFD" - fi - else - if [ "${nukemode}" != "nuke" ]; then - if [ "$_t" = "stage" ]; then # broadwell refcode - "$cbfstool" "$rom" add-stage -f "$_dest" \ - -n "$cbfsname" -t stage -c lzma - else - "$cbfstool" "$rom" add -f "$_dest" \ - -n "$cbfsname" -t $_t $_offset || \ - $err "$rom: can't insert $_t file $_dest" - fi - else - "$cbfstool" "$rom" remove -n "$cbfsname" || \ - $err "inject $rom: can't remove $cbfsname" - fi - fi -} - -usage() -{ - cat <<- EOF - USAGE: ./vendor inject -r [rom path] -b [boardname] -m [macaddress] - Example: ./vendor inject -r x230_12mb.rom -b x230_12mb - - Adding a macadress to the gbe is optional. - If the [-m] parameter is left blank, the gbe will not be touched. - - Type './vendor inject listboards' to get a list of valid boards - EOF -} - -main $@ From d7ce26dc23ccd797bd4cb904c378ee6dc701f42b Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 11 May 2024 06:22:56 +0100 Subject: [PATCH 0016/1230] move script/*/* to script/ there are only two scripts under script/ now, and there probably won't be many more. lbmk's design has simplified to such a degree that the two-level directory structure is no longer necessary. the existing command structure has not changed. for example: ./build roms list ./update trees -f coreboot default these will still work, but the symlinks to "build" are now strictly for backwards compatibility; they may be removed at a later date, but i'll keep the current design for now. this also leads to a quirk, for example: ./build roms all ./update roms all these now do the exact same thing, whereas "./update roms all" would have previously been an invalid command. Signed-off-by: Leah Rowe --- build | 16 +++++++--------- script/{build => }/roms | 0 script/{update => }/trees | 0 3 files changed, 7 insertions(+), 9 deletions(-) rename script/{build => }/roms (100%) rename script/{update => }/trees (100%) diff --git a/build b/build index 60877d8e..71620308 100755 --- a/build +++ b/build @@ -16,13 +16,12 @@ fi . "include/vendor.sh" . "include/mrc.sh" -eval "$(setvars "" option aur_notice vdir relname src_dirname srcdir _xm \ - target romdir mode)" +eval "$(setvars "" script_path aur_notice vdir relname src_dirname srcdir \ + _xm target romdir mode)" err="fail" linkpath="${0}" linkname="${linkpath##*/}" -buildpath="./script/${linkname}" main() { @@ -45,13 +44,13 @@ initcmd() case "${1}" in help) usage ${0} ;; - list) items "${buildpath}" ;; + list) items "script" ;; version) mkversion ;; release) shift 1; mkrelease $@ ;; inject) shift 1; vendor_inject $@ ;; download) shift 1; vendor_download $@ ;; *) - option="${1}" + script_path="script/${1}" return 0 ;; esac set -u -e # some commands disable them. turn them on! @@ -95,9 +94,8 @@ git_init() excmd() { - lbmkcmd="${buildpath}/${option}" - [ -f "${lbmkcmd}" ] || $err "Invalid command. Run: ${linkpath} help" - shift 1; "$lbmkcmd" $@ || $err "excmd: ${lbmkcmd} ${@}" + [ -f "${script_path}" ] || $err "Bad command. Run: ${linkpath} help" + shift 1; "$script_path" $@ || $err "excmd: ${script_path} ${@}" } usage() @@ -109,7 +107,7 @@ usage() USAGE: ${progname}