JAVAC = javac
CLASSPATH = .:./classes:$(JAVA_HOME)/jre/lib/rt.jar

export CLASSPATH

CLASS_TARGETS = \
	classes/Test.class \
	classes/java/lang/Object.class \
	classes/java/lang/Class.class \
	classes/java/lang/Cloneable.class \
	classes/java/io/Serializable.class \

O_TARGETS = \
	main.o \
	class.o \
	classcode.o \
	classdata.o \
	classinfo.o \
	environment.o \
	native.o \
	hashmap.o \
	unicode.o \
	util.o \
	signal.o \

run : jvm
	export MALLOC_CHECK_=2 && ./$< Test

run-debug : jvm
	export MALLOC_CHECK_=2 && gdb ./$<

all : $(CLASS_TARGETS) jvm

jvm : $(O_TARGETS)
	gcc -g -o $@ $^
	objdump --disassemble-all --all-headers $@ > $@.out

clean :
	$(RM) $(addsuffix *.class,$(sort $(dir $(CLASS_TARGETS)))) $(addsuffix *.o,$(sort $(dir $(O_TARGETS)))) *.out jvm work/*

.SUFFIXES :
.SUFFIXES : .class .o

%.class : %.java
	$(JAVAC) -g -deprecation -d ./classes $<

%.o : %.c
	gcc -g -Wall -I./include -c -o $@ $<

