CC := gcc GLSLC := glslc ifeq ($(PROD),1) CFLAGS := -O2 # production flags else CFLAGS := -Wall -Wextra -Wpedantic -g -DDEBUG # debug flags endif CFLAGS += -std=c99 -lm -lvulkan `sdl2-config --cflags --libs` /usr/local/lib/libcglm.a SRCD := src OBJD := obj BIND := bin FILD := files SHDR := shaders SFILE = $(shell find $(SRCD)/ -type f 2> /dev/null) CSRCS = $(filter %.c, $(SFILE)) COBJS = $(CSRCS:$(SRCD)/%.c=$(OBJD)/%.o) FILES = $(shell find $(FILD) -type f 2> /dev/null) SHDRS = $(filter %.vert %.frag, $(FILES)) SHOBJ = $(SHDRS:$(FILD)/$(SHDR)/%=$(BIND)/$(SHDR)/%.spv) CDEPS = $(COBJS:%.o=%.d) -include $(CDEPS) NAME := test all: clean $(NAME) $(NAME): $(BIND)/$(NAME) $(SHOBJ) clean: rm -rf $(BIND) rm -rf $(OBJD) $(OBJD)/%.o: $(SRCD)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -MMD -MF $(@:%.o=%.d) -c $< -o $@ $(BIND)/$(SHDR)/%.spv: $(FILD)/$(SHDR)/% @mkdir -p $(dir $@) $(GLSLC) $< -o $@ $(BIND)/$(NAME): $(COBJS) @mkdir -p $(dir $@) $(CC) $(CFLAGS) $^ -o $@ # Extra Tools RUN_CMD := cd $(BIND) && ./$(NAME) UNITY := unity $(BIND)/$(UNITY): $(CSRCS) @mkdir -p $(dir $@) for src in $^; do \ cat $${src} >> $(SRCD)/$(UNITY).c; \ done $(CC) $(CFLAGS) $(SRCD)/$(UNITY).c -o $@ @rm $(SRCD)/$(UNITY).c analyze: clean scan-build \ -enable-checker alpha \ -enable-checker core \ -enable-checker deadcode \ -enable-checker security \ -enable-checker unix \ make $(BIND)/$(UNITY) sanitize: clean $(MAKE) CC="clang -fsanitize=address" run run: $(NAME) $(RUN_CMD) valgrind: $(BIND)/$(NAME) cd $(BIND) && \ valgrind -s --leak-check=full --show-leak-kinds=all ./$(NAME)