##
##	Awe2/Src/GNUmakefile
##
.SUFFIXES:
vpath

.SUFFIXES: .o .s .E .cc .c

##
##	needed, but over-written by GNUmakefile.host
##

LIB	=bogus

VERSION	=OldSrc
#VERSION	=NewSrc


##
## Not in g++, it doesn't..
##
## NEW_DELETE_WORKS=YES
##

vpath   %.h  ./:../$(VERSION):../Src 

vpath	%.cc ./:../$(VERSION):../Src
vpath	%.c ./:../$(VERSION):../Src

vpath	%.s  ../$(VERSION):../Src

include GNUmakefile.host

include ../Src/GNUmakefile.compilers

INCL		= -I. -I../Src $(I)
C++FLAGS	:= ${INCL} ${C++FLAGS}
CFLAGS		:= ${INCL} ${CFLAGS}
INSTALL		= install -m 444 -c

default: intmp
	@echo done

which:
	which $(C++)

cwd:
	echo $$cwd

include ../Src/GNUmakefile.files

OBJ	=$(subst .cc,.o,$(C++-SRC)) $(subst .c,.o,$(C-SRC))
DEPS	=$(subst .cc,.dep,$(C++-SRC)) $(subst .c,.dep,$(C-SRC))

OTHER	= GNUmakefile GNUmakefile.sun GNUmakefile.encore
ALLSRC	= $(ASM) $(SRC) $(HDR) $(OTHER)
ALLOBJ	= $(OBJ) $(ASMOBJ)

AROBJ		=$(patsubst %,$(LIB)(%),$(OBJ))
ARALLOBJ	=$(patsubst %,$(LIB)(%),$(ALLOBJ))

$(LIB):	$(ALLOBJ)
	ar r $(LIB) $(ALLOBJ)
	ranlib $(LIB)
	@echo done

intmp:	$(ALLOBJ)
	ar r /tmp/$(LIB) $(ALLOBJ)
	(cd /tmp ; ranlib /tmp/$(LIB))
	mv /tmp/$(LIB) $(LIB)
	@echo done

whatis:
	@echo $(ALLOBJ)

relink here: $(ALLOBJ)
	ar r /tmp/$(LIB) $(ALLOBJ)
	ranlib /tmp/$(LIB)
	mv /tmp/$(LIB) $(LIB)
	@echo done

ranlib:
	ranlib $(LIB)

##
##	Dependencies to build instances of prototypes
##

../Src/ThreadeventPairingHeap.h ../Src/ThreadEventPairingHeap.cc:
	(cd ../Src; genclass ThreadEvent val PairingHeap)

install: $(INSTALL_LIB)/$(LIB)  $(addprefix $(INSTALL_HDR)/,$(HDR)) \
	$(INSTALL_HDR)/AwesimeConfig.h \
	$(INSTALL_HDR)/HardwareContext.h $(INSTALL_HDR)/HardwareContextP.h
	@echo Installed ${INSTALL_LIB}/${LIB}

installLib:	$(INSTALL_LIB)/$(LIB)
$(INSTALL_LIB)/$(LIB): $(ALLOBJ)
	rm -f $(INSTALL_LIB)/$(LIB)
	ar r $(INSTALL_LIB)/$(LIB) $(ALLOBJ)
	-cd $(INSTALL_LIB) ; $(RANLIB) $(INSTALL_LIB)/$(LIB)
	-chmod 444 $(INSTALL_LIB)/$(LIB)

installHdr: $(INSTALL_HDR) $(addprefix $(INSTALL_HDR)/,$(HDR))

$(INSTALL_HDR):
	-mkdir $(INSTALL_HDR)

$(INSTALL_HDR)/%.h: %.h
	$(INSTALL) $< $@

clean:
	-rm -f *.o core *.a 

realclean: clean
	rm -f GNUmakefile.depend 

depend:
	rm -f GNUmakefile.depend makefile.depend
	-$(MAKE) $(MFLAGS) -k depend-c++
	-$(MAKE) $(MFLAGS) -k depend-cc
	mv makefile.depend GNUmakefile.depend

nullCommand:
	echo Done

depend-c++: $(C++-SRC)
	-$(MAKE) $(MFLAGS) $(subst .cc,.dep,$(C++-SRC)) nullCommand

depend-cc: $(C-SRC)
	-$(MAKE) $(MFLAGS) $(subst .c,.dep,$(C-SRC)) nullCommand

%.o: %.cc
	$(C++prefix) $(C++) $(C++FLAGS) -c $<

$(LIB)(%.o): %.cc
	$(C++) $(C++FLAGS) -c $<
	ar r $(LIB) %.o
	rm -f %.o

%.o: %.c
	$(C++prefix) $(CC) $(CFLAGS) -c $<

%.dep: %.cc
	-$(C++) $(C++FLAGS) -MM -c $< >> makefile.depend

%.dep: %.c
	-$(C++) $(C++FLAGS) -MM -c $< >> makefile.depend

%.E:	%.cc
	$(C++) -E $(C++FLAGS) $^ > $*.E

%.s:	%.cc
	$(C++) -S $(C++FLAGS) $^

MultiCpuMux.o: MultiCpuMux.cc
	$(C++) $(C++FLAGS) -finline-functions -c $<

##
##	This dependency isn't picked up because of <..> notation, but
##	it's important to development.
##

MultiCpuMux.o MultiSimMux.o : HardwareContext.h
SingleSimMux.o SingleCpuMux.o : HardwareContext.h
Thread.o CpuMultiplexor.o : HardwareContext.h
ThreadHeap.o : HardwareContext.h
Gate.o: HardwareContext.h

GNUmakefile.depend:
	touch GNUmakefile.depend 

include GNUmakefile.depend

