18
18
SUB_DEPTH = ../../../../..
19
include $(KBUILD_PATH)/subheader.kmk
24
VBOX_PATH_DEVICES_SRC ?= $(PATH_ROOT)/src/VBox/Devices
19
include $(KBUILD_PATH)/subheader.kmk
22
ifdef VBOX_WITH_OPEN_WATCOM
25
# VBoxPcBios - The PC BIOS.
27
MISCBINS += VBoxPcBios
28
VBoxPcBios_TEMPLATE = VBoxBios
31
VBOX_LANBOOT_SEG=0xE200 \
34
VBoxPcBios_LDFLAGS = \
35
output raw offset=0xF0000 \
37
clname DATA segaddr=0xF000 \
40
segment _TEXT segaddr=0xF000 offset=0x1600 \
41
segment BIOS32 segaddr=0xF000 offset=0xDA00 \
42
segment BIOSSEG segaddr=0xF000 offset=0xE000
43
VBoxPcBios_SOURCES = \
64
../../BiosCommonCode/support.asm \
67
$(VBoxPcBios32_1_TARGET) \
70
# For 32-bit C code in PC BIOS.
71
LIBRARIES += VBoxPcBios32
72
VBoxPcBios32_TEMPLATE = VBoxBios32Lib
73
VBoxPcBios32_SOURCES = \
77
# Updates the alternative source file.
79
update-pcbios-source +| $(PATH_SUB_CURRENT)/VBoxBiosAlternative.asm $(PATH_SUB_CURRENT)/VBoxBiosAlternative.md5sum: \
80
$$(VBoxPcBios_1_TARGET) \
81
$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
83
if1of ($(KBUILD_TYPE), release)
84
$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
86
--bios-map $(basename $<).map \
87
--bios-sym $(basename $<).sym \
89
--output $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.asm
90
$(QUIET)yasm -f bin -o $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.bin $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.asm
91
$(VBOX_VBOXCMP) $< $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.bin
92
$(CP) --changed -- $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.asm $(PATH_ROOT)/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
93
$(REDIRECT) -C $(dir $(VBoxPcBios_1_TARGET)) -- \
94
$(MD5SUM_EXT) -bo $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.md5sum $(notdir $(VBoxPcBios_1_TARGET))
95
$(CP) --changed -- $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.md5sum $(PATH_ROOT)/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
96
$(RM) -f -- $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.asm $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.bin $(VBoxPcBios_0_OUTDIR)/VBoxBiosAlternative.md5sum
98
$(QUIET)$(ECHO) "Fatal error: Can only update VBoxBiosAlternative.asm/md5sum with a release build."
102
endif # VBOX_WITH_OPEN_WATCOM
27
106
# The library containing the PC BIOS image.
29
108
LIBRARIES += PcBiosBin
30
109
PcBiosBin_TEMPLATE = VBOXR3
31
110
PcBiosBin_DEFS = IN_VBOXDD2
32
PcBiosBin_INCS = $(VBOX_PATH_DEVICES_SRC)
33
111
PcBiosBin_SOURCES = $(PcBiosBin_0_OUTDIR)/PcBiosBin.c
34
PcBiosBin_DEPS = $(PcBiosBin_0_OUTDIR)/pcbios-syms.h
36
$(PcBiosBin_0_OUTDIR)/_rombios_.c \
37
$(PcBiosBin_0_OUTDIR)/rombios0.s \
38
$(PcBiosBin_0_OUTDIR)/rombios1.s \
39
$(PcBiosBin_0_OUTDIR)/pcbios.lst \
40
$(PcBiosBin_0_OUTDIR)/pcbios.tmp \
41
$(PcBiosBin_0_OUTDIR)/pcbios.bin \
42
$(PcBiosBin_0_OUTDIR)/PcBiosBin.c \
43
$(PcBiosBin_0_OUTDIR)/pcbios-syms.h
112
PcBiosBin_CLEAN = $(PcBiosBin_0_OUTDIR)/PcBiosBin.c
46
# Rule for making the bios.
48
$$(PcBiosBin_0_OUTDIR)/PcBiosBin.c: $$(PcBiosBin_0_OUTDIR)/pcbios.bin $(VBOX_BIN2C)
114
ifdef VBOX_WITH_OPEN_WATCOM
115
$$(PcBiosBin_0_OUTDIR)/PcBiosBin.c: $$(VBoxPcBios_1_TARGET) $(VBOX_BIN2C) | $$(dir $$@)
49
116
$(call MSG_TOOL,bin2c,PcBiosBin,$<,$@)
50
117
$(QUIET)$(VBOX_BIN2C) -min 64 -max 256 -mask 0xffff -ascii -export PcBiosBinary $< $@
53
# Six steps to pcbios.bin and pcbios-syms.h
56
# 1. precompile rombios.c
57
$$(PcBiosBin_0_OUTDIR)/_rombios_.c: $(PATH_SUB_CURRENT)/rombios.c $(PATH_SUB_CURRENT)/logo.c \
58
$(PATH_SUB_CURRENT)/apmbios.S $(if $(VBOX_WITH_SCSI),$(PATH_SUB_CURRENT)/scsi.c) \
59
$(PATH_SUB_CURRENT)/../DevPcBios.h $(PATH_ROOT)/include/VBox/bioslogo.h \
60
$(if $(VBOX_WITH_BIOS_AHCI),$(PATH_SUB_CURRENT)/ahci.c) \
61
$(VBOX_VERSION_STAMP) | $$(dir $$@)
62
$(call MSG_TOOL,cpp,PcBiosBin,$<,$@)
63
$(QUIET)$(TOOL_$(VBOX_GCC_TOOL)_CC) -E \
64
-I$(PcBiosBin_0_OUTDIR) -I$(VBOX_PATH_DEVICES_SRC)/PC -I$(PATH_ROOT)/include -I$(PATH_OUT) \
65
-DBX_SMP_PROCESSORS=1 -DVBOX -DVBOX_PC_BIOS $(addprefix -D,$(DEFS) $(DEFS.$(KBUILD_TYPE))) \
66
$(if $(VBOX_WITH_SCSI),-DVBOX_WITH_SCSI) $(if $(VBOX_WITH_BIOS_AHCI),-DVBOX_WITH_BIOS_AHCI) \
69
# 2. compile to intermediate asm file.
70
# BCC tempfile clashes, order the BCC jobs to make sure they don't interfere with one another.
71
$$(PcBiosBin_0_OUTDIR)/rombios0.s: $$(PcBiosBin_0_OUTDIR)/_rombios_.c | $(VBOX_BCC_JOBS)
72
$(call MSG_COMPILE,PcBiosBin,$<,$@,C)
73
$(QUIET)$(VBOX_BCC) -o $@ -C-c -D__i86__ -0 -S $<
74
VBOX_BCC_JOBS += $(PcBiosBin_0_OUTDIR)/rombios0.s
76
# 3. post process intermediate asm file.
77
$$(PcBiosBin_0_OUTDIR)/rombios1.s: $$(PcBiosBin_0_OUTDIR)/rombios0.s
78
$(call MSG_TOOL,Adjusting BCC Assembly,PcBiosBin,$<,$@)
79
$(QUIET)$(SED) -e 's/^\.text//' -e 's/^\.data//' --output $@ $^
81
# 4. assemble the intermediate asm file. (also creates a listing rombios.lst)
82
$$(PcBiosBin_0_OUTDIR)/pcbios.tmp + $$(PcBiosBin_0_OUTDIR)/pcbios.lst: $$(PcBiosBin_0_OUTDIR)/rombios1.s
83
$(call MSG_COMPILE,PcBiosBin,$<,$@,AS)
84
$(QUIET)$(REDIRECT) -ri $^ -- $(VBOX_AS86) -b $(PcBiosBin_0_OUTDIR)/pcbios.tmp -u- -w- -g -0 -j -O -l $(PcBiosBin_0_OUTDIR)/pcbios.lst
86
# 5. calculate checksums for the final BIOS image.
87
$$(PcBiosBin_0_OUTDIR)/pcbios.bin: $$(PcBiosBin_0_OUTDIR)/pcbios.tmp $$(VBOX_BIOSSUMS)
88
$(call MSG_TOOL,biossums,PcBiosBin,$<,$@)
89
$(QUIET)$(VBOX_BIOSSUMS) $< $@
91
# 6. create the symbol table.
92
$$(PcBiosBin_0_OUTDIR)/pcbios-syms.h: $$(PcBiosBin_0_OUTDIR)/pcbios.lst $(MAKEFILE_CURRENT)
93
$(call MSG_GENERATE,PcBiosBin,$<,$@)
95
-e '/^[0-9][0-9][0-9][0-9][0-9] 000[0-9A-F]* [[:space:]]*[a-zA-Z0-9_]*:/!d' \
96
-e 's/^[0-9][0-9][0-9][0-9][0-9] \(000[0-9A-F]*\) [[:space:]]*\([a-zA-Z0-9_]*\):.*$$/ DEFSYM(0x\1, "\2"),/' \
98
$(PcBiosBin_0_OUTDIR)/pcbios.lst
101
include $(KBUILD_PATH)/subfooter.kmk
119
PcBiosBin_CLEAN += $(PcBiosBin_0_OUTDIR)/VBoxPcBios.rom
121
$$(PcBiosBin_0_OUTDIR)/PcBiosBin.c + $$(PcBiosBin_0_OUTDIR)/VBoxPcBios.rom: \
122
$(PATH_SUB_CURRENT)/VBoxBiosAlternative.asm \
123
$(PATH_SUB_CURRENT)/VBoxBiosAlternative.md5sum \
124
$(VBOX_BIN2C) | $$(dir $$@)
125
$(call MSG_TOOL,bin2c,PcBiosBin,$<,$@)
126
$(QUIET)yasm -f bin -o $(PcBiosBin_0_OUTDIR)/VBoxPcBios.rom $<
127
$(QUIET)$(REDIRECT) -C $(PcBiosBin_0_OUTDIR) -- \
128
$(MD5SUM_EXT) -c $(basename $<).md5sum
129
$(QUIET)$(VBOX_BIN2C) -min 64 -max 256 -mask 0xffff -ascii -export PcBiosBinary $(PcBiosBin_0_OUTDIR)/VBoxPcBios.rom $@
130
$(QUIET)$(RM) -f -- $$(PcBiosBin_0_OUTDIR)/VBoxPcBios.rom
133
include $(FILE_KBUILD_SUB_FOOTER)