Chromium Code Reviews| Index: pydir/build-runtime.py |
| diff --git a/pydir/build-runtime.py b/pydir/build-runtime.py |
| index caed29722f285d69ea552ac3d1f414aad864e5c8..3050937afa00aab2c84b615432b69297a01c8609 100755 |
| --- a/pydir/build-runtime.py |
| +++ b/pydir/build-runtime.py |
| @@ -9,27 +9,28 @@ 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 = [] |
|
Jim Stichnoth
2016/09/23 05:29:11
externalize = [] if target == 'mips32' else ['-ext
obucinac
2016/09/23 13:22:03
Done.
|
| + if target != 'mips32': |
| + externalize = ['-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 = [] |
|
Jim Stichnoth
2016/09/23 05:29:11
strip_syms = [] if target == 'mips32' else ['nacl_
obucinac
2016/09/23 13:22:02
Done.
|
| + if target != 'mips32': |
| + strip_syms += ['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 +42,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 +59,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 +84,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 +106,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 +121,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 +134,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 +149,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 +175,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 +212,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: |