# Defines and stuff

#DEBUG_ON=1
UNIX=1
NEWLINE=1
FLAGS=-w
#INTEL=1
ifdef NEWLINE
	NEWLINE = @echo ""
endif
#INLINE=1

ifdef UNIX
ifdef INTEL
	CXX=/opt/intel_cc_80/bin/iccbin
	PROGRAM=a.out
	DEL=rm -rf
	EXT=*.bb *.bbg *.da *.d *.gcov *.o *.bmp *.o gmon.out
	DFLAGS=-g -pg -fprofile-arcs  -fbranch-probabilities -ftest-coverage
	DFLAGS=-g -pg
	LIBS=-lm `sdl-config --libs` -ldl
	OP= -O3 -mcpu=pentiumpro -axK -march=pentiumiii -tpp6 \
	-mp -pc32 -vec_report4 -rcd -ipo5 -ip -Ob2
	WARN=-w
else
	CXX=g++-4.3
	#CXX=/usr/local/arm/3.3.2/bin/arm-linux-gcc
	#CXX=/Developer/usr/bin/llvm-g++-4.2
	PROGRAM=a.out
	DEL=rm -rf
	EXT=*.bb *.bbg *.da *.d *.gcov *.o *.bmp *.o gmon.out
	DFLAGS=-g -pg -fprofile-arcs  -fbranch-probabilities -ftest-coverage
	DFLAGS=-g -pg
	LIBS=-lm `sdl-config --libs` -ldl
	#OP= -arch i386 -fmessage-length=0 -Os -funroll-loops -ftree-vectorize -fvisibility=hidden -fvisibility-inlines-hidden -O4
	OP= -ffast-math \
	-Os \
	-funroll-loops -ftree-vectorize -fvisibility=hidden -fvisibility-inlines-hidden \
	-fmessage-length=0 \
	-minline-all-stringops -funroll-loops -fforce-addr \
	-mno-push-args -maccumulate-outgoing-args -mno-align-stringops \
	-fsingle-precision-constant -ftracer \
	-finline-limit=5001 \
	-mtune=generic -msse -msse3 -msse3 -mfpmath=sse #atom
	-march=prescott -pipe -fomit-frame-pointer \
	#-msse2 -march=prescott -mmmx -mfpmath=sse,387 \
	#-ftree-vectorizer-verbose=5 \
	#-m64 -march=k8 -mfpmath=sse -mmmx -msse \
	#-march=pentium3 -mfpmath=sse -mmmx -msse 
	#WARN=-Wall 
	WARN=-w
	#WARN= -Wreturn-type -Wformat -Wmissing-braces -Wparentheses -Wswitch -Wunused-function -Wunused-variable -Wunused-value -Wuninitialized -Wshadow -Wsign-compare -Wnewline-eof -Wno-trigraphs
	#-w #-Werror -w #-Winline
endif

ifdef DEBUG_ON
	FLAGS= $(WARN)  $(DFLAGS)
	DEBUG_CMD=/bin/sh ./debug_data/d.debug
else
	FLAGS= $(WARN) $(OP)
endif

endif #UNIX

# Make commands

# objects
COMMON_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./common/*.cpp))
FRONTEND_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./frontend/*.cpp))
INTERSECT_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./intersect/*.cpp))
LOAD_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./load/*.cpp))
MISC_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./misc/*.cpp))
PARSE_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./parse/*.cpp))
RENDER_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./render/*.cpp))
SHADER_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./shader/*.cpp))
POST_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./shader/post/*.cpp))
PRIMITIVES_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./Hierarchy/*.cpp))
HIERARCHY_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./Primitives/*.cpp))
#CONFIG_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./config/*.cpp))

OBJECTS=slim.o $(COMMON_OBJECTS) $(RENDER_OBJECTS) $(LOAD_OBJECTS) $(INTERSECT_OBJECTS) $(FRONTEND_OBJECTS) $(POST_OBJECTS) $(SHADER_OBJECTS) $(MISC_OBJECTS) $(PARSE_OBJECTS) $(PRIMITIVES_OBJECTS) $(HIERARCHY_OBJECTS)

# build stuff
makeall:
	$(NEWLINE)
	make $(PROGRAM)
#	$(DEBUG_CMD)

debug:
	$(NEWLINE)
	make $(PROGRAM)
	$(CXX) $(FLAGS) $(LIBS) $(OP) -o $(PROGRAM) $(OBJECTS)
#	$(DEBUG_CMD)

$(PROGRAM): $(OBJECTS) 
	$(CXX) $(FLAGS) $(LIBS) $(OP) -o $(PROGRAM) $(OBJECTS)

#%.o: %.cpp %.h
%.o: %.cpp
	@echo "--$@--"
	$(CXX) -c  $(FLAGS) -o $@ $<
	$(NEWLINE)

#make parts of program
load: $(LOAD_OBJECTS) 
render: $(RENDER_OBJECTS) 
common: $(COMMON_OBJECTS)

# clean crap
.PHONEY: clean cleanall
clean:
	@echo $(OBJECTS)
	$(NEWLINE)
	$(DEL) $(OBJECTS)

cleanall:
	make clean
	ls
	find ./ -name "*.o" | xargs rm -rf 2> /dev/null
	find ./ -name "*bmp" | xargs rm -rf 2> /dev/null
	find ./ -name "*.bb" | xargs rm -rf 2> /dev/null
	find ./ -name "*.bbg" | xargs rm -rf 2> /dev/null
	find ./ -name "*.da" | xargs rm -rf 2> /dev/null
	find ./ -name "*.d" | xargs rm -rf 2> /dev/null
	find ./ -name "*.gcov" | xargs rm -rf 2> /dev/null
	find ./ -name "*.gcda" | xargs rm -rf 2> /dev/null
	find ./ -name "*.gcno" | xargs rm -rf 2> /dev/null
	#make -s -i -f ../Makefile -C $(FRONTDIR) clean-debug
