CC := $(shell wx-config --cxx)

#
# Set the version of FFTW that you have, here.
#
export FFT_VERS := 3
# export FFT_VERS := 2

ifeq ($(FFT_VERS),3)
    FFT_CFLAGS := -DHAVE_FFTW3=1
    FFT_LIB := -lfftw3
endif

ifeq ($(FFT_VERS),2)
    FFT_CFLAGS := -DHAVE_FFTW2=1
    FFT_LIB := -lfftw
endif

CFLAGS := -I.. -O2 -Wall $(FFT_CFLAGS) $(shell wx-config --cxxflags) -fexceptions

LDFLAGS :=

LIBS := -lsndfile $(FFT_LIB) $(shell wx-config --libs)

all:		AudioData AudioMixerTest DopplerTest Fade FFTPhase FFTSpeed \
		FSK441Decoder FSK441Transmit JT44Decoder JT44Transmit \
		JT6MDecoder JT6MTransmit Noise NoisyToneGenerator \
		SunAndMoon ToneGenerator WAVEdit

AudioData:	AudioData.o ../common/common.a
		$(CC) $(LDFLAGS) AudioData.o ../common/common.a -o AudioData $(LIBS)

AudioMixerTest:	AudioMixerTest.o ../common/common.a
		$(CC) $(LDFLAGS) AudioMixerTest.o ../common/common.a -o AudioMixerTest $(LIBS)

DopplerTest:	DopplerTest.o ../common/common.a
		$(CC) $(LDFLAGS) DopplerTest.o ../common/common.a -o DopplerTest $(LIBS)

Fade:		Fade.o Gaussian.o ../common/common.a
		$(CC) $(LDFLAGS) Fade.o Gaussian.o ../common/common.a -o Fade $(LIBS)

FFTPhase:	FFTPhase.o ../common/common.a
		$(CC) $(LDFLAGS) FFTPhase.o ../common/common.a -o FFTPhase $(LIBS)

FFTSpeed:	FFTSpeed.o ../common/common.a
		$(CC) $(LDFLAGS) FFTSpeed.o ../common/common.a -o FFTSpeed $(LIBS)

FSK441Decoder:	FSK441Decoder.o ../common/common.a
		$(CC) $(LDFLAGS) FSK441Decoder.o ../fsk441/FSK441BurstData.o ../fsk441/FSK441Lookups.o ../common/common.a -o FSK441Decoder $(LIBS)

FSK441Transmit:	FSK441Transmit.o ../common/common.a
		$(CC) $(LDFLAGS) FSK441Transmit.o ../common/common.a ../fsk441/FSK441Lookups.o -o FSK441Transmit $(LIBS)

JT44Decoder:	JT44Decoder.o ../common/common.a
		$(CC) $(LDFLAGS) JT44Decoder.o ../common/common.a ../jt44/JT44Lookups.o -o JT44Decoder $(LIBS)

JT44Transmit:	JT44Transmit.o ../common/common.a
		$(CC) $(LDFLAGS) JT44Transmit.o ../common/common.a ../jt44/JT44Lookups.o -o JT44Transmit $(LIBS)

JT6MDecoder:	JT6MDecoder.o ../common/common.a
		$(CC) $(LDFLAGS) JT6MDecoder.o ../common/common.a ../jt6m/JT6MLookups.o ../jt6m/JT6MFoldMessages.o -o JT6MDecoder $(LIBS)

JT6MTransmit:	JT6MTransmit.o ../common/common.a
		$(CC) $(LDFLAGS) JT6MTransmit.o ../common/common.a ../jt6m/JT6MLookups.o -o JT6MTransmit $(LIBS)

Noise:		Noise.o Gaussian.o ../common/common.a
		$(CC) $(LDFLAGS) Noise.o Gaussian.o ../common/common.a -o Noise $(LIBS)

NoisyToneGenerator: NoisyToneGenerator.o NoisyNCO.o Gaussian.o ../common/common.a
		$(CC) $(LDFLAGS) NoisyToneGenerator.o NoisyNCO.o Gaussian.o ../common/common.a -o NoisyToneGenerator $(LIBS)

