Cast: Stop logging kVideoFrameSentToEncoder and rename a couple events.
[chromium-blink-merge.git] / native_client_sdk / src / tools / sel_ldr.py
blob911a853f91e228698060eb6492b5959e14073321
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 """Wrapper script for launching application within the sel_ldr.
7 """
9 import optparse
10 import os
11 import subprocess
12 import sys
14 import create_nmf
15 import getos
17 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
18 NACL_SDK_ROOT = os.path.dirname(SCRIPT_DIR)
20 if sys.version_info < (2, 6, 0):
21 sys.stderr.write("python 2.6 or later is required run this script\n")
22 sys.exit(1)
25 class Error(Exception):
26 pass
29 def Log(msg):
30 if Log.verbose:
31 sys.stderr.write(str(msg) + '\n')
32 Log.verbose = False
35 def main(argv):
36 usage = 'Usage: %prog [options] <.nexe>'
37 epilog = 'Example: sel_ldr.py my_nexe.nexe'
38 parser = optparse.OptionParser(usage, description=__doc__, epilog=epilog)
39 parser.add_option('-v', '--verbose', action='store_true',
40 help='Verbose output')
41 parser.add_option('-d', '--debug', action='store_true',
42 help='Enable debug stub')
43 parser.add_option('--debug-libs', action='store_true',
44 help='For dynamic executables, reference debug '
45 'libraries rather then release')
47 # To enable bash completion for this command first install optcomplete
48 # and then add this line to your .bashrc:
49 # complete -F _optcomplete sel_ldr.py
50 try:
51 import optcomplete
52 optcomplete.autocomplete(parser)
53 except ImportError:
54 pass
56 options, args = parser.parse_args(argv)
57 if not args:
58 parser.error('No executable file specified')
60 nexe = args[0]
61 if options.verbose:
62 Log.verbose = True
64 osname = getos.GetPlatform()
65 if not os.path.exists(nexe):
66 raise Error('executable not found: %s' % nexe)
67 if not os.path.isfile(nexe):
68 raise Error('not a file: %s' % nexe)
70 arch, dynamic = create_nmf.ParseElfHeader(nexe)
72 if arch == 'arm':
73 raise Error('Cannot run ARM executables under sel_ldr')
75 arch_suffix = arch.replace('-', '_')
77 sel_ldr = os.path.join(SCRIPT_DIR, 'sel_ldr_%s' % arch_suffix)
78 irt = os.path.join(SCRIPT_DIR, 'irt_core_%s.nexe' % arch_suffix)
79 if osname == 'win':
80 sel_ldr += '.exe'
81 Log('ROOT = %s' % NACL_SDK_ROOT)
82 Log('SEL_LDR = %s' % sel_ldr)
83 Log('IRT = %s' % irt)
84 cmd = [sel_ldr]
86 if osname == 'linux':
87 # Run sel_ldr under nacl_helper_bootstrap
88 helper = os.path.join(SCRIPT_DIR, 'nacl_helper_bootstrap_%s' % arch_suffix)
89 Log('HELPER = %s' % helper)
90 cmd.insert(0, helper)
91 cmd.append('--r_debug=0xXXXXXXXXXXXXXXXX')
92 cmd.append('--reserved_at_zero=0xXXXXXXXXXXXXXXXX')
94 cmd += ['-a', '-B', irt]
96 if options.debug:
97 cmd.append('-g')
99 if not options.verbose:
100 cmd += ['-l', os.devnull]
102 if dynamic:
103 if options.debug_libs:
104 libpath = os.path.join(NACL_SDK_ROOT, 'lib',
105 'glibc_%s' % arch_suffix, 'Debug')
106 else:
107 libpath = os.path.join(NACL_SDK_ROOT, 'lib',
108 'glibc_%s' % arch_suffix, 'Release')
109 toolchain = '%s_x86_glibc' % osname
110 sdk_lib_dir = os.path.join(NACL_SDK_ROOT, 'toolchain',
111 toolchain, 'x86_64-nacl')
112 if arch == 'x86-64':
113 sdk_lib_dir = os.path.join(sdk_lib_dir, 'lib')
114 else:
115 sdk_lib_dir = os.path.join(sdk_lib_dir, 'lib32')
116 ldso = os.path.join(sdk_lib_dir, 'runnable-ld.so')
117 cmd.append(ldso)
118 Log('LD.SO = %s' % ldso)
119 libpath += ':' + sdk_lib_dir
120 cmd.append('--library-path')
121 cmd.append(libpath)
124 if args:
125 # Append arguments for the executable itself.
126 cmd += args
128 Log(cmd)
129 rtn = subprocess.call(cmd)
130 return rtn
133 if __name__ == '__main__':
134 try:
135 sys.exit(main(sys.argv[1:]))
136 except Error as e:
137 sys.stderr.write(str(e) + '\n')
138 sys.exit(1)