author | Alan Dipert
<alan@dipert.org> 2024-04-29 20:53:37 UTC |
committer | Alan Dipert
<alan@dipert.org> 2024-04-29 20:53:37 UTC |
parent | ba5bd88f32e65e02b0d70fed4b316ddd1e1d1f8c |
.gitignore | +1 | -0 |
Makefile | +35 | -22 |
diff --git a/.gitignore b/.gitignore index 629005b..2a1445c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ usbasic.tab.h usbasic *.o *~ +*.d diff --git a/Makefile b/Makefile index 2e7d9ac..cd24c44 100644 --- a/Makefile +++ b/Makefile @@ -1,49 +1,62 @@ -.PHONY: push format +.PHONY: all clean format push CC=gcc CFLAGS=-Wall -g LEX=flex YACC=bison YFLAGS=-d +DEPFLAGS=-MT $@ -MMD -MP -MF $*.Td + +POSTCOMPILE = @mv -f $*.Td $*.d && touch $@ all: usbasic usbasic: lex.yy.o usbasic.tab.o types.o parse.o vec.o lines.o main.o - $(CC) $(CFLAGS) -o usbasic lex.yy.o usbasic.tab.o types.o parse.o vec.o lines.o main.o -lgc -lfl -lreadline -lhistory - -lines.o: lines.c lines.h vec.h usbasic.tab.h parse.h - $(CC) $(CFLAGS) -c lines.c + $(CC) $(CFLAGS) -o $@ $^ -lgc -lfl -lreadline -lhistory -vec.o: vec.c vec.h - $(CC) $(CFLAGS) -c vec.c +# Dependencies due to usbasic.tab.h +parse.o: parse.c parse.h usbasic.tab.h + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + $(POSTCOMPILE) -types.o: types.c types.h - $(CC) $(CFLAGS) -c types.c +lines.o: lines.c lines.h vec.h usbasic.tab.h + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + $(POSTCOMPILE) -parse.o: parse.c usbasic.tab.h parse.h types.h types.c - $(CC) $(CFLAGS) -c parse.c +main.o: main.c usbasic.tab.h + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + $(POSTCOMPILE) -main.o: main.c usbasic.tab.h parse.h vec.h - $(CC) $(CFLAGS) -c main.c +# General compilation rule for C files +%.o: %.c %.d + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + $(POSTCOMPILE) +# Lexer and parser rules ensuring order lex.yy.o: lex.yy.c usbasic.tab.h - $(CC) $(CFLAGS) -c lex.yy.c + $(CC) $(CFLAGS) -c $< -o $@ -usbasic.tab.o: usbasic.tab.c - $(CC) $(CFLAGS) -c usbasic.tab.c +lex.yy.c: usbasic.l | usbasic.tab.h + $(LEX) $< -lex.yy.c: usbasic.l - $(LEX) usbasic.l +usbasic.tab.o: usbasic.tab.c usbasic.tab.h + $(CC) $(CFLAGS) -c $< -o $@ usbasic.tab.c usbasic.tab.h: usbasic.y - $(YACC) $(YFLAGS) usbasic.y + $(YACC) $(YFLAGS) $< clean: - rm -f usbasic lex.yy.c usbasic.tab.c usbasic.tab.h *.o + rm -f usbasic lex.yy.c usbasic.tab.c usbasic.tab.h *.o *.d *.Td -format: main.c parse.h parse.c lines.h lines.c types.h types.c vec.h vec.c - clang-format -i $^ +format: + clang-format -i main.c parse.h parse.c lines.h lines.c types.h types.c vec.h vec.c push: git push ssh dreamhost ./git-arr-0.30/git-arr --config ./git-arr-0.30/tailrecursion.conf generate --output ./tailrecursion.com/git-arr + +DEPFILES := $(wildcard *.d) +-include $(DEPFILES) + +%.d: ; +%.Td: ;