TOP=..
CXXFLAGS=$(FLAGS)
CFLAGS=$(FLAGS)
FLAGS=-O -g -Wall $(PROF)
CPPFLAGS=-I. -I$(TOP)/lwp -I$(TOP)/kernel -I$(TOP)/genser #-DDEBUG 
CXXTYPEFLAGS = -O2 -fomit-frame-pointer $(CPPFLAGS)

all: libuserfs.a

LIBOBJ = userfs_types.o Filesystem.o Inode.o SimpleInode.o DirInode.o \
	DeferFilesys.o CommBase.o Comm.o DeferComm.o ThreadComm.o io.o

libuserfs.a: $(LIBOBJ) 
	rm -f libuserfs.a
	ar r libuserfs.a $(LIBOBJ)
	ranlib libuserfs.a

GENDIR=../genser
GENHDR=$(GENDIR)/genhdr
GENCODE=$(GENDIR)/gencode

.SUFFIXES: .ty

.ty.cc:	$(GENCODE)
	$(GENCODE) $(CPPFLAGS) -Csed $< > $@ || rm -f $@

.ty.h:	$(GENHDR)
	$(GENHDR) $(CPPFLAGS) -C $< > $@ || rm -f $@

TYPEFILE=$(TOP)/kernel/linux/userfs_types.ty

userfs_types.o: userfs_types.cc userfs_types.h

userfs_types.h: $(TYPEFILE) $(GENHDR)
	$(GENHDR) $(CPPFLAGS) -C $< > $@ || rm -f $@

#userfs_types.cc: $(TYPEFILE) $(GENCODE)
#	$(GENCODE) $(CPPFLAGS) -Csed $< > $@
	
# Generate only code we want
userfs_types.cc: $(TYPEFILE) $(GENCODE)
	rm -rf types
	mkdir types
	$(GENCODE) $(CPPFLAGS) -Csed -l types $<
	rm -f types/encode_*_s.cc types/decode_*_r.cc
	cat types/* | awk '			\
	/^#(include.*)|pragma implementation/	 	{		\
			if (!($$0 in seen)) {	\
				seen[$$0] = 1;	\
			} else next		\
		}				\
		{ print $$0; }' > $@
	rm -fr types

depend dep: userfs_types.h coder.h
	$(CPP) $(CPPFLAGS) -M *.cc *.c> .depend

coder.h:
	@-ln -s $(GENDIR)/coder.h .

$(GENHDR) $(GENCODE):	dummy
	$(MAKE) -C $(GENDIR) $(@F)

clean:
	rm -f *.[ao] *~ userfs_types.cc userfs_types.h

dummy:

#
# include a dependency file if one exists
#
ifeq (.depend,$(wildcard .depend))
include .depend
endif
