# PROGRAMS CC = clang CXX = clang++ LD = clang AR = ar RM = rm -f TYPST = typst # COMPILATION FLAGS LIBS = raylib ifdef DEBUG CFLAGS += -Og -g -DDEBUG else CFLAGS += -O2 endif CFLAGS += -Wall -Wextra -pedantic -std=gnu23 -Iinclude -Werror=return-type $(shell pkg-config --cflags $(LIBS)) LDFLAGS += $(shell pkg-config --libs $(LIBS)) # FILES SRCS=$(wildcard src/*.c) DEPS=$(patsubst src/%.c, out/%.d, $(SRCS)) OBJS=$(patsubst src/%.c, out/%.o, $(SRCS)) DOCSRC=$(wildcard docs/*.typ) DOCS=$(patsubst docs/%.typ, docs/%.pdf, $(DOCSRC)) PROGRAM=ain48 .PHONY: all build docs clean deepclean all: build docs build: $(PROGRAM) docs: $(DOCS) docs/%.pdf: docs/%.typ $(TYPST) c $< $@ clean: $(RM) $(PROGRAM) $(RM) $(DOCS) deepclean: clean $(RM) $(OBJS) $(RM) $(DEPS) $(RM) compile_commands.json $(PROGRAM): $(OBJS) $(LD) $(LDFLAGS) $(OBJS) -o $@ out/%.d: src/%.c @set -e ; $(RM) $@; \ $(CC) -M $(CFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,out/\1.o $@ : ,g' < $@.$$$$ > $@; \ $(RM) $@.$$$$ out/%.o: src/%.c $(CC) $(CFLAGS) -c $< -o $@ include $(DEPS)