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