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