#!/usr/bin/env python2
import argparse
import os
import sys
import szbuild
from utils import FindBaseNaCl, shellcmd
def main():
"""Build native gcc-style executables for one or all Spec2K components.
Afterwards, the executables can be run from the
native_client/tests/spec2k/ directory as:
'./run_all.sh RunBenchmarks SetupGccX8632Opt {train|ref} ...'
-- or --
'./run_all.sh RunBenchmarks SetupPnaclX8632Opt {train|ref} ...'
-- or --
'./run_all.sh RunBenchmarks SetupNonsfiX8632Opt {train|ref} ...'
"""
nacl_root = FindBaseNaCl()
# Use the same default ordering as spec2k/run_all.sh.
components = [ '177.mesa', '179.art', '183.equake', '188.ammp', '164.gzip',
'175.vpr', '176.gcc', '181.mcf', '186.crafty', '197.parser',
'253.perlbmk', '254.gap', '255.vortex', '256.bzip2',
'300.twolf', '252.eon' ]
argparser = argparse.ArgumentParser(description=main.__doc__)
szbuild.AddOptionalArgs(argparser)
argparser.add_argument('--run', dest='run', action='store_true',
help='Run after building')
argparser.add_argument('comps', nargs='*', default=components)
args = argparser.parse_args()
bad = set(args.comps) - set(components)
if bad:
print 'Unknown component{s}: '.format(s='s' if len(bad) > 1 else '') + \
' '.join(x for x in bad)
sys.exit(1)
# Fix up Subzero target strings for the run_all.sh script.
target_map = {
'arm32':'arm',
'x8632':'x8632',
'x8664':'x8664'
}
run_all_target = target_map[args.target] # fail if target not listed above
suffix = (
'pnacl.opt.{target}' if args.sandbox else
'nonsfi.opt.{target}' if args.nonsfi else
'gcc.opt.{target}').format(
target=run_all_target);
for comp in args.comps:
name = os.path.splitext(comp)[1] or comp
if name[0] == '.':
name = name[1:]
szbuild.ProcessPexe(args,
('{root}/tests/spec2k/{comp}/' +
'{name}.opt.stripped.pexe'
).format(root=nacl_root, comp=comp, name=name),
('{root}/tests/spec2k/{comp}/' +
'{name}.{suffix}'
).format(root=nacl_root, comp=comp, name=name,
suffix=suffix))
if args.run:
os.chdir('{root}/tests/spec2k'.format(root=FindBaseNaCl()))
setup = 'Setup' + ('Pnacl' if args.sandbox else
'Nonsfi' if args.nonsfi else
'Gcc') + {
'arm32': 'Arm',
'x8632': 'X8632',
'x8664': 'X8664'}[args.target] + 'Opt'
shellcmd(['./run_all.sh',
'RunTimedBenchmarks',
setup,
'train'] + args.comps)
if __name__ == '__main__':
main()