SConscript (2929:f986dc04e25f) SConscript (2932:eba74420a01c)
1# -*- mode:python -*-
2
1# -*- mode:python -*-
2
3# Copyright (c) 2004-2005 The Regents of The University of Michigan
3# Copyright (c) 2004-2006 The Regents of The University of Michigan
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions are
8# met: redistributions of source code must retain the above copyright
9# notice, this list of conditions and the following disclaimer;
10# redistributions in binary form must reproduce the above copyright
11# notice, this list of conditions and the following disclaimer in the

--- 8 unchanged lines hidden (view full) ---

20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions are
8# met: redistributions of source code must retain the above copyright
9# notice, this list of conditions and the following disclaimer;
10# redistributions in binary form must reproduce the above copyright
11# notice, this list of conditions and the following disclaimer in the

--- 8 unchanged lines hidden (view full) ---

20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28#
29# Authors: Steve Reinhardt
30# Kevin Lim
28
29import os
30import sys
31import glob
32from SCons.Script.SConscript import SConsEnvironment
33
34Import('env')
35

--- 95 unchanged lines hidden (view full) ---

131 return 0
132
133def update_test_string(target, source, env):
134 return env.subst("Updating ${SOURCES[0].dir} from ${SOURCES[1].dir}",
135 target=target, source=source)
136
137updateAction = env.Action(update_test, update_test_string)
138
31
32import os
33import sys
34import glob
35from SCons.Script.SConscript import SConsEnvironment
36
37Import('env')
38

--- 95 unchanged lines hidden (view full) ---

134 return 0
135
136def update_test_string(target, source, env):
137 return env.subst("Updating ${SOURCES[0].dir} from ${SOURCES[1].dir}",
138 target=target, source=source)
139
140updateAction = env.Action(update_test, update_test_string)
141
139def test_builder(env, category, cpu_list=[], os_list=[], refdir='ref', timeout=15):
142def test_builder(env, category, cpu_list=[], os_list=[], refdir='ref',
143 timeout=15):
140 """Define a test.
141
142 Args:
143 category -- string describing test category (e.g., 'quick')
144 cpu_list -- list of CPUs to runs this test on (blank means all compiled CPUs)
145 os_list -- list of OSs to run this test on
146 refdir -- subdirectory containing reference output (default 'ref')
147 timeout -- test timeout in minutes (only enforced on pool)
148
149 """
150
151 default_refdir = False
152 if refdir == 'ref':
153 default_refdir = True
154 if len(cpu_list) == 0:
155 cpu_list = env['CPU_MODELS']
144 """Define a test.
145
146 Args:
147 category -- string describing test category (e.g., 'quick')
148 cpu_list -- list of CPUs to runs this test on (blank means all compiled CPUs)
149 os_list -- list of OSs to run this test on
150 refdir -- subdirectory containing reference output (default 'ref')
151 timeout -- test timeout in minutes (only enforced on pool)
152
153 """
154
155 default_refdir = False
156 if refdir == 'ref':
157 default_refdir = True
158 if len(cpu_list) == 0:
159 cpu_list = env['CPU_MODELS']
160 if env['TEST_CPU_MODELS']:
161 temp_cpu_list = []
162 for i in env['TEST_CPU_MODELS']:
163 if i in cpu_list:
164 temp_cpu_list.append(i)
165 cpu_list = temp_cpu_list
166# Code commented out that shows the general structure if we want to test
167# different OS's as well.
156# if len(os_list) == 0:
168# if len(os_list) == 0:
157# raise RuntimeError, "No OS specified"
169# for test_cpu in cpu_list:
170# build_cpu_test(env, category, '', test_cpu, refdir, timeout)
158# else:
159# for test_os in os_list:
171# else:
172# for test_os in os_list:
160# build_cpu_test(env, category, test_os, cpu_list, refdir, timeout)
161 # Loop through CPU models and generate proper options, ref directories for each
173# for test_cpu in cpu_list:
174# build_cpu_test(env, category, test_os, test_cpu, refdir,
175# timeout)
176 # Loop through CPU models and generate proper options, ref directories
162 for cpu in cpu_list:
163 test_os = ''
164 if cpu == "AtomicSimpleCPU":
165 cpu_option = ('','atomic/')
166 elif cpu == "TimingSimpleCPU":
167 cpu_option = ('--timing','timing/')
168 elif cpu == "O3CPU":
169 cpu_option = ('--detailed','detailed/')
170 else:
171 raise TypeError, "Unknown CPU model specified"
172
173 if default_refdir:
177 for cpu in cpu_list:
178 test_os = ''
179 if cpu == "AtomicSimpleCPU":
180 cpu_option = ('','atomic/')
181 elif cpu == "TimingSimpleCPU":
182 cpu_option = ('--timing','timing/')
183 elif cpu == "O3CPU":
184 cpu_option = ('--detailed','detailed/')
185 else:
186 raise TypeError, "Unknown CPU model specified"
187
188 if default_refdir:
174 # Reference stats located in ref/arch/os/cpu or ref/arch/cpu if no OS specified
189 # Reference stats located in ref/arch/os/cpu or ref/arch/cpu
190 # if no OS specified
175 test_refdir = os.path.join(refdir, env['TARGET_ISA'])
176 if test_os != '':
177 test_refdir = os.path.join(test_refdir, test_os)
178 cpu_refdir = os.path.join(test_refdir, cpu_option[1])
179
180 ref_stats = os.path.join(cpu_refdir, 'm5stats.txt')
181
182 # base command for running test

