# generated by configure.lua

cflags = -pedantic -Wall -Wextra -Dplat_x11 -Dplat_x86 -Dplat_posix -Dallocation_default_alignment=8 -Icfg -Iqstd -Isc/glslang -MMD -MF $(basename $@).d 

.PHONY: all clean
all: c2

ifndef config
  config=debug
endif
ifeq ($(config),debug)
  opt_com = -DDEBUG -g -O0
  opt_lnk =
endif
ifeq ($(config),release)
  opt_com = -DNDEBUG -O3
  opt_lnk = -s
endif

qstd/memory.o: qstd/memory.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c qstd/memory.c -o qstd/memory.o
qstd/plat.o: qstd/plat.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c qstd/plat.c -o qstd/plat.o
qstd/str.o: qstd/str.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c qstd/str.c -o qstd/str.o
qstd/pack.o: qstd/pack.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c qstd/pack.c -o qstd/pack.o
libqstd.a: qstd/memory.o qstd/plat.o qstd/str.o qstd/pack.o 
	ar -rcs libqstd.a qstd/memory.o qstd/plat.o qstd/str.o qstd/pack.o 

cfg/cfgparse.o: cfg/cfgparse.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c cfg/cfgparse.c -o cfg/cfgparse.o
libcfg.a: cfg/cfgparse.o 
	ar -rcs libcfg.a cfg/cfgparse.o 

sc/sc.o: sc/sc.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c sc/sc.cpp -o sc/sc.o
sc/includer.o: sc/includer.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c sc/includer.cpp -o sc/includer.o
shadercompiler: sc/sc.o sc/includer.o libqstd.a libcfg.a 
	g++ $(opt_lnk) $(lflags) -o shadercompiler sc/sc.o sc/includer.o libqstd.a libcfg.a -Lsc/glslang/build/glslang -Lsc/glslang/build/SPIRV -Lsc/glslang/build/glslang/OSDependent/Unix -Lsc/glslang/build/External/spirv-tools/source -Lsc/glslang/build/External/spirv-tools/source/link -Lsc/glslang/build/External/spirv-tools/source/opt -lglslang -lglslang-default-resource-limits -lSPIRV -lMachineIndependent -lSPVRemapper -lOSDependent -lGenericCodeGen -lSPIRV-Tools-link -lSPIRV-Tools-opt -lSPIRV-Tools 

app.o: app.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c app.cpp -o app.o
asset.o: asset.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c asset.cpp -o asset.o
c2.o: c2.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c c2.cpp -o c2.o
camera.o: camera.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c camera.cpp -o camera.o
debugdraw.o: debugdraw.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c debugdraw.cpp -o debugdraw.o
editor.o: editor.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c editor.cpp -o editor.o
lighting.o: lighting.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c lighting.cpp -o lighting.o
maths.o: maths.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c maths.cpp -o maths.o
model.o: model.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c model.cpp -o model.o
physics.o: physics.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c physics.cpp -o physics.o
pipeline.o: pipeline.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c pipeline.cpp -o pipeline.o
renderer.o: renderer.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c renderer.cpp -o renderer.o
scene.o: scene.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c scene.cpp -o scene.o
ui.o: ui.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c ui.cpp -o ui.o
video.o: video.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c video.cpp -o video.o
world.o: world.cpp
	g++ -std=c++20 $(opt_com) $(cflags) -c world.cpp -o world.o
c2: app.o asset.o c2.o camera.o debugdraw.o editor.o lighting.o maths.o model.o physics.o pipeline.o renderer.o scene.o ui.o video.o world.o libqstd.a 
	g++ $(opt_lnk) $(lflags) -o c2 app.o asset.o c2.o camera.o debugdraw.o editor.o lighting.o maths.o model.o physics.o pipeline.o renderer.o scene.o ui.o video.o world.o libqstd.a -lX11 -lm 

c2: pack

convtexture.o: convtexture.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c convtexture.c -o convtexture.o
convtexture: convtexture.o libqstd.a 
	gcc $(opt_lnk) $(lflags) -o convtexture convtexture.o libqstd.a 

