X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FMakefile.tests;h=7b18402e366abdb6fb95e535ac3496cf1f8a2a59;hb=54bda7e66ded623da056099e01a4b91f0174d500;hp=a3acb9029b738b52878b49515b3f25ecbb27a8f8;hpb=f87fc32e35280b2642639a13e3618b03a3c4a394;p=oota-llvm.git diff --git a/test/Makefile.tests b/test/Makefile.tests index a3acb9029b7..7b18402e366 100644 --- a/test/Makefile.tests +++ b/test/Makefile.tests @@ -1,101 +1,149 @@ -## -*-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 + +# We do not want to make .d files for tests! +DISABLE_AUTO_DEPENDENCIES=1 + +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 .PHONY: clean default -## keep %.linked.bc and %.s from being deleted while we're debugging -.PRECIOUS: %.linked.bc %.s +# 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 +TOOLS = $(LLVMTOOLCURRENT) -TOOLS = $(LEVEL)/tools/Debug +# LLVM Tool Definitions... +# +LCC = $(LLVMGCC) ## FIXME: remove these definitions, use LLVMGCC directly +LCXX = $(LLVMGXX) ## FIXME: remove these definitions, use LLVMGXX directly +LAS = $(LLVMAS) ## FIXME: remove these definitions, use LLVMAS directly +LLI = $(TOOLS)/lli LLC = $(TOOLS)/llc -LAS = $(TOOLS)/as -LDIS = $(TOOLS)/dis +LGCCAS = $(TOOLS)/gccas +LGCCLD = $(TOOLS)/gccld -L$(LLVMGCCDIR)/lib/gcc/$(LLVMGCCARCH) -L$(LLVMGCCDIR)/lib +LGCCLDPROG = $(TOOLS)/gccld +LDIS = $(TOOLS)/llvm-dis LOPT = $(TOOLS)/opt LLINK = $(TOOLS)/link -LLCFLAGS = - -LCC = /home/vadve/lattner/cvs/gcc_install/bin/gcc -LCFLAGS = -O2 $(LOCAL_CFLAGS) -Wall - -LLCLIB = $(LEVEL)/test/runtime.o -LIBS = $(LLCLIB) $(LOCAL_LIBS) +LANALYZE = $(TOOLS)/analyze +LBUGPOINT= $(TOOLS)/bugpoint +LCCFLAGS += -O2 -Wall +LCXXFLAGS += -O2 -Wall +LLCFLAGS = +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 + +# Native Tool Definitions +NATGCC = $(CC) +CP = /bin/cp -f + +## 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) +LLCLIBS := $(LLCLIBS) -lm + +clean:: + $(RM) -f a.out core + $(RM) -rf Output/ + +# Compile from X.c to Output/X.ll +Output/%.ll: $(SourceDir)/%.c $(LCC1) Output/.dir $(INCLUDES) + $(LCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@ + +Output/%.ll: %.c $(LCC1) Output/.dir $(INCLUDES) + $(LCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@ -runtime.o: runtime.c - $(CC) -c $(CCFLAGS) $< +# Compile from X.cpp to Output/X.ll +Output/%.ll: $(SourceDir)/%.cpp $(LCC1XX) Output/.dir $(INCLUDES) + $(LCXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ -clean : - $(RM) *.[123] *.bc *.mc *.s *.o a.out core $(PROG) +Output/%.ll: %.cpp $(LCC1XX) Output/.dir $(INCLUDES) + $(LCXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ -%.mc: %.bc $(LLC) $(AS) - @echo "Generating machine instructions for $<" - $(LLC) -f -dsched y $(LLCFLAGS) $< > $@ +# Compile from X.cc to Output/X.ll +Output/%.ll: $(SourceDir)/%.cc $(LCC1XX) Output/.dir $(INCLUDES) + $(LCXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ -%.trace.bc: %.bc $(LLC) - $(LLC) -f -trace $(LLCFLAGS) $< +Output/%.ll: %.cc $(LCC1XX) Output/.dir $(INCLUDES) + $(LCXX) $(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 +# 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 $@ -%.bc: %.c - $(LCC) $(LCFLAGS) -c $< -o $*.tmp.bc - $(LOPT) -cleangcc -raise -constprop -dce $*.tmp.bc -o $@ - $(RM) $*.tmp.bc +# LLVM Assemble from X.ll to Output/X.bc. Because we are coming directly from +# LLVM source, use the non-transforming assembler. +# +Output/%.bc: $(SourceDir)/%.ll $(LAS) Output/.dir + $(LAS) -f $< -o $@ -%.bc: %.ll - $(LAS) -f $< +# +# Testing versions of provided utilities... +# +Output/%.tll: $(SourceDir)/%.c $(LCC1) Output/.dir $(INCLUDES) + @echo "======== Compiling $<" + $(LCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@ || \ + ( rm -f $@; $(FAILURE) $@ ) -%.linked.bc: %.bc - $(CP) $< $@ +Output/%.tll: %.c $(LCC1) Output/.dir $(INCLUDES) + @echo "======== Compiling $<" + $(LCC) $(CPPFLAGS) $(LCCFLAGS) -S $< -o $@ || \ + ( rm -f $@; $(FAILURE) $@ ) -%.s: %.linked.bc - $(LLC) -f $(LLCFLAGS) $< -o $@ +Output/%.tll: $(SourceDir)/%.cpp $(LCC1XX) Output/.dir $(INCLUDES) + @echo "======== Compiling $<" + $(LCXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ || \ + ( rm -f $@; $(FAILURE) $@ ) -%: %.o $(LIBS) - $(CC) $(LDFLAGS) $< $(LIBS) -o $@ +Output/%.tll: %.cpp $(LCC1XX) Output/.dir $(INCLUDES) + @echo "======== Compiling $<" + $(LCXX) $(CPPFLAGS) $(LCXXFLAGS) -S $< -o $@ || \ + ( rm -f $@; $(FAILURE) $@ ) + +Output/%.tbc: Output/%.tll $(LAS) + @echo "======== Assembling $<" + $(LAS) -f $< -o $@ || \ + ( rm -f $@; $(FAILURE) $@ ) ## Cancel built-in implicit rules that override above rules @@ -105,11 +153,3 @@ clean : %.o: %.c -## The next two rules are for disassembling an executable or an object file -%.dis: % - $(DIS) $< > $@ - -%.dis: %.o - $(DIS) $< > $@ - -