##==-- 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