# Compilator Definitions

export CXX = g++
export CC = gcc
export LD = g++

export DEFINES += 
export DEFINES_DBG += $(DEFINES) -ggdb

export CXXFLAGS += -Wall -Werror -Wextra -pedantic -ansi $(DEFINES_DBG) -I ./inc/
export CFLAGS += -Wall -Werror -Wextra -pedantic -ansi -I ./inc/
export LDFLAGS += -lglut -lGL -lGLU -lGLEW -lfmodex -L ./lib/

# Folders settings

CALLBACKS_DIR = Callbacks
MATH_DIR = Math
TYPES_DIR = Types
UTILS_DIR = Utils
CAMERA_DIR = Camera
SHADERS_DIR = Shaders
PARTICLES_DIR = Particles
SOUNDS_DIR = Sound
TEXTS_DIR = Texts

# Compilation Rules

EXEC = Framework
CALLBACKS = $(CALLBACKS_DIR)/Timer.o $(CALLBACKS_DIR)/Reshape.o $(CALLBACKS_DIR)/Keyboard.o $(CALLBACKS_DIR)/Close.o $(CALLBACKS_DIR)/Sound.o
MATH = $(MATH_DIR)/Vertex3.o
TYPES = 
UTILS = $(UTILS_DIR)/Tables.o
CAMERA = $(CAMERA_DIR)/Camera.o
SHADERS = $(SHADERS_DIR)/ShaderLoader.o $(SHADERS_DIR)/GLShader.o $(SHADERS_DIR)/VShader.o $(SHADERS_DIR)/FShader.o $(SHADERS_DIR)/PShader.o
PARTICLES = $(PARTICLES_DIR)/MemoryPool.o $(PARTICLES_DIR)/Particle.o $(PARTICLES_DIR)/ParticleSystem.o
SOUNDS = $(SOUNDS_DIR)/Music.o
TEXTS = $(TEXTS_DIR)/Text.o
OBJECTS = main.o Window.o $(CALLBACKS) $(MATH) $(UTILS) $(CAMERA) $(SHADERS) $(PARTICLES) $(TEXTS) Scene.o $(SOUNDS)


all: $(EXEC)

%.o: %.cpp *.hpp
	@echo "$(CXX) $< -> $@";\
	$(CXX) $(CXXFLAGS) -c $< -o $@

%.o: %.cpp *.h
	@echo "$(CXX) $< -> $@";\
	$(CXX) $(CXXFLAGS) -c $< -o $@

%.o: %.c *.h
	@echo "$(CC) $< -> $@";\
	$(CC) $(CFLAGS) -c $< -o $@

$(EXEC): $(OBJECTS)
	@echo "$(LD) ($(OBJECTS)) -> $(EXEC)";\
	$(LD) $(LDFLAGS) $(OBJECTS) -o $@

.PHONY: clean mrproper

clean:
	rm -rfv $(OBJECTS)

mrproper: clean
	rm -rfv $(EXEC)

