summaryrefslogtreecommitdiff
path: root/build
AgeCommit message (Collapse)Author
2024-06-09create a lock file during buildsLeah Rowe
prevent duplicate main instances of the build system from running the lock file is deleted when the parent process exits, alongside the tmpdir deletion the build system must only ever be run ot one instance at a time, per work directory Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-06-06don't use build.list to detect multi-tree projectsLeah Rowe
instead, check for the presence of target.cfg files not in config/project/ but config/project/tree/ the way this check is done, it merely returns 1 if config/project/*/target.cfg is detected, and returns 0 in all other cases, even if config/project/target.cfg exists that way, if the maintainer accidentally adds a target.cfg in the main directory, the given multi-tree project will not break Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-06-05move id check to lib.sh tooLeah Rowe
doesn't really matter, it's just an extra layer to ensure reliability, but "id" is pretty standard Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-06-05move root check to lib.sh (bugfix)Leah Rowe
this avoids writing the version/versiondate files as root. this complements the previous fix, that avoided writing those same files when running the dependencies command. initial setup of the build system requires root, to run the dependencies script, but otherwise the build system prevents running as root for everything else, so we must avoid writing the version/versiondate files as root. that same avoidance is necessary when checking whether running other commands as root; ironically, this check then prevented running the build system at all! the bug should be fully fixed now. i found this quite by accident the other day, when testing something else. good thing this got fixed because the release! Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-06-05bugfix: move dependencies handling to lib.shLeah Rowe
do it strategically, in just the right place so that the version and versiondate files aren't written. otherwise, version/versiondate are written as root and the build system becomes unusable after that, unless you reset the file ownerships from root. hardly user-friendly. mitigate this bug. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-06-03better help text on invalid commandsLeah Rowe
adding help again is a bad idea. code should never document itself; that's what documentation is for. so, make the code do a better job telling the user where to find documentation. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-06-02build: print the project website address on helpLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-30delete u-boot test/lib/strlcat.c using nuke()Leah Rowe
we don't need to do it in the release function Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-26rename include/option.sh to include/lib.shLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-26general code cleanup in the build systemLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-25build: simplify git_init()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-25build: do root check before git checkLeah Rowe
otherwise, git could be initialised as root. running as root is not allowed. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-25build: simplify git checksLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-24build: hide git-init outputLeah Rowe
following on from the previous commit, if you run something like "./build roms list" when running for the first time from a codeberg tarball, the output of the git commands will be included in the output hide this output Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-19more minor cleanup in the build systemLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-19build/roms: rename moverom to copyromLeah Rowe
it copies, it doesn't move, so name it right Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-19minor code cleanup in the build systemLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-18git.sh: Remove .git if XBMK_RELEASE=yLeah Rowe
The build system already deletes .git in all source directories for each given release, but does so at the very end; it still does, but now it is deleted one by one per project, to save space during very large builds (release sizes vary wildly, depending on how many trees exist for coreboot basically). If you're building entirely in tmpfs (as I do), this could be a problem if you have lots of .git/ directories. This change reduces disk usage, or in the above example, memory usage when running the build system from tmpfs. This complements another recent change, where ROM images are compressed per target during release builds, rather than all at the very end of the process. It is part of a series of optimisations, to reduce the memory and disk usage of the build system, and to reduce I/O wastage in general. This change will not be the last of such changes! Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-16build: remove initcmd() and simplify main()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-16build: initialise git first (before commands)Leah Rowe
when running the inject logic, we should still initialise the git repository because these commands make use of the coreboot build system which requires git. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-16build: remove excmd() and simplify main()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-16build: don't make script_path a global variableLeah Rowe
this allows a mild cleanup of the code (reduction by 1 line) Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-16lbmk: allow easier sync with cbmkLeah Rowe
an equivalent change has been made in cbmk. certain lbmk-specific variable names have been made generic, with certain functions and other variables moved around. i maintain sync between libreboot and canoeboot, where both projects can have the same behaviours, and most of the merge conflicts have to do with variable names containing "LBMK", "lbmk", "cbmk" or "CBMK", or indeed "canoeboot" and "libreboot" LBMK/lbmk/CBMK/cbmk variables between canoeboot and libreboot now contain the string XBMK/xbmk it should now be *much* easier to merge build system changes between lbmk and cbmk. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15remove help commands (user should read docs)Leah Rowe
i always say, code should never document itself. that's what documentation is for. the releases contain documentation under docs/ but the git repository does not; for that, use the website. (in practise, lbmk usually needs internet anyway) Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15option.sh: delete check_git()Leah Rowe
it's only used from main() in the main build script, and it's very small, as is main() therefore, move the logic into main() Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: define "xp" in the global variablesLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: simplify for loop in fetch_trees()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: simplified downloads in fetch_trees()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15./build release: don't do u-boot-only archivesLeah Rowe
it's a pointless feature, initially added just to one-up gnuboot and only intended for canoeboot, to provide u-boot tarballs with deblobbing. this was done, because the parabola build system has certain limitations so the idea is to provide them with tarballs. but why? they can just fix their build system... delete this bloat from lbmk. we only need to provide full sources, and rom images. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: use utc+0 when initialising git repo datesLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15remove check_project() (always set variables)Leah Rowe
in lbmk, we call check_project() to set variables such as projectname, version, version date this is unnecessary, because all main scripts use this functionality anyway do it by default Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: simplify deletions in fetch_trees()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: delete mkversion() (just print relname)Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15rm src/u-boot/*/test/lib/strlcat.c in u-bootLeah Rowe
i accidentally removed this in a previous commit Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: remove mkrom_imagesLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build: use same tarball name on uboot-only releaseLeah Rowe
it's a rarely used feature, not currently used by the libreboot project itself remove unnecessary bloat Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15build/roms: create full release tarball nameLeah Rowe
set relname from option.sh under check_project() now the release logic simply has to move a directory Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-15cleanup: remove mkvdirLeah Rowe
this function is not needed, because it's only called once and it's very small. furthermore: insert_version_files does ntot need to be called here, because they same files are generated immediately afterward when running that version of lbmk. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-14move rom tarball creation to script/romsLeah Rowe
export LBMK_RELEASE="y" if this is done, the tarball is created instead of a directory, and the rom images are nuked using ./vendor inject with the nuke option, inserting the correct version files; the rom directory is deleted now the release script logic simple renames existing tarballs. the benefit of this change is fewer lines of code, and now lbmk doesn't use an insane amount of disk space when building a *lot* of release images (the uncompressed directories are deleted after each build) Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-11print two line breaks before confirming releaseLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-11remove all status checks. only handle release.Leah Rowe
the release variable is all we need, turning a target on or off for a given release. the status checks were prone to bugs, and unnecessary; it also broke certain benchmark scripts. it's better to keep the lbmk logic simpler. board status will be moved to the documentation instead. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-11move script/*/* to script/Leah Rowe
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 <leah@libreboot.org>
2024-05-11merge script/vendor/* into include/vendor.shLeah Rowe
stub it from the main build script the commands remain identical: ./vendor download arguments_here ./vendor inject arguments_here Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-11build: print usage for special commandsLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-05-11merge script/update/release into buildLeah Rowe
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 <leah@libreboot.org>
2024-05-09build: further prevent non-lbmk-work-directoryLeah Rowe
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 <leah@libreboot.org>
2024-05-09build: exit if not running from lbmk directoryLeah Rowe
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 <leah@libreboot.org>
2024-05-06merge include/err.sh with include/option.shLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-04-26exports variables from err.sh, not buildLeah Rowe
LC_COLLATE and LBMK_RELEASE are important variables. we want to make sure that these are seen by everything. since err.sh is included from all scripts, doing it there will accomplish just that. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-04-25lbmk: export TMPDIR from err.sh, not buildLeah Rowe
lbmk sets TMPDIR to /tmp, and then creates a tmpdir, then exports *that* as the value of TMPDIR. this unified TMPDIR location then contains all subsequent files and directories, when any script or program makes use of /tmp, via mktemp. at least, that's the theory! in practise, because it was only being properly exported from the main build scripts, subscripts that are then called were not exporting it, at least that is my assumption because in some cases, i found that the coreboot build system was leaving errant files behind outside of our own TMPDIR, and that build system did not seem to be setting TMPDIR itself; more debugging is needed. anyway: use the exact same logic, but do it from err.sh. since err.sh is included from every lbmk script, that means it will always be exported when running every single part of lbmk. this should reduce the chance that mktemp creates files and directories outside of our custom TMPDIR location. this is because in lbmk, we mitigate unhandled tmpdirs/files by unifying it in the manner described, then deleting the entire TMPDIR on exit from the main lbmk parent process (the main script that the user called from, which is always the "build" file). in lbmk, effort is made to clean up temporary files properly, without relying on this catch-all, but we can't rely on that. the catch-all should also be as robust as possible. Signed-off-by: Leah Rowe <leah@libreboot.org>