# Defines and stuff

#d=1
UNIX=1
NEWLINE=1
#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++
	#CXX=/usr/local/arm/3.3.2/bin/arm-linux-gcc
	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 -ffast-math
	-m64 -march=k8 -mfpmath=sse -mmmx -msse \
	#-march=pentium3 -mfpmath=sse -mmmx -msse \
	#-malign-double\
	#-finline-limit=5001 \
	#-mno-push-args -maccumulate-outgoing-args -mno-align-stringops \
	#-minline-all-stringops	-funroll-loops -fforce-addr \
	#-fsingle-precision-constant -ftracer
	WARN=-Wall \
	-Werror -w #-Winline
endif
ifdef d
	FLAGS= $(WARN)  $(DFLAGS)
	DEBUG_CMD=/bin/sh ./debug_data/d.debug
else
	FLAGS= $(WARN) $(OP)
endif
	
	#making inline-limit larger provides a large speed increase
	#check -static
	# align-function makes it slower?
	#check regparm
	#check inline
	#check builtin functions
	#fix up fbranch-probabilities

	#gcc options:
	# g-debug info
	# pg-profile infor for prof
	# O3-optimizations
	# Wall-all warnings
	# c-compile but don't link
	# ftest-coverage-
	# o-output name
endif #UNIX

# Make commands

# objects
COLLISION_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./collision/*.cpp))
PQP_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./collision/pqp/*.cpp))
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))
POST_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./shader/post/*.cpp))
RENDER_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./render/*.cpp))
SHADER_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./shader/*.cpp))
SIMULATION_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./simulation/*.cpp))
SOUND_OBJECTS= $(patsubst %.cpp, %.o, $(wildcard ./sound/*.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) $(COLLISION_OBJECTS) $(PQP_OBJECTS) $(PARSE_OBJECTS) $(SIMULATION_OBJECTS) $(SOUND_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
	@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
