git » unicorn-sparkle-basic.git » master » tree

[master] / Makefile

.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 $@ $^ -lgc -lfl -lreadline -lhistory

# Dependencies due to usbasic.tab.h
parse.o: parse.c parse.h usbasic.tab.h
	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
	$(POSTCOMPILE)

lines.o: lines.c lines.h vec.h usbasic.tab.h
	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
	$(POSTCOMPILE)

main.o: main.c usbasic.tab.h
	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
	$(POSTCOMPILE)

# 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 $< -o $@

lex.yy.c: usbasic.l | usbasic.tab.h
	$(LEX) $<

usbasic.tab.o: usbasic.tab.c usbasic.tab.h
	$(CC) $(CFLAGS) -c $< -o $@

usbasic.tab.c usbasic.tab.h: usbasic.y
	$(YACC) $(YFLAGS) $<

clean:
	rm -f usbasic lex.yy.c usbasic.tab.c usbasic.tab.h *.o *.d *.Td

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: ;