BIN = manigraph

OBJ = \
	ext/glad/glad.o \
	src/context.o \
	src/window.o \
	src/shader.o \
	src/klein.o \
	src/input.o \
	src/load.o \
	src/mesh.o \
	src/main.o 

EXAMPLES = \
	example/basic \
	example/riemman \
	example/n-cube \
	example/light-cone \
	example/lens

CFLAGS = \
	-I./ext/cglm/include  \
	-I./ext/glfw/include  \
	-I./ext/glad  \
	-I./include  \
	-Wall -Wno-unused-function -std=c99 -D_GNU_SOURCE \

help:
	@echo "Usage:"
	@echo "	$(MAKE) windows"
	@echo "	$(MAKE) linux-x11"
	@echo "	$(MAKE) linux-wayland"
	@echo "	$(MAKE) cocoa"
	@echo "	$(MAKE) CC=emcc wasm"
	@echo "Examples"
	@echo "	$(MAKE) examples"
	@echo "Clean"
	@echo "	$(MAKE) clean"

src/main.o: src/data/shaders.h

windows: $(OBJ) 
	#cd ext; $(MAKE) -f glfw.mk windows; cd -
	$(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32  -lgdi32

glfw.dll:
	$(CC) -fPIC -shared -D_GLFW_WIN32 -D_GLFW_BUILD_DLL ./ext/glfw/src/*.c -o $@ -lgdi32 

# LINUX
linux-wayland: $(OBJ)
	cd ext; $(MAKE) -f glfw.mk linux-wayland; cd -
	$(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lm

linux-x11: $(OBJ)
	cd ext; $(MAKE) -f glfw.mk linux-x11; cd -
	$(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lm 

cocoa: $(OBJ)
	cd ext; $(MAKE) -f glfw.mk cocoa; cd -
	$(CC) -framework OpenGL -o $(BIN) $(OBJ) ext/glfw.a -lGL -lglfw 

wasm: $(OBJ)
	$(CC) -sUSE_WEBGL2=1 -sUSE_GLFW=3 -o $(BIN).html $(OBJ)
	chmod -x $(BIN).wasm

clean:
	rm $(OBJ) $(BIN) $(EXAMPLES)
	cd ext; $(MAKE) -f glfw.mk clean; cd -


examples: $(EXAMPLES)

.SUFFIXES: .c .o 

.c.o:
	$(CC) -Wno-implicit-function-declaration $(CFLAGS) -c -o $@ $<

.c:
	$(CC) -I include  -o $@ $< -lm
