OLD | NEW |
1 #!/usr/bin/env python2 | 1 #!/usr/bin/env python2 |
2 | 2 |
3 import argparse | 3 import argparse |
4 import os | 4 import os |
5 import shutil | 5 import shutil |
6 import tempfile | 6 import tempfile |
7 | 7 |
8 import targets | 8 import targets |
9 from utils import shellcmd | 9 from utils import shellcmd |
10 from utils import FindBaseNaCl | 10 from utils import FindBaseNaCl |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 ['-mtriple=' + target_info.triple] + target_info.llc_flags, | 58 ['-mtriple=' + target_info.triple] + target_info.llc_flags, |
59 TmpFile('{dir}/szrt_native_{target}.tmp.o'), | 59 TmpFile('{dir}/szrt_native_{target}.tmp.o'), |
60 verbose) | 60 verbose) |
61 # Compile srcdir/szrt_profiler.c to | 61 # Compile srcdir/szrt_profiler.c to |
62 # tempdir/szrt_profiler_native_{target}.o. | 62 # tempdir/szrt_profiler_native_{target}.o. |
63 shellcmd(['clang', | 63 shellcmd(['clang', |
64 '-O2', | 64 '-O2', |
65 '-target=' + target_info.triple, | 65 '-target=' + target_info.triple, |
66 '-c', | 66 '-c', |
67 '{srcdir}/szrt_profiler.c'.format(srcdir=srcdir), | 67 '{srcdir}/szrt_profiler.c'.format(srcdir=srcdir), |
68 '-o', TmpFile('{dir}/szrt_profiler_native_{target}.o') | 68 '-o', TmpFile('{dir}/szrt_native_profiler_{target}.o') |
| 69 ], echo=verbose) |
| 70 # Assemble srcdir/szrt_asm_{target}.s to tempdir/szrt_asm_{target}.o. |
| 71 shellcmd(['llvm-mc', |
| 72 '-triple=' + target_info.triple, '--defsym NATIVE=1', |
| 73 '-filetype=obj', |
| 74 '-o', TmpFile('{dir}/szrt_native_asm_{target}.o'), |
| 75 '{srcdir}/szrt_asm_{target}.s'.format( |
| 76 srcdir=srcdir, target=target_info.target) |
69 ], echo=verbose) | 77 ], echo=verbose) |
70 # Write full szrt_native_{target}.o. | 78 # Write full szrt_native_{target}.o. |
71 PartialLink([TmpFile('{dir}/szrt_native_{target}.tmp.o'), | 79 PartialLink([TmpFile('{dir}/szrt_native_{target}.tmp.o'), |
72 TmpFile('{dir}/szrt_profiler_native_{target}.o')], | 80 TmpFile('{dir}/szrt_native_asm_{target}.o'), |
| 81 TmpFile('{dir}/szrt_native_profiler_{target}.o')], |
73 ['-m {ld_emu}'.format(ld_emu=target_info.ld_emu)], | 82 ['-m {ld_emu}'.format(ld_emu=target_info.ld_emu)], |
74 OutFile('{rtdir}/szrt_native_{target}.o'), | 83 OutFile('{rtdir}/szrt_native_{target}.o'), |
75 verbose) | 84 verbose) |
| 85 shellcmd(['le32-nacl-objcopy', |
| 86 '--strip-symbol=NATIVE', |
| 87 OutFile('{rtdir}/szrt_native_{target}.o')]) |
| 88 |
76 # Helper function for building the sandboxed runtime. | 89 # Helper function for building the sandboxed runtime. |
77 def MakeSandboxedRuntime(): | 90 def MakeSandboxedRuntime(): |
78 """Builds just the sandboxed runtime.""" | 91 """Builds just the sandboxed runtime.""" |
79 # Translate tempdir/szrt.ll and tempdir/szrt_ll.ll to szrt_sb_{target}.o. | 92 # Translate tempdir/szrt.ll and tempdir/szrt_ll.ll to szrt_sb_{target}.o. |
80 # The sandboxed library does not get the profiler helper function as the | 93 # The sandboxed library does not get the profiler helper function as the |
81 # binaries are linked with -nostdlib. | 94 # binaries are linked with -nostdlib. |
82 Translate(ll_files, | 95 Translate(ll_files, |
83 ['-mtriple=' + targets.ConvertTripleToNaCl(target_info.triple)] + | 96 ['-mtriple=' + targets.ConvertTripleToNaCl(target_info.triple)] + |
84 target_info.llc_flags, | 97 target_info.llc_flags, |
85 OutFile('{rtdir}/szrt_sb_{target}.o'), | 98 TmpFile('{dir}/szrt_sb_{target}.tmp.o'), |
86 verbose) | 99 verbose) |
| 100 # Assemble srcdir/szrt_asm_{target}.s to tempdir/szrt_asm_{target}.o. |
| 101 shellcmd(['llvm-mc', |
| 102 '-triple=' + targets.ConvertTripleToNaCl(target_info.triple), |
| 103 '--defsym NACL=1', |
| 104 '-filetype=obj', |
| 105 '-o', TmpFile('{dir}/szrt_sb_asm_{target}.o'), |
| 106 '{srcdir}/szrt_asm_{target}.s'.format( |
| 107 srcdir=srcdir, target=target_info.target) |
| 108 ], echo=verbose) |
| 109 PartialLink([TmpFile('{dir}/szrt_sb_{target}.tmp.o'), |
| 110 TmpFile('{dir}/szrt_sb_asm_{target}.o')], |
| 111 ['-m {ld_emu}'.format(ld_emu=target_info.sb_emu)], |
| 112 OutFile('{rtdir}/szrt_sb_{target}.o'), |
| 113 verbose) |
| 114 shellcmd(['le32-nacl-objcopy', |
| 115 '--strip-symbol=NACL', |
| 116 OutFile('{rtdir}/szrt_sb_{target}.o')]) |
| 117 |
87 # Helper function for building the Non-SFI runtime. | 118 # Helper function for building the Non-SFI runtime. |
88 def MakeNonsfiRuntime(): | 119 def MakeNonsfiRuntime(): |
89 """Builds just the nonsfi runtime.""" | 120 """Builds just the nonsfi runtime.""" |
90 # Translate tempdir/szrt.ll and tempdir/szrt_ll.ll to | 121 # Translate tempdir/szrt.ll and tempdir/szrt_ll.ll to |
91 # szrt_nonsfi_{target}.tmp.o. | 122 # szrt_nonsfi_{target}.tmp.o. |
92 Translate(ll_files, | 123 Translate(ll_files, |
93 ['-mtriple=' + target_info.triple] + target_info.llc_flags + | 124 ['-mtriple=' + target_info.triple] + target_info.llc_flags + |
94 ['-relocation-model=pic', '-force-tls-non-pic', '-malign-double'], | 125 ['-relocation-model=pic', '-force-tls-non-pic', '-malign-double'], |
95 TmpFile('{dir}/szrt_nonsfi_{target}.tmp.o'), | 126 TmpFile('{dir}/szrt_nonsfi_{target}.tmp.o'), |
96 verbose) | 127 verbose) |
97 # Assemble srcdir/szrt_asm_{target}.s to tempdir/szrt_asm_{target}.o. | 128 # Assemble srcdir/szrt_asm_{target}.s to tempdir/szrt_asm_{target}.o. |
98 shellcmd(['llvm-mc', | 129 shellcmd(['llvm-mc', |
99 '-triple=' + target_info.triple, | 130 '-triple=' + target_info.triple, '--defsym NONSFI=1', |
100 '-filetype=obj', | 131 '-filetype=obj', |
101 '-o', TmpFile('{dir}/szrt_asm_{target}.o'), | 132 '-o', TmpFile('{dir}/szrt_nonsfi_asm_{target}.o'), |
102 '{srcdir}/szrt_asm_{target}.s'.format( | 133 '{srcdir}/szrt_asm_{target}.s'.format( |
103 srcdir=srcdir, target=target_info.target) | 134 srcdir=srcdir, target=target_info.target) |
104 ], echo=verbose) | 135 ], echo=verbose) |
105 # Write full szrt_nonsfi_{target}.o. | 136 # Write full szrt_nonsfi_{target}.o. |
106 PartialLink([TmpFile('{dir}/szrt_nonsfi_{target}.tmp.o'), | 137 PartialLink([TmpFile('{dir}/szrt_nonsfi_{target}.tmp.o'), |
107 TmpFile('{dir}/szrt_asm_{target}.o')], | 138 TmpFile('{dir}/szrt_nonsfi_asm_{target}.o')], |
108 ['-m {ld_emu}'.format(ld_emu=target_info.ld_emu)], | 139 ['-m {ld_emu}'.format(ld_emu=target_info.ld_emu)], |
109 OutFile('{rtdir}/szrt_nonsfi_{target}.o'), | 140 OutFile('{rtdir}/szrt_nonsfi_{target}.o'), |
110 verbose) | 141 verbose) |
| 142 shellcmd(['le32-nacl-objcopy', |
| 143 '--strip-symbol=NONSFI', |
| 144 OutFile('{rtdir}/szrt_nonsfi_{target}.o')]) |
| 145 |
111 | 146 |
112 # Run the helper functions. | 147 # Run the helper functions. |
113 MakeNativeRuntime() | 148 MakeNativeRuntime() |
114 MakeSandboxedRuntime() | 149 MakeSandboxedRuntime() |
115 MakeNonsfiRuntime() | 150 MakeNonsfiRuntime() |
116 | 151 |
117 | 152 |
118 def main(): | 153 def main(): |
119 """Build the Subzero runtime support library for all architectures. | 154 """Build the Subzero runtime support library for all architectures. |
120 """ | 155 """ |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 | 207 |
173 finally: | 208 finally: |
174 try: | 209 try: |
175 shutil.rmtree(tempdir) | 210 shutil.rmtree(tempdir) |
176 except OSError as exc: | 211 except OSError as exc: |
177 if exc.errno != errno.ENOENT: # ENOENT - no such file or directory | 212 if exc.errno != errno.ENOENT: # ENOENT - no such file or directory |
178 raise # re-raise exception | 213 raise # re-raise exception |
179 | 214 |
180 if __name__ == '__main__': | 215 if __name__ == '__main__': |
181 main() | 216 main() |
OLD | NEW |