# file:        Makefile
# author:      Andrea Vedaldi
# description: Build SIFT++

CXX=g++
CXXFLAGS += -I. -g -O3 -DNDEBUG -Wall 
DIST=siftpp
VER=0.6.5

# Options:
# LOWE_STRICT - Be more similar to Lowe's version
# USEFASTMATH - Use faster approximated computations

CXXFLAGS += -DVL_LOWE_STRICT 
CXXFLAGS += -DVL_USEFASTMATH

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

# Determine on the flight the system we are running on
Darwin_ARCH := mac
Linux_ARCH  := glx
ARCH := $($(shell uname)_ARCH)

BINDIST=$(DIST)-$(ARCH)-$(VER)

mac_SPECS := -DVL_MAC
glx_SPECS := -DVL_GLX

CXXFLAGS += $($(ARCH)_SPECS)

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

.PHONY: all
all: sift

sift : sift.o sift-driver.o
	g++ $(CXXFLAGS) $^ -o $@

sift-static : sift.o sift-driver.o
	g++ $(CXXFLAGS) $^ -o $@ -static

benchmark : benchmark.o sift.o 
	g++ $(CXXFLAGS) $^ -o $@

sift-driver.o sift.o benchmark.o : sift.hpp sift.ipp sift-conv.tpp

.PHONY: clean
clean:
	rm -f *.o
	find . -name '*~' -exec rm -f \{\} \;
	find . -name '.DS_Store' -exec rm -f \{\} \;

.PHONY: distclean
distclean: clean
	rm -rf results dox
	rm -f sift sift-static benchmark
	rm -f .gdb_history
	rm -rf $(DIST)-*
	rm -rf $(BINDIST)
	rm -rf $(BINDIST)-static
	rm -f $(BINDIST)*.tar.gz

.PHONY: dox
dox:
	(test -e dox || mkdir dox)
	doxygen doxygen.conf

.PHONY: test
test: sift
	(test -e results || mkdir results)
	./sift --verbose --output results/img3.key --save-gss data/img3.pgm

.PHONY: autorights
autorights:
	autorights . \
	  --verbose \
	  --recursive \
	  --template notice.txt \
	  --years 2006 \
	  --authors "Andrea Vedaldi (UCLA VisionLab)" \
	  --program "SIFT++"

.PHONY: dist
dist: distclean
	echo Version $(VER) - Archived on `date` > TIMESTAMP
	tar chvzf $(DIST)-$(VER).tar.gz ../$(DIST) --exclude test

.PHONY: bindist
bindist: sift 
	test -e $(BINDIST) || mkdir $(BINDIST)
	cp sift $(BINDIST)
	cd $(BINDIST) ; strip -S sift
	tar cvzf $(BINDIST).tar.gz $(BINDIST)

.PHONY: bindist-static
bindist-static: sift-static
	test -e $(BINDIST)-static || mkdir $(BINDIST)-static
	cp sift-static $(BINDIST)-static
	cd $(BINDIST)-static ; strip -S sift-static
	tar cvzf $(BINDIST)-static.tar.gz $(BINDIST)-static
