#!/usr/bin/env python2
from collections import namedtuple
import glob
# Why have 'cross_headers':
# For some reason, clang doesn't know how to find some of the libstdc++
# headers (c++config.h). Manually add in one of the paths:
# https://llvm.org/bugs/show_bug.cgi?id=22937
# Otherwise, we could assume the system has arm-linux-gnueabihf-g++ and
# use that instead of clang, but so far we've just been using clang for
# the unsandboxed build.
def FindARMCrossInclude():
return glob.glob(
'/usr/arm-linux-gnueabihf/include/c++/*/arm-linux-gnueabihf')[-1]
def FindMIPSCrossInclude():
globs = glob.glob('/usr/mipsel-linux-gnu/include/c++/*/mipsel-linux-gnu')
return globs[-1] if globs else '/invalid/mips/include/path'
TargetInfo = namedtuple('TargetInfo',
['target', 'compiler_arch', 'triple', 'llc_flags',
'ld_emu', 'sb_emu', 'cross_headers'])
X8632Target = TargetInfo(target='x8632',
compiler_arch='x8632',
triple='i686-none-linux',
llc_flags=['-mcpu=pentium4m'],
ld_emu='elf_i386_nacl',
sb_emu='elf_i386_nacl',
cross_headers=[])
X8664Target = TargetInfo(target='x8664',
compiler_arch='x8664',
triple='x86_64-none-linux-gnux32',
llc_flags=['-mcpu=x86-64'],
ld_emu='elf32_x86_64_nacl',
sb_emu='elf_x86_64_nacl',
cross_headers=[])
ARM32Target = TargetInfo(target='arm32',
compiler_arch='armv7',
triple='armv7a-none-linux-gnueabihf',
llc_flags=['-mcpu=cortex-a9',
'-float-abi=hard',
'-mattr=+neon',
'-arm-enable-dwarf-eh=1'],
ld_emu='armelf_nacl',
sb_emu='armelf_nacl',
cross_headers=['-isystem', FindARMCrossInclude()])
# Investigate:
# ld_emu script mips_nacl is not present in binutils. How to get it?
MIPS32Target = TargetInfo(target='mips32',
compiler_arch='mips32',
triple='mipsel-linux-gnu',
llc_flags=[],
ld_emu='mips_nacl',
sb_emu='mips_nacl',
cross_headers=['-isystem', FindMIPSCrossInclude()])
def ConvertTripleToNaCl(nonsfi_triple):
return nonsfi_triple[:nonsfi_triple.find('-linux')] + '-nacl'