Commit Graph

331 Commits

Author SHA1 Message Date
Leah Rowe
df6db1c64b handle/config: fix errant "handle src for" call
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 12:21:41 +01:00
Leah Rowe
6874bc39de "handle src for" - change to handle make file
an oversight, in a previous edit

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 12:08:56 +01:00
Leah Rowe
798ce03ae3 handle/config: add missing error handle
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 12:07:59 +01:00
Leah Rowe
29a8193eb2 build/src/for: rename to handle/make/file
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 11:42:20 +01:00
Leah Rowe
27c67295c7 handle/config/file: unified distclean handling
use build/src/for -c which does the same thing,
specifically: try distclean, then clean, or fail

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 11:35:02 +01:00
Leah Rowe
197464bc4b build/src/for: use -j for multithreaded builds
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 11:34:24 +01:00
Leah Rowe
95f290d9e3 build/release/src: update based on recent changes
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 11:33:08 +01:00
Leah Rowe
5a47c01b11 scripts: put quotes around file/directory names
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-27 09:25:50 +01:00
Leah Rowe
1c8401be25 much, much stricter, more verbose error handling
lbmk is much more likely to crash now, in error conditions,
which is a boon for further auditing.

also: in "fetch", remove the downloaded program
if fail() was called.

this would also be done for gnulib, when downloading
grub, but done in such a way that gnulib goes first.

where calls to err write "ERROR" in the string, they
no longer say "ERROR" because the "err" function itself
now does that automatically.

also: listmodes/listoptions (in "lbmk") now reports an
error if no scripts and/or directories are found.

also: where a warning is given, but not an error, i've
gone through in some places and redirected the output
to stderr, not stdout

as part of error checks: running anything as root, except
for the "./build dependencies *" commands, is no longer
permitted and lbmk will throw an error

mrc downloads: debugfs output no longer redirected to /dev/null,
and stderr no longer redirected to stdout. everything is verbose.

certain non-error states are also more verbose. for example,
patch_rom in blobs/inject will now state when injection succeeds

certain actual errors(bugs) were fixed:
for example, build/release/roms now correctly prepares the blobs
hash files for a given target, containing only the files and
checksums in the list. Previously, a printf message was included.
Now, with this new code: blobutil/inject rightly verifies hashes.

doing all of this in one giant patch is cleaner
than 100 patches changing each file. even this is yet part
of a much larger audit going on in the Libreboot project.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-26 16:58:32 +01:00
Leah Rowe
8f4f0e00ec use the new coding style in scripts
there were stragglers left over from the last audit,
and these stragglers still exist even after all the
major re-factoring as of late

the new style is: bsd-like coding style and error
handling. verbose yet simple error handling. we use
an "err" function in a way reminiscent of most C
programs that you see in openbsd base (err.h)

this style is very clean, resulting in readable code

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-24 00:31:19 +01:00
Leah Rowe
4c6c7d1088 scripts: never exit 1, always call err instead
this same change has been applied, selectively, to
certain return statements. the general rule is this:
the return statement should only be used to direct
logic within a script, where certain non-errors
states are used to skip certain actions; the exit
command should *never* be used to return non-zero,
except by err(). in so doing, we ensure easier
debugging of the build system

also: strip_rom_image in build/release/roms was
running "continue" when a rom file didn't exist,
despite not being a while/for loop. i make it
return (non-error condition) instead

it's ok for a script to exit 0, where appropriate,
but perhaps a function could also be written for it

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-23 21:34:02 +01:00
Leah Rowe
52f3fd359e blobs/download: copy dl_path, don't move it
moving it defeats the purpose of the caching mechanism
that's in place. this should avoid unnecessary downloads

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-23 19:20:13 +01:00
Leah Rowe
57adbc6eb1 unify err functions across scripts
include/err.sh

this new handling also does mundane things,
such as tell you what script b0rked

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-23 19:12:00 +01:00
Riku Viitanen
fa92663214 memtest86+ v6.20
uses 32-bit variant for x86_32 arch. 64-bit for x86_64.

resources/scripts/build/src/for:
modified it a bit. when building e.g. "memtest86plus/build32"
it correctly fetches "memtest86plus" instead.

