.PHONY: clean distclean default

CC=gcc
CFLAGS=-std=c99 -Wall

default: compiler

parser.h parser.c: parser.y
	bison -dv -o parser.c parser.y

parser.o: parser.c ast.h

ast.o: ast.c ast.h

lexer.c: lexer.l
	flex -s -o lexer.c lexer.l

lexer.o: lexer.c parser.h

%.o: %.c
	$(CC) $(CFLAGS) -c $<

%.o: %.s
	$(AS) $(ASFLAGS) -o $@ $<

libminibasic.a: writeString.o formatInteger.o writeInteger.o
	$(AR) $(ARFLAGS) $@ $^

compiler: lexer.o parser.o ast.o
	$(CC) $(CFLAGS) -o $@ $^ -lfl

clean:
	$(RM) lexer.c parser.c parser.h *.o *.output *~

distclean: clean
	$(RM) compiler
