CC = g++
OPT_FLAGS = -O3 -ffast-math -finline-functions
# -Wall -pedantic
DEBUG_FLAGS = -g -Wall -pedantic
EXTRA_FLAGS = -I/usr/X11R6/include 
# Add  -lplibsm -lplibsl  to LDFLAGS if you're not using FMOD, but you are using PLIB
LDFLAGS = -L/usr/X11R6/lib -lglut -lGLU -lGL -lX11 -lXmu

SRC = \
main.cpp

# gets over-ridden on the real make
OBJDIR := .
OBJS := $(SRC:%.cpp=$(OBJDIR)/%.o)

#default target
opt: .opt
	@echo "############ Starting Optimised build #########################"
	$(MAKE) verlet_collision CFLAGS="$(OPT_FLAGS) $(EXTRA_FLAGS)" OBJDIR=.opt

debug: .debug
	@echo "############ Starting debug build ##############################"
	$(MAKE) verlet_collision_debug CFLAGS="$(DEBUG_FLAGS) $(EXTRA_FLAGS)" OBJDIR=.debug

gprof: .gprof
	@echo "############ Starting gprof build ##############################"
	$(MAKE) verlet_collision_gprof CFLAGS="-pg $(DEBUG_FLAGS) $(EXTRA_FLAGS)" OBJDIR=.gprof

verlet_collision: $(OBJS)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) 

verlet_collision_debug: $(OBJS)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) 

verlet_collision_gprof: $(OBJS)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) 

.debug:
	mkdir .debug

.opt:
	mkdir .opt

.gprof:
	mkdir .gprof

doc: FORCE
	doxygen collision.dox

bw_to_orog: bw_to_orog.cpp
	$(CC) -g -o $@ bw_to_orog.cpp

tiff_to_orog: tiff_to_orog.c
	$(CC) -g -o $@ tiff_to_orog.c -ltiff

FORCE:

clean: debug_clean opt_clean gprof_clean

debug_clean:
	\rm -f *~ .debug/* verlet_collision_debug

opt_clean:
	\rm -f *~ .opt/* verlet_collision

gprof_clean:
	\rm -f *~ .gprof/* verlet_collision_gprof

# How we get a .o from a .cpp
$(OBJDIR)/%.o: %.cpp
	$(CC) -c $(CFLAGS) -o $@ $<

$(OBJDIR)/%.d: %.cpp
	$(CC) -MM $(CFLAGS) $< | sed -e "s/\(^[a-zA-Z]\)/$(OBJDIR)\/\1/" -e 's@^\(.*\)\.o:@\1.d \1.o:@' > $@

ifneq ($(OBJDIR),.)
-include $(OBJS:.o=.d)
endif



