X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FMakefile.tests;h=4b961bb826696c2c1d48191b7d6d6f7d2d60690b;hb=396d96bd272a8d335345685bf063a127bbac2936;hp=7194cdbe2069003d3814c731c1a04e815e83adf7;hpb=9af7022d5529ff091560ac369eb70dc14d7addd9;p=oota-llvm.git diff --git a/test/Makefile.tests b/test/Makefile.tests index 7194cdbe206..4b961bb8266 100644 --- a/test/Makefile.tests +++ b/test/Makefile.tests @@ -1,106 +1,104 @@ -## -*-Makefile-*- -##------------------------------------------------------------------------ -## Common rules for generating, linking, and compiling via LLVM. -##------------------------------------------------------------------------ +##----------------------------------------------------------*- Makefile -*-===## +## +## Common rules for generating, linking, and compiling via LLVM. This is +## used to implement a robust testing framework for LLVM +## +##-------------------------------------------------------------------------===## + +# If the user specified a TEST= option on the command line, we do not want to do +# the default testing type. Instead, we change the default target to be the +# test:: target. +# +ifdef TEST +test:: +endif -.PHONY: clean default +# We do not want to make .d files for tests! +DISABLE_AUTO_DEPENDENCIES=1 -## keep %.linked.bc and %.s from being deleted while we're debugging -.PRECIOUS: %.linked.bc %.s +include ${LEVEL}/Makefile.common +# Specify ENABLE_STATS on the command line to enable -stats and -time-passes +# output from gccas and gccld. +ifdef ENABLE_STATS +STATS = -stats -time-passes +endif -TOOLS = $(LEVEL)/tools/Debug +.PHONY: clean default -LLC = $(TOOLS)/llc -LAS = $(TOOLS)/as -LDIS = $(TOOLS)/dis -LOPT = $(TOOLS)/opt -LLINK = $(TOOLS)/link +# These files, which might be intermediate results, should not be deleted by +# make +.PRECIOUS: Output/%.bc Output/%.ll +.PRECIOUS: Output/%.tbc Output/%.tll +.PRECIOUS: Output/.dir +.PRECIOUS: Output/%.llvm.bc +.PRECIOUS: Output/%.llvm + +# Find the location of the platform specific LLVM GCC libraries +LLVMGCCLIBDIR=$(dir $(shell $(LLVMGCC) -print-file-name=libgcc.a)) + +# LLVM Tool Definitions (LLVMGCC, LLVMGXX, LLVMAS are provided by Makefile.rules) +LLI = $(LLVMTOOLCURRENT)/lli$(EXEEXT) +LLC = $(LLVMTOOLCURRENT)/llc$(EXEEXT) +LGCCAS = $(LLVMTOOLCURRENT)/gccas$(EXEEXT) +LGCCLD = $(LGCCLDPROG) -L$(LLVMGCCLIBDIR) -L$(LLVMGCCDIR)/lib +LDIS = $(LLVMTOOLCURRENT)/llvm-dis$(EXEEXT) +LOPT = $(LLVMTOOLCURRENT)/opt$(EXEEXT) +LLINK = $(LLVMTOOLCURRENT)/llvm-link$(EXEEXT) +LPROF = $(LLVMTOOLCURRENT)/llvm-prof$(EXEEXT) +LANALYZE = $(LLVMTOOLCURRENT)/analyze$(EXEEXT) +LBUGPOINT= $(LLVMTOOLCURRENT)/bugpoint$(EXEEXT) + +LCCFLAGS += -O2 -Wall +LCXXFLAGS += -O2 -Wall LLCFLAGS = - -LCC = /home/vadve/lattner/cvs/gcc_install/bin/gcc -LCFLAGS = -O2 $(LOCAL_CFLAGS) -Wall - -LLCLIB = $(LEVEL)/test/runtime.o -LIBS = $(LLCLIB) $(LOCAL_LIBS) - +FAILURE = $(LLVM_SRC_ROOT)/test/Failure.sh +TESTRUNR = @echo Running test: $<; \ + PATH=$(LLVMTOOLCURRENT):$(LLVM_SRC_ROOT)/test/Scripts:$(PATH) \ + $(LLVM_SRC_ROOT)/test/TestRunner.sh + +## If TRACE or TRACEM is "yes", set the appropriate llc flag (-trace or -tracem) +## mark that tracing on, and set the TRACELIBS variable. +TRACEFLAGS = ifeq ($(TRACE), yes) - LLCFLAGS := $(LLCFLAGS) -trace + TRACEFLAGS = -trace + TRACELIBS := -L$(LEVEL)/test/Libraries/Output -linstr.$(ARCH) endif -CC = /opt/SUNWspro/bin/cc -AS = /opt/SUNWspro/bin/cc -DIS = /usr/ccs/bin/dis -CP = /bin/cp -p -CFLAGS = -g -xarch=v9 -CCFLAGS = $(CFLAGS) -LDFLAGS = $(CFLAGS) -ASFLAGS = -c $(CFLAGS) - -## Special targets to build a program from multiple source files -## -ifdef PROG - - default: $(PROG) $(PROG).native - - ifeq ($(strip $(OBJS)),) - BCOBJS = $(PROG).bc - else - BCOBJS = $(OBJS:.o=.bc) - endif - - $(PROG).linked.bc: $(BCOBJS) - $(LLINK) -f $(BCOBJS) -o $(PROG).tmp.bc - $(LOPT) -cleangcc -raise -constprop -dce $(PROG).tmp.bc -o $@ - - $(PROG).native: $(OBJS:.o=.c) - gcc $(OBJS:.o=.c) -O2 $(LOCAL_CFLAGS) -Wall -o $@ +ifeq ($(TRACEM), yes) + TRACEFLAGS = -tracem + TRACELIBS := -L$(LEVEL)/test/Libraries/Output -linstr.$(ARCH) endif -## Special target to force target-dependent library to be compiled -## directly to native code. -## -$(LLCLIB): $(LLCLIB:.o=.c) - cd $(LEVEL)/test; $(MAKE) $(@F) - -runtime.o: runtime.c - $(CC) -c $(CCFLAGS) $< +LLCLIBS := $(LLCLIBS) -lm -clean : - $(RM) *.[123] *.bc *.mc *.s *.o a.out core $(PROG) +clean:: + $(RM) -f a.out core + $(RM) -rf Output/ -%.mc: %.bc $(LLC) $(AS) - @echo "Generating machine instructions for $<" - $(LLC) -f -dsched y $(LLCFLAGS) $< > $@ +# Compile from X.c to Output/X.ll +Output/%.ll: %.c $(LCC1) Output/.dir $(INCLUDES) + -$(LLVMGCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@ -%.trace.bc: %.bc $(LLC) - $(LLC) -f -trace $(LLCFLAGS) $< +# Compile from X.cpp to Output/X.ll +Output/%.ll: %.cpp $(LCC1XX) Output/.dir $(INCLUDES) + -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ -## Leave this rule out to avoid problems in tests that have both .c and .ll -## %.ll: %.c -## $(LCC) $(LCFLAGS) -S $< -o $*.ll +# Compile from X.cc to Output/X.ll +Output/%.ll: %.cc $(LCC1XX) Output/.dir $(INCLUDES) + -$(LLVMGXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ -%.bc: %.c - $(LCC) $(LCFLAGS) -c $< -o $*.tmp.bc - $(LOPT) -cleangcc -raise -constprop -dce $*.tmp.bc -o $@ - $(RM) $*.tmp.bc - -%.bc: %.ll - $(LAS) -f $< - -## There is just one file so omit link step and just clean -%.linked.bc: %.bc - $(LOPT) -cleangcc -raise -constprop -dce $< -o $@ - -%.clean.bc: %.bc - $(LOPT) -cleangcc -raise -constprop -dce $< -o $@ - -%.s: %.linked.bc - $(LLC) -f $(LLCFLAGS) $< -o $@ - -%: %.o $(LIBS) - $(CC) $(LDFLAGS) $< $(LIBS) -o $@ +# LLVM Assemble from Output/X.ll to Output/X.bc. Output/X.ll must have come +# from GCC output, so use GCCAS. +# +Output/%.bc: Output/%.ll $(LGCCAS) + -$(LGCCAS) $(STATS) $< -o $@ +# LLVM Assemble from X.ll to Output/X.bc. Because we are coming directly from +# LLVM source, use the non-transforming assembler. +# +Output/%.bc: %.ll $(LLVMAS) Output/.dir + -$(LLVMAS) -f $< -o $@ ## Cancel built-in implicit rules that override above rules %: %.s @@ -109,11 +107,3 @@ clean : %.o: %.c -## The next two rules are for disassembling an executable or an object file -%.dis: % - $(DIS) $< > $@ - -%.dis: %.o - $(DIS) $< > $@ - -