--- 14 unchanged lines hidden (view full) ---

197 # Output redirection is also different for batch runs.
198 # Batch command also supports timeout arg (in seconds, not minutes).
199 if env['BATCH']:
200 cmd = [env['BATCH_CMD'], '-t', str(timeout * 60),
201 '-o', cmd_stdout, '-e', cmd_stderr, base_cmd]
202 else:
203 cmd = [base_cmd, '>', cmd_stdout, '2>', cmd_stderr]
204
191 test_refdir = os.path.join(refdir, env['TARGET_ISA'])
192 if test_os != '':
193 test_refdir = os.path.join(test_refdir, test_os)
194 cpu_refdir = os.path.join(test_refdir, cpu_option[1])
195
196 ref_stats = os.path.join(cpu_refdir, 'm5stats.txt')
197
198 # base command for running test

--- 14 unchanged lines hidden (view full) ---

213 # Output redirection is also different for batch runs.
214 # Batch command also supports timeout arg (in seconds, not minutes).
215 if env['BATCH']:
216 cmd = [env['BATCH_CMD'], '-t', str(timeout * 60),
217 '-o', cmd_stdout, '-e', cmd_stderr, base_cmd]
218 else:
219 cmd = [base_cmd, '>', cmd_stdout, '2>', cmd_stderr]
220
205 env.Command([stdout_string, stderr_string, m5stats_string], [env.M5Binary, 'run.py'],
206 ' '.join(cmd))
221 env.Command([stdout_string, stderr_string, m5stats_string],
222 [env.M5Binary, 'run.py'], ' '.join(cmd))
207
208 # order of targets is important... see check_test
209 env.Command([outdiff_string, statsdiff_string, status_string],
210 [ref_stats, m5stats_string],
211 testAction)
212
213 # phony target to echo status
214 if env['update_ref']:
223
224 # order of targets is important... see check_test
225 env.Command([outdiff_string, statsdiff_string, status_string],
226 [ref_stats, m5stats_string],
227 testAction)
228
229 # phony target to echo status
230 if env['update_ref']:
215 p = env.Command(cpu_option[1] + '_update', [ref_stats, m5stats_string, status_string],
231 p = env.Command(cpu_option[1] + '_update',
232 [ref_stats, m5stats_string, status_string],
216 updateAction)
217 else:
233 updateAction)
234 else:
218 p = env.Command(cpu_option[1] + '_print', [status_string], printAction)
235 p = env.Command(cpu_option[1] + '_print', [status_string],
236 printAction)
219 env.AlwaysBuild(p)
220
221 env.Tests.setdefault(category, [])
222 env.Tests[category] += p
223
224# Make test_builder a "wrapper" function. See SCons wiki page at
225# http://www.scons.org/cgi-bin/wiki/WrapperFunctions.
226SConsEnvironment.Test = test_builder

--- 18 unchanged lines hidden ---
237 env.AlwaysBuild(p)
238
239 env.Tests.setdefault(category, [])
240 env.Tests[category] += p
241
242# Make test_builder a "wrapper" function. See SCons wiki page at
243# http://www.scons.org/cgi-bin/wiki/WrapperFunctions.
244SConsEnvironment.Test = test_builder

--- 18 unchanged lines hidden ---