| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can b | 2 # Use of this source code is governed by a BSD-style license that can b |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Enumerates the BoringSSL source in src/ and generates two gypi files: | 5 """Enumerates the BoringSSL source in src/ and generates two gypi files: |
| 6 boringssl.gypi and boringssl_tests.gypi.""" | 6 boringssl.gypi and boringssl_tests.gypi.""" |
| 7 | 7 |
| 8 import os | 8 import os |
| 9 import subprocess | 9 import subprocess |
| 10 import sys | 10 import sys |
| 11 | 11 |
| 12 | 12 |
| 13 # OS_ARCH_COMBOS maps from OS and platform to the OpenSSL assembly "style" for | 13 # OS_ARCH_COMBOS maps from OS and platform to the OpenSSL assembly "style" for |
| 14 # that platform and the extension used by asm files. | 14 # that platform and the extension used by asm files. |
| 15 OS_ARCH_COMBOS = [ | 15 OS_ARCH_COMBOS = [ |
| 16 ('linux', 'arm', 'elf', [''], 'S'), | 16 ('linux', 'arm', 'elf', [''], 'S'), |
| 17 ('linux', 'aarch64', 'linux64', [''], 'S'), |
| 17 ('linux', 'x86', 'elf', ['-fPIC'], 'S'), | 18 ('linux', 'x86', 'elf', ['-fPIC'], 'S'), |
| 18 ('linux', 'x86_64', 'elf', [''], 'S'), | 19 ('linux', 'x86_64', 'elf', [''], 'S'), |
| 19 ('mac', 'x86', 'macosx', ['-fPIC'], 'S'), | 20 ('mac', 'x86', 'macosx', ['-fPIC'], 'S'), |
| 20 ('mac', 'x86_64', 'macosx', [''], 'S'), | 21 ('mac', 'x86_64', 'macosx', [''], 'S'), |
| 21 ('win', 'x86', 'win32n', [''], 'asm'), | 22 ('win', 'x86', 'win32n', [''], 'asm'), |
| 22 ('win', 'x86_64', 'nasm', [''], 'asm'), | 23 ('win', 'x86_64', 'nasm', [''], 'asm'), |
| 23 ] | 24 ] |
| 24 | 25 |
| 25 # NON_PERL_FILES enumerates assembly files that are not processed by the | 26 # NON_PERL_FILES enumerates assembly files that are not processed by the |
| 26 # perlasm system. | 27 # perlasm system. |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 base_dir = os.path.dirname(output_filename) | 128 base_dir = os.path.dirname(output_filename) |
| 128 if not os.path.isdir(base_dir): | 129 if not os.path.isdir(base_dir): |
| 129 os.makedirs(base_dir) | 130 os.makedirs(base_dir) |
| 130 output = subprocess.check_output( | 131 output = subprocess.check_output( |
| 131 ['perl', input_filename, perlasm_style] + extra_args) | 132 ['perl', input_filename, perlasm_style] + extra_args) |
| 132 with open(output_filename, 'w+') as out_file: | 133 with open(output_filename, 'w+') as out_file: |
| 133 out_file.write(output) | 134 out_file.write(output) |
| 134 | 135 |
| 135 | 136 |
| 136 def ArchForAsmFilename(filename): | 137 def ArchForAsmFilename(filename): |
| 137 """Returns the architecture that a given asm file should be compiled for | 138 """Returns the architectures that a given asm file should be compiled for |
| 138 based on substrings in the filename.""" | 139 based on substrings in the filename.""" |
| 139 | 140 |
| 140 if 'x86_64' in filename or 'avx2' in filename: | 141 if 'x86_64' in filename or 'avx2' in filename: |
| 141 return 'x86_64' | 142 return ['x86_64'] |
| 142 elif ('x86' in filename and 'x86_64' not in filename) or '586' in filename: | 143 elif ('x86' in filename and 'x86_64' not in filename) or '586' in filename: |
| 143 return 'x86' | 144 return ['x86'] |
| 145 elif 'armx' in filename: |
| 146 return ['arm', 'aarch64'] |
| 147 elif 'armv8' in filename: |
| 148 return ['aarch64'] |
| 144 elif 'arm' in filename: | 149 elif 'arm' in filename: |
| 145 return 'arm' | 150 return ['arm'] |
| 146 else: | 151 else: |
| 147 raise ValueError('Unknown arch for asm filename: ' + filename) | 152 raise ValueError('Unknown arch for asm filename: ' + filename) |
| 148 | 153 |
| 149 | 154 |
| 150 def WriteAsmFiles(perlasms): | 155 def WriteAsmFiles(perlasms): |
| 151 """Generates asm files from perlasm directives for each supported OS x | 156 """Generates asm files from perlasm directives for each supported OS x |
| 152 platform combination.""" | 157 platform combination.""" |
| 153 asmfiles = {} | 158 asmfiles = {} |
| 154 | 159 |
| 155 for osarch in OS_ARCH_COMBOS: | 160 for osarch in OS_ARCH_COMBOS: |
| 156 (osname, arch, perlasm_style, extra_args, asm_ext) = osarch | 161 (osname, arch, perlasm_style, extra_args, asm_ext) = osarch |
| 157 key = (osname, arch) | 162 key = (osname, arch) |
| 158 outDir = '%s-%s' % key | 163 outDir = '%s-%s' % key |
| 159 | 164 |
| 160 for perlasm in perlasms: | 165 for perlasm in perlasms: |
| 161 filename = os.path.basename(perlasm['input']) | 166 filename = os.path.basename(perlasm['input']) |
| 162 output = perlasm['output'] | 167 output = perlasm['output'] |
| 163 if not output.startswith('src'): | 168 if not output.startswith('src'): |
| 164 raise ValueError('output missing src: %s' % output) | 169 raise ValueError('output missing src: %s' % output) |
| 165 output = os.path.join(outDir, output[4:]) | 170 output = os.path.join(outDir, output[4:]) |
| 166 output = output.replace('${ASM_EXT}', asm_ext) | 171 output = output.replace('${ASM_EXT}', asm_ext) |
| 167 | 172 |
| 168 if arch == ArchForAsmFilename(filename): | 173 if arch in ArchForAsmFilename(filename): |
| 169 PerlAsm(output, perlasm['input'], perlasm_style, | 174 PerlAsm(output, perlasm['input'], perlasm_style, |
| 170 perlasm['extra_args'] + extra_args) | 175 perlasm['extra_args'] + extra_args) |
| 171 asmfiles.setdefault(key, []).append(output) | 176 asmfiles.setdefault(key, []).append(output) |
| 172 | 177 |
| 173 for (key, non_perl_asm_files) in NON_PERL_FILES.iteritems(): | 178 for (key, non_perl_asm_files) in NON_PERL_FILES.iteritems(): |
| 174 asmfiles.setdefault(key, []).extend(non_perl_asm_files) | 179 asmfiles.setdefault(key, []).extend(non_perl_asm_files) |
| 175 | 180 |
| 176 return asmfiles | 181 return asmfiles |
| 177 | 182 |
| 178 | 183 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 for test in test_names: | 240 for test in test_names: |
| 236 test_gypi.write(""" '%s',\n""" % test) | 241 test_gypi.write(""" '%s',\n""" % test) |
| 237 | 242 |
| 238 test_gypi.write(' ],\n }\n}\n') | 243 test_gypi.write(' ],\n }\n}\n') |
| 239 | 244 |
| 240 return 0 | 245 return 0 |
| 241 | 246 |
| 242 | 247 |
| 243 if __name__ == '__main__': | 248 if __name__ == '__main__': |
| 244 sys.exit(main()) | 249 sys.exit(main()) |
| OLD | NEW |