#
# Linux/UNIX Makefile for CSL4 -- stp@create.ucsb.edu -- July, 2009
#
# This is intended as a template; edit it for your system.
#
# Note that you need the following libraries installed:
#	portaudio (for PAIO)
#	portmidi (for MIDI IO)
#	sndfile (for SoundFile)
#	fftw3f (for Spectral)
#	tsp (for LPC)
#
# test targets: beep, test, osc, midi, clean
#

# CSL object file lists -- edit to taste

CSL_KERNEL = CSL_Core.o CGestalt.o Variable.o RingBuffer.o

CSL_SRCS = Oscillator.o SimpleSines.o Window.o Envelope.o Noise.o Spectral.o # Lorenz.o SHARC.o KarplusString.o OscillatorBL.o

CSL_PROC = BinaryOp.o InOut.o Clipper.o DelayLine.o Filters.o FIR.o Convolver.o Freeverb.o # FDN.o LPC.o 

CSL_IO = PAIO.o FileIO.o SoundFile.o NullIO.o # RemoteIO.o RemoteStream.o  Microphone.o MIDIIO.o

CSL_INSTRS = Instrument.o BasicFMInstrument.o SndFileInstrument.o 

CSL_UTIL =  ThreadUtilities.o BlockResizer.o CPoint.o # ThreadedFrameStream.o 

CSL_OSC = OSC_Interface.o OSC-callbacklist.o OSC-address-space.o NetworkReturnAddress.o 

CSL_SPATIAL  = Ambisonic.o AmbisonicPanner.o AmbisonicUtilities.o Binaural.o DistanceSimulator.o Mixer.o Panner.o SpatialAudio.o SpatialSource.o VBAP.o 

#
# All object files (except OSC * Spatial)
#
CSL_ALL = $(CSL_KERNEL) $(CSL_SRCS) $(CSL_PROC) $(CSL_IO) $(CSL_UTIL) # $(CSL_SPATIAL)

# What to call the library

LIB_CSL = libCSL.a

# C++ compiler flags

CCFLAGS = -O2 -I../CSL/Kernel -I../CSL/Sources -I../CSL/Processors -I../CSL/IO \
	-I../CSL/Utilities -I../CSL/Spatializers -I../CSL/Instruments -I/usr/local/include 

# Linker flags (generic UNIX)

STD_LD_FLAGS =  -L/usr/local/lib -L. -lm -lportaudio -lportmidi -lsndfile -lfftw3f -ltsp -fexceptions  # -lcx3d -lpng

# Linker flags for Mac OSX

MAC_LD_FLAGS = -lstdc++  -L. -lCSL \
	-framework CoreServices -framework CoreAudio -framework CoreMIDI \
	-framework AudioUnit -framework AudioToolbox   # -lcx3d -lpng -L/usr/lib/gcc/darwin/4.0

# Linker flags for Linux

LINUX_LD_FLAGS = -lstdc++ # ???

LD_FLAGS = $(STD_LD_FLAGS) $(MAC_LD_FLAGS)
# LD_FLAGS = $(STD_LD_FLAGS) $(LINUX_LD_FLAGS)

# Compiler

CC = gcc

######################################################
# Test targets: beep, test, osc, midi, clean
#
now:	lib # beep	# which to make now (edit to taste)

lib:	$(CSL_ALL)
	ar -rv $(LIB_CSL) $(CSL_ALL)
	ranlib $(LIB_CSL)

beep:	$(LIB_CSL) Beep_demo.o
	$(CC) Beep_demo.o $(LD_FLAGS) -o beep_demo

test:	$(LIB_CSL) Test_main.o Test_Oscillators.o 
	$(CC) $(CSL_ALL) Test_main.o Test_Oscillators.o $(LD_FLAGS) -o csl_test

oscs:	$(CSL_ALL) $(LIB_CSL) Test_Oscillators.o 
	$(CC) $(CSL_ALL) Test_Oscillators.o $(LD_FLAGS) -o csl_test

osc:	$(CSL_ALL) $(CSL_INSTRS) $(CSL_OSC) OSC_main.o
	$(CC) $(CSL_ALL) $(CSL_INSTRS) $(CSL_OSC) OSC_main.o $(LD_FLAGS) -o osc_server

midi:	$(CSL_ALL) MIDI_Test.o
	$(CC) $(CSL_ALL) MIDI_Test.o $(LD_FLAGS) -o midi_server

clean:
	rm -f $(CSL_ALL) $(CSL_OSC) *.o

# Source dependencies: main program files

Beep_demo.o:	../CSL/Tests/Beep_demo.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Tests/Beep_demo.cpp

Test_main.o:	../CSL/Tests/Test_main.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Tests/Test_main.cpp

Test_Oscillators.o:	../CSL/Tests/Test_Oscillators.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Tests/Test_Oscillators.cpp

OSC_main.o:	../CSL/Tests/OSC_main.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Tests/OSC_main.cpp

MIDI_Test.o:		../CSL/Tests/MIDI_Test.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Tests/MIDI_Test.cpp

# Kernel classes

CSL_Core.o:	../CSL/Kernel/CSL_Core.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Kernel/CSL_Core.cpp

CGestalt.o:	../CSL/Kernel/CGestalt.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Kernel/CGestalt.cpp

Variable.o:		../CSL/Kernel/Variable.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Kernel/Variable.cpp

# Sources

Envelope.o:	../CSL/Sources/Envelope.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Envelope.cpp

Noise.o:		../CSL/Sources/Noise.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Noise.cpp

