# Makefile -- For COOPS on PPC with VxWorks Tornado 1.01

APPCON    = AppCon
APPDSP    = AppDsp
COOPSDSP  = CoopsDsp
COOPSHARD = CoopsHard
COOPSCOM  = CoopsCom
DESTDIR   = bin
LIBDSP	  = Workspace/LibDsp

# Source and include file directories for automatic search

VPATH = $(COOPSDSP) $(COOPSHARD) $(COOPSCOM) $(APPDSP) $(APPCON)
EXTRA_INCLUDE = -I$(COOPSDSP) -I$(COOPSHARD) -I$(COOPSCOM) -I$(APPDSP) -I$(APPCON)

# Build Targets:

updateAll      : updateCoops updateVxSocket
updateCoops    : $(DESTDIR)/coops.o
updateVxSocket : $(DESTDIR)/vxSocket.o
updateVxSerial : $(DESTDIR)/vxSerial.o

clean :
	del /F /Q Workspace\LibDsp\*.o

# Extra compiler and linker flags
# For debugging, use the commented (-O0 -gdwarf) line:
# ADDED_CFLAGS = -O0 -gdwarf -D_GNU_TOOL -DCOOPS

ADDED_CFLAGS = -O2 -D_GNU_TOOL -DCOOPS

# VxWorks headers and variables

CPU = PPC604
CPU_FAMILY = PPC
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

appObjects = \
	$(LIBDSP)/configdsp.o \
	$(LIBDSP)/generic.o \
	$(LIBDSP)/Act2Tbl.o \
	$(LIBDSP)/ActionSequence.o \
	$(LIBDSP)/Adder.o \
	$(LIBDSP)/Ads.o \
	$(LIBDSP)/CCMatrix.o \
	$(LIBDSP)/Clipper.o \
	$(LIBDSP)/Closure.o \
	$(LIBDSP)/Das.o \
	$(LIBDSP)/Delay.o \
	$(LIBDSP)/Dio.o \
	$(LIBDSP)/Dvm.o \
	$(LIBDSP)/FloatCluster.o \
	$(LIBDSP)/FlowGain.o \
	$(LIBDSP)/LimitDet.o \
	$(LIBDSP)/MemoryTerminal.o \
	$(LIBDSP)/Mts493Adc.o \
	$(LIBDSP)/Mts493Dac.o \
	$(LIBDSP)/Mts493Dio.o \
	$(LIBDSP)/Mts493Enc.o \
	$(LIBDSP)/Mts493Duc.o \
	$(LIBDSP)/Mts493Ioc.o \
	$(LIBDSP)/Mts493Svc2.o \
	$(LIBDSP)/Mts493Svc3.o \
	$(LIBDSP)/Notch.o \
	$(LIBDSP)/PidServo.o \
	$(LIBDSP)/PiServo.o \
	$(LIBDSP)/Ramp.o \
	$(LIBDSP)/Rand.o \
	$(LIBDSP)/RealFFT.o \
	$(LIBDSP)/Recorder.o \
	$(LIBDSP)/RecordSync.o \
	$(LIBDSP)/Scal2Vec.o \
	$(LIBDSP)/Scaler.o \
	$(LIBDSP)/ScopeBuffer.o \
	$(LIBDSP)/Scramnet.o \
	$(LIBDSP)/Span.o \
	$(LIBDSP)/StringClosure.o \
	$(LIBDSP)/SystemDsp.o \
	$(LIBDSP)/TableLookup2.o \
	$(LIBDSP)/Ufg.o \
	$(LIBDSP)/Vector.o \
	$(LIBDSP)/VRamp.o \
	$(LIBDSP)/Watchdog.o \
	$(LIBDSP)/Wire.o \
	$(LIBDSP)/dIir.o \
	$(LIBDSP)/dMFir.o \
	$(LIBDSP)/dPsd.o \
	$(LIBDSP)/dScopeDaq.o \
	$(LIBDSP)/dTfe.o \
	$(LIBDSP)/Mts493load.o \
	$(LIBDSP)/fftlib.o \
	$(LIBDSP)/filter.o \
	$(LIBDSP)/xfmlib.o

coopsObjects = \
	$(LIBDSP)/Class.o \
	$(LIBDSP)/Dictionary.o \
	$(LIBDSP)/fork.o \
	$(LIBDSP)/Link.o \
	$(LIBDSP)/List.o \
	$(LIBDSP)/Message.o \
	$(LIBDSP)/method.o \
	$(LIBDSP)/numConvert.o \
	$(LIBDSP)/Object.o \
	$(LIBDSP)/strnew.o \
	$(LIBDSP)/DSPObject.o \
	$(LIBDSP)/FloatTerminal.o \
	$(LIBDSP)/IntTerminal.o \
	$(LIBDSP)/Clock.o \
	$(LIBDSP)/Scheduler.o \
	$(LIBDSP)/Sequence.o \
	$(LIBDSP)/Task.o \
	$(LIBDSP)/Terminal.o \
	$(LIBDSP)/UpSockPPC.o \
	$(LIBDSP)/vxAsm.o \
	$(LIBDSP)/vxExcept.o \
	$(LIBDSP)/vxMain.o \
	$(LIBDSP)/vxMapVME.o \
	$(LIBDSP)/vxMisc.o \
	$(LIBDSP)/vxMemory.o

# Rules to compile modules

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

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

$(DESTDIR)/vxSocket.o : $(COOPSHARD)/vxSocket.c
	$(CC) $(CFLAGS) -c $(COOPSHARD)/vxSocket.c -o $*.o

$(DESTDIR)/vxSerial.o : $(COOPSHARD)/vxSerial.c
	$(CC) $(CFLAGS) -c $(COOPSHARD)/vxSerial.c -o $*.o
