
SUBDIRS :=
SUBDIRS += rombios
SUBDIRS += vgabios
SUBDIRS += etherboot
SUBDIRS += hvmloader

CPPFLAGS :=
CPPFLAGS += -D__XEN_TOOLS__
CPPFLAGS += -I$(abspath xen-include)
export CPPFLAGS

CFLAGS :=
CFLAGS += -g
CFLAGS += -O2 -fomit-frame-pointer
CFLAGS += -m32 -march=i686
CFLAGS += -fno-strict-aliasing
CFLAGS += -std=gnu99
CFLAGS += -Wall -Werror
CFLAGS += -Wstrict-prototypes -Wno-unused-value -Wdeclaration-after-statement
CFLAGS += -mno-tls-direct-seg-refs
CFLAGS += $(call cc-option,$(CC),-nopie,)
CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,)
CFLAGS += $(call cc-option,$(CC),-fno-stack-protector-all,)
CFLAGS += -fno-builtin -msoft-float
CFLAGS += $(shell getconf LFS_CFLAGS || \
		echo -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
export CFLAGS

LDFLAGS += $(shell getconf LFS_LDFLAGS)
export LDFLAGS

OBJCOPY = objcopy
export OBJCOPY

.PHONY: all
all: check-bcc xen-include/.exists hvmloader

.PHONY: clean
clean: $(SUBDIRS:%=%-clean)
	rm -rf xen-include

.PHONY: $(SUBDIRS)
hvmloader: $(filter-out hvmloader,$(SUBDIRS))
$(SUBDIRS):
	$(MAKE) -C $@

$(SUBDIRS:%=%-clean):
	$(MAKE) -C $(@:%-clean=%) clean

check-bcc:
	@[ $$((`( bcc -v 2>&1 | grep version || echo 0.0.0 ) | cut -d' ' -f 3 | awk -F. '{ printf "0x%02x%02x%02x", $$1, $$2, $$3}'`)) -ge $$((0x00100e)) ] || \
	( echo "***********************************************************"; \
	  echo "Require dev86 package version >= 0.16.14 to build firmware!"; \
	  echo "(visit http://www.cix.co.uk/~mayday for more information)"; \
	  echo "***********************************************************"; \
	  false )

.PHONY: dist
dist: all
	mkdir -p $(DISTDIR)
	cp -f hvmloader/hvmloader $(DISTDIR)

xen-include/.exists:
	mkdir -p xen-include
	ln -s $(abspath ../hxen/include/public) xen-include/xen
	touch $@

# cc-option: Check if compiler supports first option, else fall back to second.
# Usage: cflags-y += $(call cc-option,$(CC),-march=winchip-c6,-march=i586)
cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc \
              /dev/null 2>&1`"; then echo "$(2)"; else echo "$(3)"; fi ;)
