# Makefile -- For COOPS on PPC with VxWorks
# New: For all of coops on the HP-PPC system

PROJECT   = .
APPCON    = $(PROJECT)/AppCon
APPDSP    = $(PROJECT)/AppDsp
APPSUP    = $(PROJECT)/AppSup
COOPSCOM  = $(PROJECT)/CoopsCom
COOPSDSP  = $(PROJECT)/CoopsDsp
COOPSSUP  = $(PROJECT)/CoopsSup
COOPSHARD = $(PROJECT)/CoopsHard
COOPSGEN  = $(PROJECT)/CoopsGen
LIBDSP	  = $(PROJECT)/LibDsp
LIBSUP	  = $(PROJECT)/LibSup
DESTDIR	  = $(PROJECT)/bin

# Source and include file directories for automatic search

VPATH = $(COOPSDSP) \
	$(COOPSHARD) \
	$(COOPSCOM) \
	$(COOPSSUP) \
	$(APPDSP) \
	$(APPCON) \
	$(APPSUP) \
	$(COOPSGEN)

EXTRA_INCLUDE = \
	-I $(COOPSDSP) \
	-I $(COOPSHARD) \
	-I $(COOPSCOM) \
	-I $(COOPSSUP) \
	-I $(APPDSP) \
	-I $(APPCON) \
	-I $(APPSUP)
	
# Build Targets:

all	 : coops Generic VXSerial

coops    : $(DESTDIR)/coops.o

Generic  : $(APPCON)/Generic

VXSerial : $(DESTDIR)/vxSerial.o $(DESTDIR)/vxSerial2.o

# Extra compiler and linker flags
# There are two versions here:
# Use the line with -O0 for debugging.

ADDED_CFLAGS	= -O0 -gdwarf -D_GNU_TOOL
#ADDED_CFLAGS	= -O2 -D_GNU_TOOL

# VxWorks headers and variables

CPU	= PPC604
TOOL	= gnu

include $(WIND_BASE)/target/h/make/defs.bsp
include $(WIND_BASE)/target/h/make/make.$(CPU)$(TOOL)
include $(WIND_BASE)/target/h/make/defs.$(WIND_HOST_TYPE)
		
# Coops kernel object files
# For debugging, replace vxAsm.o with vxAsmNoOpt.o

appObjects = \
	$(LIBDSP)/configdsp.o		\
	$(LIBDSP)/vm.o			\
	$(LIBDSP)/generic.o		\
	$(LIBDSP)/Adda.o		\
	$(LIBDSP)/AddaA2D.o		\
	$(LIBDSP)/AddaTempo.o		\
	$(LIBDSP)/Ads.o			\
	$(LIBDSP)/Adsx.o		\
	$(LIBDSP)/CCMatrix.o		\
	$(LIBDSP)/Clock.o		\
	$(LIBDSP)/Delay.o		\
	$(LIBDSP)/Dio.o			\
	$(LIBDSP)/GageCtlr.o		\
	$(LIBDSP)/Iir.o			\
	$(LIBDSP)/MFir.o		\
	$(LIBDSP)/MtsDio.o		\
	$(LIBDSP)/Psd.o			\
	$(LIBDSP)/RealFFT.o		\
	$(LIBDSP)/Recorder.o		\
	$(LIBDSP)/Reversal.o		\
	$(LIBDSP)/Scal2Vec.o		\
	$(LIBDSP)/ScopeDaq.o		\
	$(LIBDSP)/SCPF.o		\
	$(LIBDSP)/Sys.o			\
	$(LIBDSP)/Tfe.o			\
	$(LIBDSP)/SysDsp.o		\
	$(LIBDSP)/Vector.o		\
	$(LIBDSP)/dIir.o		\
	$(LIBDSP)/dMFir.o		\
	$(LIBDSP)/dPsd.o		\
	$(LIBDSP)/dScopeDaq.o		\
	$(LIBDSP)/dTfe.o		\
	$(LIBDSP)/fftdsp.o		\
	$(LIBDSP)/fftlib.o		\
	$(LIBDSP)/filter.o		\
	$(LIBDSP)/firlib.o		\
	$(LIBDSP)/iirlib.o		\
	$(LIBDSP)/linklist.o		\
	$(LIBDSP)/xmath.o

coopsObjects = \
	$(LIBDSP)/Class.o		\
	$(LIBDSP)/Dictionary.o		\
	$(LIBDSP)/PaulFork.o		\
	$(LIBDSP)/PaulLink.o		\
	$(LIBDSP)/List.o		\
	$(LIBDSP)/PaulMessage.o		\
	$(LIBDSP)/method.o		\
	$(LIBDSP)/numConvert.o		\
	$(LIBDSP)/Object.o		\
	$(LIBDSP)/strnew.o		\
	$(LIBDSP)/DSPObject.o		\
	$(LIBDSP)/FloatTerminal.o	\
	$(LIBDSP)/IntTerminal.o		\
	$(LIBDSP)/Scheduler.o		\
	$(LIBDSP)/Sequence.o		\
	$(LIBDSP)/SerialPort.o		\
	$(LIBDSP)/SupObject.o		\
	$(LIBDSP)/Task.o		\
	$(LIBDSP)/Terminal.o		\
	$(LIBDSP)/PaulUpTCP.o		\
	$(LIBDSP)/PaulUpLink.o		\
	$(LIBDSP)/PaulVxAsmNoOpt.o	\
	$(LIBDSP)/vxExcept.o		\
	$(LIBDSP)/vxMain.o		\
	$(LIBDSP)/vxMapVME.o	\
	$(LIBDSP)/vxMisc.o		\
	$(LIBDSP)/vxMemory.o

genericObjects = \
	$(LIBSUP)/unixBuildGeneric.o \
	$(LIBSUP)/strnew.o \
	$(LIBSUP)/stringFile.o \
	$(LIBSUP)/numConvert.o
	
# Rules to compile modules

$(LIBDSP)/%.o : %.c
	$(CC) $(CFLAGS) -c $< -o $(LIBDSP)/$*.o

$(LIBDSP)/coops.o : $(appObjects) $(coopsObjects)
	$(LD) $(LFLAGS) -r -o $@ $(appObjects) $(coopsObjects)

$(DESTDIR)/%.o : $(LIBDSP)/%.o
	cp $(LIBDSP)/$*.o $(DESTDIR)/$*.o

$(LIBSUP)/%.o : %.c
	cc -I $(COOPSCOM) -I $(COOPSGEN) -Ae -c $< -o $(LIBSUP)/$*.o

$(APPCON)/Generic : $(genericObjects)
	cc -Ae -lm $(genericObjects) -o $(APPCON)/Generic
	
clean :
	rm -f $(LIBDSP)/*.o
	rm -f $(DESTDIR)/*.o
	rm -f $(LIBSUP)/*.o
	rm -f $(APPCON)/Generic