Oscillator.o:	../CSL/Sources/Oscillator.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Oscillator.cpp

SimpleSines.o:	../CSL/Sources/SimpleSines.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/SimpleSines.cpp

OscillatorBL.o:	../CSL/Sources/OscillatorBL.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/OscillatorBL.cpp

Spectral.o:		../CSL/Sources/Spectral.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Spectral.cpp

SHARC.o:		../CSL/Sources/SHARC.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/SHARC.cpp

Window.o:		../CSL/Sources/Window.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Window.cpp

Lorenz.o:		../CSL/Sources/Lorenz.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Lorenz.cpp

Granulator.o:		../CSL/Sources/Granulator.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/Granulator.cpp

KarplusString.o:	../CSL/Sources/KarplusString.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Sources/KarplusString.cpp

# Processors

BinaryOp.o:	../CSL/Processors/BinaryOp.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/BinaryOp.cpp

Filters.o:		../CSL/Processors/Filters.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/Filters.cpp

FIR.o:		../CSL/Processors/FIR.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/FIR.cpp

DelayLine.o:		../CSL/Processors/DelayLine.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/DelayLine.cpp

Panner.o:		../CSL/Processors/Panner.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/Panner.cpp

InOut.o:		../CSL/Processors/InOut.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/InOut.cpp

Clipper.o:		../CSL/Processors/Clipper.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/Clipper.cpp

Convolver.o:		../CSL/Processors/Convolver.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/Convolver.cpp

Freeverb.o:		../CSL/Processors/Freeverb.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/Freeverb.cpp

FDN.o:		../CSL/Processors/FDN.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/FDN.cpp

LPC.o:		../CSL/Processors/LPC.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Processors/LPC.cpp

# Instruments

Instrument.o:	../CSL/Instruments/Instrument.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Instruments/Instrument.cpp

BasicFMInstrument.o:	../CSL/Instruments/BasicFMInstrument.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Instruments/BasicFMInstrument.cpp

SndFileInstrument.o:	../CSL/Instruments/SndFileInstrument.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Instruments/SndFileInstrument.cpp

# IO

PAIO.o:	../CSL/IO/PAIO.cpp		# PortAudio
	$(CC) -c $(CCFLAGS) ../CSL/IO/PAIO.cpp

CAIO.o:	../CSL/IO/CAIO.cpp		# Mac CoreAudio
	$(CC) -c $(CCFLAGS) ../CSL/IO/CAIO.cpp

NullIO.o:	../CSL/IO/NullIO.cpp		# Mac CoreAudio
	$(CC) -c $(CCFLAGS) ../CSL/IO/NullIO.cpp

FileIO.o:	../CSL/IO/FileIO.cpp		# LibSndFile
	$(CC) -c $(CCFLAGS) ../CSL/IO/FileIO.cpp

MIDIIO.o:	../CSL/IO/MIDIIO.cpp		# PortMIDI
	$(CC) -c $(CCFLAGS) ../CSL/IO/MIDIIO.cpp

SoundFile.o:	../CSL/IO/SoundFile.cpp		# Streaming with LibSndFile
	$(CC) -c $(CCFLAGS) ../CSL/IO/SoundFile.cpp

RemoteStream.o: ../CSL/IO/RemoteStream.cpp
	$(CC) -c $(CCFLAGS) ../CSL/IO/RemoteStream.cpp

RemoteIO.o:	../CSL/IO/RemoteIO.cpp
	$(CC) -c $(CCFLAGS) ../CSL/IO/RemoteIO.cpp

# Utils

BlockResizer.o:	../CSL/Utilities/BlockResizer.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Utilities/BlockResizer.cpp

Interleaver.o:	../CSL/Utilities/Interleaver.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Utilities/Interleaver.cpp

RingBuffer.o:	../CSL/Kernel/RingBuffer.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Kernel/RingBuffer.cpp

ThreadUtilities.o:	../CSL/Utilities/ThreadUtilities.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Utilities/ThreadUtilities.cpp

ThreadedFrameStream.o:	../CSL/Utilities/ThreadedFrameStream.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Utilities/ThreadedFrameStream.cpp

CPoint.o:	../CSL/Utilities/CPoint.cpp
	$(CC) -c $(CCFLAGS) ../CSL/Utilities/CPoint.cpp

# OSC

OSC_support.o:	../CSL/OSC/OSC_support.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC_support.cpp

OSC_Interface.o:	../CSL/OSC/OSC_Interface.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC_Interface.cpp

NetworkReturnAddress.o:	../CSL/OSC/NetworkReturnAddress.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/NetworkReturnAddress.cpp

OSC-address-space.o:	../CSL/OSC/OSC-address-space.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-address-space.cpp

OSC-callbacklist.o:	../CSL/OSC/OSC-callbacklist.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-callbacklist.cpp

OSC-drop.o:	../CSL/OSC/OSC-drop.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-drop.cpp

OSC-pattern-match.o:	../CSL/OSC/OSC-pattern-match.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-pattern-match.cpp

OSC-priority-queue.o:	../CSL/OSC/OSC-priority-queue.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-priority-queue.cpp

OSC-receive.o:	../CSL/OSC/OSC-receive.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-receive.cpp

OSC-string-help.o:	../CSL/OSC/OSC-string-help.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-string-help.cpp

OSC-system-dependent.o:	../CSL/OSC/OSC-system-dependent.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-system-dependent.cpp

OSC-timetag.o:	../CSL/OSC/OSC-timetag.cpp
	$(CC) -c $(CCFLAGS) ../CSL/OSC/OSC-timetag.cpp

