CC=g++

ifeq "$(distrib)" ""
	distrib=debug
endif

ifeq "$(distrib)" "debug"
CFLAGS=-Wall -DDEBUG -fmax-errors=2 -std=c++11
OFLAGS=-ggdb -fno-inline
endif

ifeq "$(distrib)" "release"
CFLAGS=-Wall -std=c++11
OFLAGS=-O2 -msse4.2 -funroll-loops --param max-unroll-times=8
endif

ifeq "$(distrib)" "profile"
CFLAGS=-Wall 
OFLAGS=-pg -msse4.2 -funroll-loops --param max-unroll-times=8
endif


SRCS=$(shell ls src/*.cpp)
OBJS=$(subst .cpp,.o,$(subst src/,obj/,$(SRCS)))
EXE=bin/main_$(distrib).exe

all: $(EXE)

$(EXE): $(OBJS)
	$(CC) -o $@ $(OBJS) $(OFLAGS)

obj/%.o: src/%.cpp
	$(CC) -c -o $@ $< $(CFLAGS) $(OFLAGS)

clean:
	rm obj/*.o bin/*.exe

release:
	make --no-print-directory distrib=release

profile:
	make --no-print-directory distrib=profile
	bin/main_profile.exe
	gprof bin/main_profile.exe >profile.txt
