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: |