# Makefile -- For COOPS on PPC with VxWorks

DRIVE	  = c:
PROJECT   = c:/accProj
APPCON    = $(PROJECT)/AppCon
APPDSP    = $(PROJECT)/AppDsp
COOPSDSP  = $(PROJECT)/CoopsDsp
COOPSHARD = $(PROJECT)/CoopsHard
COOPSCOM  = $(PROJECT)/CoopsCom
DESTDIR   = $(PROJECT)/bin
LIBDSP	  = $(PROJECT)/LibDsp

# Source and include file directories for automatic search

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

# Build Targets:

UpdateCoops    : $(DESTDIR)/coops.o
UpdateVxSocket : $(DESTDIR)/vxSocket.o
Clean          : 
	del $(LIBDSP)\*.o	

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


# 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
# For debugging, replace vxAsm.o with vxAsmNoOpt.o

appObjects = \
	$(LIBDSP)/configdsp.o		\
	$(LIBDSP)/generic.o		\
	$(LIBDSP)/Accumulator.o		\
	$(LIBDSP)/ActionSeq.o		\
	$(LIBDSP)/Actuator.o		\
	$(LIBDSP)/Ads.o			\
	$(LIBDSP)/Ahc2.o		\
	$(LIBDSP)/Apc.o			\
	$(LIBDSP)/Clock.o		\
	$(LIBDSP)/Closure.o		\
	$(LIBDSP)/ColiFg.o		\
	$(LIBDSP)/Das.o			\
	$(LIBDSP)/Delay.o		\
	$(LIBDSP)/Dio.o			\
	$(LIBDSP)/Dvm.o			\
	$(LIBDSP)/EuroDio.o		\
	$(LIBDSP)/EuroIoc.o		\
	$(LIBDSP)/EuroReadout.o		\
	$(LIBDSP)/EuroWatch.o		\
	$(LIBDSP)/Fbkgen.o		\
	$(LIBDSP)/Flms.o		\
	$(LIBDSP)/FlmsRate.o		\
	$(LIBDSP)/GenServo.o		\
	$(LIBDSP)/Integrator.o		\
	$(LIBDSP)/InvActuator.o		\
	$(LIBDSP)/InvPayload.o		\
	$(LIBDSP)/Median.o		\
	$(LIBDSP)/Mts493load.o		\
	$(LIBDSP)/Mts493Adc.o		\
	$(LIBDSP)/Mts493Duc.o		\
	$(LIBDSP)/Mts493Svc3.o		\
	$(LIBDSP)/Notch.o		\
	$(LIBDSP)/Pac.o			\
	$(LIBDSP)/Payload.o		\
	$(LIBDSP)/Prbs.o		\
	$(LIBDSP)/Rand.o		\
	$(LIBDSP)/RealFFT.o		\
	$(LIBDSP)/Recorder.o		\
	$(LIBDSP)/Refgen.o		\
	$(LIBDSP)/Rtc.o			\
	$(LIBDSP)/SampHold.o		\
	$(LIBDSP)/Scal2Vec.o		\
	$(LIBDSP)/Span.o		\
	$(LIBDSP)/StatsMon.o		\
	$(LIBDSP)/SysDsp.o		\
	$(LIBDSP)/Tbi.o			\
	$(LIBDSP)/TermStrip.o		\
	$(LIBDSP)/Ufg.o			\
	$(LIBDSP)/UpSample.o		\
	$(LIBDSP)/Vec2Scal.o		\
	$(LIBDSP)/VectAdd.o		\
	$(LIBDSP)/VectMpyA.o		\
	$(LIBDSP)/Vector.o		\
	$(LIBDSP)/VectRms.o		\
	$(LIBDSP)/VectZero.o		\
	$(LIBDSP)/VRamp.o		\
	$(LIBDSP)/dAhc.o		\
	$(LIBDSP)/dAllpass.o		\
	$(LIBDSP)/dFDelay.o		\
	$(LIBDSP)/dFir.o		\
	$(LIBDSP)/dIFir.o		\
	$(LIBDSP)/dIir.o		\
	$(LIBDSP)/dLms.o		\
	$(LIBDSP)/dMaic.o		\
	$(LIBDSP)/dMFir.o		\
	$(LIBDSP)/dPsd.o		\
	$(LIBDSP)/dRls.o		\
	$(LIBDSP)/dScopeDaq.o		\
	$(LIBDSP)/dTfe.o		\
	$(LIBDSP)/fftdsp.o		\
	$(LIBDSP)/filter.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)/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 $(DRIVE)$< -o $(LIBDSP)/$*.o

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

$(DESTDIR)/vxSocket.o : vxSocket.c
	$(CC) $(CFLAGS) -c $< -o $@

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