Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1993)

Unified Diff: pydir/szbuild.py

Issue 1407063002: Subzero. Misc ARM32 bugfixes. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pydir/szbuild_spec2k.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pydir/szbuild.py
diff --git a/pydir/szbuild.py b/pydir/szbuild.py
index 08e1a091648d59bbd683f38020f6f6dd52127608..599e583db657d16f89df529f5cc0b10fe013cf2a 100755
--- a/pydir/szbuild.py
+++ b/pydir/szbuild.py
@@ -88,6 +88,9 @@ def AddOptionalArgs(argparser):
argparser.add_argument('--enable-block-profile',
dest='enable_block_profile', action='store_true',
help='Enable basic block profiling.')
+ argparser.add_argument('--target', default='x8632', dest='target',
+ choices=['arm32', 'x8632'],
+ help='Generate code for specified target.')
argparser.add_argument('--verbose', '-v', dest='verbose',
action='store_true',
help='Display some extra debugging output')
@@ -185,13 +188,18 @@ def ProcessPexe(args, pexe, exe):
if hybrid and (args.force or
NewerThanOrNotThere(pexe, obj_llc) or
NewerThanOrNotThere(llcbin, obj_llc)):
+ arch = {
+ 'arm32': 'armv7' if args.sandbox else 'arm-nonsfi',
+ 'x8632': 'x86-32' if args.sandbox else 'x86-32-linux',
+ }[args.target]
+
# Only run pnacl-translate in hybrid mode.
shellcmd(['pnacl-translate',
'-split-module=1',
'-ffunction-sections',
'-fdata-sections',
'-c',
- '-arch', 'x86-32' if args.sandbox else 'x86-32-linux',
+ '-arch', arch,
'-O' + opt_level_map[opt_level],
'--pnacl-driver-append-LLC_FLAGS_EXTRA=-externalize',
'-o', obj_llc] +
@@ -216,7 +224,8 @@ def ProcessPexe(args, pexe, exe):
'-O' + opt_level,
'-bitcode-format=pnacl',
'-filetype=' + args.filetype,
- '-o', obj_sz if args.filetype == 'obj' else asm_sz] +
+ '-o', obj_sz if args.filetype == 'obj' else asm_sz,
+ '-target=' + args.target] +
(['-externalize',
'-ffunction-sections',
'-fdata-sections'] if hybrid else []) +
@@ -227,10 +236,14 @@ def ProcessPexe(args, pexe, exe):
[pexe],
echo=args.verbose)
if args.filetype != 'obj':
+ triple = {
+ 'arm32': 'arm-nacl' if args.sandbox else 'arm',
+ 'x8632': 'i686-nacl' if args.sandbox else 'i686',
+ }[args.target]
+
shellcmd((
'llvm-mc -triple={triple} -filetype=obj -o {obj} {asm}'
- ).format(asm=asm_sz, obj=obj_sz,
- triple='i686-nacl' if args.sandbox else 'i686'),
+ ).format(asm=asm_sz, obj=obj_sz, triple=triple),
echo=args.verbose)
if not args.sandbox:
shellcmd((
@@ -277,9 +290,18 @@ def ProcessPexe(args, pexe, exe):
).format(objcopy=objcopy, obj=obj_llc, weak=obj_llc_weak),
echo=args.verbose)
obj_partial = pexe_base + '.o'
+ ld = {
+ 'arm32': 'arm-linux-gnueabihf-ld',
+ 'x8632': 'ld',
+ }[args.target]
+ emulation = {
+ 'arm32': 'armelf_linux_eabi',
+ 'x8632': 'elf_i386',
+ }[args.target]
shellcmd((
- 'ld -r -m elf_i386 -o {partial} {sz} {llc}'
- ).format(partial=obj_partial, sz=obj_sz_weak, llc=obj_llc_weak),
+ '{ld} -r -m {emulation} -o {partial} {sz} {llc}'
+ ).format(ld=ld, emulation=emulation, partial=obj_partial,
+ sz=obj_sz_weak, llc=obj_llc_weak),
echo=args.verbose)
shellcmd((
'{objcopy} -w --localize-symbol="*" {partial}'
@@ -293,10 +315,9 @@ def ProcessPexe(args, pexe, exe):
echo=args.verbose)
# Run the linker regardless of hybrid mode.
- linker = (
- '{root}/../third_party/llvm-build/Release+Asserts/bin/clang'
- ).format(root=nacl_root)
if args.sandbox:
+ assert args.target in ['x8632'], \
+ '-sandbox is not available for %s' % args.target
linklib = ('{root}/toolchain/linux_x86/pnacl_newlib_raw/translator/' +
'x86-32/lib').format(root=nacl_root)
shellcmd((
@@ -304,27 +325,45 @@ def ProcessPexe(args, pexe, exe):
'--build-id --entry=__pnacl_start -static ' +
'{linklib}/crtbegin.o {partial} ' +
'{root}/toolchain_build/src/subzero/build/runtime/' +
- 'szrt_sb_x8632.o ' +
+ 'szrt_sb_{target}.o ' +
'{linklib}/libpnacl_irt_shim_dummy.a --start-group ' +
'{linklib}/libgcc.a {linklib}/libcrt_platform.a ' +
'--end-group {linklib}/crtend.o --undefined=_start ' +
'--defsym=__Sz_AbsoluteZero=0 ' +
'-o {exe}'
).format(gold=gold, linklib=linklib, partial=obj_partial, exe=exe,
- root=nacl_root),
+ root=nacl_root, target=args.target),
echo=args.verbose)
else:
+ linker = {
+ 'arm32': '/usr/bin/arm-linux-gnueabihf-g++',
+ 'x8632': ('{root}/../third_party/llvm-build/Release+Asserts/bin/clang'
+ ).format(root=nacl_root)
+ }[args.target]
+
+ extra_linker_args = ' '.join({
+ 'arm32': ['-mcpu=cortex-a9'],
+ 'x8632': ['-m32']
+ }[args.target])
+
+ lib_dir = {
+ 'arm32': 'arm-linux',
+ 'x8632': 'x86-32-linux',
+ }[args.target]
+
shellcmd((
- '{ld} -m32 {partial} -o {exe} ' +
+ '{ld} {ld_extra_args} {partial} -o {exe} ' +
# Keep the rest of this command line (except szrt_native_x8632.o) in
# sync with RunHostLD() in pnacl-translate.py.
'{root}/toolchain/linux_x86/pnacl_newlib_raw/translator/' +
- 'x86-32-linux/lib/' +
+ '{lib_dir}/lib/' +
'{{unsandboxed_irt,irt_random,irt_query_list}}.o ' +
'{root}/toolchain_build/src/subzero/build/runtime/' +
- 'szrt_native_x8632.o -lpthread -lrt ' +
+ 'szrt_native_{target}.o -lpthread -lrt ' +
'-Wl,--defsym=__Sz_AbsoluteZero=0'
- ).format(ld=linker, partial=obj_partial, exe=exe, root=nacl_root),
+ ).format(ld=linker, ld_extra_args=extra_linker_args,
+ partial=obj_partial, exe=exe, root=nacl_root,
+ target=args.target, lib_dir=lib_dir),
echo=args.verbose)
# Put the extra verbose printing at the end.
« no previous file with comments | « no previous file | pydir/szbuild_spec2k.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698