FLAGSDBG=-g -DDEBUG -DVERBOSE
FLAGSOPT=-O3

FILES=nr.cpp nr.h matrix.cpp matrix.h proved.cpp proved.h heuristic.cpp heuristic.h fast.cpp fast.h dpe.h wrapper.h wrapper.cpp fplll.h fast_earlyred.h heuristic_early_red.h
PREFIX=/usr


all:fplll fplll_verbose generate llldiff

dbg:fplll_dbg generate_dbg

verbose:fplll_verbose generate_verbose


generate:${FILES} generate.cpp
	g++ ${FLAGSOPT} generate.cpp -lgmp -lmpfr -o generate 

generate_dbg:${FILES} generate.cpp
	g++ ${FLAGSDBG} generate.cpp -lgmp -lmpfr -o generate_dbg

generate_verbose:${FILES} main.cpp
	g++ ${FLAGSOPT} -DVERBOSE main.cpp -lgmp -lmpfr -o generate_verbose


fplll:${FILES} main.cpp
	g++ ${FLAGSOPT} main.cpp -lgmp -lmpfr -o fplll

fplll_dbg:${FILES} main.cpp
	g++ ${FLAGSDBG} main.cpp -lgmp -lmpfr -o fplll_dbg

fplll_verbose:${FILES} main.cpp
	g++ ${FLAGSOPT} -DVERBOSE main.cpp -lgmp -lmpfr -o fplll_verbose



llldiff:${FILES} llldiff.cpp
	g++ ${FLAGSOPT} -DVERBOSE llldiff.cpp -lgmp -lmpfr -o llldiff


test:${FILES} test.cpp
	g++ test.cpp -lgmp -lmpfr -g -o test
	./test &> toto


install:fplll generate
	install fplll ${PREFIX}/bin
	install fplll_verbose ${PREFIX}/bin
	install generate ${PREFIX}/bin
	if [ ! -d ${PREFIX}/include/fplll ] ; then mkdir ${PREFIX}/include/fplll ; fi
	install dpe.h ${PREFIX}/include/fplll
	install fplll.h ${PREFIX}/include/fplll
	install nr.h  ${PREFIX}/include/fplll
	install nr.cpp ${PREFIX}/include/fplll
	install matrix.h  ${PREFIX}/include/fplll
	install matrix.cpp ${PREFIX}/include/fplll
	install proved.h  ${PREFIX}/include/fplll
	install proved.cpp ${PREFIX}/include/fplll
	install heuristic.h  ${PREFIX}/include/fplll
	install heuristic.cpp ${PREFIX}/include/fplll
	install fast.h ${PREFIX}/include/fplll
	install fast_earlyred.h ${PREFIX}/include/fplll
	install fast.cpp ${PREFIX}/include/fplll
	install wrapper.h ${PREFIX}/include/fplll
	install wrapper.cpp ${PREFIX}/include/fplll
	install heuristic_early_red.h ${PREFIX}/include/fplll



check:${FILES} main.cpp
	./fplll -c 55 -r 55 < dim55_in > foo
	cat foo dim55_out | ./llldiff -c 55 -r 55
	rm foo
	./fplll -c 11 -r 10 -m heuristic < example_in > foo
	cat foo example_out | ./llldiff -c 11 -r 10
	rm foo
	./fplll -c 11 -r 10 -m fast -f double < example_in > foo
	cat foo example_out | ./llldiff -c 11 -r 10
	rm foo
	./fplll -c 11 -r 10 -m proved < example_in > foo
	cat foo example_out | ./llldiff -c 11 -r 10
	rm foo
	./fplll -c 11 -r 10 -m fastearly -f double < example_in > foo
	cat foo example_out | ./llldiff -c 11 -r 10
	rm foo
	./fplll -c 11 -r 10 -m heuristicearly < example_in > foo
	cat foo example_out | ./llldiff -c 11 -r 10
	rm foo


clean:
	rm -rf *~ semantic.cache callgrind* fplll fplll_opt fplll_dbg fplll_verbose generate generate_dbg test toto foo *.o llldiff tutu
