summaryrefslogtreecommitdiff
path: root/script
AgeCommit message (Collapse)Author
2024-03-27safer, simpler error handling in lbmkLeah Rowe
in shell scripts, a function named the same as a program included in the $PATH will override that program. for example, you could make a function called ls() and this would override the standand "ls". in lbmk, a part of it was first trying to run the "fail" command, deferring to "err", because some scripts call fail() which does some minor cleanup before calling err. in most cases, fail() is not defined, and it's possible that the user could have a program called "fail" in their $PATH, the behaviour of which we could not determine, and it could have disastrous effects. lbmk error handling has been re-engineered in such a way that the err function is defined in a variable, which defaults to err_ which calls err_, so defined under include/err.sh. in functions that require cleanup prior to error handling, a fail() function is still defined, and err is overridden, thus: err="fail" this change has made xx_() obsolete, so now only x_ is used. the x_ function is a wrapper that can be used to run a command and exit with non-zero status (from lbmk) if the command fails. the xx_ command did the same thing, but called fail() which would have called err(); now everything is $err example: rm -f "$filename" || err "could not delete file" this would now be: rm -f "$filename" || $err "could not delete file" overriding of err= must be done *after* including err.sh. for example: err="fail" . "include/err.sh" ^ this is wrong. instead, one must do: . "include/err.sh" err="fail" this is because err is set as a global variable under err.sh the new error handling is much cleaner, and safer. it also reduces the chance of mistakes such as: calling err when you meant to call fail. this is because the standard way is now to call $err, so you set err="fail" at the top of the script and all is well. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-02-25Libreboot 2024022520240225Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-02-07support making u-boot-only tarballs in releasesLeah Rowe
./update release -m u-boot if someone just wants to make u-boot, they can use this and it tars up all the trees. Signed-off-by: Leah Rowe <info@minifree.org>
2024-01-26Libreboot 2024012620240126Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-26update/trees: reset xtree/tree_depend before buildLeah Rowe
in some cases, the build system was needlessly, and sometimes erroneously, creating crossgcc symlinks, which then caused an issue, namely: in lbmk release builds, dell e6400 is build before fam15h boards, and it sets xtree, but fam15h_rdimm doesn't, and later this would cause fam15h_rdimm boards to use xtree="default" (because they don't set xtree), causing the newer toolchain to be used on coreboot 4.11. this patch fixes the issue. quite a simple problem, actually. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-23script/vendor/inject: remove erroneous checkLeah Rowe
the boarddir variable is only set *after* detect_board is run, and is in fact checked after that. this check, removed by this patch, is too early and causes lbmk to exit with error states. this patch fixes the error. the error was that lbmk was then searching for a file that is at an empty path. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-21don't download projects on release archivesLeah Rowe
the changelog file is only present in releases, so use the presence of this file for the test. someone who wants to fetch projects within a release archive can simply use the git repo, or delete the file. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-21update/release: generate changelogsLeah Rowe
use the git log, as follows: git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' --abbrev-commit this creates a nice, uniform list of changes. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-21allow multitree projects to define xgcc treeLeah Rowe
let them specific it, rather than falling back to coreboot/default (can also be used for coreboot boards) Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-18GRUB: insert only 1 keymap per board, in cbfsLeah Rowe
There is no need to add multiple keymap files, because GRUB can load keymaps from CBFS. The current build logic is designed to avoid building multiple GRUB binaries, which are expensive computationally because each one would then have to be compressed for each board. This patch provides the best of both worlds: less space used in flash like in the old lbmk design (1 keymap per board), but retaining the current build speeds and therefore not re-introducing the slowness of lbmk's previous GRUB build logic. The grub.cfg file has been modified, accordingly. It now only loads a keymap.gkb file from CBFS, by default. It does this, only if that file exists; if not, GRUB already defaults to US Qwerty layout anyway. ALSO: compress all keymap gkb files with xz -6 GRUB automatically decompresses files when accessed. This results in about 2KB of flash space saved in CBFS. Here is real-world data, showing the increased flash space: < fallback/payload 0x3eb80 simple elf 548821 none < keymap.cfg 0xc4bc0 raw 16 none < (empty) 0xc4c00 null 11633316 none --- > fallback/payload 0x3eb80 simple elf 546787 none > keymap.gkb 0xc43c0 raw 344 none > (empty) 0xc4540 null 11635044 none This was taken by diffing the cbfstool "print" output, both before and after. The *after* result is with this change. 11633316. In this example, 1728 bytes have been saved. Therefore, with compression taken into account, this patch saves about 1.7KB of space in CBFS. This change means that lbmk can now scale to support hundreds of keymaps, without increasing the amount of flash space used, in each given image. Since the keymap files are compressed in lbmk.git, in advance, we spend no additional time on compression at build time. The resulting change in build speed in negligible. Adding your own keymap.gkb file was already possible, for changing the keymap in libreboot images, if you didn't want to change the memdisk (and thus re-compile grub.elf). Now, this is the default behaviour, and the only way to do it. It's much more efficient. The original keymap files can be restored, by running unxz. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-17build/roms: err if -k layout doesn't existLeah Rowe
if the user defines a layout that doesn't exist, throw an error in lbmk. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-17build/roms: regression fix: uninitialised variableLeah Rowe
the "kmapdir" variable was removed in an earlier audit, but was overlooked for -k because that option was untested. rather than initialise the variable, re-use grubcfgsdir. this fix enables e.g. "-k usdvorak" to work again. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-12REMOVE MAINBOARD: lenovo x201Leah Rowe
with neutered ME, fan control fails. while there are ways to mitigate it, many users will not, and will likely see their system overheat, which is very dangerous. this bug (failed fan control on neutered ME) only affects arrandale machines such as lenovo x201. the newer machines are not affected by this. other arrandale machines will probably not be added to libreboot because of this, or they will be subject to further testing. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-10NEW MAINBOARD: HP EliteBook 820 G2Leah Rowe
This is of Broadwell platform, one generation above Haswell. Of note: this uses HP Sure Start. Although the flash is 16MB, our CBFS section (and IFD configuration) assumes 12MB flash, so the final 4MB will be left unflashed on installation, after blanking the private flash. The coreboot documents have more information about this. Some minor design changes in lbmk were made, to accomodate this port: Support for extracting refcode binaries added (pulled from Google recovery images). The refcode file is an ELF that initialises the MRC and the PCH. It is also responsible for enabling or disabling the Intel GbE device, where Google does not enable it, but lbmk modifies it per the instructions on the coreboot documentation, so as to enable Intel GbE. Google's recovery image stores the refcode as a stage file, but coreboot changed the format (for CBFS files) after 4.13 so coreboot 4.13's cbfstool is used to extract refcode. This realisation made me also change the script logic to use a cbfstool and ifdtool version matching the coreboot tree, for all parts of lbmk, whereas lbmk previously used only the default tree for cbfstool/ifdtool, on insertion and deletion of vendor files - it was 81dc20e744 that broke extraction of refcode on google's recovery images, where google used an older version of cbfstool to insert the files in their coreboot ROMs. A further backported patch has been added, copying coreboot revision f22f408956 which is a build fix from Nico Huber. Iru Cai submitted an ACPI bugfix after the revision lbmk currently uses, for coreboot/default, and this fix is needed for rebooting to work on Linux 6.1 or higher. This patch has been backported to lbmk, while it still uses the same October 2023 revision of coreboot. Broadwell MRC is inserted at the same offset as Haswell, so I didn't need to tweak that. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: tidy up payload configuration handlingLeah Rowe
the eval for loop is overkill Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: remove unused variableLeah Rowe
the kmapdir variable is only used once, and just the string makes it obvious what this is for Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: don't needlessly re-build grub.elfLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: create elf/grub if non-existentLeah Rowe
i overlooked this during previous re-factoring Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01fix oversight in previous commitLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: rename more functions for clarityLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: rename payload functions for clarityLeah Rowe
they are functions that build payloads, so name them as such. don't call them "dependencies" functions Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: simplify seabios dependency checkLeah Rowe
the update/trees script checks this binary itself, before deciding whether to recompile/compile, so we don't need to do such checks here. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01build/roms: simplify grub dependency checkLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01add copyright 2024 leah rowe to edited filesLeah Rowe
i forgot to add 2024 on the copyright years, for my copyright files that i edited on 1 january 2024 Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01git.sh: unify am/submodule and tree copyingLeah Rowe
do it all in a single function! Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-01git.sh: clean up handling of tmp_git_dirLeah Rowe
delete it once once, and delete it much sooner, right at the start of script/update/trees main() Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-30update/trees: clean up the coreboot-version checkLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-30update/trees: support custom make/autogen argumentLeah Rowe
this is now used in grub, for the FS_PAYLOAD_MODULES option in the make command lbmk should generalise as much logic as possible. in some parts of it, logic is hurrently hardcoded, specific to a given project that lbmk uses, but lbmk is essentially a source-based package manager, like what you might find on a small linux distro, so we need to try to be as generic as possible. lbmk is the "build system of build systems", so it has to work generically with as many of them as possible Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-30update/trees: generic cmake handlingLeah Rowe
it is no longer hardcoded just to be handled for uefiextract. it is now defined as cmakedir in target.cfg, for a single or multi tree project. if multi tree, it is applied to the specific tree, and has to be defined per tree the way it works is: as per cmakelist, a project will define which directory is to be built, and it will then generate a makefile in the main source tree (the build tree in cmake language, where the main CMakeLists.txt file exists) when the makefile has been generated, the project is then treated like any other project. the way cmake works, if a makefile has already been generated by it, in a given directory, running it again will fail and not affect anything; if it fails but the makefile doesn't exist, then something is wrong, but if the makefile does exist, then it's all fine and nothing happens at present, this is only used for uefiextract, which is part of src/uefitool Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-30update/trees: avoid namespace clash in functionLeah Rowe
the logic of the previous commit was correct, but one of the functions was named the same as another function used in this file, causing a namespace conflict, and a build error Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-30update/trees: dont hardcode autoconf/bootstrap argLeah Rowe
at present, the bootstrap and configure script is only directly executed for grub, because grub is the only project that uses them in lbmk however, when i start adding linuxboot support, i will have to start building a lot of projects, some of which make use autoconf and bootstrap scripts e.g. ./bootstrap --foo ./configure --bar the "bootstrap" script is often used on GNU programs, because they like to over-engineer absolutely everything Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-30unify script/update/trees and script/build/grubLeah Rowe
the script can now also handle autoconf build systems, whereas this could previously only be done for grub. with this change, the overall sloccount is also lower Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-28lbmk scripts: general code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-27lbmk scripts: general code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-27build/serprog: err if basename failsLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-27update/trees: further simplify crossgcc handlingLeah Rowe
arch no longer needs to be set, on multi-tree projects, and it has been renamed to xarch the new behaviour is: if xarch is set, treat it as a list of crossgcc targets and go through the list. set the first one as the target, for what lbmk builds, but build all of the defined crossgccc targets crossgcc_ada is now xlang, and defines which languages to build, rather than whether to build gcc-gnat Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-24lbmk scripts: shorter code linesLeah Rowe
while seemingly pedantic, this does actually make code easier to read. mostly just switching to shorthand for variable names, where no expansions or patterns are used Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-24lbmk scripts: general code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-24build/roms: rename two functions for clarityLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23lbmk scripts: general code cleanup/optimisationLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23build/roms: improved error handling for romsLeah Rowe
the rom functions print a path to the rom they built, which is then used, but these are called inside what are essentially subshells, and we had no error handling Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23build/roms: remove redundant checkLeah Rowe
cros roms are always using libgfxinit, with a coreboot framebuffer, so the "normal" initmode is never used. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23set version/projectname properlyLeah Rowe
lbmk used to set version/versiondate directly in err.sh, but now it's handled there by a function, which is called by the main script. script/update/release hadn't yet been adapted. the only change necessary is to call check_project() script/update/trees also makes use of it script/build/roms is using "projectname" Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23update/trees: fix infinite loopLeah Rowe
when make-all is being executed on a coreboot tree, the "./vendor download target" command is used, where target is the tree/board name. that script then checks whether cbfstool and ifdtool are built, and if they're not, they then call ./update trees -b coreboot utils bla bla bla in this scenario, project=coreboot and mode="", meaning make-all, and the same check that checks whether the vendor download script should be run, is executed, which in turn then checks cbutils again fix the infinite loop by checking whether it was coreboot utils, as opposed to *firmware*, that is to be built, before running ./vendor download Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23vendor/download: check whether configs exist firstLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23vendor/inject: fix dodgy error check (cd command)Leah Rowe
the x_ function doesn't handle arguments with spaces well, and this cd command is going to an asterisk, so it's unknown what the resultant string will be. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23don't delete microcode updates in rom imagesLeah Rowe
at present, lbmk can remove microcode updates on images for a given target, if the target specifies microcode_required="n" in target.cfg lbmk then provides images with microcode, and images without, in a given release. although the user can also remove them manually, this just makes it a bit more convenient, for those users who do wish to run without the updates. this functionality is provided only on those platforms where no-microcode is tested. well, this behaviour implements a compromise on libreboot policy, which is to always include microcode updates by default. see: Binary Blob Reduction Policy the *canoeboot* project now exists, developed in parallel with libreboot, and it ships without microcode updates, on the same targets where lbmk also handled this. running without microcode updates is foolish, and should not be encouraged. clean up lbmk by not providing this kludge. the libreboot documentation will be updated, telling such users to try canoeboot instead, or to remove the update from a given libreboot rom - this is still possible, and mitigations such as PECI disablement on GM45 are still in place (and will be kept), so that this continues to work well. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23update/release: don't test ./vendor injectLeah Rowe
the purpose of script/update/release is not to test the build system, but to build release archives. testing of lbmk is done during the course of development. remove this bloat from the release script. we run the nuke mode anyway, to scrub blobs from releases, which will more or less test the logic in that script (the only difference is that it runs e.g. ifdtool --nuke instead of -i). Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23update/release: don't insert crossgcc tarballsLeah Rowe
why are we distributing gcc at all? the coreboot build system downloads it at build time, and the GNU rsync mirrors aren't going anywhere. simplify script/update/release by not handling gcc. this means: release archives will no longer contain gcc. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-23lbmk scripts: general code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>