# tag: Makefile for AMD64 architecture dependent files
#
# Copyright (C) 2003 Stefan Reinauer
#
# See the file "COPYING" for further information about
# the copyright and warranty status of this work.
#

VPATH      := $(TOPDIR)/include:$(BUILDDIR):$(TOPDIR)/arch/$(ARCH)/include

BINARIES   := openbios.multiboot openbios openbios.full
DICTIONARY := openfirmware.dict


all: core link $(BINARIES)

LDFLAGS_OPENBIOS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000

OBJS_GENERIC   =  primitives.o stack.o dict.o lib.o openbios.o console.o 
OBJS_MULTIBOOT =  mboot.o multiboot.o
OBJS_PLAIN     =  boot.o plainboot.o
OBJS_BUILTIN   =  boot.o builtin.o

INCLUDES := -Iinclude -I$(TOPDIR)/include -I$(BUILDDIR)

include $(TOPDIR)/Rules.make

core:
	echo -e "\nCompiling $(ARCH) architecture specific binaries"

link: $(OBJS_MULTIBOOT) $(OBJS_PLAIN) $(OBJS_BUILTIN) $(OBJS_GENERIC)
	cd $(BUILDDIR) && if [ ! -r openbios.multiboot -o  ! -r openbios \
		-o ! -r openbios.full ]; then echo -e "\nLinking:"; fi

openbios.multiboot: $(OBJS_MULTIBOOT) $(OBJS_GENERIC)
	echo -ne "  native multiboot kernel for grub... "
	cd $(BUILDDIR) && $(CC) $(LDFLAGS_OPENBIOS) -o $@.nostrip $^ -lgcc
	echo -e "\tok"
	cd $(BUILDDIR) && objcopy -O binary -R .note -R .comment $@.nostrip $@
  
openbios: $(OBJS_PLAIN) $(OBJS_GENERIC)
	echo -n "  native kernel (for LinuxBIOS)... "
	cd $(BUILDDIR) && $(CC)  $(LDFLAGS_OPENBIOS) -o $@.nostrip $^ -lgcc
	echo -e "\tok"
	cd $(BUILDDIR) && objcopy -R .note -R .comment $@.nostrip $@ && strip -s $@


dictionary.h: $(DICTIONARY)
	echo -n "  generating linkable dictionary..."
	cd $(BUILDDIR) && ./bin2hex < $^ > $@
	echo -e "\tok"

openbios.full: $(OBJS_BUILTIN) $(OBJS_GENERIC)
	echo -n "  native kernel with dictionary... "
	cd $(BUILDDIR) && $(CC) $(LDFLAGS_OPENBIOS) -o $@.nostrip $(OBJS_BUILTIN) $(OBJS_GENERIC) -lgcc
	echo -e "\tok"
	cd $(BUILDDIR) && objcopy -R .note -R .comment $@.nostrip $@ && strip -s $@


# dependencies. these are so small that we write them manually.

multiboot.o: multiboot.c types.h config.h multiboot.h
boot.o: boot.S multiboot.h
mboot.o: mboot.S multiboot.h
console.o: console.c types.h config.h
plainboot.o: types.h config.h
builtin.o: dictionary.h
