CC = g++
SRC = coding.cc memory.cc
OBJ = $(SRC:.cc=.o) lex.yy.o parser.tab.o yywrap.o

debugging d: debug_flag
	$(MAKE) "CXXFLAGS=$(CXXFLAGS) -g -DDEBUGGING -Wall -Wimplicit" mon

production p: production_flag
	$(MAKE) "CXXFLAGS=$(CXXFLAGS) -O2 -Wall -Wimplicit" mon

debug_flag:
	$(MAKE) clean
	rm -f production_flag
	touch debug_flag

production_flag:
	$(MAKE) clean
	rm -f debug_flag
	touch production_flag

mon: $(OBJ)
	$(CC) $(CXXFLAGS) -o $@ $(OBJ)

clean:
	-rm $(OBJ) mon

lex.yy.o: lex.yy.c
	$(CC) -c $(CXXFLAGS) $*.c       

parser.tab.o: parser.tab.c
	$(CC) -c $(CXXFLAGS) $*.c       

lex.yy.c: lexer.lex parser.tab.h
	flex lexer.lex

parser.tab.h parser.tab.c: parser.y
	bison -d -v parser.y

# note gcc not g++
yywrap.o: yywrap.c
	gcc -c yywrap.c
