
.PHONY: gen_const clean

JC=javac

JAVA_HOME := $(shell readlink -f `which $(JC)` | sed "s:/bin/$(JC)::")

JAVA_INC := $(shell realpath $(JAVA_HOME)/include)

JAVA_PLATFORM_INC := $(shell dirname `find $(JAVA_INC) -name jni_md.h`)

UNICORN_INC=../../include

SAMPLES := $(shell ls samples/*.java)
SRC := $(shell ls unicorn/*.java)

OS := $(shell uname)
ifeq ($(OS),Darwin)
   LIB_EXT=.dylib
else ifeq ($(OS),Linux)
   LIB_EXT=.so
else
   LIB_EXT=.dll
endif

CC=gcc
CFLAGS=-fPIC
LDFLAGS=-shared -fPIC
LIBS=-lunicorn
LIBDIR=-L../../
INCS=-I$(JAVA_INC) -I$(JAVA_PLATFORM_INC) -I$(UNICORN_INC)

CLASSPATH=./

.SUFFIXES: .java .class

%.class: %.java
	$(JC) -classpath .:unicorn.jar $(JFLAGS) $<

OBJS=unicorn_Unicorn.o

JARFILE=unicorn.jar

all: jar lib samples

%.o: %.c
	$(CC) -c $(CFLAGS) $(INCS) $< -o $@

unicorn_Unicorn.h: unicorn/Unicorn.java
	javac -h . $<

unicorn_Unicorn.o: unicorn_Unicorn.c unicorn_Unicorn.h
	$(CC) -c $(CFLAGS) $(INCS) $< -o $@

libunicorn_java$(LIB_EXT): unicorn_Unicorn.o

lib: libunicorn_java$(LIB_EXT) unicorn_Unicorn.h
	$(CC) -o $< $(LDFLAGS) $(OBJS) $(LIBDIR) $(LIBS)

samples: $(SAMPLES:.java=.class)
jarfiles: $(SRC:.java=.class)

jar: jarfiles
	jar cf $(JARFILE) unicorn/*.class

install: lib jar
	cp libunicorn_java$(LIB_EXT) /usr/lib
	cp $(JARFILE) /usr/share/java

uninstall:
	rm /usr/lib/libunicorn_java$(LIB_EXT)
	rm /usr/share/java/$(JARFILE)

gen_const:
	cd .. && python const_generator.py java

clean:
	rm unicorn/*.class
	rm samples/*.class
	rm *.so
	rm *.dylib
	rm *.dll
