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

DEMO = raceworld

$(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 CubeMap.o Point3D.o Particle.o Hierarchy3D.o CircParticle.o raceworld.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 stb_image.h
	$(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
CubeMap.o: CubeMap.hpp CubeMap.cpp
	$(CC) $(CFLAGS) CubeMap.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
CircParticle.o: CircParticle.cpp CircParticle.hpp
	$(CC) $(CFLAGS) CircParticle.cpp -c
raceworld.o: raceworld.cpp raceworld.hpp
	$(CC) $(CFLAGS) raceworld.cpp -c
clean:
	@echo Cleaning up...
	@rm -f *.o *~ core* *.gch .*~
	@echo Done.
