| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python2 | 1 #!/usr/bin/env python2 | 
| 2 | 2 | 
| 3 import argparse | 3 import argparse | 
| 4 import ConfigParser | 4 import ConfigParser | 
| 5 import os | 5 import os | 
| 6 import shutil | 6 import shutil | 
| 7 import sys | 7 import sys | 
| 8 | 8 | 
| 9 from utils import shellcmd | 9 from utils import shellcmd | 
| 10 from utils import FindBaseNaCl | 10 from utils import FindBaseNaCl | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 49   Builds and executes cross tests from the space of all possible attribute | 49   Builds and executes cross tests from the space of all possible attribute | 
| 50   combinations.  The space can be restricted by providing subsets of attributes | 50   combinations.  The space can be restricted by providing subsets of attributes | 
| 51   to specifically include or exclude. | 51   to specifically include or exclude. | 
| 52   """ | 52   """ | 
| 53   # pypath is where to find other Subzero python scripts. | 53   # pypath is where to find other Subzero python scripts. | 
| 54   pypath = os.path.abspath(os.path.dirname(sys.argv[0])) | 54   pypath = os.path.abspath(os.path.dirname(sys.argv[0])) | 
| 55   root = FindBaseNaCl() | 55   root = FindBaseNaCl() | 
| 56 | 56 | 
| 57   # The rest of the attribute sets. | 57   # The rest of the attribute sets. | 
| 58   targets = [ 'x8632', 'x8664', 'arm32' ] | 58   targets = [ 'x8632', 'x8664', 'arm32' ] | 
| 59   sandboxing = [ 'native', 'sandbox' ] | 59   sandboxing = [ 'native', 'sandbox', 'nonsfi' ] | 
| 60   opt_levels = [ 'Om1', 'O2' ] | 60   opt_levels = [ 'Om1', 'O2' ] | 
| 61   arch_attrs = { 'x8632': [ 'sse2', 'sse4.1' ], | 61   arch_attrs = { 'x8632': [ 'sse2', 'sse4.1' ], | 
| 62                  'x8664': [ 'sse2', 'sse4.1' ], | 62                  'x8664': [ 'sse2', 'sse4.1' ], | 
| 63                  'arm32': [ 'neon', 'hwdiv-arm' ] } | 63                  'arm32': [ 'neon', 'hwdiv-arm' ] } | 
| 64   flat_attrs = [] | 64   flat_attrs = [] | 
| 65   for v in arch_attrs.values(): | 65   for v in arch_attrs.values(): | 
| 66     flat_attrs += v | 66     flat_attrs += v | 
| 67   arch_flags = { 'x8632': [], | 67   arch_flags = { 'x8632': [], | 
| 68                  'x8664': [], | 68                  'x8664': [], | 
| 69                  # ARM doesn't have an ELF writer yet, and iasm does not | 69                  # ARM doesn't have an ELF writer yet, and iasm does not | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 96   argparser.add_argument('--no-compile', '-n', default=False, | 96   argparser.add_argument('--no-compile', '-n', default=False, | 
| 97                          action='store_true', | 97                          action='store_true', | 
| 98                          help="Don't build; reuse binaries from the last run") | 98                          help="Don't build; reuse binaries from the last run") | 
| 99   argparser.add_argument('--dir', dest='dir', metavar='DIRECTORY', | 99   argparser.add_argument('--dir', dest='dir', metavar='DIRECTORY', | 
| 100                          default=('{root}/toolchain_build/src/subzero/' + | 100                          default=('{root}/toolchain_build/src/subzero/' + | 
| 101                                   'crosstest/Output').format(root=root), | 101                                   'crosstest/Output').format(root=root), | 
| 102                          help='Output directory') | 102                          help='Output directory') | 
| 103   argparser.add_argument('--lit', default=False, action='store_true', | 103   argparser.add_argument('--lit', default=False, action='store_true', | 
| 104                          help='Generate files for lit testing') | 104                          help='Generate files for lit testing') | 
| 105   argparser.add_argument('--toolchain-root', dest='toolchain_root', | 105   argparser.add_argument('--toolchain-root', dest='toolchain_root', | 
| 106                            help='Path to toolchain binaries.') | 106                          default=( | 
|  | 107                            '{root}/toolchain/linux_x86/pnacl_newlib_raw/bin' | 
|  | 108                          ).format(root=root), | 
|  | 109                          help='Path to toolchain binaries.') | 
| 107   args = argparser.parse_args() | 110   args = argparser.parse_args() | 
| 108 | 111 | 
| 109   # Run from the crosstest directory to make it easy to grab inputs. | 112   # Run from the crosstest directory to make it easy to grab inputs. | 
| 110   crosstest_dir = '{root}/toolchain_build/src/subzero/crosstest'.format( | 113   crosstest_dir = '{root}/toolchain_build/src/subzero/crosstest'.format( | 
| 111     root=root) | 114     root=root) | 
| 112   os.chdir(crosstest_dir) | 115   os.chdir(crosstest_dir) | 
| 113 | 116 | 
| 114   tests = ConfigParser.RawConfigParser() | 117   tests = ConfigParser.RawConfigParser() | 
| 115   tests.read('crosstest.cfg') | 118   tests.read('crosstest.cfg') | 
| 116 | 119 | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 149                 attr=attr) | 152                 attr=attr) | 
| 150               extra = (tests.get(test, 'flags').split(' ') | 153               extra = (tests.get(test, 'flags').split(' ') | 
| 151                        if tests.has_option(test, 'flags') else []) | 154                        if tests.has_option(test, 'flags') else []) | 
| 152               # Generate the compile command. | 155               # Generate the compile command. | 
| 153               cmp_cmd = ( | 156               cmp_cmd = ( | 
| 154                 ['{path}/crosstest.py'.format(path=pypath), | 157                 ['{path}/crosstest.py'.format(path=pypath), | 
| 155                  '-{opt}'.format(opt=opt), | 158                  '-{opt}'.format(opt=opt), | 
| 156                  '--mattr={attr}'.format(attr=attr), | 159                  '--mattr={attr}'.format(attr=attr), | 
| 157                  '--prefix=Subzero_', | 160                  '--prefix=Subzero_', | 
| 158                  '--target={target}'.format(target=target), | 161                  '--target={target}'.format(target=target), | 
|  | 162                  '--nonsfi={nsfi}'.format(nsfi='1' if sb=='nonsfi' else '0'), | 
| 159                  '--sandbox={sb}'.format(sb='1' if sb=='sandbox' else '0'), | 163                  '--sandbox={sb}'.format(sb='1' if sb=='sandbox' else '0'), | 
| 160                  '--dir={dir}'.format(dir=args.dir), | 164                  '--dir={dir}'.format(dir=args.dir), | 
| 161                  '--output={exe}'.format(exe=exe), | 165                  '--output={exe}'.format(exe=exe), | 
| 162                  '--driver={drv}'.format(drv=tests.get(test, 'driver'))] + | 166                  '--driver={drv}'.format(drv=tests.get(test, 'driver'))] + | 
| 163                 extra + | 167                 extra + | 
| 164                 ['--test=' + t | 168                 ['--test=' + t | 
| 165                  for t in tests.get(test, 'test').split(' ')] + | 169                  for t in tests.get(test, 'test').split(' ')] + | 
| 166                 arch_flags[target]) | 170                 arch_flags[target]) | 
| 167               run_cmd_base = os.path.join(args.dir, exe) | 171               run_cmd_base = os.path.join(args.dir, exe) | 
| 168               # Generate the run command. | 172               # Generate the run command. | 
| 169               run_cmd = run_cmd_base | 173               run_cmd = run_cmd_base | 
| 170               if sb == 'sandbox': | 174               if sb == 'sandbox': | 
| 171                 run_cmd = '{root}/run.py -q '.format(root=root) + run_cmd | 175                 run_cmd = '{root}/run.py -q '.format(root=root) + run_cmd | 
|  | 176               elif sb == 'nonsfi': | 
|  | 177                 run_cmd = ('{root}/scons-out/opt-linux-x86-32/obj/src/nonsfi/' + | 
|  | 178                            'loader/nonsfi_loader ').format(root=root) + run_cmd | 
| 172               else: | 179               else: | 
| 173                 run_cmd = RunNativePrefix(args.toolchain_root, target, run_cmd) | 180                 run_cmd = RunNativePrefix(args.toolchain_root, target, run_cmd) | 
| 174               if args.lit: | 181               if args.lit: | 
| 175                 # Create a file to drive the lit test. | 182                 # Create a file to drive the lit test. | 
| 176                 with open(run_cmd_base + '.xtest', 'w') as f: | 183                 with open(run_cmd_base + '.xtest', 'w') as f: | 
| 177                   f.write('# RUN: sh %s | FileCheck %s\n') | 184                   f.write('# RUN: sh %s | FileCheck %s\n') | 
| 178                   f.write('cd ' + crosstest_dir + ' && \\\n') | 185                   f.write('cd ' + crosstest_dir + ' && \\\n') | 
| 179                   f.write(' '.join(cmp_cmd) + ' && \\\n') | 186                   f.write(' '.join(cmp_cmd) + ' && \\\n') | 
| 180                   f.write(run_cmd + '\n') | 187                   f.write(run_cmd + '\n') | 
| 181                   f.write('echo Recreate a failure using ' + __file__ + | 188                   f.write('echo Recreate a failure using ' + __file__ + | 
| 182                           ' --toolchain-root=' + args.toolchain_root + | 189                           ' --toolchain-root=' + args.toolchain_root + | 
| 183                           ' --include=' + ','.join(desc) + '\n') | 190                           ' --include=' + ','.join(desc) + '\n') | 
| 184                   f.write('# CHECK: Failures=0\n') | 191                   f.write('# CHECK: Failures=0\n') | 
| 185               else: | 192               else: | 
| 186                 if not args.no_compile: | 193                 if not args.no_compile: | 
| 187                   shellcmd(cmp_cmd, | 194                   shellcmd(cmp_cmd, | 
| 188                            echo=args.verbose) | 195                            echo=args.verbose) | 
| 189                 if (args.defer): | 196                 if (args.defer): | 
| 190                   deferred_cmds.append(run_cmd) | 197                   deferred_cmds.append(run_cmd) | 
| 191                 else: | 198                 else: | 
| 192                   shellcmd(run_cmd, echo=True) | 199                   shellcmd(run_cmd, echo=True) | 
| 193   for run_cmd in deferred_cmds: | 200   for run_cmd in deferred_cmds: | 
| 194     shellcmd(run_cmd, echo=True) | 201     shellcmd(run_cmd, echo=True) | 
| 195 | 202 | 
| 196 if __name__ == '__main__': | 203 if __name__ == '__main__': | 
| 197   main() | 204   main() | 
| OLD | NEW | 
|---|