
################## HFLOAT makefile ##########################

CXX = g++
PPLIB = -lstdc++
CXXFLAGS += -pipe -fno-exceptions
#CXXFLAGS += -D__NO_MATH_INLINES

#ARCHFLAG = -march=i586 # k6, i586, i686 ...  <--= ADJUST THIS to your CPU type
OFLAGS = -O -ffast-math
OFLAGS += $(ARCHFLAG)
OFLAGS += -fomit-frame-pointer # <--= disable for profiling

#OFLAGS += -fschedule-insns2
#OFLAGS += -finline -finline-functions
#OFLAGS += -fimplicit-templates

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

# warnings:
WFLAGS = -Wall -Wstrict-prototypes -Wconversion
WFLAGS += -Winline
WFLAGS += -Wsign-promo
#WFLAGS += -Weffc++
#WFLAGS += -pedantic

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

# profiling:
PFLAGS = -pg

INCFLAG = -I../include/ -I../fxt/include/ -I../fxt/auxil/ -I../fxt/mult/

#### choose the FLAG combo here:
CXXFLAGS += $(INCFLAG)
CXXFLAGS += $(WFLAGS) # uncomment for WARNINGS
CXXFLAGS += $(OFLAGS) # uncomment for OPTIMIZATION
#CXXFLAGS += $(GFLAGS) # uncomment for DEBUGGING
#CXXFLAGS += $(PFLAGS) # uncomment for PROFILING

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

# EXPORT for src/*/makefile:
export INCFLAG
export CXX
export GFLAGS
export OFLAGS
export WFLAGS
export CXXFLAGS
export PPLIB

# let src/fxt/makefile know it has been called from here:
export HFLOAT=1

#----------- only phony targets here --------------------------


.PHONY: pi calcpi
pi calcpi: libs
	@cd calcpi  &&  $(MAKE) all

.PHONY: static
static:
	@cd calcpi  &&  $(MAKE) static

.PHONY: piboook
pibook: libs
	@cd calcpi  &&  $(MAKE) pibook

.PHONY: all
all: calcpi examples


.PHONY: libs lib
lib libs:
	@cd src  &&  $(MAKE) all


.PHONY: ex example examples
ex example examples: libs
	@cd examples  &&  $(MAKE) all

.PHONY: test testing te
test testing te: libs
	@echo '****** ******'
	@cd testing  &&  $(MAKE) all

.PHONY: log
log: clobber dep
	$(MAKE) all 2>&1 | tee compile-log.txt

#.PHONY: timing time ti
#ti:   timing
#time: timing
#timing: libs
#	@cd timing  &&  $(MAKE) all

#.PHONY: prof
#prof: libs
#	@cd timing  &&  $(MAKE) prof

.PHONY: m1 m2
m1: pi
	export MALLOC_CHECK_=1; bin/pi 10 314

m2: pi
	export MALLOC_CHECK_=2; bin/pi 10 314

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

.PHONY: dep depend
depend dep:
	cd src      &&  $(MAKE) $@
	cd calcpi   &&  $(MAKE) $@
	cd examples &&  $(MAKE) $@
#	cd testing  &&  $(MAKE) $@

.PHONY: dephf hfdep
dephf hfdep:
	cd src  &&  $(MAKE) $@


.PHONY: savepiexe
savepiexe:
	-cp bin/pi /tmp/pi

.PHONY: cleanhf hfclean
cleanhf hfclean:
	cd src &&      $(MAKE) $@

.PHONY: clean
clean: savepiexe
	cd src      &&  $(MAKE) $@
	cd calcpi   &&  $(MAKE) $@
	cd testing  &&  $(MAKE) $@
	cd examples &&  $(MAKE) $@

.PHONY: clobber
clobber: savepiexe
	rm -f bin/*
	rm -f pi[0-9]*_[0-9]*.out   ## from pi-race
	rm -f pi[0-9]*_summary.txt  ## from pi-race
	-mv -v tmp* /tmp/
	rm -f result* core gmon.out
	rm -f .gdb_history bin/.gdb_history
	cd src      &&  $(MAKE) $@
	cd calcpi   &&  $(MAKE) $@
	cd testing  &&  $(MAKE) $@
	cd examples &&  $(MAKE) $@

.PHONY: newhf
newhf:
	cd src  &&  $(MAKE) $@

.PHONY: newfxt
newfxt:
	cd src  &&  $(MAKE) $@

.PHONY: new
new:
	@echo "RECOMPILING EVERYTHING ... "
	$(MAKE) clobber
	$(MAKE) depend
	$(MAKE) all


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

.PHONY: shownote shownotes
shownote shownotes:
	-grep -i -A1 jjnote `find . -name \*.cc`  | grep -v bucket

.PHONY: showstatic showstatics
showstatic showstatics:
	-grep -i -A1 'static hf' `find . -name \*.cc`  | grep -v bucket


.PHONY: showsrc
showsrc:
	cd src &&  $(MAKE) $@

.PHONY: shownonsrc
shownonsrc:
	cd src &&  $(MAKE) showsrc | grep \>


.PHONY: bak
bak:
	$(MAKE) clobber
	cp -faruv * /bak/jj/hfloat/


ZBAK=/bak/zbak/hfloat/hfloat-`date '+%Y.%m.%d'`.tgz
.PHONY: zbak
zbak: date check
	$(MAKE) clobber
	cd .. &&  tar -cvzf $(ZBAK) hfloat &&  ls -l $(ZBAK)

.PHONY: zbaka
zbaka: zbak
	mcopy -o $(ZBAK) a:
	mcopy -o hfloat.lsm a:
	cd doc && mcopy -o whatfor.txt arith.* hfdoc.* a:
	-mmd -o dito
	mcopy -o $(ZBAK) a:dito
	cd /tmp && cp pi pi-x86.elf && gzip -f -9 pi-x86.elf && mcopy -o pi-x86.elf.gz a:
	mdir -/


LSMDATE=`date +%d%b%Y | tr a-z A-Z`
HFDATE=`date +'%d-%B-%Y'`
.PHONY: date
date:
	replace '(.*hfloat::version_string.*)"[^"]+"(.*)' '$$1'"\"$(HFDATE)\""'$$2' src/hf/hfloat.cc
	replace 'Entered-date.*$$' "Entered-date:   $(LSMDATE)" hfloat.lsm


.PHONY: check
check:
	cd src/fxt/ &&  $(MAKE) $@
	@echo
	grep version_string src/hf/hfloat.cc
	@echo
	grep -i date hfloat.lsm
	date
	@echo
	@echo CXX is $(CXX)
	@echo
	@echo CXXFLAGS are $(CXXFLAGS)
	@echo


.PHONY: help
help:
	grep '^\.PHONY' *akefile*

################## end HFLOAT makefile ##########################