convmodel.o: convmodel.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c convmodel.c -o convmodel.o
convmodel: convmodel.o libqstd.a 
	gcc $(opt_lnk) $(lflags) -o convmodel convmodel.o libqstd.a 

convmaterial.o: convmaterial.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c convmaterial.c -o convmaterial.o
convmaterial: convmaterial.o libqstd.a libcfg.a 
	gcc $(opt_lnk) $(lflags) -o convmaterial convmaterial.o libqstd.a libcfg.a 

packer.o: packer.c
	gcc -std=gnu99 $(opt_com) $(cflags) -c packer.c -o packer.o
packer: packer.o libqstd.a 
	gcc $(opt_lnk) $(lflags) -o packer packer.o libqstd.a 

data/debug.csh: intermediate/debug.glsl shadercompiler | data
	cpp -MMD -MF data/debug.d -MT data/debug.csh -Iintermediate intermediate/debug.glsl > /dev/null
	./shadercompiler intermediate/debug.glsl data/debug.csh
data/mip_spec.csh: intermediate/mip_spec.glsl shadercompiler | data
	cpp -MMD -MF data/mip_spec.d -MT data/mip_spec.csh -Iintermediate intermediate/mip_spec.glsl > /dev/null
	./shadercompiler intermediate/mip_spec.glsl data/mip_spec.csh
data/sky.csh: intermediate/sky.glsl shadercompiler | data
	cpp -MMD -MF data/sky.d -MT data/sky.csh -Iintermediate intermediate/sky.glsl > /dev/null
	./shadercompiler intermediate/sky.glsl data/sky.csh
data/surface.csh: intermediate/surface.glsl shadercompiler | data
	cpp -MMD -MF data/surface.d -MT data/surface.csh -Iintermediate intermediate/surface.glsl > /dev/null
	./shadercompiler intermediate/surface.glsl data/surface.csh
data/surface_depthonly.csh: intermediate/surface_depthonly.glsl shadercompiler | data
	cpp -MMD -MF data/surface_depthonly.d -MT data/surface_depthonly.csh -Iintermediate intermediate/surface_depthonly.glsl > /dev/null
	./shadercompiler intermediate/surface_depthonly.glsl data/surface_depthonly.csh
data/tonemap.csh: intermediate/tonemap.glsl shadercompiler | data
	cpp -MMD -MF data/tonemap.d -MT data/tonemap.csh -Iintermediate intermediate/tonemap.glsl > /dev/null
	./shadercompiler intermediate/tonemap.glsl data/tonemap.csh
data/triangle.csh: intermediate/triangle.glsl shadercompiler | data
	cpp -MMD -MF data/triangle.d -MT data/triangle.csh -Iintermediate intermediate/triangle.glsl > /dev/null
	./shadercompiler intermediate/triangle.glsl data/triangle.csh
data/ui.csh: intermediate/ui.glsl shadercompiler | data
	cpp -MMD -MF data/ui.d -MT data/ui.csh -Iintermediate intermediate/ui.glsl > /dev/null
	./shadercompiler intermediate/ui.glsl data/ui.csh

data/monkey.mdl: convmodel intermediate/monkey.glb data/debug.csh data/mip_spec.csh data/sky.csh data/surface.csh data/surface_depthonly.csh data/tonemap.csh data/triangle.csh data/ui.csh | data
	./convmodel data intermediate/monkey.glb data/monkey.mdl
data/cube.mdl: convmodel intermediate/cube.glb data/debug.csh data/mip_spec.csh data/sky.csh data/surface.csh data/surface_depthonly.csh data/tonemap.csh data/triangle.csh data/ui.csh | data
	./convmodel data intermediate/cube.glb data/cube.mdl
data/scene.mdl: convmodel intermediate/scene.glb data/debug.csh data/mip_spec.csh data/sky.csh data/surface.csh data/surface_depthonly.csh data/tonemap.csh data/triangle.csh data/ui.csh | data
	./convmodel data intermediate/scene.glb data/scene.mdl

data/22.tex: convtexture intermediate/22.bmp | data
	./convtexture intermediate/22.bmp data/22.tex bc1
