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