After some quiet time, I picked up a project I started a while ago: Hacking coreboot and libpayload on FreeBSD.
On FreeBSD, building coreboot requires a toolchain built from the GNU sources. If the stock toolchain is used, the build process dies with this error:
CC build/stage0.init /usr/home/phs/sandbox/coreboot-v3/build/arch/x86/stage0_i586.o(.text+0xf): In function `_stage0': : relocation truncated to fit: R_386_16 gdtptr gmake: *** [/usr/home/phs/sandbox/coreboot-v3/build/stage0.init] Error 1
$ export CROSS=/opt/bin/i386-unknown-linux-gnu-
Note that the above requires that this patch is applied. After that, build the bios.bin binary using GNU make.
$ gmake menuconfig $ gmake
Compiling libpayload is trickier than building coreboot as the build files assume that the world is Linux. First, sh is not always bash. Second, the header and library search paths are screwed up as they don’t include /usr/local subdirectores. Third, the gettext library is installed as libgettextlib.so on FreeBSD and must be linked against the program explicitly. And finally, the install(1) tool has different parameters than on Linux. Oh, and there are no stdarg.h and stddef.h headers.
I’ve hacked around those issues, the Mercurial repository is available at https://phs.subgra.de/hg/libpayload.