| # Copyright (c) 2011 The Native Client Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # |
| # Config file for various nacl compilation scenarios |
| # |
| |
| from __future__ import print_function |
| |
| import os |
| import sys |
| |
| sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) |
| import pynacl.platform |
| |
| TOOLCHAIN_CONFIGS = {} |
| |
| def AppendDictionary(d1, d2): |
| for tag, value in d2.iteritems(): |
| if tag in d1: |
| d1[tag] = d1[tag] + ' ' + value |
| else: |
| d1[tag] = value |
| |
| |
| class ToolchainConfig(object): |
| def __init__(self, desc, commands=None, tools_needed=None, is_flaky=False, |
| attributes=[], base=None, **extra): |
| self._desc = desc, |
| self._commands = commands or base._commands |
| self._tools_needed = tools_needed or base._tools_needed |
| self._extra = base._extra.copy() if base else {} |
| self._extra.update(extra) |
| self._flaky = is_flaky |
| self._attributes = attributes |
| |
| def Append(self, tag, value): |
| assert tag in self._extra |
| self._extra[tag] = self._extra[tag] + ' ' + value + ' ' |
| |
| def SanityCheck(self): |
| for t in self._tools_needed: |
| if not os.access(t, os.R_OK | os.X_OK): |
| print("ERROR: missing tool ", t) |
| sys.exit(-1) |
| |
| def GetDescription(self): |
| return self._desc |
| |
| def GetCommands(self, extra): |
| for tag, val in self._commands: |
| d = self._extra.copy() |
| AppendDictionary(d, extra) |
| yield tag, val % d |
| |
| def GetPhases(self): |
| return [a for (a, _) in self._commands] |
| |
| def IsFlaky(self): |
| return self._flaky |
| |
| def GetAttributes(self): |
| return set(self._attributes) |
| |
| |
| ###################################################################### |
| # |
| ###################################################################### |
| |
| LOCAL_GCC = '/usr/bin/gcc' |
| |
| EMU_SCRIPT = 'toolchain/linux_x86/arm_trusted/run_under_qemu_arm' |
| |
| TEMPLATE_DIGITS = 'X' * 16 |
| BOOTSTRAP_ARGS = '--r_debug=0x%s --reserved_at_zero=0x%s' % (TEMPLATE_DIGITS, |
| TEMPLATE_DIGITS) |
| |
| BOOTSTRAP_ARM = 'scons-out/opt-linux-arm/staging/nacl_helper_bootstrap' |
| SEL_LDR_ARM = 'scons-out/opt-linux-arm/staging/sel_ldr' |
| IRT_ARM = 'scons-out/nacl_irt-arm/obj/src/untrusted/irt/irt_core.nexe' |
| RUN_SEL_LDR_ARM = BOOTSTRAP_ARM + ' ' + SEL_LDR_ARM + ' ' + BOOTSTRAP_ARGS |
| |
| BOOTSTRAP_X32 = 'scons-out/opt-linux-x86-32/staging/nacl_helper_bootstrap' |
| SEL_LDR_X32 = 'scons-out/opt-linux-x86-32/staging/sel_ldr' |
| IRT_X32 = 'scons-out/nacl_irt-x86-32/obj/src/untrusted/irt/irt_core.nexe' |
| RUN_SEL_LDR_X32 = BOOTSTRAP_X32 + ' ' + SEL_LDR_X32 + ' ' + BOOTSTRAP_ARGS |
| |
| BOOTSTRAP_X64 = 'scons-out/opt-linux-x86-64/staging/nacl_helper_bootstrap' |
| SEL_LDR_X64 = 'scons-out/opt-linux-x86-64/staging/sel_ldr' |
| IRT_X64 = 'scons-out/nacl_irt-x86-64/obj/src/untrusted/irt/irt_core.nexe' |
| RUN_SEL_LDR_X64 = BOOTSTRAP_X64 + ' ' + SEL_LDR_X64 + ' ' + BOOTSTRAP_ARGS |
| |
| NACL_X86_NEWLIB = 'toolchain/linux_x86/nacl_x86_newlib' |
| NACL_GCC_X32 = NACL_X86_NEWLIB + '/bin/i686-nacl-gcc' |
| NACL_GCC_X64 = NACL_X86_NEWLIB + '/bin/x86_64-nacl-gcc' |
| |
| GLOBAL_CFLAGS = ' '.join(['-DSTACK_SIZE=0x40000', |
| '-D_XOPEN_SOURCE=600', |
| '-DNO_TRAMPOLINES', |
| '-DNO_LABEL_VALUES',]) |
| |
| CLANG_CFLAGS = ' '.join(['-fwrapv', |
| '-fdiagnostics-show-category=name']) |
| |
| ###################################################################### |
| # LOCAL GCC |
| ###################################################################### |
| COMMANDS_local_gcc = [ |
| ('compile', |
| '%(CC)s %(src)s %(CFLAGS)s -o %(tmp)s.exe -lm -lstdc++', |
| ), |
| ('run', |
| '%(tmp)s.exe', |
| ), |
| ] |
| |
| TOOLCHAIN_CONFIGS['local_gcc_x8632_O0'] = ToolchainConfig( |
| desc='local gcc [x86-32]', |
| attributes=['x86-32', 'O0'], |
| commands=COMMANDS_local_gcc, |
| tools_needed=[LOCAL_GCC], |
| CC = LOCAL_GCC, |
| CFLAGS = '-O0 -m32 -static ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['local_gcc_x8632_O3'] = ToolchainConfig( |
| desc='local gcc [x86-32]', |
| attributes=['x86-32', 'O3'], |
| commands=COMMANDS_local_gcc, |
| tools_needed=[LOCAL_GCC], |
| CC = LOCAL_GCC, |
| CFLAGS = '-O3 -m32 -static ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['local_gcc_x8664_O0'] = ToolchainConfig( |
| desc='local gcc [x86-64]', |
| attributes=['x86-64', 'O0'], |
| commands=COMMANDS_local_gcc, |
| tools_needed=[LOCAL_GCC], |
| CC = LOCAL_GCC, |
| CFLAGS = '-O0 -m64 -static ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['local_gcc_x8664_O3'] = ToolchainConfig( |
| attributes=['x86-64', 'O3'], |
| desc='local gcc [x86-64]', |
| commands=COMMANDS_local_gcc, |
| tools_needed=[LOCAL_GCC], |
| CC = LOCAL_GCC, |
| CFLAGS = '-O3 -m64 -static ' + GLOBAL_CFLAGS) |
| |
| ###################################################################### |
| # # NACL + SEL_LDR [X86] |
| ###################################################################### |
| COMMANDS_nacl_gcc = [ |
| ('compile', |
| '%(CC)s %(src)s %(CFLAGS)s -o %(tmp)s.exe -lm -lstdc++', |
| ), |
| ('sel_ldr', |
| '%(SEL_LDR)s -B %(IRT)s %(tmp)s.exe', |
| ) |
| ] |
| |
| |
| TOOLCHAIN_CONFIGS['nacl_gcc_x8632_O0'] = ToolchainConfig( |
| desc='nacl gcc [x86-32]', |
| attributes=['x86-32', 'O0'], |
| commands=COMMANDS_nacl_gcc, |
| tools_needed=[NACL_GCC_X32, BOOTSTRAP_X32, SEL_LDR_X32], |
| CC = NACL_GCC_X32, |
| SEL_LDR = RUN_SEL_LDR_X32, |
| IRT = IRT_X32, |
| CFLAGS = '-O0 -static -Bscons-out/nacl-x86-32/lib/ ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['nacl_gcc_x8632_O3'] = ToolchainConfig( |
| desc='nacl gcc with optimizations [x86-32]', |
| attributes=['x86-32', 'O3'], |
| commands=COMMANDS_nacl_gcc, |
| tools_needed=[NACL_GCC_X32, BOOTSTRAP_X32, SEL_LDR_X32], |
| CC = NACL_GCC_X32, |
| SEL_LDR = RUN_SEL_LDR_X32, |
| IRT = IRT_X32, |
| CFLAGS = '-O3 -static -Bscons-out/nacl-x86-32/lib/ ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['nacl_gcc_x8664_O0'] = ToolchainConfig( |
| desc='nacl gcc [x86-64]', |
| attributes=['x86-64', 'O0'], |
| commands=COMMANDS_nacl_gcc, |
| tools_needed=[NACL_GCC_X64, BOOTSTRAP_X64, SEL_LDR_X64], |
| CC = NACL_GCC_X64, |
| SEL_LDR = RUN_SEL_LDR_X64, |
| IRT = IRT_X64, |
| CFLAGS = '-O0 -static -Bscons-out/nacl-x86-64/lib/ ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['nacl_gcc_x8664_O3'] = ToolchainConfig( |
| desc='nacl gcc with optimizations [x86-64]', |
| attributes=['x86-32', 'O3'], |
| commands=COMMANDS_nacl_gcc, |
| tools_needed=[NACL_GCC_X64, BOOTSTRAP_X64, SEL_LDR_X64], |
| CC = NACL_GCC_X64, |
| SEL_LDR = RUN_SEL_LDR_X64, |
| IRT = IRT_X64, |
| CFLAGS = '-O3 -static -Bscons-out/nacl-x86-64/lib/ ' + GLOBAL_CFLAGS) |
| |
| ###################################################################### |
| # PNACL + SEL_LDR [ARM] |
| ###################################################################### |
| |
| # Locate the pnacl toolchain. Path can be overridden externally. |
| os_name = pynacl.platform.GetOS() |
| PNACL_TOOLCHAIN_DIR = os.getenv('PNACL_TOOLCHAIN_DIR', |
| '%s_x86/pnacl_newlib' % os_name) |
| PNACL_ROOT = os.path.join('toolchain', PNACL_TOOLCHAIN_DIR) |
| PNACL_FRONTEND = PNACL_ROOT + '/bin/pnacl-clang++' |
| PNACL_FINALIZE = PNACL_ROOT + '/bin/pnacl-finalize' |
| |
| |
| # NOTE: Our driver supports going from .c to .nexe in one go |
| # but it maybe useful to inspect the bitcode file so we |
| # split the compilation into two steps. |
| PNACL_LD = PNACL_ROOT + '/bin/pnacl-translate' |
| |
| COMMANDS_llvm_pnacl_arm = [ |
| ('compile-pexe', |
| '%(CC)s %(src)s %(CFLAGS)s -o %(tmp)s.nonfinal.pexe', |
| ), |
| ('finalize-pexe', |
| '%(FINALIZE)s %(FINALIZE_FLAGS)s %(tmp)s.nonfinal.pexe' |
| ' -o %(tmp)s.final.pexe' |
| ), |
| ('translate-arm', |
| '%(LD)s %(TRANSLATE_FLAGS)s %(tmp)s.final.pexe -o %(tmp)s.nexe', |
| ), |
| ('qemu-sel_ldr', |
| '%(EMU)s %(SEL_LDR)s -B %(IRT)s -Q %(tmp)s.nexe', |
| ) |
| ] |
| |
| |
| # In the PNaCl ToolchainConfig attributes, the convention for the 'b' |
| # and 'f' suffixes is that 'O0f' means frontend (clang) compilation |
| # with -O0, and 'O2b' means backend (llc) translation with -O2. |
| # In addition, the 'b_sz' suffix means to use pnacl-sz rather than pnacl-llc. |
| # TODO(stichnot): Add 'b_sz' configs to the missing architectures when Subzero |
| # supports them. |
| |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0'] = ToolchainConfig( |
| desc='pnacl llvm [arm]', |
| attributes=['arm', 'O0f', 'O2b'], |
| commands=COMMANDS_llvm_pnacl_arm, |
| tools_needed=[PNACL_FRONTEND, PNACL_FINALIZE, PNACL_LD, |
| EMU_SCRIPT, BOOTSTRAP_ARM, SEL_LDR_ARM], |
| is_flaky = True, |
| CC = PNACL_FRONTEND, |
| FINALIZE = PNACL_FINALIZE, |
| LD = PNACL_LD + ' -arch arm', |
| EMU = EMU_SCRIPT, |
| SEL_LDR = RUN_SEL_LDR_ARM, |
| IRT = IRT_ARM, |
| CFLAGS = '-O0 -static ' + CLANG_CFLAGS + ' ' + GLOBAL_CFLAGS, |
| FINALIZE_FLAGS = '', |
| TRANSLATE_FLAGS='') |
| |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0'], |
| desc='pnacl llvm with optimizations [arm]', |
| attributes=['arm', 'O3f', 'O2b'], |
| is_flaky = True, |
| CFLAGS = '-O3 -D__OPTIMIZE__ -static ' + CLANG_CFLAGS + ' ' |
| + GLOBAL_CFLAGS) |
| |
| # Based on llvm_pnacl_arm_O3 with TRANSLATE_FLAGS=-translate-fast |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3_O0'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3'], |
| desc='pnacl llvm with optimizations and fast translation [arm]', |
| attributes=['arm', 'O3f', 'O0b'], |
| is_flaky = True, |
| TRANSLATE_FLAGS = '-translate-fast') |
| |
| # Based on llvm_pnacl_arm_O0 with TRANSLATE_FLAGS=-translate-fast |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0_O0'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0'], |
| desc='pnacl llvm [arm]', |
| attributes=['arm', 'O0f', 'O0b'], |
| is_flaky = True, |
| TRANSLATE_FLAGS='-translate-fast') |
| |
| # Based on llvm_pnacl_arm_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0'], |
| desc='pnacl llvm with Subzero [arm32]', |
| attributes=['arm', 'O0f', 'O2b_sz'], |
| TRANSLATE_FLAGS = '--use-sz') |
| |
| # Based on llvm_pnacl_arm_O3 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3'], |
| desc='pnacl llvm with Subzero [arm32]', |
| attributes=['arm', 'O3f', 'O2b_sz'], |
| TRANSLATE_FLAGS = '--use-sz') |
| |
| # Based on llvm_pnacl_arm_O3_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O3_O0'], |
| desc='pnacl llvm with Subzero -Om1 [arm32]', |
| attributes=['arm', 'O3f', 'O0b_sz'], |
| TRANSLATE_FLAGS = '-translate-fast --use-sz') |
| |
| # Based on llvm_pnacl_arm_O0_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_arm_O0_O0'], |
| desc='pnacl llvm with Subzero -Om1 [arm32]', |
| attributes=['arm', 'O0f', 'O0b_sz'], |
| TRANSLATE_FLAGS = '-translate-fast --use-sz') |
| |
| ###################################################################### |
| # PNACL + SEL_LDR [X8632] |
| ###################################################################### |
| |
| # NOTE: this is used for both x86 flavors |
| COMMANDS_llvm_pnacl_x86 = [ |
| ('compile-pexe', |
| '%(CC)s %(src)s %(CFLAGS)s -o %(tmp)s.nonfinal.pexe', |
| ), |
| ('finalize-pexe', |
| '%(FINALIZE)s %(FINALIZE_FLAGS)s %(tmp)s.nonfinal.pexe' |
| ' -o %(tmp)s.final.pexe', |
| ), |
| ('translate-x86', |
| '%(LD)s %(TRANSLATE_FLAGS)s %(tmp)s.final.pexe -o %(tmp)s.nexe ', |
| ), |
| ('sel_ldr', |
| '%(SEL_LDR)s -B %(IRT)s %(tmp)s.nexe', |
| ) |
| ] |
| |
| |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0'] = ToolchainConfig( |
| desc='pnacl llvm [x8632]', |
| attributes=['x86-32', 'O0f', 'O2b'], |
| commands=COMMANDS_llvm_pnacl_x86, |
| tools_needed=[PNACL_FRONTEND, PNACL_FINALIZE, PNACL_LD, |
| BOOTSTRAP_X32, SEL_LDR_X32], |
| CC = PNACL_FRONTEND, |
| FINALIZE = PNACL_FINALIZE, |
| LD = PNACL_LD + ' -arch x86-32', |
| SEL_LDR = RUN_SEL_LDR_X32, |
| IRT = IRT_X32, |
| CFLAGS = '-O0 -static ' + CLANG_CFLAGS + ' ' + GLOBAL_CFLAGS, |
| FINALIZE_FLAGS = '', |
| TRANSLATE_FLAGS = '') |
| |
| # Based on llvm_pnacl_x86-32_O0 with -O3 -D__OPTIMIZE__ instead of -O0 |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0'], |
| desc='pnacl llvm [x8632]', |
| attributes=['x86-32', 'O3f', 'O2b'], |
| CFLAGS = '-O3 -D__OPTIMIZE__ -static ' + CLANG_CFLAGS + ' ' |
| + GLOBAL_CFLAGS) |
| |
| # Based on llvm_pnacl_x86-32_O3 with TRANSLATE_FLAGS=-translate-fast |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3_O0'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3'], |
| desc='pnacl llvm with fast translation [x8632]', |
| attributes=['x86-32', 'O3f', 'O0b'], |
| TRANSLATE_FLAGS = '-translate-fast') |
| |
| # Based on llvm_pnacl_x86-32_O0 with TRANSLATE_FLAGS=-translate-fast |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0_O0'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0'], |
| desc='pnacl llvm with fast translation [x8632]', |
| attributes=['x86-32', 'O0f', 'O0b'], |
| TRANSLATE_FLAGS = '-translate-fast') |
| |
| # Based on llvm_pnacl_x86-32_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0'], |
| desc='pnacl llvm with Subzero [x8632]', |
| attributes=['x86-32', 'O0f', 'O2b_sz'], |
| TRANSLATE_FLAGS = '--use-sz') |
| |
| # Based on llvm_pnacl_x86-32_O3 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3'], |
| desc='pnacl llvm with Subzero [x8632]', |
| attributes=['x86-32', 'O3f', 'O2b_sz'], |
| TRANSLATE_FLAGS = '--use-sz') |
| |
| # Based on llvm_pnacl_x86-32_O3_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O3_O0'], |
| desc='pnacl llvm with Subzero -Om1 [x8632]', |
| attributes=['x86-32', 'O3f', 'O0b_sz'], |
| TRANSLATE_FLAGS = '-translate-fast --use-sz') |
| |
| # Based on llvm_pnacl_x86-32_O0_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-32_O0_O0'], |
| desc='pnacl llvm with Subzero -Om1 [x8632]', |
| attributes=['x86-32', 'O0f', 'O0b_sz'], |
| TRANSLATE_FLAGS = '-translate-fast --use-sz') |
| |
| ###################################################################### |
| # PNACL + SEL_LDR [X8664] |
| ###################################################################### |
| |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0'] = ToolchainConfig( |
| desc='pnacl llvm [x8664]', |
| attributes=['x86-64', 'O0f', 'O2b'], |
| commands=COMMANDS_llvm_pnacl_x86, |
| tools_needed=[PNACL_FRONTEND, PNACL_FINALIZE, PNACL_LD, |
| BOOTSTRAP_X64, SEL_LDR_X64], |
| CC = PNACL_FRONTEND, |
| FINALIZE = PNACL_FINALIZE, |
| LD = PNACL_LD + ' -arch x86-64', |
| SEL_LDR = RUN_SEL_LDR_X64, |
| IRT = IRT_X64, |
| CFLAGS = '-O0 -static ' + CLANG_CFLAGS + ' ' + GLOBAL_CFLAGS, |
| FINALIZE_FLAGS = '', |
| TRANSLATE_FLAGS = '') |
| |
| # Based on llvm_pnacl_x86-64_O0 with -O3 -D__OPTIMIZE__ instead of -O0 |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0'], |
| desc='pnacl llvm [x8664]', |
| attributes=['x86-64', 'O3f', 'O2b'], |
| CFLAGS = '-O3 -D__OPTIMIZE__ -static ' + CLANG_CFLAGS + ' ' |
| + GLOBAL_CFLAGS) |
| |
| # Based on llvm_pnacl_x86-64_O3 with TRANSLATE_FLAGS=-translate-fast |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3_O0'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3'], |
| desc='pnacl llvm with fast translation [x8664]', |
| attributes=['x86-64', 'O3f', 'O0b'], |
| TRANSLATE_FLAGS = '-translate-fast') |
| |
| # Based on llvm_pnacl_x86-64_O0 with TRANSLATE_FLAGS=-translate-fast |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0_O0'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0'], |
| desc='pnacl llvm [x8664]', |
| attributes=['x86-64', 'O0f', 'O0b'], |
| TRANSLATE_FLAGS = '-translate-fast') |
| |
| # Based on llvm_pnacl_x86-64_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0'], |
| desc='pnacl llvm with Subzero [x8664]', |
| attributes=['x86-64', 'O0f', 'O2b_sz'], |
| TRANSLATE_FLAGS = '--use-sz') |
| |
| # Based on llvm_pnacl_x86-64_O3 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3'], |
| desc='pnacl llvm with Subzero [x8664]', |
| attributes=['x86-64', 'O3f', 'O2b_sz'], |
| TRANSLATE_FLAGS = '--use-sz') |
| |
| # Based on llvm_pnacl_x86-64_O3_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O3_O0'], |
| desc='pnacl llvm with Subzero -Om1 [x8664]', |
| attributes=['x86-64', 'O3f', 'O0b_sz'], |
| TRANSLATE_FLAGS = '-translate-fast --use-sz') |
| |
| # Based on llvm_pnacl_x86-64_O0_O0 with TRANSLATE_FLAGS+=--use-sz |
| TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0_O0_sz'] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['llvm_pnacl_x86-64_O0_O0'], |
| desc='pnacl llvm with Subzero -Om1 [x8664]', |
| attributes=['x86-64', 'O0f', 'O0b_sz'], |
| TRANSLATE_FLAGS = '-translate-fast --use-sz') |
| |
| ###################################################################### |
| # CLANG + SEL_LDR |
| ###################################################################### |
| |
| def NaClClangCommands(arch): |
| commands = [ |
| ('compile', |
| '%(CC)s %(src)s %(CFLAGS)s -o %(tmp)s.nexe -lm', |
| ), |
| ] |
| if arch == 'arm': |
| commands.append( |
| ('qemu-sel_ldr', |
| '%(EMU)s %(SEL_LDR)s -B %(IRT)s -Q %(tmp)s.nexe', |
| )) |
| else: |
| commands.append( |
| ('sel_ldr', |
| '%(SEL_LDR)s -B %(IRT)s %(tmp)s.nexe', |
| )) |
| return commands |
| |
| def NaClClang(arch, cpp=False): |
| arch_map = {'x86-64': 'x86_64', 'x86-32': 'i686', 'arm': 'arm'} |
| suffix = '++' if cpp else '' |
| return os.path.join(PNACL_ROOT, 'bin', |
| arch_map[arch] + '-nacl-clang' + suffix) |
| |
| # TODO(dschuff): the other uses of SEL_LDR_ARCH etc can probably just be |
| # replaced with something like this everywhere. |
| def Tool(arch, tool): |
| toolmap = { |
| 'x86-64': { |
| 'sel_ldr': SEL_LDR_X64, |
| 'bootstrap': BOOTSTRAP_X64, |
| 'irt': IRT_X64, |
| 'run_sel_ldr': RUN_SEL_LDR_X64, |
| }, |
| 'x86-32': { |
| 'sel_ldr': SEL_LDR_X32, |
| 'bootstrap': BOOTSTRAP_X32, |
| 'irt': IRT_X32, |
| 'run_sel_ldr': RUN_SEL_LDR_X32, |
| }, |
| 'arm': { |
| 'sel_ldr': SEL_LDR_ARM, |
| 'bootstrap': BOOTSTRAP_ARM, |
| 'irt': IRT_ARM, |
| 'run_sel_ldr': RUN_SEL_LDR_ARM, |
| } |
| } |
| return toolmap[arch][tool] |
| |
| for arch in ['x86-64', 'x86-32', 'arm']: |
| TOOLCHAIN_CONFIGS['nacl_clang_%s_O0' % arch] = ToolchainConfig( |
| desc='clang [%s O0]' % arch, |
| attributes=[arch, 'O0'], |
| commands=NaClClangCommands(arch), |
| tools_needed=[NaClClang(arch), Tool(arch, 'bootstrap'), |
| Tool(arch, 'sel_ldr')], |
| CC = NaClClang(arch), |
| SEL_LDR = Tool(arch, 'run_sel_ldr'), |
| IRT = Tool(arch, 'irt'), |
| EMU = EMU_SCRIPT, |
| CFLAGS = '-O0 ' + CLANG_CFLAGS + ' ' + GLOBAL_CFLAGS) |
| |
| # Unlike gcc (which doesn't care) and pnacl-clang (which figures out the |
| # source language and explicitly tells the underlying clang), nacl-clang |
| # doesn't like building C files using the C++ compiler. So different configs |
| # are needed for C++ vs C tests. |
| TOOLCHAIN_CONFIGS['nacl_clang++_%s_O0' % arch] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['nacl_clang_%s_O0' % arch], |
| desc='clang++ [%s O0]' % arch, |
| attributes=[arch, 'O3'], |
| CC = NaClClang(arch, cpp=True)) |
| |
| TOOLCHAIN_CONFIGS['nacl_clang_%s_O3' % arch] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['nacl_clang_%s_O0' % arch], |
| desc='clang [%s O3]' % arch, |
| attributes=[arch, 'O3'], |
| CFLAGS = '-O3 ' + CLANG_CFLAGS + ' ' + GLOBAL_CFLAGS) |
| |
| TOOLCHAIN_CONFIGS['nacl_clang++_%s_O3' % arch] = ToolchainConfig( |
| base=TOOLCHAIN_CONFIGS['nacl_clang_%s_O3' % arch], |
| desc='clang++ [%s O3]' % arch, |
| attributes=[arch, 'O3'], |
| CC = NaClClang(arch, cpp=True)) |