# $Id: Makefile 103 2004-12-15 16:03:04Z olau $
PROJ = bwt
BINDIR = /usr/local/bin
MANDIR = /usr/man
INSTALLPERMS = 0755
OPTIMIZE = -O3 -march=pentium4
#DEBUGFLAGS = -ggdb
DEBUGFLAGS =
CFLAGS = $(OPTIMIZE) -Wall -DUNIX -s
#XXX towi: CXXFLAGS is a regular predefined makefile definition
#XXX   (on gnu/unix?). maybe not a good idea to override it? 
CXXFLAGS = $(CFLAGS)

# Possible definitions to change program behaviour. 
#   See source (i.e. bwt.c) for details.
# CFLAGS += -DSTATISTICS
# CFLAGS += -DNO_PROGRESS_DOTS
# CFLAGS += -D_WAIT_FOR_KEYPRESS
# CFLAGS += -DFILEWRITE_INDEX

SORT_O := 


####################################################################

linux:
	$(MAKE) all CC="gcc" CXX="g++" O=".o" X="" \
		CFLAGS="$(CFLAGS)" \
		CXXFLAGS="$(CXXFLAGS)" \
        LFLAGS="" \
        LIBS="" \
        OUT=-o

unix:
	$(MAKE) all CC="gcc" CXX="g++" O=".o" X="" \
		CFLAGS="-ggdb -DDEBUG -s" \
		CXXFLAGS="$(CXXFLAGS)" \
		LFLAGS="" \
		LIBS="" \
		OUT=-o

darwin:
	$(MAKE) all CC="gcc" CXX="g++" O=".o" X="" \
		CFLAGS="-ggdb $(OPTIMIZE) -Wall -DDARWIN -DDEBUG" \
		LFLAGS="" \
		LIBS="" \
		OUT=-o

win32:
	$(MAKE) all CC="gcc" CXX="g++" O=".o" X=".exe" \
		CFLAGS="-s -Wall $(OPTIMIZE)" \
		LFLAGS="" \
		LIBS="" \
		OUT=-o

INC = -I.

all: $(PROJ)$X

clean:
	$(RM) -f -r *.o *.s *.bak *~
	$(RM) -f $(PROJ)
	make -C deep_shallow clean

# call 'make clean' for all Makefiles found.
#   we all know xargs, but did you know "xargs -n 1"? useful, when "find -exec" fails. :-)
allclean:
	find . -name Makefile -printf "%h\n"| xargs -n 1 make clean -C

win32-clean:
	-del *.o
	-del *.bak
	-del *.s
	-del deep_shallow/*.o
	-del $(PROJ).exe

install:
	install -d -v -m $(INSTALLPERMS) $(BINDIR)
	install -s -o root -g root -m $(INSTALLPERMS) $(PROJ) $(BINDIR)

.SUFFIXES: .cpp .c .h $O
.c$O:
	$(CC) $(CFLAGS) $(INC) -c $*.c

.cpp$O:
	$(CC) $(CXXFLAGS) $(INC) -c $*.cpp

output$O: output.cpp output.h Makefile

search$O: search.cpp search.h Makefile

compressor$O: compressor.cpp compressor.h Makefile

deep_shallow$O: deep_shallow.cpp ds.h Makefile

timer$O: timer.cpp timer.h Makefile

########################################
#
# benchmarks
#

benchmark: 
	@echo '====================================================='
	@echo '===                                               ==='
	@echo '===          RUNNING BENCHMARK TESTS              ==='
	@echo '===                                               ==='
	@echo '====================================================='
	./benchmark.sh 1000


########################################
#
# demos
#

demos: demo1 demo2 demo3

DEMO1_FILE := Testdaten/Benchmark/T4
DEMO1_PATT := eenemeenemuh
DEMO1_ITERS := 1000
demo1: bwt
	@echo '====================================================='
	@echo '===                                               ==='
	@echo '===                DEMO 1 SECTION                 ==='
	@echo '=== short text                                    ==='
	@echo '====================================================='
	./bwt $(DEMO1_FILE) $(DEMO1_PATT) $(DEMO1_ITERS)

DEMO2_FILE := Testdaten/Benchmark/T64
DEMO2_PATT := eenemeenemuh
DEMO2_ITERS := 1000
demo2: bwt
	@echo '====================================================='
	@echo '===                                               ==='
	@echo '===                DEMO 2 SECTION                 ==='
	@echo '=== medium sized text                             ==='
	@echo '====================================================='
	./bwt $(DEMO2_FILE) $(DEMO2_PATT) $(DEMO2_ITERS)

DEMO3_FILE := Testdaten/Benchmark/T512
DEMO3_PATT := eenemeenemuh
DEMO3_ITERS := 1000
demo3: bwt
	@echo '====================================================='
	@echo '===                                               ==='
	@echo '===                DEMO 3 SECTION                 ==='
	@echo '=== long text                                     ==='
	@echo '====================================================='
	./bwt $(DEMO3_FILE) $(DEMO3_PATT) $(DEMO3_ITERS)


###########################################
#
# build ./bwt
#
DEEPSHALLOW_O := $(foreach i,globals ds shallow helped deep2 blind2, deep_shallow/$i.o)
BWT_O := $(foreach i, bwt search timer output compressor deep_shallow, $i.o) $(SORT_O)

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c -o $@ $<

bwt: $(BWT_O) $(DEEPSHALLOW_O)
	$(CXX) $(CXXFLAGS) -o $@ $(BWT_O) $(DEEPSHALLOW_O)
	@echo '===                                               ==='
	@echo '=== compilation done. you might want to try now:  ==='         
	@echo '===   make demos                                  ==='
	@echo '===                                               ==='

#deep_shallow/ds.o: deep_shallow/ds.c
#	$(MAKE) -C deep_shallow
