COMPILE = g++ -g

oberon2: oberon.cc lex.yy.c build/scope.o build/type.o build/ic.o build/icgen.o build/debug.o build/codegen.o build/optimize.o build/reg.o
	$(COMPILE) lex.yy.c oberon.cc build/scope.o build/type.o  build/ic.o build/icgen.o build/debug.o build/codegen.o build/optimize.o build/reg.o -o oberon2

lex.yy.c: oberon.l
	lex oberon.l
	
oberon.cc: oberon.y
	bison -d oberon.y -o oberon.cc

build/scope.o: src/scope.cpp src/scope.h
	$(COMPILE) -c src/scope.cpp -o build/scope.o

build/type.o: src/type.cpp src/type.h
	$(COMPILE) -c src/type.cpp -o build/type.o

build/ic.o: src/ic.cpp src/ic.h src/scope.h
	$(COMPILE) -c src/ic.cpp -o build/ic.o

build/icgen.o: src/icgen.cpp src/icgen.h src/ic.h
	$(COMPILE) -c src/icgen.cpp -o build/icgen.o

build/codegen.o: src/codegen.cpp src/codegen.h
	$(COMPILE) -c src/codegen.cpp -o build/codegen.o

build/debug.o: src/debug.cpp src/debug.h
	$(COMPILE) -c src/debug.cpp -o build/debug.o

build/optimize.o: src/optimize.cpp src/optimize.h
	$(COMPILE) -c src/optimize.cpp -o build/optimize.o

build/reg.o: src/reg.cpp src/reg.h
	$(COMPILE) -c src/reg.cpp -o build/reg.o

clean:
	rm -rf build/*.o oberon2 lex.yy.c oberon.cc oberon.hh