but builds memtest86plus/build32, which is inside that git repo

Signed-off-by: Riku Viitanen <riku.viitanen@protonmail.com>
2023-08-22 16:43:13 +03:00
Leah Rowe
04ee26726a also clean up the main scripts
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-22 00:34:15 +01:00
Leah Rowe
62f23123cb general code cleanup on lbmk shell scripts
in update/blobs/download, i saw instances where
appdir was being deleted with rm -r, but the more
appropriate command would rm -Rf. this is now fixed.

other than that, i've mostly just simplified a bunch
of if statements and consolidated some duplicated
logic (e.g. if/else block for dependencies in
build_dependencies() of update/blobs/download

one or two functions and/or variables have been
renamed, for greater clarity in the code, also
removed a few messages that were redundant

used printf instead of echo, in a few places, also
fixed up the indentation in a few places

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-21 22:38:00 +01:00
Leah Rowe
7be4706552 unify build/defconfig and modify/defconfig
they fundamentally perform the same action: copy
the .config file and run make, but build runs
make-all, while modify runs make-oldconfig or
make-menuconfig

merge this functionality together

also:
./handle config file

^ this is the new syntax, not:
./build defconfig for

for example:

./handle config file -b coreboot x200_8mb <-- build x200 rom
./handle config file -m coreboot x200_8mb <-- modify configs
./handle config file -u coreboot x200_8mb <-- make-oldconfig
./handle config file -u seabios
./handle config file -b u-boot

yes, 1 script and a sloccount reduction of 52. and the audit?
it continues.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-21 00:58:26 +01:00
Leah Rowe
9031bb7ba7 unify dependencies scripts
the unified logic is so small that i simply added it
to the main "build" script

commands are identical. example:

./build dependencies debian

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-20 21:25:51 +01:00
Leah Rowe
023d6b6996 unify build/clean into ./build release src
handle it all in the 1 script

quite a few clean scripts are still present,
so resources/scripts/build/clean/ still exists.

23 sloc reduction.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-20 18:58:32 +01:00
Leah Rowe
f893a29b22 unify most module build scripts
Some of them weren't even used at all, such as the flashrom
build script. the bios_extract build script existed but was
never used, because we only called (from blobutil) a python
script from in there, without actually compiling anything!

resources/script/build/src/for

Usage, e.g.:

./build src for memtest86plus

It also handles fetch. This script is intended largely for
those codebases that are quite simple, requiring trivial
or no intervention besides running "make".

37 sloc reduction. Not a lot, but the audit continues! These
optimisations add up. I started at 3300 sloc in
resources/scripts and me target is 2k (2000) sloc.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-20 17:47:02 +01:00
Leah Rowe
c83d1a8dc4 unify grub scripts under one directory
new commands are thus,

build grub payloads:
./build grub payload
(formerly ./build payload grub)

build grub utils:
./build grub utils
(formerly ./build module grub)

The scripts is build/module/ will mostly be
deleted. I say mostly, because some of them
are being moved instead.

The deleted ones will be ones that basically
just run "make" in the target directory. They
will be unified, in a follow-up patch.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-20 16:40:11 +01:00
Leah Rowe
e076d8934b unify update/modify coreboot/u-boot/seabios script
./update seabios configs? gone
.modify coreboot configs? gone

it's now all 1 script, called e.g.

./modify defconfig options -u coreboot <-- runs make oldconfig
./modify defconfig options -m seabios <-- runs make menuconfig
./modify defconfig options -u u-boot gru_bob <-- oldconfig, and only gru_bob
./modify defconfig options -u coreboot x60 x200_8mb

etc. you get the idea. same behaviour as before with all
the separate scripts, but now its one unified script.

184 sloc reduction in resources/scripts/

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-20 11:03:56 +01:00
Leah Rowe
e5b898f6cb consolidate u-boot/seabios/coreboot build scripts
See file:
resources/scripts/build/defconfig/for
It is based on:
resources/scripts/build/payload/u-boot

The u-boot payload script has been deleted, as has the
seabios payload script; the build/boot/roms logic has
been heavily simplified too, by removing the logic for
building of elf files based on defconfig.

SeaBIOS, U-Boot and coreboot all use defconfig-type
infrastructure for their build systems, and they are
fundamentally the *same* in how to compile each codebase,
at least in an lbmk context, regardless of actual (and
very huge) differences in these codebases.

Several hundred sources-lines of code have been eliminated
by this change, drastically simplifying everything; U-Boot
payload compiling also now errors out when a single build
fails, instead of continuing. Also: build/boot/roms no longer
re-compiles a coreboot target that was already compiled,
which is the same behaviour observed for payloads.

(this means you must now manually delete a target, when you
wish to re-build it; the build/boot/roms logic now more or
less just runs cbfstool; blobutil is handled from
build/defconfig/for)

ALSO: Since crossgcc is now handled by build/defconfig/for, not
build/boot/roms, standalone compiling of u-boot is now possible.
This has been tested. You compile it like so:
./build defconfig for u-boot
or specific trees, e.g.
./build defconfig for u-boot default

One other consequence of this patch is that re-building the same
ROM image is now much faster, because the same builds are re-used
unless deleted. This could be useful when testing grub.cfg changes,
for example, if that's all you change. With things like ccache used
(not yet used robustly in lbmk), this could speed things up more,
depending on the codebase.

This patch demonstrates the raw power of lbmk; it is a very
simple and highly efficient build system, and now much more so!

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-19 23:18:32 +01:00
Leah Rowe
63b0e99f6c don't call blobutil directly from lbmk
it's bloat, and was only there for backwards compatibility
with the old commands, but the new commands are e.g.

./update blobs inject

instead of:

./blobutil inject

this results in a slight code size reduction in lbmk

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-17 11:56:17 +01:00
Leah Rowe
0848622799 remove download scripts, consolidate into script
most of them were just calling the gitclone script,
so remove them.

the grub script was treating gnulib as a dependency.
i've now added the ability to grab 1 dependency, in
the gitclone script (it should be expanded later to
support multiple dependencies)

the gitclone script has been renamed to "fetch".
the "fetch_trees" script does more or less the same
thing, but calls "fetch" and handles multiple revisions
if a project needs that

this is more efficient, and slightly reduces the code
size of lbmk!

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-17 11:50:06 +01:00
Leah Rowe
8459e33bbc improve user feedback in blobutil
make it output messages that tell the user important
information. it's only subtle but it makes a difference
to some people, who need confirmation.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-17 00:43:34 +01:00
Leah Rowe
59dba6cfcd merge coreboot/u-boot download logic to one script
they are fundamentally the same, in an lbmk context.

they are downloaded in the same way, and compiled in
the same way!

(Kconfig infrastructure, board-specific code, the way
submodules are used in git, etc)

~200 sloc reduction in resources/scripts

the audit begins

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-16 22:40:34 +01:00
Leah Rowe
adeb065c5e fix permissions on arch dependencies script
it wasn't +x

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-16 17:29:09 +01:00
Leah Rowe
6075fed849 NEW BOARD: HP EliteBook 8470p (Intel GPU)
Intel GPU!

The AMD ones will be tested, but assume Intel-only for now.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-14 09:42:06 +01:00
Leah Rowe
f9afeb6feb NEW BOARD: Dell Precision T1650
Very nice ivybridge board that supports ECC RAM.
NOTE: I couldn't get onboard graphics working yet, but
this was confirmed working with a graphics card (in my
case nvidia quadra k420) booted in text mode on the SeaBIOS
payload. The GRUB payload also works, when loaded from SeaBIOS.
Therefore, this is a SeaBIOS-only board (as far as first payload
is concerned), but you can pick GRUB from the menu.

You could make it "GRUB-only" in practise by setting SeaBIOS
boot order to only load GRUB, and disable the SeaBIOS menu.
We refer to this as "SeaGRUB".

I've made lbmk use biosutilities and uefiextract, to
get at the SMSC SCH5545 Environmental Control (EC) firmware.
This firmware is needed for fan control. This is automatically
downloaded and extracted, from Dell UEFI firmware updates.

As with other blobs such as Intel ME, this firmware is then
scrubbed by the release build scripts. The blobutil "inject"
script can be used to re-insert it.

Of note: there is no fixed offset, but no other blobs to
be inserted in CBFS either, so the offset when re-inserting
on release ROMs should still be the same, and thus the ROM
checksums should match, when running blobutil inject.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-14 09:37:07 +01:00
Leah Rowe
f8f77cb288 NEW BOARD: HP EliteBook 2170p
Another ivybridge platform, added in coreboot recently.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-09 22:55:29 +01:00
Leah Rowe
22ee7f745d blobs/download: save ME file to correct location
blobdir is incorrect, and it means that the directory
will appear under blobs/, in this case. this was an
oversight on my part.

this behaviour did not break anything in practise, but
this patch makes the behaviour more consistent with rules.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-05 21:24:28 +01:00
Leah Rowe
cdd83ab1ce blobs/download: try backup if bad hash on main
At present, the logic only tries backup URLs when an
actual download fails (bad internet connection or the
server is down).

If the main download succeeds, but it has a bad checksum,
the backup download is not attempted.

Since wrongly hashed files are to be assumed useless, we
may aswell delete and try the next file. This will guard
against the possibility of a vendor changing their file,
without changing the file name (non-versioned files, for
example, may be subject to such changes).

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-05 21:13:34 +01:00
Leah Rowe
f18b1859db blobs/download: support more formats on ME extract
ME extraction didn't support unar (RAR format), for regular
extraction, after downloading a vendor file.

For bruteforce ME extraction, after extracting a vendor
archive, unar(RAR) and inno(innoextract) was not supported.

This patch fixes both issues. It should be noted that as of
now, the unar method has only been tested with certain HP
vendor updates, and it's currently not used on any of those.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-05 20:53:49 +01:00
Leah Rowe
f0efaf7913 add unar to dependencies scripts
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-08-04 05:23:49 +01:00
Leah Rowe
e8ba0f8781 blobs/download: declare full user agent
I messed up the string, when I first did this.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-29 13:46:44 +01:00
Leah Rowe
4875eef116 blobs/download: properly handle backup/main url
Immediately after the last revision, which was a hacky
workaround to the problem, I realised the actual problem,
and the real solution:

In the switch block, check *backup* first. Then it breaks,
continuing on the iteration.

If it's variable for a main URL, it'll reliably go to the
next check in the block, whereas if it's backup, it'll
default to the first one in each case.

This bug has been annoying the sh*t out of me for ages,
and I've finally nailed it.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-29 08:27:20 +01:00
Leah Rowe
cca93ca3f3 blobs/download: don't download backup on main
The script was actually downloading the backup, at
all times, for each given URL. The way we handle
this is quite buggy.

This patch is a workaround, a dirty hack in fact, but
it will do for now, because our backup URLs are always
wayback links where the original URL (matching the
correct main URL in the sources file) is always present,
in the URL.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-29 08:21:09 +01:00
Leah Rowe
3aeefaa75d blobs/download: set common user agent string
Make it look like a normal web browser, downloading files.

Some HTTP servers might block Wget unless this is done.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-29 08:09:57 +01:00
Leah Rowe
5e83d2bc8f blobs/download: simplify for loop
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-29 07:28:36 +01:00
Leah Rowe
8f1d3ad19f scripts: fix indentation in switch/case blocks
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-29 07:24:18 +01:00
Leah Rowe
748e097228 blobutil/ec: abort if kbc1126 ec extraction fails
This was an oversight on my part.

Should extraction fail, we must abort. This is in preparation
for addition of future mainboards, where further tweaking is
required in blobutil. This error check will warn us about it.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-27 08:13:28 +01:00
Leah Rowe
44bd077aff Revert "build/boot/roms mkUBootRoms: initialise variables"
This reverts commit 7c90a4077f.

causes another build bug. i'm helping someone with the bug now,
i think the workaround for now would be to just use bash, on
this script. until i can figure something better out.
2023-07-17 08:59:48 +01:00
Leah Rowe
7c90a4077f build/boot/roms mkUBootRoms: initialise variables
they were outside the scope, outside of the if statements.

in some shells, this is ok.

we use "sh" so the user could have any shell.

be a bit nicer to the more asininely technically
correct sh implementations out there

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-17 08:20:02 +01:00
Leah Rowe
af084014f0 coreboot: re-add asus kgpe-d16/kcma-d8/kfsn4-dre
Libreboot 20220710 was the last release to support these
boards. I plan to eventually port code differences between
D8/D16 to Dasharo, for KCMA-D8 support in Dasharo, to then
use in Libreboot for both KCMA-D8 and KGPE-D16, but I have
no plans to update the KFSN4-DRE code, at least for now.

Libreboot 20220710 used coreboot 4.11, whereas this patch
makes use of coreboot 4.11_branch; the crossgcc toolchains
no longer compile on modern distros, so I spent time patching
those (tested in Debian Sid, will also work on Arch Linux and
so on).

The acpica downloads now fail, in 4.11_branch, because Intel
made some changes upstream for these tarball downloads. Newer
coreboot works around this by grabbing tarballs from github,
itself a non-ideal solution, but I digress; this patch changes
coreboot crossgcc (in 4.11_branch) to download the acpica
tarball from libreboot rsync, where I've added it.

This patch also re-introduces the PIKE2008 fix, where empty
option ROMs for these are inserted into CBFS. This prevents
SeaBIOS from loading the real option ROMs, which would cause
SeaBIOS to hang. This means that SAS drives are not supported
in SeaBIOS, for these boards in Libreboot.

I previously said, in the Censored Libreboot c20230710
announcement, that I would *only* merge D8/D16 when I've
added Dasharo support to Libreboot, and use that, but the
work to make coreboot 4.11_branch compile is something I'm
quite proud of and I see no reason to exclude from lbmk
master branch.

Honestly, there's not much different than 4.11, code-wise.
I *probably* won't use 4.11_branch for the next Libreboot
release, on D8/D16. By then, I might have Dasharo integrated
in lbmk instead. We shall see.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-16 03:18:58 +01:00
Leah Rowe
f34e07ae27 build/boot/roms: fix coreboot-version in releases
This error was observed, in the coreboot build system:

In file included from src/lib/version.c:4:
build/build.h:10:32: error: 'libreboot' undeclared here (not in a function)
   10 | #define COREBOOT_MAJOR_VERSION libreboot-20230625
      |                                ^~~~~~~~~
src/lib/version.c:35:46: note: in expansion of macro 'COREBOOT_MAJOR_VERSION'
   35 | const unsigned int coreboot_major_revision = COREBOOT_MAJOR_VERSION;
      |                                              ^~~~~~~~~~~~~~~~~~~~~~

This happened on the 20230625 *release archive*, when a user tried to
build for W541 MRC on an Arch Linux container.

This change fixes the error. I never got the error on my end when
build testing the release archives, but this will prevent the error.
Fix it by only inserting libreboot version string YYYYMMDD representing
the Libreboot version. (libreboot uses ISO dates as version numbers)

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-07-08 00:27:53 +01:00
Leah Rowe
4efa545a46 build/release/src: clean spkmodem/e6400 utils
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-25 13:33:20 +01:00
Leah Rowe
2e85a63a0a build/roms_helper: reset d521fca7, backport fixes
I keep getting random linker issues when running:

./build boot roms all

I think the issue lies somewhere in here, from when
I did that massive audit. So I'm undoing the audit
which mostly re-factored the code style here.

These changes are being backported:
f338697b build/boot/roms: Support removing microcode
941fbcb run coreboot utils from own directory
f256ce98 build/boot/roms: say board name on stderr

I removed this change:
6d6bd5ee (the script now uses dedicated utils directory)

additionally:

cbutils is built much earlier on in the script, first
thing after initialising variables

the other changes not backported are all code style
changes, and I believe these are responsible.

if no other fixes occur to this fire before the next
libreboot release, then my hunch was right.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-25 12:21:48 +01:00
Leah Rowe
f256ce9870 build/boot/roms: say board name on stderr
That way, I can more easily debug build issues with
specific boards, e.g.

./build boot roms all 2>lbmk.err.log

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-25 03:06:13 +01:00
Leah Rowe
1deb5843eb build/roms: distclean coreboot before each build
don't clean it, distclean it

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-24 23:28:41 +01:00