summaryrefslogtreecommitdiff
path: root/test/Makefile
blob: 832646ae2b233ec01ce764c034d0cb16027d2620 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#===- test/Makefile ----------------------------------------*- 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.
# 
#===------------------------------------------------------------------------===#

LEVEL  = ..
DIRS   = 

#
# Make QMTest the default for testing features and regressions
# Do this first to force QMTest to run first
#
ifdef TESTSUITE
all:: check-dejagnu
else
all:: qmtest
endif

# Include other test rules
include Makefile.tests

# New QMTest functionality:
#	The test suite is being transitioned over to QMTest.  Eventually, it
#	will use QMTest by default.

# QMTest option specifying the location of the QMTest database.
QMDB= -D $(LLVM_SRC_ROOT)/test
QMCLASSES=$(LLVM_OBJ_ROOT)/test/QMTest

#
# Determine which expectations file we will use
#
QMEXPECT:=$(LLVM_SRC_ROOT)/test/QMTest/expectations.unknown.qmr
ifeq ($(OS),Linux)
QMEXPECT:=$(LLVM_SRC_ROOT)/test/QMTest/expectations.linux.qmr
endif

ifeq ($(OS),SunOS)
QMEXPECT:=$(LLVM_SRC_ROOT)/test/QMTest/expectations.sunos.qmr
endif

ifeq ($(OS),Darwin)
QMEXPECT:=$(LLVM_SRC_ROOT)/test/QMTest/expectations.darwin.qmr
endif

#
# This is configuration information used by the test suite.  In QM Test, it's
# called a 'context.'
#
CONTEXT= -c "srcroot=$(LLVM_SRC_ROOT)" \
         -c "buildroot=$(LLVM_OBJ_ROOT)" \
         -c "buildtype=$(BuildMode)" \
         -c "tmpdir=$(LLVM_OBJ_ROOT)/test/tmp" \
         -c "coresize=0" \
         -c "cc=$(CC)" \
         -c "cxx=$(CXX)" \
         -c "llvmgcc=$(LLVMGCC)" \
         -c "llvmgxx=$(LLVMGXX)" \
         -c "make=$(MAKE)" \
         -c "python=$(PYTHON)"

#
# Location of the QMTest program.
#
QMTEST= QMTEST_CLASS_PATH=$(QMCLASSES) qmtest $(QMDB)


#
# Execute the tests
#
qmtest:: $(LLVM_OBJ_ROOT)/test/tmp register
	-$(QMTEST) run -O $(QMEXPECT) $(CONTEXT)

%.t:: $(LLVM_OBJ_ROOT)/test/tmp register
	-$(QMTEST) run -O $(QMEXPECT) $(CONTEXT) $*

#
# Create the temporary directory used by the test suite.
#
$(LLVM_OBJ_ROOT)/test/tmp::
	${MKDIR} $(LLVM_OBJ_ROOT)/test/tmp

#
# Right now, QMTest compiles the python test classes and put them into the
# source tree.  Since Python bytecode is *not* cross-platform compatible (I
# think), we'll regenerate every time.
#
# Simultaneous builds won't work, but shared source trees will.
#
register:
	$(QMTEST) register test llvm.TestAsmDisasm
	$(QMTEST) register test llvm.AssembleTest
	$(QMTEST) register test llvm.ConvertToCTest
	$(QMTEST) register test llvm.LLToCTest
	$(QMTEST) register test llvm.MachineCodeTest
	$(QMTEST) register test llvm.TestOptimizer
	$(QMTEST) register test llvm.LLITest
	$(QMTEST) register test llvm.TestRunner
	$(QMTEST) register test llvm.VerifierTest
	$(QMTEST) register test llvm.CTest
	$(QMTEST) register test llvm.CXXTest
	$(QMTEST) register database llvmdb.llvmdb

# Start up the QMTest GUI
gui::
	$(QMTEST) gui --no-browser --daemon

# Also get rid of qmtest garbage when we 'make clean' in this directory.
clean:: qmtest-clean

qmtest-clean:
	$(RM) -rf $(LLVM_OBJ_ROOT)/test/tmp
	$(RM) -f $(LLVM_SRC_ROOT)/test/QMTest/*.pyo \
		$(LLVM_OBJ_ROOT)/test/QMTest/*.pyo
	$(RM) -f $(LLVM_SRC_ROOT)/test/results.qmr \
		$(LLVM_OBJ_ROOT)/test/results.qmr

#===------------------------------------------------------------------------===#
# DejaGNU testing support
#===------------------------------------------------------------------------===#

ifdef TESTSUITE
RUNTESTFLAGS := --tool $(TESTSUITE)
endif

check-dejagnu: site.exp
	-PATH=$(LLVMToolDir):$(LLVM_SRC_ROOT)/test/Scripts:$(PATH) \
	$(RUNTEST) $(RUNTESTFLAGS)


dejagnu-clean:
	$(RM) -rf `find $(LLVM_OBJ_ROOT)/test/Regression -name Output -type d -print`

site.exp: Makefile $(LLVM_OBJ_ROOT)/Makefile.config
	@echo 'Making a new site.exp file...'
	@echo '## these variables are automatically generated by make ##' >site.tmp
	@echo '# Do not edit here.  If you wish to override these values' >>site.tmp
	@echo '# edit the last section' >>site.tmp
	@echo "set target_triplet $(TARGET_TRIPLE)" >> site.tmp
	@echo 'set prcontext "tclsh $(LLVM_SRC_ROOT)/test/Scripts/prcontext.tcl"' >> site.tmp
	@echo 'set srcdir $(LLVM_SRC_ROOT)/test' >>site.tmp
	@echo "set objdir $(LLVM_OBJ_ROOT)/test" >>site.tmp
	@echo 'set llvmgcc $(LLVMGCCDIR)/bin/gcc' >> site.tmp
	@echo 'set llvmgxx $(LLVMGCCDIR)/bin/g++' >> site.tmp
	@echo '## All variables above are generated by configure. Do Not Edit ## ' >>site.tmp
	@test ! -f site.exp || \
	sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
	@-rm -f site.bak
	@test ! -f site.exp || mv site.exp site.bak
	@mv site.tmp site.exp

#===------------------------------------------------------------------------===#
# quick-test utility. Just runs TestRunner.sh on all the *.ll files in a
# directory. Use like this: 
#   cd llvm/test ; make quick-test QUICKTEST=Regression/Bytecode
# where QUICKTEST specifies the directory you want to run the tests on.
#===------------------------------------------------------------------------===#
quick-test:
	@if test -d "${QUICKTEST}" ; then \
	  cd $(LLVM_SRC_ROOT)/test/$(QUICKTEST) ; \
	  find . -name \*.ll -print -exec $(LLVM_SRC_ROOT)/test/TestRunner.sh {} \; ; \
	else \
	  echo "Set QUICKTEST=<some directory with TestRunner.sh .ll files in it" ; \
	fi