CC = cc LEX = flex CFLAGS = -std=c17 -Wall -Wextra -Werror -Wpedantic -O2 SOURCES = ast.c ast.h lexer.h main.c OBJECTS = bin/lexer.o bin/ast.o bin/main.o SANITIZE = -g -O0 -fsanitize=address,undefined .PHONY: all debug check format lint clean all: sfinae bin: mkdir -p bin sfinae: $(OBJECTS) $(CC) $(CFLAGS) -o $@ $(OBJECTS) bin/lexer.c: sfinae.l | bin $(LEX) -o bin/lexer.c sfinae.l bin/lexer.o: bin/lexer.c lexer.h $(CC) -std=c17 -w -I. -c -o $@ bin/lexer.c bin/%.o: %.c | bin $(CC) $(CFLAGS) -c -o $@ $< bin/main.o: lexer.h bin/ast.o: ast.h lexer.h debug: CFLAGS += $(SANITIZE) debug: clean sfinae check: sfinae @for example in examples/*.sfinae; do \ echo "== $$example"; \ ./sfinae "$$example" || exit 1; \ done format: clang-format -i $(SOURCES) lint: clang-tidy ast.c main.c -- -std=c17 clean: rm -rf bin sfinae