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

# Project-relative directories

drive	 = 
project	 = .
schema	 = .
appCon   = $(project)/AppCon
appDsp   = $(project)/AppDsp
coopsDsp = $(schema)/CoopsDSP
coopsHard = $(schema)/CoopsHard
coopsCom = $(schema)/CoopsCom
mts494 = $(schema)/Mts494
libDsp   = $(project)/WorkSpace/libDSP
libDspDos   = $(project)\WorkSpace\libDSP
binDir   = $(project)/bin
binDirDos   = $(project)\bin

# Source and include file directories for automatic search

VPATH = $(coopsDsp) $(coopsHard) $(coopsCom) $(appDsp) $(appCon) $(mts494)
EXTRA_INCLUDE	= -I$(coopsDsp) -I$(coopsHard) -I$(coopsCom) -I$(appDsp) -I$(appCon) -I$(mts494) -I$(mts494)/Include

# Build Targets:

all: UpdateCoops UpdateVxSocket UpdateVxSerial
UpdateCoops : $(binDir)/coops.o
UpdateVxSocket : $(binDir)/vxSocket.o
UpdateVxSerial : $(binDir)/vxSerial.o

.PHONY : clean

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

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

# Note -O2 is the default for Tornado 1.0.1 and 2.2.0
ADDED_CFLAGS	= -D_GNU_TOOL -D_VXWORKS -DCOOPS
gccVersion = $(shell $(CC) --version)
ifeq ($(gccVersion), gcc-2.96)
	ADDED_CFLAGS += -O -mlongcall
else
	ADDED_CFLAGS += -O2
endif

# Coops kernel object files
# For debugging, replace vxAsm.o with vxAsmNoOpt.o

objects = \
	$(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 \
	$(libDsp)/configdsp.o \
	$(libDsp)/genericPPC.o \
	$(libDsp)/fftlib.o \
	$(libDsp)/filter.o \
	$(libDsp)/xfmlib.o \
	$(libDsp)/VxClock.o \
	$(libDsp)/Act2Tbl.o \
	$(libDsp)/ActionSequence.o \
	$(libDsp)/Ads.o \
	$(libDsp)/Apc.o \
	$(libDsp)/CCMatrix.o \
	$(libDsp)/Closure.o \
	$(libDsp)/Das.o \
	$(libDsp)/Delay.o \
	$(libDsp)/Dio.o \
	$(libDsp)/Dvm.o \
	$(libDsp)/Fbkgen.o \
	$(libDsp)/FloatCluster.o \
	$(libDsp)/LimitDet.o \
	$(libDsp)/Mts493Hps.o \
	$(libDsp)/Mts494Adc.o \
	$(libDsp)/Mts494Combo.o \
	$(libDsp)/Mts494Dac.o \
	$(libDsp)/Mts494DDuc.o \
	$(libDsp)/Mts494Hsm.o \
	$(libDsp)/Mts494Ioc.o \
	$(libDsp)/Notch.o \
	$(libDsp)/Ramp.o \
	$(libDsp)/Rand.o \
	$(libDsp)/RealFFT.o \
	$(libDsp)/Recorder.o \
	$(libDsp)/Refgen.o \
	$(libDsp)/SampleHold.o \
	$(libDsp)/Scal2Vec.o \
	$(libDsp)/Span.o \
	$(libDsp)/StatsMon.o \
	$(libDsp)/StringClosure.o \
	$(libDsp)/SystemDsp.o \
	$(libDsp)/TermStrip.o \
	$(libDsp)/TvcServo.o \
	$(libDsp)/Ufg.o \
	$(libDsp)/UpSampler.o \
	$(libDsp)/Vec2Scal.o \
	$(libDsp)/Vector.o \
	$(libDsp)/VRamp.o \
	$(libDsp)/Watchdog.o \
	$(libDsp)/Wire.o \
	$(libDsp)/dAhc.o \
	$(libDsp)/dIir.o \
	$(libDsp)/dMaicx.o \
	$(libDsp)/dMFir.o \
	$(libDsp)/dPsd.o \
	$(libDsp)/dScopeDaq.o \
	$(libDsp)/dTfe.o

# Rules to compile modules

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

$(binDir)/coops.o : $(objects)
	$(LD) $(LFLAGS) -r -o $@ $(objects)

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

$(binDir)/vxSerial.o : vxSerial.c
	$(CC) $(CFLAGS) -c $(drive)$< -o $@

# echos $(LibDSP) but needed backslash instead of forward slash

clean:
ifeq ($(gccVersion), gcc-2.96)
	-$(RM)  $(libDsp)/*.o
	-$(RM)  $(binDir)/*.o
else
	-$(RM)  $(libDspDos)\*.o
	-$(RM)  $(binDirDos)\*.o
endif
