OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2013 the V8 project authors. All rights reserved. | 3 # Copyright 2013 the V8 project authors. All rights reserved. |
4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
6 # met: | 6 # met: |
7 # | 7 # |
8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
(...skipping 14 matching lines...) Expand all Loading... |
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | 29 |
30 # This script executes the passed command line using the Native Client | 30 # This script executes the passed command line using the Native Client |
31 # 'sel_ldr' container. It is derived from android-run.py. | 31 # 'sel_ldr' container. It is derived from android-run.py. |
32 | 32 |
33 import os | 33 import os |
34 from os.path import join, dirname, abspath | 34 from os.path import join, dirname, abspath |
| 35 import re |
35 import subprocess | 36 import subprocess |
36 import sys | 37 import sys |
37 import tempfile | 38 import tempfile |
38 | 39 |
39 def Check(output, errors): | 40 def Check(output, errors): |
40 failed = any([s.startswith('/system/bin/sh:') or s.startswith('ANDROID') | 41 failed = any([s.startswith('/system/bin/sh:') or s.startswith('ANDROID') |
41 for s in output.split('\n')]) | 42 for s in output.split('\n')]) |
42 return 1 if failed else 0 | 43 return 1 if failed else 0 |
43 | 44 |
44 def Execute(cmdline): | 45 def Execute(cmdline): |
(...skipping 30 matching lines...) Expand all Loading... |
75 os.close(fd) | 76 os.close(fd) |
76 tmp_file = open(fname, "w") | 77 tmp_file = open(fname, "w") |
77 tmp_file.write(data) | 78 tmp_file.write(data) |
78 tmp_file.close() | 79 tmp_file.close() |
79 return fname | 80 return fname |
80 | 81 |
81 def GetNaClArchFromNexe(nexe): | 82 def GetNaClArchFromNexe(nexe): |
82 try: | 83 try: |
83 p = subprocess.Popen(['file', nexe], stdout=subprocess.PIPE) | 84 p = subprocess.Popen(['file', nexe], stdout=subprocess.PIPE) |
84 out, err = p.communicate() | 85 out, err = p.communicate() |
85 lines = out.split('\n') | 86 lines = [re.sub("\s+", " " , line) for line in out.split('\n')] |
86 if lines[0].find(": ELF 32-bit LSB executable, Intel 80386") > 0: | 87 if lines[0].find(": ELF 32-bit LSB executable, Intel 80386") > 0: |
87 return "x86_32" | 88 return "x86_32" |
88 if lines[0].find(": ELF 64-bit LSB executable, x86-64") > 0: | 89 if lines[0].find(": ELF 64-bit LSB executable, x86-64") > 0: |
89 return "x86_64" | 90 return "x86_64" |
90 except: | 91 except: |
91 print 'file ' + sys.argv[1] + ' failed' | 92 print 'file ' + sys.argv[1] + ' failed' |
92 return None | 93 return None |
93 | 94 |
94 def GetNaClResources(nexe): | 95 def GetNaClResources(nexe): |
95 nacl_sdk_dir = os.environ["NACL_SDK_ROOT"] | 96 nacl_sdk_dir = os.environ["NACL_SDK_ROOT"] |
(...skipping 13 matching lines...) Expand all Loading... |
109 libdir = "lib64" | 110 libdir = "lib64" |
110 elif nacl_arch is "x86_32": | 111 elif nacl_arch is "x86_32": |
111 toolchain = platform + "_x86_glibc" | 112 toolchain = platform + "_x86_glibc" |
112 sel_ldr = "sel_ldr_x86_32" | 113 sel_ldr = "sel_ldr_x86_32" |
113 irt = "irt_core_x86_32.nexe" | 114 irt = "irt_core_x86_32.nexe" |
114 libdir = "lib32" | 115 libdir = "lib32" |
115 elif nacl_arch is "arm": | 116 elif nacl_arch is "arm": |
116 print("NaCl V8 ARM support is not ready yet.") | 117 print("NaCl V8 ARM support is not ready yet.") |
117 sys.exit(1) | 118 sys.exit(1) |
118 else: | 119 else: |
119 print("Invalid nexe %s" % nexe) | 120 print("Invalid nexe %s with NaCl arch %s" % (nexe, nacl_arch)) |
120 sys.exit(1) | 121 sys.exit(1) |
121 | 122 |
122 nacl_sel_ldr = os.path.join(nacl_sdk_dir, "tools", sel_ldr) | 123 nacl_sel_ldr = os.path.join(nacl_sdk_dir, "tools", sel_ldr) |
123 nacl_irt = os.path.join(nacl_sdk_dir, "tools", irt) | 124 nacl_irt = os.path.join(nacl_sdk_dir, "tools", irt) |
124 nacl_ld_so = os.path.join(nacl_sdk_dir, "toolchain", toolchain, | |
125 "x86_64-nacl", libdir, "runnable-ld.so") | |
126 nacl_lib_path = os.path.join(nacl_sdk_dir, "toolchain", toolchain, | |
127 "x86_64-nacl", libdir) | |
128 | 125 |
129 return (nacl_sdk_dir, nacl_sel_ldr, nacl_irt, nacl_ld_so, nacl_lib_path) | 126 return (nacl_sdk_dir, nacl_sel_ldr, nacl_irt) |
130 | 127 |
131 def Main(): | 128 def Main(): |
132 if (len(sys.argv) == 1): | 129 if (len(sys.argv) == 1): |
133 print("Usage: %s <command-to-run-on-device>" % sys.argv[0]) | 130 print("Usage: %s <command-to-run-on-device>" % sys.argv[0]) |
134 return 1 | 131 return 1 |
135 | 132 |
136 args = [Escape(arg) for arg in sys.argv[1:]] | 133 args = [Escape(arg) for arg in sys.argv[1:]] |
137 | 134 |
138 (nacl_sdk_dir, nacl_sel_ldr, nacl_irt, nacl_ld_so, | 135 (nacl_sdk_dir, nacl_sel_ldr, nacl_irt) = GetNaClResources(sys.argv[1]) |
139 nacl_lib_path) = GetNaClResources(sys.argv[1]) | |
140 | 136 |
141 # sel_ldr Options: | 137 # sel_ldr Options: |
142 # -c -c: disable validation (for performance) | 138 # -c -c: disable validation (for performance) |
143 # -a: allow file access | 139 # -a: allow file access |
144 # -B <irt>: load the IRT | 140 # -B <irt>: load the IRT |
145 command = ' '.join([nacl_sel_ldr, '-c', '-c', '-a', '-B', nacl_irt, '--', | 141 command = ' '.join([nacl_sel_ldr, '-c', '-c', '-a', '-B', nacl_irt, '--'] + |
146 nacl_ld_so, '--library-path', nacl_lib_path] + args) | 142 args) |
147 error_code = Execute(command) | 143 error_code = Execute(command) |
148 return error_code | 144 return error_code |
149 | 145 |
150 if __name__ == '__main__': | 146 if __name__ == '__main__': |
151 sys.exit(Main()) | 147 sys.exit(Main()) |
OLD | NEW |