data/kita.tex: convtexture intermediate/kita.bmp | data
	./convtexture intermediate/kita.bmp data/kita.tex bc1
data/brick_albedo.tex: convtexture intermediate/brick_albedo.bmp | data
	./convtexture intermediate/brick_albedo.bmp data/brick_albedo.tex bc1
data/brick_ao.tex: convtexture intermediate/brick_ao.bmp | data
	./convtexture intermediate/brick_ao.bmp data/brick_ao.tex bc4
data/brick_normal.tex: convtexture intermediate/brick_normal.bmp | data
	./convtexture intermediate/brick_normal.bmp data/brick_normal.tex bc5
data/sky.tex: convtexture intermediate/sky.hdr | data
	./convtexture intermediate/sky.hdr data/sky.tex rgba16f

data/bricks.mat: convmaterial intermediate/bricks.mat | data
	./convmaterial intermediate/bricks.mat data/bricks.mat
data/plastic.mat: convmaterial intermediate/plastic.mat | data
	./convmaterial intermediate/plastic.mat data/plastic.mat
data/greybox.mat: convmaterial intermediate/greybox.mat | data
	./convmaterial intermediate/greybox.mat data/greybox.mat

pack: packer data/debug.csh data/mip_spec.csh data/sky.csh data/surface.csh data/surface_depthonly.csh data/tonemap.csh data/triangle.csh data/ui.csh data/monkey.mdl data/cube.mdl data/scene.mdl data/22.tex data/kita.tex data/brick_albedo.tex data/brick_ao.tex data/brick_normal.tex data/sky.tex data/bricks.mat data/plastic.mat data/greybox.mat 
	./packer pack data debug.csh mip_spec.csh sky.csh surface.csh surface_depthonly.csh tonemap.csh triangle.csh ui.csh monkey.mdl cube.mdl scene.mdl 22.tex kita.tex brick_albedo.tex brick_ao.tex brick_normal.tex sky.tex bricks.mat plastic.mat greybox.mat 

data:
	mkdir -p data

-include qstd/memory.d qstd/plat.d qstd/str.d qstd/pack.d cfg/cfgparse.d sc/sc.d sc/includer.d app.d asset.d c2.d camera.d debugdraw.d editor.d lighting.d maths.d model.d physics.d pipeline.d renderer.d scene.d ui.d video.d world.d convtexture.d convmodel.d convmaterial.d packer.d data/debug.d data/mip_spec.d data/sky.d data/surface.d data/surface_depthonly.d data/tonemap.d data/triangle.d data/ui.d 

clean:
	rm -f qstd/memory.o qstd/plat.o qstd/str.o qstd/pack.o cfg/cfgparse.o sc/sc.o sc/includer.o app.o asset.o c2.o camera.o debugdraw.o editor.o lighting.o maths.o model.o physics.o pipeline.o renderer.o scene.o ui.o video.o world.o convtexture.o convmodel.o convmaterial.o packer.o qstd/memory.d qstd/plat.d qstd/str.d qstd/pack.d cfg/cfgparse.d sc/sc.d sc/includer.d app.d asset.d c2.d camera.d debugdraw.d editor.d lighting.d maths.d model.d physics.d pipeline.d renderer.d scene.d ui.d video.d world.d convtexture.d convmodel.d convmaterial.d packer.d data/debug.d data/mip_spec.d data/sky.d data/surface.d data/surface_depthonly.d data/tonemap.d data/triangle.d data/ui.d data/debug.csh data/mip_spec.csh data/sky.csh data/surface.csh data/surface_depthonly.csh data/tonemap.csh data/triangle.csh data/ui.csh data/monkey.mdl data/cube.mdl data/scene.mdl data/22.tex data/kita.tex data/brick_albedo.tex data/brick_ao.tex data/brick_normal.tex data/sky.tex data/bricks.mat data/plastic.mat data/greybox.mat 
	rm -f shadercompiler
	rmdir data
	rm -f c2
	rm -f convtexture
	rm -f convmodel
	rm -f convmaterial
	rm -f libqstd.a
	rm -f libcfg.a