SunAndMoon:	SunAndMoon.o ../common/common.a
		$(CC) $(LDFLAGS) SunAndMoon.o ../common/common.a -o SunAndMoon $(LIBS)

ToneGenerator:	ToneGenerator.o ../common/common.a
		$(CC) $(LDFLAGS) ToneGenerator.o ../common/common.a -o ToneGenerator $(LIBS)

WAVEdit:	WAVEdit.o ../common/common.a
		$(CC) $(LDFLAGS) WAVEdit.o ../common/common.a -o WAVEdit $(LIBS)

AudioData.o:	AudioData.cpp AudioData.h
		$(CC) $(CFLAGS) -c AudioData.cpp

AudioMixerTest.o: AudioMixerTest.cpp AudioMixerTest.h
		$(CC) $(CFLAGS) -c AudioMixerTest.cpp

DopplerTest.o:	DopplerTest.cpp DopplerTest.h
		$(CC) $(CFLAGS) -c DopplerTest.cpp

Fade.o:		Fade.cpp Fade.h Gaussian.h
		$(CC) $(CFLAGS) -c Fade.cpp

FFTPhase.o:	FFTPhase.cpp FFTPhase.h
		$(CC) $(CFLAGS) -c FFTPhase.cpp

FFTSpeed.o:	FFTSpeed.cpp FFTSpeed.h
		$(CC) $(CFLAGS) -c FFTSpeed.cpp

FSK441Decoder.o: FSK441Decoder.cpp FSK441Decoder.h
		$(CC) $(CFLAGS) -c FSK441Decoder.cpp

FSK441Transmit.o: FSK441Transmit.cpp FSK441Transmit.h
		$(CC) $(CFLAGS) -c FSK441Transmit.cpp

Gaussian.o:	Gaussian.cpp Gaussian.h
		$(CC) $(CFLAGS) -c Gaussian.cpp

JT44Decoder.o:	JT44Decoder.cpp JT44Decoder.h
		$(CC) $(CFLAGS) -c JT44Decoder.cpp

JT44Transmit.o:	JT44Transmit.cpp JT44Transmit.h
		$(CC) $(CFLAGS) -c JT44Transmit.cpp

JT6MBurstData.o: JT6MBurstData.cpp JT6MBurstData.h
		$(CC) $(CFLAGS) -c JT6MBurstData.cpp

JT6MDecoder.o:	JT6MDecoder.cpp JT6MDecoder.h
		$(CC) $(CFLAGS) -c JT6MDecoder.cpp

JT6MTransmit.o:	JT6MTransmit.cpp JT6MTransmit.h
		$(CC) $(CFLAGS) -c JT6MTransmit.cpp

Noise.o:	Noise.cpp Noise.h Gaussian.h
		$(CC) $(CFLAGS) -c Noise.cpp

NoisyNCO.o:	NoisyNCO.cpp NoisyNCO.h Gaussian.h
		$(CC) $(CFLAGS) -c NoisyNCO.cpp

NoisyToneGenerator.o: NoisyToneGenerator.cpp NoisyToneGenerator.h NoisyNCO.h
		$(CC) $(CFLAGS) -c NoisyToneGenerator.cpp

SunAndMoon.o:	SunAndMoon.cpp SunAndMoon.h
		$(CC) $(CFLAGS) -c SunAndMoon.cpp

ToneGenerator.o: ToneGenerator.cpp ToneGenerator.h
		$(CC) $(CFLAGS) -c ToneGenerator.cpp

WAVEdit.o:	WAVEdit.cpp WAVEdit.h
		$(CC) $(CFLAGS) -c WAVEdit.cpp

clean:
		rm -f AudioData AudioMixerTest DopplerTest Fade FFTPhase FFTSpeed \
		FSK441Decoder FSK441Transmit JT44Decoder JT44Transmit \
		JT6MDecoder JT6MTransmit Noise NoisyToneGenerator \
		SunAndMoon ToneGenerator WAVEdit core *.o *~ *.bak
