| Index: pydir/build-runtime.py
 | 
| diff --git a/pydir/build-runtime.py b/pydir/build-runtime.py
 | 
| index caed29722f285d69ea552ac3d1f414aad864e5c8..622235bbf65e5bc13aa332fea6356a7eaedd2852 100755
 | 
| --- a/pydir/build-runtime.py
 | 
| +++ b/pydir/build-runtime.py
 | 
| @@ -9,27 +9,25 @@ import targets
 | 
|  from utils import FindBaseNaCl, GetObjcopyCmd, shellcmd
 | 
|  
 | 
|  
 | 
| -def Translate(ll_files, extra_args, obj, verbose):
 | 
| +def Translate(ll_files, extra_args, obj, verbose, target):
 | 
|    """Translate a set of input bitcode files into a single object file.
 | 
|  
 | 
|    Use pnacl-llc to translate textual bitcode input ll_files into object file
 | 
|    obj, using extra_args as the architectural flags.
 | 
|    """
 | 
| +  externalize = [] if target == 'mips32' else ['-externalize']
 | 
|    shellcmd(['cat'] + ll_files + ['|',
 | 
|              'pnacl-llc',
 | 
| -            '-externalize',
 | 
|              '-function-sections',
 | 
|              '-O2',
 | 
|              '-filetype=obj',
 | 
|              '-bitcode-format=llvm',
 | 
| -            '-arm-enable-dwarf-eh=1',
 | 
|              '-o', obj
 | 
| -    ] + extra_args, echo=verbose)
 | 
| -  shellcmd([GetObjcopyCmd(),
 | 
| -            '--strip-symbol=nacl_tp_tdb_offset',
 | 
| -            '--strip-symbol=nacl_tp_tls_offset',
 | 
| -            obj
 | 
| -    ], echo=verbose)
 | 
| +    ] + extra_args + externalize, echo=verbose)
 | 
| +  strip_syms = [] if target == 'mips32' else ['nacl_tp_tdb_offset',
 | 
| +                                              'nacl_tp_tls_offset']
 | 
| +  shellcmd([GetObjcopyCmd(target), obj] +
 | 
| +    [('--strip-symbol=' + sym) for sym in strip_syms])
 | 
|  
 | 
|  
 | 
|  def PartialLink(obj_files, extra_args, lib, verbose):
 | 
| @@ -41,8 +39,10 @@ def PartialLink(obj_files, extra_args, lib, verbose):
 | 
|  
 | 
|  
 | 
|  def MakeRuntimesForTarget(target_info, ll_files,
 | 
| -                          srcdir, tempdir, rtdir, verbose):
 | 
| +                          srcdir, tempdir, rtdir, verbose, excluded_targets):
 | 
|    """Builds native, sandboxed, and nonsfi runtimes for the given target."""
 | 
| +  if target_info.target in excluded_targets:
 | 
| +    return
 | 
|    # File-mangling helper functions.
 | 
|    def TmpFile(template):
 | 
|      return template.format(dir=tempdir, target=target_info.target)
 | 
| @@ -56,7 +56,7 @@ def MakeRuntimesForTarget(target_info, ll_files,
 | 
|      Translate(ll_files,
 | 
|                ['-mtriple=' + target_info.triple] + target_info.llc_flags,
 | 
|                TmpFile('{dir}/szrt_native_{target}.tmp.o'),
 | 
| -              verbose)
 | 
| +              verbose, target_info.target)
 | 
|      # Compile srcdir/szrt_profiler.c to
 | 
|      # tempdir/szrt_profiler_native_{target}.o.
 | 
