#
# toykernel Makefile
# created by halite on 2002.08.12
#
# $Id: Makefile,v 1.2 2002/09/09 05:44:23 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 mm lib
CORE_FILES = kernel/kernel.o mm/mm.o
LIBS = lib/lib.a

#
# configurations
#
CONFIG_ARCH=386
CONFIG_M386=y

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: config symlinks toykernelsubdirs
	$(LD) $(LINKFLAGS) $(HEAD) \
		--start-group \
		$(CORE_FILES) \
		$(LIBS) \
		--end-group \
		-o toykernel
	#$(OBJCOPY) tmp_toykernel $@
	#@rm -f tmp_toykernel

config: include/toykernel/autoconf.h
	./config.sh $(CONFIG_ARCH)

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 "*.[oas]" -exec rm -f {} \;
	rm -f toykernel

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

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

include Rules.make
