BINARY=gear SHADERC=sokol-shdc CFLAGS=-I. -Iinclude -Wall -Wextra -Werror -Wno-header-guard -Wno-comment -g LDFLAGS=-g SHADER_FLAGS=--slang glsl430:hlsl5:metal_macos C_FILES=$(shell find -L * -type f -name '*.c') C_OBJ=$(C_FILES:.c=.o) SHADER_FILES=$(shell find -L * -type f -name '*.glsl') SHADER_OBJ=$(SHADER_FILES:.glsl=.glsl.h) RESOURCES_DIR=res RESOURCES_OBJ=$(RESOURCES_DIR)/res.o RESOURCES_H=include/gear/resources.h RESOURCE_FILES=$(shell find -L $(RESOURCES_DIR) -type f -not -wholename $(RESOURCES_OBJ)) ifeq ($(CC), gcc) CFLAGS += -Wno-use-after-free endif ifeq ($(OS), Windows_NT) CFLAGS += -DSOKOL_D3D11 -D_CRT_SECURE_NO_WARNINGS BINARY := $(BINARY).exe else UNAME_S := $(shell uname -s) ifeq ($(UNAME_S), Linux) CFLAGS += -DSOKOL_GLCORE LDFLAGS += $(shell pkg-config --libs x11 xi xcursor gl) -ldl -pthread -lm -lasound endif ifeq ($(UNAME_S), Darwin) CFLAGS += -DSOKOL_METAL LDFLAGS += -framework Cocoa -framework QuartzCore -framework Metal -framework MetalKit -framework AudioToolbox OBJC_FILES=$(shell find -L * -type f -name '*.m') OBJC_OBJ=$(OBJC_FILES:.m=.o) endif endif .PHONY: shaders resources $(BINARY): shaders resources $(RESOURCES_OBJ) $(C_OBJ) $(OBJC_OBJ) $(CC) $(C_OBJ) $(OBJC_OBJ) $(RESOURCES_OBJ) $(LDFLAGS) -o $(BINARY) shaders: $(SHADER_OBJ) @echo Shaders compiled resources: $(LD) -r -b binary -o $(RESOURCES_OBJ) $(RESOURCE_FILES) @echo "#ifndef __G_RESOURCES_H__" > $(RESOURCES_H) @echo "#define __G_RESOURCES_H__" >> $(RESOURCES_H) @nm -j $(RESOURCES_OBJ) | awk '{ print "extern char " $$0 "[];" }' >> $(RESOURCES_H) @echo "#endif" >> $(RESOURCES_H) @echo Resources compiled %.glsl.h: %.glsl $(SHADERC) --input $< --output $@ $(SHADER_FLAGS) %.o: %.c $(CC) -o $@ -c $< $(CFLAGS) %.o: %.m $(CC) -o $@ -c $< $(OBJC_FLAGS) $(CFLAGS) run: $(BINARY) ./$(BINARY) bear: clean bear -- $(MAKE) $(BINARY) clean: rm -rf $(C_OBJ) $(OBJC_OBJ) $(SHADER_OBJ) $(RESOURCES_OBJ) $(RESOURCES_H) $(BINARY)