[SeaBIOS] [PATCH] Build different final files for QEMU, coreboot, and CSM.

Kevin O'Connor kevin at koconnor.net
Tue Oct 15 03:56:47 CEST 2013

Build out/bios.bin on QEMU, out/bios.bin.elf on coreboot, and
out/Csm16.bin for CSM.  This reduces the chance that one accidentally
builds for an incorrect target.

Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
 Makefile   | 20 +++++++++++++++++---
 README     |  6 ++++--
 README.CSM | 11 ++++++-----
 3 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index 01bd8b3..b1b55a3 100644
--- a/Makefile
+++ b/Makefile
@@ -82,7 +82,10 @@ endif
 # Default targets
 -include $(KCONFIG_CONFIG)
-target-y = $(OUT)bios.bin
+target-y :=
+target-$(CONFIG_QEMU) += $(OUT)bios.bin
+target-$(CONFIG_CSM) += $(OUT)Csm16.bin
+target-$(CONFIG_COREBOOT) += $(OUT)bios.bin.elf
 target-$(CONFIG_BUILD_VGABIOS) += $(OUT)vgabios.bin
 all: $(target-y)
@@ -174,12 +177,23 @@ $(OUT)rom.o: $(OUT)rom16.strip.o $(OUT)rom32seg.strip.o $(OUT)code32flat.o $(OUT
 	@echo "  Linking $@"
 	$(Q)$(LD) -T $(OUT)romlayout32flat.lds $(OUT)rom16.strip.o $(OUT)rom32seg.strip.o $(OUT)code32flat.o -o $@
-$(OUT)bios.bin.elf $(OUT)bios.bin: $(OUT)rom.o scripts/checkrom.py
+$(OUT)bios.bin.prep: $(OUT)rom.o scripts/checkrom.py
 	@echo "  Prepping $@"
 	$(Q)$(OBJDUMP) -thr $< > $<.objdump
 	$(Q)$(OBJCOPY) -O binary $< $(OUT)bios.bin.raw
 	$(Q)$(PYTHON) ./scripts/checkrom.py $<.objdump $(CONFIG_ROM_SIZE) \
-		$(OUT)bios.bin.raw $(OUT)bios.bin
+		$(OUT)bios.bin.raw $(OUT)bios.bin.prep
+$(OUT)bios.bin: $(OUT)bios.bin.prep
+	@echo "  Creating $@"
+	$(Q)cp $< $@
+$(OUT)Csm16.bin: $(OUT)bios.bin.prep
+	@echo "  Creating $@"
+	$(Q)cp $< $@
+$(OUT)bios.bin.elf: $(OUT)rom.o $(OUT)bios.bin.prep
+	@echo "  Creating $@"
 	$(Q)$(STRIP) -R .comment $< -o $(OUT)bios.bin.elf
diff --git a/README b/README
index f752451..6844e52 100644
--- a/README
+++ b/README
@@ -1,8 +1,10 @@
 This code implements an X86 legacy bios.  It is intended to be
 compiled using standard gnu tools (eg, gas and gcc).
-To build, one should be able to run "make" in the main directory.  The
-resulting file "out/bios.bin" contains the processed bios image.
+To build for QEMU, one should be able to run "make" in the main
+directory.  The resulting file "out/bios.bin" contains the processed
+bios image.  To build for coreboot, please see the coreboot wiki.  To
+build for CSM, please see README.CSM.
 Testing of images:
diff --git a/README.CSM b/README.CSM
index ea71846..b904e65 100644
@@ -9,11 +9,12 @@ Windows 2008r2 is known to use INT 10h BIOS calls even when booted via
 EFI, and the presence of a CSM makes this work as expected too.
 Having built SeaBIOS with CONFIG_CSM, you should be able to drop the
-result into your OVMF build tree at OvmfPkg/Csm/Csm16/Csm16.bin and
-then build OVMF with 'build -D CSM_ENABLE'. The SeaBIOS binary will be
-included as a discrete file within the 'Flash Volume' which is
-created, and there are tools which will extract it and allow it to be
-replaced; satisfying the requirements of the LGPL licence.
+result (out/Csm16.bin) into your OVMF build tree at
+OvmfPkg/Csm/Csm16/Csm16.bin and then build OVMF with 'build -D
+CSM_ENABLE'. The SeaBIOS binary will be included as a discrete file
+within the 'Flash Volume' which is created, and there are tools which
+will extract it and allow it to be replaced; satisfying the
+requirements of the LGPL licence.
 A patch to OVMF is required, to prevent it from marking the region from
 0xC0000-0xFFFFF as read-only before invoking our Legacy16Boot method. See

More information about the SeaBIOS mailing list