all : rawdraw_sf.h rawdraw simple

#for X11 consider:             xorg-dev
#for X11, you will need:       libx-dev
#for full screen you'll need:  libxinerama-dev libxext-dev
#for OGL You'll need:          mesa-common-dev libglu1-mesa-dev

#-DCNFGRASTERIZER
#  and
#-CNFGOGL
#  are incompatible.


MINGW32:=/usr/bin/i686-w64-mingw32-

rawdraw-clang.exe: rawdraw.c
	clang rawdraw.c -o rawdraw-clang.exe -g -O1 -Irawdraw -lopengl32 -lgdi32 -luser32 

rawdrawogl-clang.exe: rawdraw.c
	clang rawdraw.c -o rawdrawogl-clang.exe -g -O1 -Irawdraw -DCNFGOGL -lopengl32 -lgdi32 -luser32 

rawdraw.exe : rawdraw.c
	$(MINGW32)gcc -g -m32 -o $@ $^  -lgdi32

rawdrawogl.exe : rawdraw.c
	$(MINGW32)gcc -g -m32 -o $@ $^  -lgdi32 -DCNFGOGL -lopengl32

rawdraw_egl : rawdraw.c
	gcc -o $@ $^ -lMali -lpthread -lm -O3

simple : simple.c
	gcc -o $@ $^ -lX11 -lpthread -lXinerama -lXext -lGL -g -lm -ldl

rawdraw : rawdraw.c
	gcc -o $@ $^ -lX11 -lpthread -lXinerama -lXext -lGL -g -lm -ldl

rawdraw_vk : rawdraw.c
	gcc -o $@ $^ -lX11 -lpthread -lXinerama -lXext -g -lm -ldl -lvulkan -DCNFGVK -DCNFGVK_VALIDATION_LAYERS
	
rawdraw_ogl : rawdraw.c
	gcc -o $@ $^ -lX11 -lpthread -lXinerama -lXext -lGL -g -DCNFGOGL -lm -ldl

osdtest : osdtest.c CNFG.c
	gcc -o $@ $^ -lX11 -lpthread -lXinerama -lXext -DCNFG_HAS_XINERAMA -DCNFG_HAS_XSHAPE -lm -ldl

ogltest : ogltest.c CNFG.c
	gcc -o $@ $^  -lX11 -lXinerama -lGL   -DCNFGOGL -lm

rawdraw_http : rawdraw.c tools/rawdraw_http_page.h
	$(CC) -o $@ $< -DCNFGHTTP -lm -ldl -Os -s

tools/binary_to_buffer : tools/binary_to_buffer.c
	$(CC) -o $@ $^

tools/rawdraw_http_page.h : tools/rawdraw_http_files/index.html tools/binary_to_buffer
	cat $< | gzip -9 | tools/binary_to_buffer webpage_buffer > $@

ogltest.exe : ogltest.c CNFG.c
	$(MINGW32)gcc -o $@ $^ -lgdi32 -lkernel32 -lopengl32 -DCNFGOGL -lm

tools/single_file_creator : tools/single_file_creator.c
	gcc -o $@ $^

vk/cnfgshader.h : tools/single_file_creator
	-glslang -S vert -DVERT --target-env vulkan1.3 -o vk/verttemp -x vk/cnfg.glsl
	-glslang -S frag -DBATCH --target-env vulkan1.3 -o vk/batchtemp -x vk/cnfg.glsl
	-glslang -S frag -DIMG --target-env vulkan1.3 -o vk/imgtemp -x vk/cnfg.glsl
	-./tools/single_file_creator vk/shadertemplate.h vk/verttemp vk/batchtemp vk/imgtemp > $@

rawdraw_sf.h : tools/single_file_creator CNFG.h tools/rawdraw_http_page.h vk/cnfgshader.h
	echo "//This file was automatically generated by Makefile at https://github.com/cntools/rawdraw" > $@
	echo "//This single-file feature is still in early alpha testing." >> $@f
	echo "//Generated from files git hash $(shell git rev-parse HEAD) on $(shell date) (This is not the git hash of this file)" >> $@
	./tools/single_file_creator CNFG.h CNFG.c CNFGWinDriver.c CNFGEGLLeanAndMean.c CNFGRasterizer.c CNFGEGLDriver.c CNFGWASMDriver.c CNFGXDriver.c CNFGFunctions.c CNFGOGL.c CNFG3D.c CNFGAndroid.h CNFGHTTP.c CNFGVK.c vk/cnfgshader.h tools/rawdraw_http_page.h >> $@

clean : 
	rm -rf *.o *~ simple simple.exe rawdraw.exe rawdrawogl.exe rawdraw rawdraw_ogl rawdraw_vk rawdraw_mac rawdraw_mac_soft rawdraw_mac_cg rawdraw_mac_ogl ogltest ogltest.exe rawdraw_egl rawdraw_http rawdraw_sf.h rawdraw_sf.hf tools/single_file_creator tools/binary_to_buffer tools/rawdraw_http_page.h

# Some people may not have glslang on their system, so have another clean target
# so they don't have to install it to properly regenerate rawdraw_sf
# (this is also why the shader compilation targets ignore errors and the compiled SPIR-V is in the tree)
cleanvkshader : clean
	rm -rf vk/verttemp vk/batchtemp vk/imgtemp vk/cnfgshader.h
