# Verbosity of make output
ifeq ("$(VERBOSE)","1")
V :=
else
V := @
endif

# Debugging
ifeq ("$(DEBUG)","0")
D :=
else
D := -g
endif

# Optimizations
ifeq ("$(OPTIMIZE)","1")
O := -O1
else ifeq ("$(OPTIMIZE)", "2")
O := -O2
else ifeq ("$(OPTIMIZE)", "3")
O := -O3
else
O := -O0
endif

SRC_DIR=src
INCLUDE_DIR=include
BUILD_DIR=build

CC=clang++
WARNINGS_ON=-Weverything
WARNINGS_OFF=-Wno-missing-braces -Wno-gnu-anonymous-struct -Wno-old-style-cast\
			 -Wno-zero-as-null-pointer-constant -Wno-nested-anon-types\
			 -Wno-padded -Wno-exit-time-destructors -Wno-global-constructors

CFLAGS=$(D) $(O) -std=c++11 $(WARNINGS_ON) $(WARNINGS_OFF) -I$(INCLUDE_DIR)
LIBS=-lSDL2

_HEADERS = color.h engine.h geometry.h loader.h platform.h point.h transform.h util.h
HEADERS = $(patsubst %,$(INCLUDE_DIR)/%,$(_HEADERS))

_OBJS = engine.o geometry.o loader.o main.o platform.o transform.o
OBJS = $(patsubst %,$(BUILD_DIR)/%,$(_OBJS))

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(HEADERS)
	@ if [ ! -d $(BUILD_DIR) ]; then mkdir $(BUILD_DIR); fi
	$(V) $(CC) -c -o $@ $< $(CFLAGS)

$(BUILD_DIR)/engine: $(OBJS)
	$(V) $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
	rm -rf $(BUILD_DIR)