X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=util%2Fregress;h=3cb0783495f2cfcf15afc9402c7ea27e4823a913;hb=9648c05db19292ddd285a80914593cc0631403ff;hp=856e9a1a624908eab8646a35419a706b82cdf1da;hpb=be3542ebdb2747d1e9f4294a9b1eccf690d9f3a7;p=gem5.git diff --git a/util/regress b/util/regress index 856e9a1a6..3cb078349 100755 --- a/util/regress +++ b/util/regress @@ -36,31 +36,60 @@ from subprocess import call progname = os.path.basename(sys.argv[0]) optparser = optparse.OptionParser() -optparser.add_option('-v', '--verbose', dest='verbose', action='store_true', - default=False, - help='echo commands before executing') -optparser.add_option('--builds', dest='builds', - default='ALPHA_SE,ALPHA_FS,MIPS_SE,' + \ - 'SPARC_SE,SPARC_FS,X86_SE,ARM_SE', - help='comma-separated list of build targets to test ' - " (default: '%default')" ) -optparser.add_option('--variants', dest='variants', - default='fast', - help='comma-separated list of build variants to test ' - " (default: '%default')" ) -optparser.add_option('--scons-opts', dest='scons_opts', default='', - help='scons options', metavar='OPTS') -optparser.add_option('-j', '--jobs', type='int', default=1, - help='number of parallel jobs to use') -optparser.add_option('-k', '--keep-going', action='store_true', - help='keep going after errors') +add_option = optparser.add_option +add_option('-v', '--verbose', action='store_true', default=False, + help='echo commands before executing') +add_option('--builds', + default='ALPHA,ALPHA_MOESI_hammer,' \ + 'ALPHA_MESI_Two_Level,' \ + 'ALPHA_MOESI_CMP_directory,' \ + 'ALPHA_MOESI_CMP_token,' \ + 'MIPS,' \ + 'NULL,' \ + 'POWER,' \ + 'SPARC,' \ + 'X86,X86_MESI_Two_Level,' \ + 'ARM', + help="comma-separated build targets to test (default: '%default')") +add_option('--modes', + default='se,fs', + help="comma-separated modes to test (default: '%default')") +add_option('--test-variants', default='opt', + help="comma-separated build variants to test (default: '%default')"\ + ", set to '' for none") +add_option('--compile-variants', default='debug,fast', + help="comma-separated build variants to compile only (not test) " \ + "(default: '%default'), set to '' for none", metavar='VARIANTS') +add_option('--scons-opts', default='', metavar='OPTS', + help='scons options') +add_option('-j', '--jobs', type='int', default=1, metavar='N', + help='number of parallel jobs to use (0 to use all cores)') +add_option('-k', '--keep-going', action='store_true', + help='keep going after errors') +add_option('--update-ref', action='store_true', + help='update reference outputs') +add_option('-D', '--build-dir', default='', metavar='DIR', + help='build directory location') +add_option('-n', "--no-exec", default=False, action='store_true', + help="don't actually invoke scons, just echo SCons command line") (options, tests) = optparser.parse_args() +# split a comma-separated list, but return an empty list if given the +# empty string +def split_if_nonempty(s): + if not s: + return [] + return s.split(',') + # split list options on ',' to get Python lists -builds = options.builds.split(',') -variants = options.variants.split(',') +builds = split_if_nonempty(options.builds) +modes = split_if_nonempty(options.modes) +test_variants = split_if_nonempty(options.test_variants) +compile_variants = split_if_nonempty(options.compile_variants) + +options.build_dir = os.path.join(options.build_dir, 'build') # Call os.system() and raise exception if return status is non-zero def system(cmd): @@ -79,37 +108,63 @@ def system(cmd): print >>sys.stderr, "When attemping to execute: %s" % cmd sys.exit(1) -# Quote string s so it can be passed as a shell arg -def shellquote(s): - if ' ' in s: - s = "'%s'" % s - return s +targets = [] +# start with compile-only targets, if any +if compile_variants: + targets += ['%s/%s/gem5.%s' % (options.build_dir, build, variant) + for variant in compile_variants + for build in builds] + +# By default run the 'quick' tests, all expands to quick and long if not tests: - print "No tests specified, just building binaries." - targets = ['build/%s/m5.%s' % (build, variant) - for build in builds - for variant in variants] + tests = ['quick'] elif 'all' in tests: - targets = ['build/%s/tests/%s' % (build, variant) - for build in builds - for variant in variants] -else: - # Ugly! Since we don't have any quick SPARC_FS tests remove the SPARC_FS target - # If we ever get a quick SPARC_FS test, this code should be removed - if 'quick' in tests and 'SPARC_FS' in builds: - builds.remove('SPARC_FS') - targets = ['build/%s/tests/%s/%s' % (build, variant, test) - for build in builds - for variant in variants - for test in tests] + tests = ['quick', 'long'] + +# set up test targets for scons, since we don't have any quick SPARC +# full-system tests exclude it +targets += ['%s/%s/tests/%s/%s/%s' % (options.build_dir, build, variant, test, + mode) + for build in builds + for variant in test_variants + for test in tests + for mode in modes + if not (build == 'SPARC' and test == 'quick' and mode == 'fs')] + +def cpu_count(): + if 'bsd' in sys.platform or sys.platform == 'darwin': + try: + return int(os.popen('sysctl -n hw.ncpu').read()) + except ValueError: + pass + else: + try: + return os.sysconf('SC_NPROCESSORS_ONLN') + except (ValueError, OSError, AttributeError): + pass + + raise NotImplementedError('cannot determine number of cpus') scons_opts = options.scons_opts if options.jobs != 1: + if options.jobs == 0: + options.jobs = cpu_count() scons_opts += ' -j %d' % options.jobs if options.keep_going: scons_opts += ' -k' +if options.update_ref: + scons_opts += ' --update-ref' -system('scons IGNORE_STYLE=True %s %s' % (scons_opts, ' '.join(targets))) +# We generally compile gem5.fast only to make sure it compiles OK; +# it's not very useful to run as a regression test since assertions +# are disabled. Thus there's not much point spending time on +# link-time optimization. +scons_opts += ' --no-lto' -sys.exit(0) +cmd = 'scons --ignore-style %s %s' % (scons_opts, ' '.join(targets)) +if options.no_exec: + print cmd +else: + system(cmd) + sys.exit(0)