CC = g++
CFLAGS = -Wall -W -pedantic -std=c++11
CLIBS = -lGL -lm -lGLEW -lSDL2 -lSDL2_mixer -lpng -lturbojpeg

DEMO = someone_forgot_the_glue

$(DEMO): main.o Texture.o ShaderError.o Shader.o ShaderProgram.o MeshIndex.o Mesh3D.o Demo.o Matrix.o Config.o Sprite.o RenderBuffer.o Point3D.o Particle.o Hierarchy3D.o Path.o sftg.o
	$(CC) *.o $(CLIBS) $(CFLAGS) -o $(DEMO)
	mv $(DEMO) ../

# Common demo stuff
main.o: main.c
	$(CC) $(CFLAGS) main.c -c
Texture.o: Texture.hpp Texture.cpp
	$(CC) $(CFLAGS) Texture.cpp -c
Shader.o: Shader.hpp Shader.cpp
	$(CC) $(CFLAGS) Shader.cpp -c
ShaderError.o: ShaderError.hpp ShaderError.cpp
	$(CC) $(CFLAGS) ShaderError.cpp -c
ShaderProgram.o: ShaderProgram.hpp ShaderProgram.cpp
	$(CC) $(CFLAGS) ShaderProgram.cpp -c
Mesh3D.o: Mesh3D.hpp Mesh3D.cpp
	$(CC) $(CFLAGS) Mesh3D.cpp -c
MeshIndex.o: MeshIndex.hpp MeshIndex.cpp
	$(CC) $(CFLAGS) MeshIndex.cpp -c
RenderBuffer.o: RenderBuffer.hpp RenderBuffer.cpp
	$(CC) $(CFLAGS) RenderBuffer.cpp -c
Sprite.o: Sprite.cpp Sprite.hpp
	$(CC) $(CFLAGS) Sprite.cpp -c
Matrix.o: Matrix.hpp Matrix.cpp
	$(CC) $(CFLAGS) Matrix.cpp -c
Demo.o: Demo.cpp Demo.hpp
	$(CC) $(CFLAGS) Demo.cpp -c
Config.o: Config.cpp Config.hpp
	$(CC) $(CFLAGS) Config.cpp -c
Point3D.o: Point3D.cpp Point3D.hpp
	$(CC) $(CFLAGS) Point3D.cpp -c
Particle.o: Particle.cpp Particle.hpp
	$(CC) $(CFLAGS) Particle.cpp -c
Hierarchy3D.o: Hierarchy3D.cpp Hierarchy3D.hpp
	$(CC) $(CFLAGS) Hierarchy3D.cpp -c
Path.o: Path.cpp Path.hpp
	$(CC) $(CFLAGS) Path.cpp -c
sftg.o: sftg.cpp sftg.hpp
	$(CC) $(CFLAGS) sftg.cpp -c
clean:
	@echo Cleaning up...
	@rm -f *.o *~ core* *.gch .*~
	@echo Done.
