CC = g++
CFLAGS = -g -Wall -std=c++11 -static-libgcc -static-libstdc++

MY_INCLUDES = -I ./include
GLEW_INCLUDES = -I ./packages/glew/include
GLFW_INCLUDES = -I ./packages/glfw/include
GLM_INCLUDES = -I ./packages/glm
SOIL_INCLUDES = -I ./packages/soil/src

MINGW_LIBDIR = -L C:/MinGW/lib
GLEW_LIBDIR = -L ./packages/glew/lib
GLFW_LIBDIR = -L ./packages/glfw/lib-mingw
SOIL_LIBDIR = -L ./packages/soil/lib

INCLUDES = $(MY_INCLUDES) $(GLEW_INCLUDES) $(GLFW_INCLUDES) $(GLM_INCLUDES) $(SOIL_INCLUDES)
LIBDIRS = $(GLEW_LIBDIR) $(GLFW_LIBDIR) $(MINGW_LIBDIR) $(SOIL_LIBDIR)
LIBS = -lsoil -lglew32 -lglfw3 -lopengl32 -lglu32 -lgdi32

OBJF = ./obj/main.o ./obj/Shader.o

all: prepare shaders resources $(OBJF)
	$(CC) $(CFLAGS) $(LIBDIRS) $(OBJF) $(LIBS) -o ./out/program.exe

./obj/main.o: ./src/main.cpp
	$(CC) $(CFLAGS) $(INCLUDES) -c ./src/main.cpp -o ./obj/main.o

./obj/Shader.o: ./src/Shader.cpp
	$(CC) $(CFLAGS) $(INCLUDES) -c ./src/Shader.cpp -o ./obj/Shader.o

prepare:
	mkdir -p obj
	mkdir -p out

resources:
	cp -avr resources out

shaders: ./shaders/fragmentShader.glsl ./shaders/vertexShader.glsl
	mkdir -p out/shaders
	cp shaders/*.glsl out/shaders

clean:
	rm -r obj
	rm -r out/shaders
	rm out/program.exe

.PHONY: all prepare shaders resources clean