Index: pnacl/driver/wrapper-link-and-translate.py |
diff --git a/pnacl/driver/wrapper-link-and-translate.py b/pnacl/driver/wrapper-link-and-translate.py |
deleted file mode 100644 |
index 24df0d27b93ba1f604c58ef7923db618ec57fedf..0000000000000000000000000000000000000000 |
--- a/pnacl/driver/wrapper-link-and-translate.py |
+++ /dev/null |
@@ -1,233 +0,0 @@ |
-#!/usr/bin/python |
-# Copyright (c) 2012 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. |
-# |
-# IMPORTANT NOTE: If you make local mods to this file, you must run: |
-# % pnacl/build.sh driver |
-# in order for them to take effect in the scons build. This command |
-# updates the copy in the toolchain/ tree. |
-# |
- |
-import os |
-import re |
- |
-from driver_env import env as Env |
-from driver_log import Log |
-import driver_tools |
- |
-EXTRA_ENV = { |
- 'INPUTS' : '', |
- 'OUTPUT' : '', |
- |
- # bitcode linking flags - will be passed through to the pexe linking phase |
- 'RELEVANT_FLAGS' : '', |
- 'GENERATE_PIC' : '0', |
- |
- 'MODE' : '', |
- |
- 'LIB_PATHS' : '', |
- 'LIBS' : '', |
- |
- 'SONAME_FLAG' : '', |
- 'OPT_FLAG' : '', |
-} |
- |
-RawRelevantArgs = [] |
- |
-RE_PATH = r'((?:-Wl,-rpath-link,|-L|-B).+)' |
-RE_LIB = r'(-l.+)' |
- |
-def RecordRelevantArg(category, value): |
- Env.append(category, value) |
- RawRelevantArgs.append(value) |
- |
-def RecordInput(value): |
- RecordRelevantArg('INPUTS', value) |
- |
-def RecordLib(value): |
- RecordRelevantArg('LIBS', value) |
- |
-def RecordPath(value): |
- RecordRelevantArg('LIB_PATHS', value) |
- |
- |
-ARG_PATTERNS = [ |
- ( ('-o','(.*)'), "env.set('OUTPUT', $0)"), |
- |
- ( RE_PATH, RecordPath), |
- ( RE_LIB, RecordLib), |
- |
- ( '(-l.+)', "env.append('RELEVANT_FLAGS', $0)"), |
- |
- ( '(-Wl,-soname,.+)', "env.append('SONAME_FLAG', $0)"), |
- ( '(-O.+)', "env.set('OPT_FLAGS_LINK', '$0')"), |
- |
- ( '-(dynamic|shared|static)', "env.set('MODE', $0)"), |
- |
- ( '-fPIC', "env.set('GENERATE_PIC', '1')"), |
- |
- ( '(-.*)', driver_tools.UnrecognizedOption), |
- |
- ( '(.*)', RecordInput), |
-] |
- |
- |
-def ProcessBuildCommand(template): |
- result = [] |
- for t in template: |
- if type(t) == str: |
- s = driver_tools.env.eval(t) |
- if s: |
- result += [s] |
- # This is the more or less standard to test for a function |
- elif hasattr(t, '__call__'): |
- result += t() |
- else: |
- Log.Fatal('do now know how to process template member %s of type %s', |
- repr(t), type(t)) |
- return result |
- |
- |
-def DumpCommand(prefix, args): |
- for a in args: |
- print prefix + ": " + a |
- |
-# ====================================================================== |
-# -shared mode |
-# ====================================================================== |
- |
-def GetPsoTarget(): |
- out = Env.getone('OUTPUT') |
- if not out.endswith('.so'): |
- Log.Fatal('Unexpected target name %s', out) |
- return [out[:-2] + "pso"] |
- |
- |
-def GetPsoInputs(): |
- return Env.get('INPUTS') |
- |
- |
-BUILD_COMMAND_PSO_FROM_BC = [ |
- '--pnacl-driver-verbose', |
- '${OPT_FLAG}', |
- '${SONAME_FLAG}', |
- '-shared', |
- # for now force not dt_needed in .pso/.so |
- '-nodefaultlibs', |
- '-o', GetPsoTarget, |
- GetPsoInputs, |
-] |
- |
- |
-BUILD_COMMAND_SO_FROM_PSO = [ |
- '--pnacl-driver-verbose', |
- '--newlib-shared-experiment', |
- '-shared', |
- '-fPIC', |
- '-arch', '${ARCH}', |
- '-o', '${OUTPUT}', |
- GetPsoTarget, |
-] |
- |
- |
-def BuildSharedLib(): |
- # Shared libs must be built PIC |
- Env.set('GENERATE_PIC', '1') |
- inputs = Env.get('INPUTS') |
- if len(inputs) == 0: |
- Log.Fatal('No input specified.') |
- if not Env.getbool('GENERATE_PIC'): |
- Log.Fatal('Shared libs must be build in pic mode. Use -fPIC') |
- if Env.getone('SONAME_FLAG') == '': |
- Log.Fatal('Shared libs must be given a soname.') |
- |
- pso_command = ProcessBuildCommand(BUILD_COMMAND_PSO_FROM_BC) |
- DumpCommand("@bc->pso", pso_command) |
- # suppress_arch is needed to prevent clang to inherit the |
- # -arch argument |
- driver_tools.RunDriver('clang', pso_command, suppress_arch=True) |
- |
- so_command = ProcessBuildCommand(BUILD_COMMAND_SO_FROM_PSO) |
- DumpCommand("@pso->so", so_command) |
- driver_tools.RunDriver('translate', so_command) |
- |
-# ====================================================================== |
-# -static mode |
-# ====================================================================== |
- |
-def BuildStaticExecutable(): |
- Log.Fatal('PNaCl scons wrapper does not support static executables') |
- |
-# ====================================================================== |
-# -dynamic mode |
-# ====================================================================== |
- |
-def GetPexeTarget(): |
- out = Env.getone('OUTPUT') |
- if not out.endswith('.nexe'): |
- Log.Fatal('Unexpected target name %s', out) |
- return [out[:-4] + "pexe"] |
- |
- |
-def GetPexeInputsDynamic(): |
- return RawRelevantArgs |
- |
- |
-BUILD_COMMAND_PEXE_FROM_BC = [ |
- '--pnacl-driver-verbose', |
- '${OPT_FLAG}', |
- '-o', GetPexeTarget, |
- GetPexeInputsDynamic, |
-] |
- |
- |
-BUILD_COMMAND_NEXE_FROM_PEXE = [ |
- '--pnacl-driver-verbose', |
- '-arch', '${ARCH}', |
- '--newlib-shared-experiment', |
- '-o', '${OUTPUT}', |
- GetPexeTarget, |
-] |
- |
-def BuildDynamicExecutable(): |
- inputs = Env.get('INPUTS') |
- if len(inputs) != 1: |
- Log.Fatal('You must specify exactly on input for a dynamic executable.') |
- |
- pexe_command = ProcessBuildCommand(BUILD_COMMAND_PEXE_FROM_BC) |
- DumpCommand("@bc->pexe", pexe_command) |
- driver_tools.RunDriver('clang', pexe_command, suppress_arch=True) |
- |
- nexe_command = ProcessBuildCommand(BUILD_COMMAND_NEXE_FROM_PEXE) |
- DumpCommand("@pexe->nexe", nexe_command) |
- driver_tools.RunDriver('translate', nexe_command) |
- |
-# ====================================================================== |
-# |
-# ====================================================================== |
- |
-def main(argv): |
- DumpCommand("@incoming", argv) |
- |
- Env.update(EXTRA_ENV) |
- driver_tools.ParseArgs(argv, ARG_PATTERNS) |
- |
- output = Env.getone('OUTPUT') |
- |
- if output == '': |
- Log.Fatal('No output specified. Use -o to specify output') |
- |
- if Env.getone('ARCH') == '': |
- Log.Fatal('No arch specified') |
- |
- mode = Env.getone('MODE') |
- if mode == 'shared': |
- BuildSharedLib() |
- elif mode == 'dynamic': |
- BuildDynamicExecutable() |
- elif mode == 'static': |
- BuildStaticExecutable() |
- else: |
- Log.Fatal('You must specify at least one of -static, -shared, -dynamic') |
- return 0 |