CC = gcc

MAYER_FFTS = time_mayer0 time_mayer1 time_mayer2 time_mayer3 \
             time_mayer4 time_mayer5 time_mayer_r time_mayer_fht \
             time_mayer6 time_mayer7

NET_FFTS = time_duhamel time_fourea time_fourea_r time_sing time_sing_r \
           time_numrec time_numrec_r time_sorensen_r

all: $(MAYER_FFTS) $(NET_FFTS)

.c.o:
	$(CC) -O4 -c $<

# Rebuild all the libraries

time.o: time.c

mayer/fft.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht0.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht1.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht2.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht3.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht4.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht5.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht6.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht7.o:
	sh -c 'cd mayer; make; cd ..'
mayer/fht2d.o:
	sh -c 'cd mayer; make; cd ..'

fourea/fftlib.o:
	sh -c 'cd fourea; make; cd ..'

duhamel/fft.o:
	sh -c 'cd duhamel; make; cd ..'

numrec/fft.o:
	sh -c 'cd numrec; make; cd ..'

sing/fft.o:
	sh -c 'cd sing; make; cd ..'

sorensen/fftc.o:
	sh -c 'cd sorensen; make; cd ..'

# Create timing programs for my FFTs
M = mayer
time_$(M).o: fft_timer.c
	$(CC) -O4 -c -o time_$(M).o -DFFT_MAYER fft_timer.c
time_$(M)0: time_$(M).o time.o $(M)/fht0.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)0 time_$(M).o time.o $(M)/fht0.o $(M)/fft.o -lm
time_$(M)1: time_$(M).o time.o $(M)/fht1.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)1 time_$(M).o time.o $(M)/fht1.o $(M)/fft.o -lm
time_$(M)2: time_$(M).o time.o $(M)/fht2.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)2 time_$(M).o time.o $(M)/fht2.o $(M)/fft.o -lm
time_$(M)3: time_$(M).o time.o $(M)/fht3.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)3 time_$(M).o time.o $(M)/fht3.o $(M)/fft.o -lm
time_$(M)4: time_$(M).o time.o $(M)/fht4.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)4 time_$(M).o time.o $(M)/fht4.o $(M)/fft.o -lm
time_$(M)5: time_$(M).o time.o $(M)/fht5.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)5 time_$(M).o time.o $(M)/fht5.o $(M)/fft.o -lm
time_$(M)6: time_$(M).o time.o $(M)/fht6.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)6 time_$(M).o time.o $(M)/fht6.o $(M)/fft.o -lm
time_$(M)7: time_$(M).o time.o $(M)/fht7.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)7 time_$(M).o time.o $(M)/fht7.o $(M)/fft.o -lm
time_$(M)_r.o: fft_timer.c
	$(CC) -O4 -c -o time_$(M)_r.o -DFFT_MAYER_REAL fft_timer.c
time_$(M)_r:  time_$(M)_r.o time.o $(M)/fht3.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)_r time_$(M)_r.o time.o $(M)/fht3.o $(M)/fft.o -lm
time_$(M)_fht.o: fft_timer.c
	$(CC) -O4 -c -o time_$(M)_fht.o -DFFT_MAYER_FHT fft_timer.c
time_$(M)_fht:  time_$(M)_fht.o time.o $(M)/fht5.o $(M)/fft.o
	$(CC)  -O4 -o time_$(M)_fht time_$(M)_fht.o time.o $(M)/fht5.o -lm

# Create timing programs for other FFTs

time_duhamel: fft_timer.c time.o duhamel/fft.o
	$(CC) -O4 -c -o time_duhamel.o -DFFT_DUHAMEL fft_timer.c
	$(CC) -O4 -o time_duhamel time_duhamel.o time.o duhamel/fft.o -lm

time_fourea: fft_timer.c time.o fourea/fftlib.o
	$(CC) -O4 -c -o time_fourea.o -DFFT_FOUREA fft_timer.c
	$(CC) -O4 -o time_fourea time_fourea.o time.o fourea/fftlib.o -lm

time_fourea_r: fft_timer.c time.o fourea/fftlib.o
	$(CC) -O4 -c -o time_fourea_r.o -DFFT_FOUREA_REAL fft_timer.c
	$(CC) -O4 -o time_fourea_r time_fourea_r.o time.o fourea/fftlib.o -lm


time_sing: fft_timer.c time.o sing/fft.o
	$(CC) -O4 -c -o time_sing.o -DFFT_SING fft_timer.c
	$(CC) -O4 -o time_sing time_sing.o time.o sing/fft.o -lm

time_sing_r: fft_timer.c time.o sing/fft.o
	$(CC) -O4 -c -o time_sing_r.o -DFFT_SING_REAL fft_timer.c
	$(CC) -O4 -o time_sing_r time_sing_r.o time.o sing/fft.o -lm

time_numrec: fft_timer.c time.o numrec/fft.o
	$(CC) -O4 -c -o time_numrec.o -DFFT_NUMREC fft_timer.c
	$(CC) -O4 -o time_numrec time_numrec.o time.o numrec/fft.o -lm

time_numrec_r: fft_timer.c time.o numrec/fft.o
	$(CC) -O4 -c -o time_numrec_r.o -DFFT_NUMREC_REAL fft_timer.c
	$(CC) -O4 -o time_numrec_r time_numrec_r.o time.o numrec/fft.o -lm

time_sorensen_r: fft_timer.c time.o sorensen/fftc.o
	$(CC) -O4 -c -o time_sorensen_r.o -DFFT_SORENSEN_REAL fft_timer.c
	$(CC) -O4 -o time_sorensen_r time_sorensen_r.o time.o sorensen/fftc.o -lm

