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

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

OBJS= \
mod.o \
modfuncs.o \
modinit.o \
modcnvl.o \
modaux.o \
mscrambl.o  \
factor.o \
phi.o \
gcd.o \
primroot.o \
modsft.o \
mfftdit2.o \
mfftdif2.o \
mfftdit4.o \
mfftdif4.o \
mfftwide.o \
mfftndim.o \
#montgomery.o 

#mfftlearn.o  # learner's modfft version

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

#
DEP=depend.mk


#
MODLIB=libmod.a


# optimizations:
OFLAGS = -O6 -ffast-math -fomit-frame-pointer -funroll-loops
# the place to try your favorite optimization combo !
# use -O6  (tested with 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 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):  $(OBJS)
	@del $@ $(GARBAGE)
	@echo 'BUILDING THE MOD ARCHIVE: $@ '
	@ar rcs $@ $(OBJ)
	@ranlib $@


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


#TESTSRC=test.cc
TESTSRC=sinx.cc
TESTBIN=tbin.exe
$(TESTBIN): $(TESTSRC) $(MODLIB)

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


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

$(DEP):
	$(CXX) -MM *.cc > $(DEP)


#-------------------------------------
.PHONY: dep depend
dep: depend
depend:
	$(CXX) -MM *.cc > $(DEP)


.PHONY: clean
clean:	
	@del  *.o $(GARBAGE)
	@del  $(TESTBIN) $(GARBAGE)


.PHONY: clobber
clobber:	
	@del  *.o $(GARBAGE) 
	@del $(MODLIB) $(GARBAGE)
	@del $(TESTBIN) $(GARBAGE)


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


