
CC      = gcc
CFLAGS  = -Wall -g -std=gnu11
LDFLAGS =
LIBS    = -lm -lmpu -lmpuio

HEADERS = main.h zlex.h prog.h symtab.h init.h code.h tokens.h

all: machine

machine: main.o zlex.o prog.o symtab.o init.o code.o
	$(CC) $(LDFLAGS) -o machine main.o zlex.o prog.o symtab.o init.o code.o $(LIBS)

main.o: main.c $(HEADERS)
	$(CC) -c $(CFLAGS) -o main.o main.c

init.o: init.c $(HEADERS)
	$(CC) -c $(CFLAGS) -o init.o init.c

code.o: code.c $(HEADERS)
	$(CC) -c $(CFLAGS) -o code.o code.c

zlex.o: zlex.c $(HEADERS)
	$(CC) -c $(CFLAGS) -o zlex.o zlex.c

prog.o: prog.c $(HEADERS)
	$(CC) -c $(CFLAGS) -o prog.o prog.c

symtab.o: symtab.c ${HEADERS}
	$(CC) -c $(CFLAGS) -o symtab.o symtab.c 

main.c: main.y $(HEADERS)
	../zubr -tvd -Itokens.h -Cmain.c main.y

clean:
	rm -f *.o main.c z_tab.h z.output machine
