| Index: toolchain_build/pnacl_targetlibs.py
|
| diff --git a/toolchain_build/pnacl_targetlibs.py b/toolchain_build/pnacl_targetlibs.py
|
| index ed476f304e508de7ca17a0b86e9493f8dc87a84d..c3136b4fb5c456d3f0749f470da595f312e66915 100755
|
| --- a/toolchain_build/pnacl_targetlibs.py
|
| +++ b/toolchain_build/pnacl_targetlibs.py
|
| @@ -20,6 +20,7 @@ import pnacl_commands
|
| SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
| NACL_DIR = os.path.dirname(SCRIPT_DIR)
|
|
|
| +CLANG_VER = '3.4'
|
|
|
| # Return the path to the local copy of the driver script.
|
| # msys should be false if the path will be called directly rather than passed to
|
| @@ -52,8 +53,8 @@ def MakeCommand():
|
| # Return the component name to use for a component name with
|
| # a host triple. GNU configuration triples contain dashes, which are converted
|
| # to underscores so the names are legal for Google Storage.
|
| -def Mangle(component_name, extra):
|
| - return component_name + '_' + pynacl.gsd_storage.LegalizeName(extra)
|
| +def GSDJoin(*args):
|
| + return '_'.join([pynacl.gsd_storage.LegalizeName(arg) for arg in args])
|
|
|
|
|
| # Copy the compiled bitcode archives used for linking C programs into the the
|
| @@ -68,13 +69,16 @@ def CopyBitcodeCLibs(bias_arch):
|
| command.RemoveDirectory('usr'),
|
| command.Mkdir('usr'),
|
| command.Command('cp -r %(' +
|
| - Mangle('abs_libs_support_bitcode', bias_arch) +
|
| + GSDJoin('abs_libs_support_bitcode', bias_arch) +
|
| ')s usr', shell=True),
|
| - command.Command('cp -r %(' + Mangle('abs_newlib', bias_arch) +
|
| + command.Command('cp -r %(' + GSDJoin('abs_newlib', bias_arch) +
|
| ')s/* usr', shell=True),
|
| ]
|
|
|
|
|
| +def BiasedBitcodeTriple(bias_arch):
|
| + return 'le32-nacl' if bias_arch == 'le32' else bias_arch + '_bc-nacl'
|
| +
|
| def BiasedBitcodeTargetFlag(arch):
|
| flagmap = {
|
| # Arch Target Extra flags.
|
| @@ -89,14 +93,15 @@ def BiasedBitcodeTargetFlag(arch):
|
|
|
| def TargetBCLibCflags(bias_arch):
|
| flags = '-g -O2 -mllvm -inline-threshold=5'
|
| - if bias_arch != 'portable':
|
| + if bias_arch != 'le32':
|
| flags += ' ' + ' '.join(BiasedBitcodeTargetFlag(bias_arch))
|
| return flags
|
|
|
| def NewlibIsystemCflags(bias_arch):
|
| return ' '.join([
|
| '-isystem',
|
| - command.path.join('%(' + Mangle('abs_newlib', bias_arch) +')s', 'include')])
|
| + command.path.join('%(' + GSDJoin('abs_newlib', bias_arch) +')s',
|
| + BiasedBitcodeTriple(bias_arch), 'include')])
|
|
|
| def LibCxxCflags(bias_arch):
|
| # HAS_THREAD_LOCAL is used by libc++abi's exception storage, the fallback is
|
| @@ -113,13 +118,12 @@ def LibStdcxxCflags(bias_arch):
|
| # Build a single object file as bitcode.
|
| def BuildTargetBitcodeCmd(source, output, bias_arch, output_dir='%(cwd)s'):
|
| flags = ['-Wall', '-Werror', '-O2', '-c']
|
| - if bias_arch != 'portable':
|
| - [flags.append(flag) for flag in BiasedBitcodeTargetFlag(bias_arch)]
|
| - sysinclude = Mangle('newlib', bias_arch)
|
| + if bias_arch != 'le32':
|
| + flags.extend(BiasedBitcodeTargetFlag(bias_arch))
|
| + flags.extend(NewlibIsystemCflags(bias_arch).split())
|
| return command.Command(
|
| - [PnaclTool('clang', msys=False)] + flags + [
|
| - '-isystem', '%(' + sysinclude + ')s/include',
|
| - command.path.join('%(src)s', source),
|
| + [PnaclTool('clang', msys=False)] + flags + [
|
| + command.path.join('%(src)s', source),
|
| '-o', command.path.join(output_dir, output)])
|
|
|
|
|
| @@ -132,7 +136,8 @@ def BuildTargetNativeCmd(sourcefile, output, arch, extra_flags=[],
|
| '-arch', arch, '--pnacl-bias=' + arch, '-O3',
|
| # TODO(dschuff): this include breaks the input encapsulation for build
|
| # rules.
|
| - '-I%(top_srcdir)s/..', '-isystem', '%(newlib_portable)s/include', '-c'] +
|
| + '-I%(top_srcdir)s/..','-c'] +
|
| + NewlibIsystemCflags('le32').split() +
|
| extra_flags +
|
| [command.path.join(source_dir, sourcefile),
|
| '-o', command.path.join(output_dir, output)])
|
| @@ -234,16 +239,12 @@ def TargetLibsSrc(GitSyncCmds):
|
|
|
| def BitcodeLibs(bias_arch, is_canonical):
|
| def B(component_name):
|
| - return Mangle(component_name, bias_arch)
|
| - def BcSubdir(subdir, bias_arch):
|
| - if bias_arch == 'portable':
|
| - return subdir
|
| - else:
|
| - return subdir + '-bc-' + bias_arch
|
| + return GSDJoin(component_name, bias_arch)
|
| + bc_triple = BiasedBitcodeTriple(bias_arch)
|
| +
|
| libs = {
|
| B('newlib'): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': BcSubdir('usr', bias_arch),
|
| 'dependencies': [ 'newlib_src', 'target_lib_compiler'],
|
| 'commands' : [
|
| command.SkipForIncrementalCommand(
|
| @@ -269,26 +270,28 @@ def BitcodeLibs(bias_arch, is_canonical):
|
| ]),
|
| command.Command(MakeCommand()),
|
| command.Command(['make', 'DESTDIR=%(abs_output)s', 'install']),
|
| - command.CopyTree(command.path.join('%(output)s', 'le32-nacl',
|
| - 'lib'),
|
| - command.path.join('%(output)s', 'lib')),
|
| - command.CopyTree(
|
| - command.path.join('%(output)s','le32-nacl', 'include'),
|
| - command.path.join('%(output)s','include')),
|
| - command.RemoveDirectory(command.path.join('%(output)s',
|
| - 'le32-nacl')),
|
| - command.Mkdir(os.path.join('%(output)s', 'include', 'nacl')),
|
| + # We configured newlib with target=le32-nacl to get its pure C
|
| + # implementation, so rename its output dir (which matches the
|
| + # target to the output dir for the package we are building)
|
| + command.Rename(os.path.join('%(output)s', 'le32-nacl'),
|
| + os.path.join('%(output)s', bc_triple)),
|
| # Copy nacl_random.h, used by libc++. It uses the IRT, so should
|
| # be safe to include in the toolchain.
|
| + command.Mkdir(
|
| + os.path.join('%(output)s', bc_triple, 'include', 'nacl')),
|
| command.Copy(os.path.join('%(top_srcdir)s', 'src', 'untrusted',
|
| 'nacl', 'nacl_random.h'),
|
| - os.path.join('%(output)s', 'include', 'nacl',
|
| - 'nacl_random.h')),
|
| + os.path.join(
|
| + '%(output)s', bc_triple, 'include', 'nacl',
|
| + 'nacl_random.h')),
|
| + # Remove the 'share' directory from the biased builds; the data is
|
| + # duplicated exactly and takes up 2MB per package.
|
| + command.RemoveDirectory(os.path.join('%(output)s', 'share'),
|
| + run_cond = lambda x: bias_arch != 'le32'),
|
| ],
|
| },
|
| B('libcxx'): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': BcSubdir('usr', bias_arch),
|
| 'dependencies': ['libcxx_src', 'libcxxabi_src', 'llvm_src', 'gcc_src',
|
| 'target_lib_compiler', B('newlib'),
|
| B('libs_support_bitcode')],
|
| @@ -332,13 +335,15 @@ def BitcodeLibs(bias_arch, is_canonical):
|
| 'unwind-generic.h'),
|
| os.path.join('include', 'unwind.h')),
|
| command.Command(MakeCommand() + ['VERBOSE=1']),
|
| - command.Command(['make', 'DESTDIR=%(abs_output)s', 'VERBOSE=1',
|
| - 'install']),
|
| + command.Command([
|
| + 'make',
|
| + 'DESTDIR=' + os.path.join('%(abs_output)s', bc_triple),
|
| + 'VERBOSE=1',
|
| + 'install']),
|
| ],
|
| },
|
| B('libstdcxx'): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': BcSubdir('usr', bias_arch),
|
| 'dependencies': ['gcc_src', 'gcc_src', 'target_lib_compiler',
|
| B('newlib')],
|
| 'commands' : [
|
| @@ -375,18 +380,23 @@ def BitcodeLibs(bias_arch, is_canonical):
|
| 'unwind-generic.h'),
|
| os.path.join('include', 'unwind.h')),
|
| command.Command(MakeCommand()),
|
| - command.Command(['make', 'DESTDIR=%(abs_output)s',
|
| - 'install-data']),
|
| - command.RemoveDirectory(os.path.join('%(output)s', 'share')),
|
| - command.Remove(os.path.join('%(output)s', 'lib',
|
| + command.Command([
|
| + 'make',
|
| + 'DESTDIR=' + os.path.join('%(abs_output)s', bc_triple),
|
| + 'install-data']),
|
| + command.RemoveDirectory(
|
| + os.path.join('%(output)s', bc_triple, 'share')),
|
| + command.Remove(os.path.join('%(output)s', bc_triple, 'lib',
|
| 'libstdc++*-gdb.py')),
|
| - command.Copy(os.path.join('src', '.libs', 'libstdc++.a'),
|
| - os.path.join('%(output)s', 'lib', 'libstdc++.a')),
|
| + command.Copy(
|
| + os.path.join('src', '.libs', 'libstdc++.a'),
|
| + os.path.join('%(output)s', bc_triple, 'lib', 'libstdc++.a')),
|
| ],
|
| },
|
| B('libs_support_bitcode'): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': BcSubdir('lib', bias_arch),
|
| + 'output_subdir': os.path.join(
|
| + 'lib', 'clang', CLANG_VER, 'lib', bc_triple),
|
| 'dependencies': [ B('newlib'), 'target_lib_compiler'],
|
| 'inputs': { 'src': os.path.join(NACL_DIR,
|
| 'pnacl', 'support', 'bitcode')},
|
| @@ -442,12 +452,13 @@ def NativeLibs(arch, is_canonical):
|
| [BuildTargetNativeCmd('entry_linux.c', 'entry_linux.o', arch),
|
| BuildTargetNativeCmd('entry_linux_arm.S', 'entry_linux_asm.o',
|
| arch)])
|
| + native_lib_dir = os.path.join('translator', arch, 'lib')
|
|
|
| libs = {
|
| - Mangle('libs_support_native', arch): {
|
| + GSDJoin('libs_support_native', arch): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': 'lib-' + arch,
|
| - 'dependencies': [ 'newlib_src', 'newlib_portable',
|
| + 'output_subdir': native_lib_dir,
|
| + 'dependencies': [ 'newlib_src', 'newlib_le32',
|
| 'target_lib_compiler'],
|
| # These libs include
|
| # arbitrary stuff from native_client/src/{include,untrusted,trusted}
|
| @@ -499,11 +510,11 @@ def NativeLibs(arch, is_canonical):
|
| 'dummy_shim_entry.o']),
|
| ],
|
| },
|
| - Mangle('compiler_rt', arch): {
|
| + GSDJoin('compiler_rt', arch): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': 'lib-' + arch,
|
| + 'output_subdir': native_lib_dir,
|
| 'dependencies': ['compiler_rt_src', 'target_lib_compiler',
|
| - 'newlib_portable'],
|
| + 'newlib_le32'],
|
| 'commands': [
|
| command.Command(MakeCommand() + [
|
| '-f',
|
| @@ -514,17 +525,17 @@ def NativeLibs(arch, is_canonical):
|
| ['SRC_DIR=' + command.path.join('%(abs_compiler_rt_src)s',
|
| 'lib'),
|
| 'CFLAGS=-arch ' + arch + ' -DPNACL_' +
|
| - arch.replace('-', '_') + ' --pnacl-allow-translate -O3' +
|
| - ' -isystem %(newlib_portable)s/include']),
|
| + arch.replace('-', '_') + ' --pnacl-allow-translate -O3 ' +
|
| + NewlibIsystemCflags('le32')]),
|
| command.Copy('libgcc.a', os.path.join('%(output)s', 'libgcc.a')),
|
| ],
|
| },
|
| }
|
| if not arch.endswith('-nonsfi'):
|
| libs.update({
|
| - Mangle('libgcc_eh', arch): {
|
| + GSDJoin('libgcc_eh', arch): {
|
| 'type': 'build' if is_canonical else 'work',
|
| - 'output_subdir': 'lib-' + arch,
|
| + 'output_subdir': native_lib_dir,
|
| 'dependencies': [ 'gcc_src', 'target_lib_compiler'],
|
| 'inputs': { 'scripts': os.path.join(NACL_DIR, 'pnacl', 'scripts')},
|
| 'commands': [
|
| @@ -551,9 +562,9 @@ def NativeLibs(arch, is_canonical):
|
|
|
| def UnsandboxedIRT(arch):
|
| libs = {
|
| - Mangle('unsandboxed_irt', arch): {
|
| + GSDJoin('unsandboxed_irt', arch): {
|
| 'type': 'build',
|
| - 'output_subdir': 'lib-' + arch,
|
| + 'output_subdir': os.path.join('translator', arch, 'lib'),
|
| # This lib #includes
|
| # arbitrary stuff from native_client/src/{include,untrusted,trusted}
|
| 'inputs': { 'support': os.path.join(NACL_DIR, 'src', 'nonsfi', 'irt'),
|
|
|