CLIBS= -ldl
#CINCLUDES= -I /home/mcoan/jdk1.5.0_15/include/ -I /home/mcoan/jdk1.5.0_15/include/linux
CINCLUDES=  -I ./
CFLAGS=-Wall -std=c++98
CC=c++
OBJS=vm.o

def:
	rm -f HelloWorld.asm
	make HelloWorld.class
	make libIO.so
	make libsyscall.so
	make vm
	make IO.class
	export LD_LIBRARY_PATH=/home/mcoan/jvm/vm:${LD_LIBRARY_PATH} && ./vm HelloWorld

mytest:
	export LD_LIBRARY_PATH=/home/mcoan/jvm/vm:${LD_LIBRARY_PATH} && java HelloWorld

asm:
	javac -classpath .:bcel-5.2.jar asm.java
	java -classpath .:bcel-5.2.jar asm HelloWorld.asm 

run:
	./vm HelloWorld

disasm:
	c++ -Wall -std=c++98 -g disasm.cpp -o disasm
	./disasm HelloWorld

dis_asm:
	javac -classpath .:bcel-5.2.jar dis_asm.java

obj:
	javac obj.java
	java -classpath .:bcel-5.2.jar dis_asm obj.class obj.asm
	java -classpath .:bcel-5.2.jar asm obj.asm

def2:
	c++ -g -std=c++98 -Wall j2c.cpp -o j2c
	./j2c HelloWorld.asm HelloWorld.cpp
	c++ -g -std=c++98 -Wall HelloWorld.cpp -o HelloWorld
	./j2c loop.asm loop.cpp
	c++ -g -std=c++98 -Wall loop.cpp -o loop
	./j2c loop2.asm loop2.cpp
	c++ -g -std=c++98 -Wall loop2.cpp -o loop2
	./j2c loop3.asm loop3.cpp
	c++ -g -std=c++98 -Wall loop3.cpp -o loop3
	./j2c test_program.asm test_program.cpp
	c++ -g -std=c++98 -Wall test_program.cpp -o test_program
	./j2c obj.asm obj.cpp
	c++ -g -std=c++98 -Wall obj.cpp -o obj
	./j2c hello.asm hello.cpp
	c++ -g -std=c++98 -Wall hello.cpp -o hello

def3:
	javac hello.java
	./vm hello
	

test_all2:
	./HelloWorld
	./loop
	./loop2
	./loop3
	./test_program
	./obj

vm.o:vm.cpp
	c++ -Wall -std=c++98 -g vm.cpp -c 

native:libIO.so
	make libIO.so

compile:
	make j2c
	javac HelloWorld.java
	java -classpath .:bcel-5.2.jar dis_asm HelloWorld.class HelloWorld.asm > /dev/null
	./j2c HelloWorld.asm HelloWorld.cpp
	c++ HelloWorld.cpp -o HelloWorld
	./HelloWorld

test_all:
	./vm HelloWorld
	./vm loop
	./vm loop2
	./vm loop3
	./vm test_program
	./vm obj
	./vm hello
	./vm f
	./vm s
	./vm l
	./vm d
	./vm bits
	./vm cast
	./vm array

get_byte_code.o:get_byte_code.cpp
	c++ -g get_byte_code.cpp -c

dis:
	javac -classpath .:bcel-5.2.jar asm.java
	javac -classpath .:bcel-5.2.jar dis_asm.java

default:
	rm -f IO.class IO.o libIO.so
	make IO.class
	make libIO.so
	make vm
	make hello

all:
	make clean
	make def

t:
	rm -f IO.class IO.o libIO.so
	make libIO.so
	make IO.class
	make libIO.so
	make jvm
	make hello
	make test2

asm_default:
	make asm.class
	make dis_asm.class
	make hello

asm_all:
	make clean
	make asm.class
	make dis_asm.class
	make hello

Input.class:Input.java
	javac Input.java

input:
	make IO.class
	make libIO.so
	make Input.class
	java Input

IO.class:IO.java
	javac IO.java
	javah IO

io:
	make IO.class
	make libIO.so
	javac HelloWorld.java
	#java HelloWorld

libIO.so:IO.c
	#cc -I /usr/local/openjdk7/include/freebsd/ -I /usr/local/openjdk7/include/ -I ./ -shared IO.c -o libIO.so
	cc -I ./ -shared IO.c -o libIO.so
	

read_class2:read_class2.cpp ClassFile.h
	rm -f read_class2
	make jvm
	c++ -Wall -std=c++98 read_class2.cpp -o read_class2
	./jvm test_program

HelloWorld.class:HelloWorld.java
	javac HelloWorld.java

hello:
	make HelloWorld.class
	rm -f HelloWorld.asm
	java -classpath .:./bcel-5.2.jar dis_asm HelloWorld.class HelloWorld.asm > /dev/null
	java -classpath .:./bcel-5.2.jar asm HelloWorld.asm > /dev/null
	make libIO.so
	#java HelloWorld

javap:
	javap -c HelloWorld > HelloWorld.bc
	./to_asm HelloWorld.bc HelloWorld.asm

prog:
	rm -f test_program.class
	java -classpath .:./bcel-5.2.jar asm test_program.asm
	java test_program
	java -classpath .:./bcel-5.2.jar dis_asm test_program.class test_program2.asm
	java -classpath .:./bcel-5.2.jar asm test_program2.asm
	java test_program

asm.class:asm.java
	javac -classpath .:./bcel-5.2.jar asm.java

dis_asm.class:dis_asm.java
	javac -classpath .:./bcel-5.2.jar dis_asm.java

to_asm.o:
	${CC} to_asm.cpp -c ${CFLAGS} ${CLIBS} ${CINCLUDES}

to_asm:to_asm.o
	${CC} -o to_asm to_asm.o ${CFLAGS} ${CLIBS} ${CINCLUDES}

jvm.o:jvm.cpp ClassFile.h
	${CC} jvm.cpp -c ${CFLAGS} ${CLIBS} ${CINCLUDES}

vm:vm.o
	${CC} -o vm ../bytecode.o ../classfile.o ../disasm2.o ../utf8.o ../util.o ${OBJS} ${CFLAGS} ${CLIBS} ${CINCLUDES}
	#${CC} -o vm ${OBJS} ${CFLAGS} ${CLIBS} ${CINCLUDES}


clean:
	rm -f *.o
	rm -f vm
	rm -f *.core
	rm -f core

test:
	./vm HelloWorld

test2:
	./vm HelloWorld
