
################## FXT/MOD makefile ##########################

#
CXX=g++
#CC=g++

OBJS= \
mod.o \
modinit.o \
modinfo.o \
modfuncs.o \
modmult.o \
primroot.o \
erastothenes.o \
order.o \
modaux.o \
mscramble.o  \
mcnvl.o \
mslowcnvl.o \
mslowft.o \
mfftdit2.o \
mfftdif2.o \
mfftdit4.o \
mfftdif4.o \
mfftwide.o \
mfftndim.o \
mfftaux.o \
factor.o \
factaux.o \
arithmodm.o \
chinese.o \
sqrtmod.o \
kronecker.o \
rabinmiller.o \
phi.o \
gcd.o \
ipow.o \
jjassert.o \


#mfftlearn.o  # learner's modfft version

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

#
DEP=depend.mk


#
MODLIB=libmod.a


# optimizations:
OFLAGS = -O -ffast-math -fomit-frame-pointer -funroll-loops
# the place to try your favorite optimization combo !
# use -O (tested with gcc 2.7.2.x)
# -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 implicit rules
#
#### choose the FLAG combo here:
CXXFLAGS = 
CXXFLAGS += $(WFLAGS)  # uncomment for warnings
CXXFLAGS += $(OFLAGS)  # uncomment for optimization
#CXXFLAGS += $(GFLAGS)  # uncomment for debugging




.PHONY: all
all:  $(MODLIB)
$(MODLIB):  testdep  $(OBJS)
	@rm -f $@
	@echo 'BUILDING THE MOD ARCHIVE: $@ '
	@ar rcs $@ $(OBJS) 
	@ranlib $@

#primes.cc: makeprimes.cc
#	$(CXX) $< -o makeprimes
#	makeprimes > primes.cc
#	rm makeprimes


fftprimes:  fftprimes.cc $(MODLIB)
	$(CXX) $< $(MODLIB) -o $@
	$@
	rm $@

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


TESTSRC=test.cc
#TESTSRC=sinx.cc
TESTBIN=tbin.exe


.PHONY: test
test: $(TESTBIN)
	$(TESTBIN)

$(TESTBIN): $(MODLIB) $(TESTSRC)
	$(CXX) -g $(TESTSRC) $(CXXFLAGS) -O0 $(MODLIB) -o $(TESTBIN)



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

$(DEP):
	$(CXX) -MM $(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 $(SRC) > $(DEP)
	rm -f $(CLOBBERFLAGFILE)


.PHONY: clean
clean:	
	rm -f  core .gdb_history *.o $(TESTBIN) 


.PHONY: clobber
clobber:	
	echo "clobber was made ... " > $(CLOBBERFLAGFILE)
	rm -f  core *.o .gdb_history $(MODLIB) $(TESTBIN)
	echo '' > $(DEP)


.PHONY: new
new:
	$(MAKE) clobber
	$(MAKE) depend
	$(MAKE) all


.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


################## end FXT/MOD makefile ##########################
