#
# toykernel Makefile
# created by halite on 2002.08.12
#
# $Id: Makefile,v 1.1.1.1 2002/09/19 00:37:09 halite Exp $
#

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

HPATH = $(TOPDIR)/include
FINDHPATH = $(HPATH)/arch $(HPATH)/toykernel

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
NM = $(CROSS_COMPILE)nm

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=586
CONFIG_M586=y

include arch/$(ARCH)/Makefile

export TOPDIR HPATH FINDHPATH HOSTCC HOSTCFLAGS CC CPP LD AS OBJCOPY NM 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
	$(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map

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: dep clean srcbackup backup

dep-files: scripts/mkdep archdep
	scripts/mkdep -- `find $(INCLUDE) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
	$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"

dep: dep-files

clean: archclean
	find . -name "*.[oas]" -exec rm -f {} \;
	find . -name ".depend" -exec rm -f {} \;
	find . -name ".hdepend" -exec rm -f {} \;
	rm -f System.map
	rm -f scripts/mkdep
	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
