CC = gcc
CFLAGS = -I. -g
FLEX = flex
BISON = bison
LDFLAGS = -lfl

TARGET = bin/bplc

SRCS = main.c tree.c syntax.tab.c lex.yy.c type.c symtab.c semantic.c
OBJS = $(SRCS:.c=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
	@mkdir -p bin
	$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)

syntax.tab.c syntax.tab.h: syntax.y
	$(BISON) -d syntax.y

lex.yy.c: lex.l syntax.tab.h
	$(FLEX) lex.l

tree.o main.o semantic.o lex.yy.o: syntax.tab.h

semantic.o: semantic.h symtab.h type.h
symtab.o: symtab.h type.h
type.o: type.h

main.o: semantic.h

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

clean:
	rm -f $(OBJS) syntax.tab.c syntax.tab.h lex.yy.c $(TARGET)

.PHONY: all clean