##==-- test/Makefile.test - Common make rules Java tests -*- makefile -*--====##
#
#                     The LLVM Compiler Infrastructure
#
# This file was developed by the LLVM research group and is distributed under
# the University of Illinois Open Source License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##

.PHONY: clean

clean::
	$(Verb)$(RM) -f a.out core
	$(Verb)$(RM) -rf Output/

# we don't want these files to be deleted by make, even if they are
# intermediate results
.PRECIOUS: %.linked.bc %.raw.bc %.ll %.llvm.bc %.llc

# rule to link bytecode with runtime
%.llvm %.llvm.bc: %.linked.bc $(LibDir)/libjrt.bca $(EXTRA_OBJS) $(LOPT)
	$(Echo) Linking $< with the Java runtime
	-$(Verb)$(GCCLD) -o=$*.llvm $< -L $(CFERuntimeLibDir) -L $(LibDir) $(EXTRA_OBJS)
	-$(Verb)$(LOPT) -load $(LibDir)/LLVMJavaTransforms -addstubs -f -o=$*.stubbed.llvm.bc $*.llvm.bc
	-$(Verb)$(MV) -f $*.stubbed.llvm.bc $*.llvm.bc

# rule to link raw bytecode with runtime
%.raw.llvm %.raw.llvm.bc: %.linked.bc $(LibDir)/libjrt.bca $(EXTRA_OBJS) $(LOPT)
	$(Echo) Linking $< with the Java runtime \(no optimizations\)
	-$(Verb)$(GCCLD) -disable-opt -o=$*.raw.llvm $< -L $(CFERuntimeLibDir) -L $(LibDir) $(EXTRA_OBJS)
	-$(Verb)$(LOPT) -load $(LibDir)/LLVMJavaTransforms -addstubs -f -o=$*.stubbed.raw.llvm.bc $*.raw.llvm.bc
	-$(Verb)$(MV) -f $*.stubbed.raw.llvm.bc $*.raw.llvm.bc

# rule to make native executable
%.llc.s: %.llvm.bc
	-$(Verb)$(LLC) -f $< -o $@

%.llc: %.llc.s
	-$(Verb)$(CC) $(CFLAGS) $< $(LDFLAGS) -o $@

# add function trace code
%.tracef.llvm %.tracef.llvm.bc: %.llvm %.llvm.bc $(LOPT)
	$(Echo) Adding function trace code to $<
	$(Verb)$(CP) $*.llvm $*.tracef.llvm
	$(Verb)$(LOPT) -tracem -tracedisablehashdisable -f -o=$*.tracef.llvm.bc $*.llvm.bc

# rule to make assembly from bytecode
%.dis-ll: %.bc
	$(Echo) Disassembling $<
	$(Verb)$(LDIS) -f -o=$@ $<

# rule to compile java sources
ifdef BUILD_JAVA_SOURCES
JAVA_SOURCES := $(wildcard *.java)
JAVA_TESTS := $(basename $(JAVA_SOURCES))
PREFIXED_JAVA_TESTS := $(addprefix Output/, $(JAVA_TESTS))
PREFIXED_CLASS_FILES := $(addsuffix .class/, $(PREFIXED_JAVA_TESTS))

$(PREFIXED_CLASS_FILES): $(addsuffix .java,$(JAVA_TESTS))
	$(Echo) Compiling $?
	$(Verb)mkdir -p Output
	$(Verb)$(JAVAC) -classpath Output -d Output $?
	$(Verb)touch $@

# Compiled bytecode for tests
BYTECODE := $(addsuffix .llvm.bc, $(PREFIXED_JAVA_TESTS))

# Output produced by tests
NATIVE_OUTPUT := $(addsuffix .out-nat, $(PREFIXED_JAVA_TESTS))
JIT_OUTPUT := $(addsuffix .out-jit, $(PREFIXED_JAVA_TESTS))
LLC_OUTPUT := $(addsuffix .out-llc, $(PREFIXED_JAVA_TESTS))

# Diffs of output produced by native and llvm-java runs
JIT_DIFFS := $(addsuffix .diff-jit, $(PREFIXED_JAVA_TESTS))
LLC_DIFFS := $(addsuffix .diff-llc, $(PREFIXED_JAVA_TESTS))

# Keep the output and diffs
.PRECIOUS: %.out-nat %.out-jit %.out-llc %.diff-jit %.diff-llc

# rule to run a .class file with the jvm
%.out-nat: %.class
	-$(Verb)LD_LIBRARY_PATH=$(LibDir) $(JAVA) -cp Output $(notdir $*) \
		> $*.out-nat 2>&1

# rule to run a .class file with the llvm jit
%.out-jit: %.llvm.bc
	-$(Verb)$(LLI) $< > $*.out-jit 2>&1

# rule to run a .class file with llc
%.out-llc: %.llc
	-$(Verb)./$< > $*.out-llc 2>&1

# rule to diff test output
%.diff-jit: %.out-nat %.out-jit
	$(Verb)diff $*.out-nat $*.out-jit > $@ \
	&& echo "PASS(jit): $(notdir $*)" \
	|| echo "FAIL(jit): $(notdir $*)"

%.diff-llc: %.out-nat %.out-llc
	$(Verb)diff $*.out-nat $*.out-llc > $@ \
	&& echo "PASS(llc): $(notdir $*)" \
	|| echo "FAIL(llc): $(notdir $*)"

GCCLD_PASS_ARGS := $(shell $(GCCLD) /dev/null -debug-pass=Arguments 2>&1 | \
			grep 'Pass Arguments' | \
			sed 's/Pass Arguments: //')

# rules to invoke bugpoint
%.bugpoint.lli: %.llvm.bc %.out-nat
	$(LBUGPOINT) $< -run-lli -output=$*.out-nat

%.bugpoint.llc: %.llvm.bc %.out-nat
	$(LBUGPOINT) $< -run-llc -output=$*.out-nat

%.bugpoint.gccld: %.raw.llvm.bc %.out-nat
	$(LBUGPOINT) $< $(GCCLD_PASS_ARGS) -output=$*.out-nat

all-local:: $(JIT_DIFFS)

endif
