blob: bb0c8e627ecb71f2c12faa1438436adf0d86f57f [file] [log] [blame]
##==-- 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