serial.c clock.c pic.c cdrom.c ps2port.c smpdetect.c resume.c \
pnpbios.c pirtable.c
SRC16=$(SRCBOTH) system.c disk.c apm.c pcibios.c vgahooks.c font.c
-SRC32=$(SRCBOTH) post.c shadow.c post_menu.c memmap.c coreboot.c boot.c \
+SRC32=$(SRCBOTH) post.c shadow.c memmap.c coreboot.c boot.c \
acpi.c smm.c mptable.c smbios.c pciinit.c optionroms.c mtrr.c
cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc \
# Default compiler flags
COMMONCFLAGS = -Wall -Os -MD -m32 -march=i386 -mregparm=3 \
- -mpreferred-stack-boundary=2 -mrtd \
+ -mpreferred-stack-boundary=2 -mrtd -freg-struct-return \
-ffreestanding -fwhole-program -fomit-frame-pointer \
-fno-delete-null-pointer-checks -Wno-strict-aliasing
COMMONCFLAGS += $(call cc-option,$(CC),-nopie,)
################ Build rules
+TESTGCC:=$(shell CC=$(CC) tools/test-gcc.sh)
+ifeq "$(TESTGCC)" "-1"
+$(error "Please upgrade GCC")
+endif
+
+ifndef AVOIDCOMBINE
+AVOIDCOMBINE=$(TESTGCC)
+endif
+
# Do a whole file compile - two methods are supported. The first
# involves including all the content textually via #include
# directives. The second method uses gcc's "-combine" option.
-ifdef AVOIDCOMBINE
+ifeq "$(AVOIDCOMBINE)" "1"
define whole-compile
@echo " Compiling whole program $3"
$(Q)printf '$(foreach i,$2,#include "../$i"\n)' > $3.tmp.c
$(OUT)rom32.o: $(OUT)ccode32.o $(OUT)rombios32.lds
@echo " Linking (no relocs) $@"
- $(Q)$(LD) -r -d -T $(OUT)rombios32.lds $< -o $@
+ $(Q)$(LD) -r -T $(OUT)rombios32.lds $< -o $@
$(OUT)romlayout.lds: $(OUT)romlayout16.o
@echo " Building layout information $@"