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(a)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
--- a/README.CSM
+++ b/README.CSM
@@ -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
--
1.8.3.1