|      shellcmd(['clang',
 | 
| @@ -81,7 +81,7 @@ def MakeRuntimesForTarget(target_info, ll_files,
 | 
|                  ['-m {ld_emu}'.format(ld_emu=target_info.ld_emu)],
 | 
|                  OutFile('{rtdir}/szrt_native_{target}.o'),
 | 
|                  verbose)
 | 
| -    shellcmd([GetObjcopyCmd(),
 | 
| +    shellcmd([GetObjcopyCmd(target_info.target),
 | 
|                '--strip-symbol=NATIVE',
 | 
|                OutFile('{rtdir}/szrt_native_{target}.o')])
 | 
|      # Compile srcdir/szrt_asan.c to szrt_asan_{target}.o
 | 
| @@ -103,7 +103,7 @@ def MakeRuntimesForTarget(target_info, ll_files,
 | 
|                ['-mtriple=' + targets.ConvertTripleToNaCl(target_info.triple)] +
 | 
|                target_info.llc_flags,
 | 
|                TmpFile('{dir}/szrt_sb_{target}.tmp.o'),
 | 
| -              verbose)
 | 
| +              verbose,target_info.target)
 | 
|      # Assemble srcdir/szrt_asm_{target}.s to tempdir/szrt_asm_{target}.o.
 | 
|      shellcmd(['llvm-mc',
 | 
|                '-triple=' + targets.ConvertTripleToNaCl(target_info.triple),
 | 
| @@ -118,7 +118,7 @@ def MakeRuntimesForTarget(target_info, ll_files,
 | 
|                  ['-m {ld_emu}'.format(ld_emu=target_info.sb_emu)],
 | 
|                  OutFile('{rtdir}/szrt_sb_{target}.o'),
 | 
|                  verbose)
 | 
| -    shellcmd([GetObjcopyCmd(),
 | 
| +    shellcmd([GetObjcopyCmd(target_info.target),
 | 
|                '--strip-symbol=NACL',
 | 
|                OutFile('{rtdir}/szrt_sb_{target}.o')])
 | 
|  
 | 
| @@ -131,7 +131,7 @@ def MakeRuntimesForTarget(target_info, ll_files,
 | 
|                ['-mtriple=' + target_info.triple] + target_info.llc_flags +
 | 
|                ['-relocation-model=pic', '-force-tls-non-pic', '-malign-double'],
 | 
|                TmpFile('{dir}/szrt_nonsfi_{target}.tmp.o'),
 | 
| -              verbose)
 | 
| +              verbose, target_info.target)
 | 
|      # Assemble srcdir/szrt_asm_{target}.s to tempdir/szrt_asm_{target}.o.
 | 
|      shellcmd(['llvm-mc',
 | 
|                '-triple=' + target_info.triple, '--defsym NONSFI=1',
 | 
| @@ -146,7 +146,7 @@ def MakeRuntimesForTarget(target_info, ll_files,
 | 
|                  ['-m {ld_emu}'.format(ld_emu=target_info.ld_emu)],
 | 
|                  OutFile('{rtdir}/szrt_nonsfi_{target}.o'),
 | 
|                  verbose)
 | 
| -    shellcmd([GetObjcopyCmd(),
 | 
| +    shellcmd([GetObjcopyCmd(target_info.target),
 | 
|                '--strip-symbol=NONSFI',
 | 
|                OutFile('{rtdir}/szrt_nonsfi_{target}.o')])
 | 
|  
 | 
| @@ -172,6 +172,9 @@ def main():
 | 
|                               '{root}/toolchain/linux_x86/pnacl_newlib_raw'
 | 
|                             ).format(root=nacl_root),
 | 
|                             help='Path to PNaCl toolchain binaries.')
 | 
| +    argparser.add_argument('--exclude-target', dest='excluded_targets',
 | 
| +                           default=[], action='append',
 | 
| +                           help='Target whose runtime should not be built')
 | 
|      args = argparser.parse_args()
 | 
|      os.environ['PATH'] = ('{root}/bin{sep}{path}'
 | 
|          ).format(root=args.pnacl_root, sep=os.pathsep, path=os.environ['PATH'])
 | 
| @@ -206,11 +209,17 @@ def main():
 | 
|                      '{srcdir}/szrt_ll.ll'.format(srcdir=srcdir)]
 | 
|  
 | 
|          MakeRuntimesForTarget(targets.X8632Target, ll_files,
 | 
| -                              srcdir, tempdir, rtdir, args.verbose)
 | 
| +                              srcdir, tempdir, rtdir, args.verbose,
 | 
| +                              args.excluded_targets)
 | 
|          MakeRuntimesForTarget(targets.X8664Target, ll_files,
 | 
| -                              srcdir, tempdir, rtdir, args.verbose)
 | 
| +                              srcdir, tempdir, rtdir, args.verbose,
 | 
| +                              args.excluded_targets)
 | 
|          MakeRuntimesForTarget(targets.ARM32Target, ll_files,
 | 
| -                              srcdir, tempdir, rtdir, args.verbose)
 | 
| +                              srcdir, tempdir, rtdir, args.verbose,
 | 
| +                              args.excluded_targets)
 | 
| +        MakeRuntimesForTarget(targets.MIPS32Target, ll_files,
 | 
| +                              srcdir, tempdir, rtdir, args.verbose,
 | 
| +                              args.excluded_targets)
 | 
|  
 | 
|      finally:
 | 
|          try:
 | 
| 
 |