#Mike Maxim
#L2 Makefile

JCC =  javac
JAVA = java
PACK = edu/cmu/cs/l3
PACKBACK = ../../../..
PACKSEP = :
CC = gcc
FLAGS = -Wall -Werror -O2 -g -funsigned-char
CUP = java_cup.jar
LEX = JLex.jar
INCLUDE = -classpath .$(PACKSEP)$(CUP)$(PACKSEP)$(LEX)
AR = ar
JARARCH = `pwd`/l3.jar
LIBL3 = bin/libl3.a
RUNTIME = include/
#MALLOC = -DUSE_MALLOC

MODULES = $(PACK)/general/*.class $(PACK)/errormsg/*.class $(PACK)/absyn/*.class $(PACK)/symbol/*.class $(PACK)/semant/*.class $(PACK)/translate/*.class $(PACK)/tree/*.class $(PACK)/x86/*.class $(PACK)/temp/*.class $(PACK)/main/*.class $(PACK)/frame/*.class $(PACK)/canon/*.class $(PACK)/assem/*.class $(PACK)/parse/*.class $(CUP) $(LEX) $(PACK)/codegen/*.class $(PACK)/analysis/*.class $(PACK)/graph/*.class $(PACK)/flowgraph/*.class $(PACK)/regalloc/*.class $(PACK)/trace/*.class

all: $(PACK)/parse/simple.lex.java $(PACK)/parse/parser.java $(MODULES)
	cd $(RUNTIME) && $(MAKE)	
	jar cfm $(JARARCH) manifest.mf $(MODULES) 
	echo -e "#!/bin/sh \n $(JAVA) -mx64m -ss64m -jar $(JARARCH) \044* \n" > compile
	chmod u+x compile 

$(PACK)/general/*.class: $(PACK)/general/*.java
	$(JCC) $(INCLUDE) $(PACK)/general/*.java

$(PACK)/analysis/*.class: $(PACK)/analysis/*.java
	$(JCC) $(INCLUDE) $(PACK)/analysis/*.java

$(PACK)/regalloc/*.class: $(PACK)/regalloc/*.java
	$(JCC) $(INCLUDE) $(PACK)/regalloc/*.java

$(PACK)/graph/*.class: $(PACK)/graph/*.java
	$(JCC) $(INCLUDE) $(PACK)/graph/*.java

$(PACK)/flowgraph/*.class: $(PACK)/flowgraph/*.java
	$(JCC) $(INCLUDE) $(PACK)/flowgraph/*.java

$(PACK)/errormsg/*.class: $(PACK)/errormsg/*.java
	$(JCC) $(INCLUDE) $(PACK)/errormsg/*.java

$(PACK)/absyn/*.class: $(PACK)/absyn/*.java
	$(JCC) $(INCLUDE) $(PACK)/absyn/*.java

$(PACK)/symbol/*.class: $(PACK)/symbol/*.java
	$(JCC) $(INCLUDE) $(PACK)/symbol/*.java

$(PACK)/semant/*.class: $(PACK)/semant/*.java
	$(JCC) $(INCLUDE) $(PACK)/semant/*.java

$(PACK)/translate/*.class: $(PACK)/translate/*.java
	$(JCC) $(INCLUDE) $(PACK)/translate/*.java

$(PACK)/tree/*.class: $(PACK)/tree/*.java
	$(JCC) $(INCLUDE) $(PACK)/tree/*.java

$(PACK)/x86/*.class: $(PACK)/x86/*.java
	$(JCC) $(INCLUDE) $(PACK)/x86/*.java

$(PACK)/temp/*.class: $(PACK)/temp/*.java
	$(JCC) $(INCLUDE) $(PACK)/temp/*.java

$(PACK)/main/*.class: $(PACK)/main/*.java
	$(JCC) $(INCLUDE) $(PACK)/main/*.java

$(PACK)/frame/*.class: $(PACK)/frame/*.java
	$(JCC) $(INCLUDE) $(PACK)/frame/*.java

$(PACK)/canon/*.class: $(PACK)/canon/*.java
	$(JCC) $(INCLUDE) $(PACK)/canon/*.java

$(PACK)/assem/*.class: $(PACK)/assem/*.java
	$(JCC) $(INCLUDE) $(PACK)/assem/*.java

$(PACK)/codegen/*.class: $(PACK)/codegen/*.java
	$(JCC) $(INCLUDE) $(PACK)/codegen/*.java

$(PACK)/parse/*.class: $(PACK)/parse/*.java
	$(JCC) $(INCLUDE) $(PACK)/parse/*.java

$(PACK)/trace/*.class: $(PACK)/trace/*.java
	$(JCC) $(INCLUDE) $(PACK)/trace/*.java

$(PACK)/parse/simple.lex.java: $(PACK)/parse/simple.lex $(PACK)/parse/parser.java
	$(JAVA) -classpath $(LEX) JLex.Main $(PACK)/parse/simple.lex
	$(JCC) $(INCLUDE) $(PACK)/parse/simple.lex.java

$(PACK)/parse/parser.java: $(PACK)/parse/simple.cup
	cd $(PACK)/parse; $(JAVA) -classpath $(PACKBACK)/../$(CUP) java_cup.Main -expect 1 -dump_grammar -dump_states <simple.cup >simple.out 2>simple.err; cd $(PACKBACK)

clean:
	cd $(RUNTIME) && $(MAKE) clean
	rm -f $(PACK)/parse/simple.lex.java $(PACK)/parse/parser.java $(PACK)/parse/sym.java $(PACK)/parse/*.class $(PACK)/absyn/*.class $(PACK)/symbol/*.class  $(PACK)/errormsg/*.class $(PACK)/general/*.class *~ $(PACK)/semant/*.class $(PACK)/tree/*.class $(PACK)/assem/*.class $(PACK)/temp/*.class $(PACK)/translate/*.class $(PACK)/canon/*.class $(PACK)/frame/*.class $(PACK)/x86/*.class $(PACK)/main/*.class *.o $(PACK)/codegen/*.class $(LIBL3) bin/*.o bin/*.exe *.exe *.dll $(JARARCH) $(PACK)/analysis/*.class $(PACK)/graph/*.class $(PACK)/flowgraph/*.class $(PACK)/regalloc/*.class $(PACK)/trace/*.class *.dll



