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

.SUFFIXES: .dep .o .s .E .cc .c
#
#	needed, but over-written by GNUmakefile.host
#
LIB	=bogus

VERSION	=OldSrc
#VERSION	=NewSrc

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../$(VERSION) -I../Src $(I)
C++FLAGS	:= ${INCL} ${C++FLAGS}
CCFLAGS		:= ${INCL} ${CCLAGS}
INSTALL		= install -m 444 -c

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)

default: $(LIB)

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

relink here: $(ALLOBJ)
	ar r $(LIB) $(ALLOBJ)
	ranlib $(LIB)

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

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 .emacs_* *.dep

cleanAll:
	$(MAKE) -c ../Obj-GCC clean
	$(MAKE) -c ../Obj-g++ clean

cleansrc:
	-ci -q $(ALLSRC)

depend:
	rm -f GNUmakefile.depend
	$(MAKE) -k makefile.depend

GNUmakefile.depend: $(DEPS)
	cat *.dep > GNUmakefile.depend 

%.o: %.cc
	@echo $(C++) $(C++FLAGS) -c $<
	@rm -f $*.dep;\
	DEPENDENCIES_OUTPUT="$*.dep"; export DEPENDENCIES_OUTPUT;\
	$(C++) $(C++FLAGS) -c $<

%.o: %.c
	@echo $(CC) $(CCFLAGS) -c $<
	@rm -f $*.dep;\
	DEPENDENCIES_OUTPUT="$*.dep"; export DEPENDENCIES_OUTPUT;\
	$(CC) $(CCFLAGS) -c $<

%.dep: %.cc
	@rm -f $*.dep
	touch $*.dep

%.dep: %.c
	@rm -f $*.dep
	touch $*.dep

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

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

ifeq ($(HOSTTYPE),sun3)
  C++FLAGS := $(C++FLAGS)
endif

ifeq ($(HOSTTYPE),sun4)
  C++FLAGS := $(C++FLAGS)
endif

ifeq ($(HOSTTYPE),umax)
  ASMOBJ = SharedMemory-umax.o SharedMalloc-real.o
  C++FLAGS := $(C++FLAGS)
endif

ifeq ($(HOSTTYPE),pmax)
  C++FLAGS := $(C++FLAGS)
endif

ifeq ($(HOSTTYPE),onemax)
  C++FLAGS := $(C++FLAGS)
endif

##
##	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

include GNUmakefile.depend

