
################## FXT makefile ##########################

#
# 'make' is a funny relict of stonetime
# any generally accepted alternative ? 
#

CXX=g++
#CC=g++

AUXOBJS= \
scramble.o  \
sincos.o  \
sincostb.o  \
resample.o  \

FFTOBJS= \
fft/fftdit2l.o  \
fft/fftdit4.o  \
fft/fftdit4l.o  \
fft/fftdif2l.o  \
fft/fftdif4.o  \
fft/fftdif4l.o  \
fft/fft08.o  \
fft/fft8.o  \
fft/fft8dit.o  \
fft/fft8dif.o  \
fft/fftduh.o  \
fft/cococo.o  \
fft/fftcnvl.o  \
fft/fftcnvla.o  \
fft/fftcorr.o  \
fft/fftspect.o  \

RFFTOBJS= \
realfft/rfftfht.o  \
realfft/rfftsplc.o  \
realfft/rfftsplr.o  \
realfft/rfftwrap.o  \

OTHERFFTOBJS= \
cfftaux.o  \
cfftwrap.o  \
chirpfft/fftchirp.o  \
chirpfft/fftfract.o  \
ndimfft/fftwide.o  \
ndimfft/fftndim.o  \
pfa/pfafft.o  \

FOURSTEPOBJS= \
fourstep/aux4step.o  \
fourstep/transpos2.o  \
fourstep/fft4step.o  \
fourstep/cnvl4step.o  \

FHTOBJS= \
fht/fht.o  \
fht/fht0.o  \
fht/fhttable.o  \
fht/fhtfft.o  \
fht/fhtcnvl.o  \
fht/fhtcnvla.o  \
fht/fhtcorr.o  \
fht/fhtspect.o  \
#fhtdit2.o  \

SLOWOBJS= \
slow/slowft.o  \
slow/slowht.o  \
slow/slowcoco.o  \
slow/slowcnvl.o  \
slow/slowcorr.o  \

WALSHOBJS= \
walsh/walshdit2.o \
walsh/walshdif2.o \
walsh/walshwide.o \
walsh/walshndim.o \
walsh/dyadiccnvl.o \
walsh/graycode.o \


#
OBJS = \
$(AUXOBJS) \
$(FFTOBJS) \
$(RFFTOBJS) \
$(FHTOBJS) \
$(CONVCORRSPECTOBJS) \
$(OTHERFFTOBJS) \
$(FOURSTEPOBJS) \
$(WALSHOBJS) \
$(SLOWOBJS) \

#
SRC=$(OBJS:.o=.cc)

#
DEP=depend.mk



# optimizations:
OFLAGS =  -O -ffast-math -fomit-frame-pointer
# THIS is the place to try your favorite optimization combo !
# -funroll-loops makes it slower 
# -O is better than -O2 and -O6  (with gcc 2.6.3 and gcc 2.7.2)
# -fomit-frame-pointer gives little speedup
# if debugging don't use -fomit-frame-pointer
# use -O9 on HP/UX

# warnings: 
WFLAGS = -Wall -Wstrict-prototypes -Wconversion -Winline #-pedantic

# debuging:
GFLAGS = -g  #-fno-inline -fno-default-inline

# for src files in subdirectories:
INCFLAG = -I./
#export INCFLAG

#
# for implicit rules
#
#### choose the FLAG combo here:
CXXFLAGS = 
CXXFLAGS += $(INCFLAG)  # required
CXXFLAGS += $(WFLAGS)  # uncomment for warnings (recommended)
CXXFLAGS += $(OFLAGS)  # uncomment for optimization
#CXXFLAGS += $(GFLAGS)  # uncomment for debugging



FXTLIB=libfxt.a



.PHONY: all lib
all: $(FXTLIB)
lib: $(FXTLIB)

$(FXTLIB): testdep objs
	@echo 'BUILDING THE FXT ARCHIVE: $@ '
	@ar rcs $@ $(OBJS) mod/*.o
	#nm -C $@ 

.PHONY: obj objs
obj:  $(OBJS) modobjs
objs: $(OBJS) modobjs



.PHONY: modobjs
modobjs:
	@cd mod; $(MAKE) objs



TESTBIN=tbin.exe

#TESTSRC= test/testwalsh.cc
TESTSRC= test/test.cc


.PHONY: test
test: all $(TESTSRC)
	@echo ' compiling highly cryptic test code ... '
	$(CXX) $(TESTSRC) $(CXXFLAGS) $(FXTLIB) -o $(TESTBIN)
	@echo ' executing highly cryptic test code ... '
	$(TESTBIN)


# use 'make dep' to create $(DEP):
include $(DEP)

$(DEP):
	$(CXX) -MM  $(INCFLAG) $(SRC) > $(DEP)


#-------------------------------------
#

# existence of CLOBBERFLAGFILE reminds that 
# the dependency files have to be remade:
CLOBBERFLAGFILE=zzzzclfl.mk

.PHONY: testdep
testdep:
	-test -f $(CLOBBERFLAGFILE) && $(MAKE) dep

.PHONY: dep depend
dep: depend
depend:
	$(CXX) -MM $(INCFLAG) $(SRC) > $(DEP)
	cd mod; $(MAKE) dep
	rm -f $(CLOBBERFLAGFILE)

.PHONY: clean
clean:	
	rm -f  core .gdb_history $(TESTBIN)
	-find . -name \*.o -exec rm {} \;
	cd simplfft; $(MAKE) clean
	cd mod; $(MAKE) clean

.PHONY: clobber
clobber:	
	$(MAKE) clean
	echo "clobber was made ... " > $(CLOBBERFLAGFILE)
	rm -f  $(FXTLIB)
	rm -f fxtremarks.*
	echo '' > $(DEP)
	cd simplfft; $(MAKE) clobber
	cd mod; $(MAKE) clobber


.PHONY: help usage
help: usage
usage: 
	@echo '------------------------------------'
	cat 00readme.txt
	@echo '------------------------------------'


.PHONY: showsrc
showsrc:
	@-ls -1 `echo $(SRC)` > tmp1
	@-ls -1 *.cc > tmp2
	@echo 'source files are:'
	@cat tmp1
	@-diff tmp1 tmp2 > tmp3
	@-grep '>' tmp3 > tmp2
	@echo 'NON source files are:'
	@cat tmp2
	@rm tmp1 tmp2 tmp3


.PHONY: new
new:
	@echo recompiling everything ...
	$(MAKE) clobber
	$(MAKE) depend
	$(MAKE) all


.PHONY: bak
bak:
	$(MAKE) clobber
	cp -aruv * /bak/fxt/


ZBAK=/bak/zbak/fxt/fxt`date '+%y%m%d'`.tgz

.PHONY: zbak
zbak:
	$(MAKE) clobber
	cd ..;  tar -cvzf $(ZBAK) fxt;  ls -l $(ZBAK)


ZDIST=/bak/zbak/fxt/fxt`date '+%y%m%d'`.tgz
HOME=/home/jj

.PHONY: dist
dist:
	$(MAKE) clobber
	cd $(HOME)/work/fxtremarks;  $(MAKE) 4fxt
	cd ..;  tar -cvzf $(ZDIST) hfloat;  ls -l $(ZDIST)

################## end FXT makefile ##########################
