#
# toykernel Makefile
# created by halite on 2002.08.12
#
# $Id: Makefile,v 1.1.1.1 2002/08/28 02:53:20 halite Exp $
#

TOPDIR = $(shell pwd)
ARCH = i386
CROSS_COMPILE =

HOSTCC = gcc
HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
AS = $(CROSS_COMPILE)as
CPP = $(CC) -E
OBJCOPY = $(CROSS_COMPILE)objcopy

INCLUDE = $(TOPDIR)/include

CPPFLAGS = -D__KERNEL__ -I$(INCLUDE)
CFLAGS = -Wall -O2 -fomit-frame-pointer -Wstrict-prototypes -Wno-trigraphs \
          -fno-strict-aliasing -fno-common $(CPPFLAGS)
AFLAGS = -D__ASSEMBLY__ $(CPPFLAGS)

SUBDIRS = kernel lib
CORE_FILES = kernel/kernel.o
LIBS = lib/lib.a

include arch/$(ARCH)/Makefile

export TOPDIR HOSTCC HOSTCFLAGS CC CPP LD AS OBJCOPY CPPFLAGS CFLAGS AFLAGS

.S.s:
	$(CPP) $(AFLAGS) -traditional -o $*.s $<

.S.o:
	$(CC) $(AFLAGS) -traditional -c -o $*.o $<

toykernel: symlinks toykernelsubdirs
	$(LD) $(LINKFLAGS) $(HEAD) \
		--start-group \
		$(CORE_FILES) \
		$(LIBS) \
		--end-group \
		-o toykernel
	#$(OBJCOPY) tmp_toykernel $@
	#@rm -f tmp_toykernel

symlinks:
	rm -f include/arch
	(cd include; ln -sf $(ARCH) arch)

toykernelsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))

$(patsubst %, _dir_%, $(SUBDIRS)): dummy
	$(MAKE) -C $(patsubst _dir_%, %, $@)

.PHONY: clean srcbackup

clean: archclean
	find . -name "*.o" -exec rm -f {} \;
	find . -name "*.a" -exec rm -f {} \;
	find . -name "*.s" -exec rm -f {} \;
	rm -f toykernel

srcbackup: clean
	tar -C .. -cvjf ../toykernel-$(shell date +%Y%m%d).tar.bz2 toykernel --exclude=CVS

include Rules.make
