#!/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()