| 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', 'x86', 'elf', 'S'), | 17 ('linux', 'x86', 'elf', ['-fPIC'], 'S'), |
| 18 ('linux', 'x86_64', 'elf', 'S'), | 18 ('linux', 'x86_64', 'elf', [''], 'S'), |
| 19 ('mac', 'x86', 'macosx', 'S'), | 19 ('mac', 'x86', 'macosx', ['-fPIC'], 'S'), |
| 20 ('mac', 'x86_64', 'macosx', 'S'), | 20 ('mac', 'x86_64', 'macosx', [''], 'S'), |
| 21 ('win', 'x86_64', 'masm', 'asm'), | 21 ('win', 'x86_64', 'masm', [''], 'asm'), |
| 22 ] | 22 ] |
| 23 | 23 |
| 24 # NON_PERL_FILES enumerates assembly files that are not processed by the | 24 # NON_PERL_FILES enumerates assembly files that are not processed by the |
| 25 # perlasm system. | 25 # perlasm system. |
| 26 NON_PERL_FILES = { | 26 NON_PERL_FILES = { |
| 27 ('linux', 'arm'): [ | 27 ('linux', 'arm'): [ |
| 28 'src/crypto/poly1305/poly1305_arm_asm.S', | 28 'src/crypto/poly1305/poly1305_arm_asm.S', |
| 29 'src/crypto/chacha/chacha_vec_arm.S', | 29 'src/crypto/chacha/chacha_vec_arm.S', |
| 30 ], | 30 ], |
| 31 } | 31 } |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 else: | 145 else: |
| 146 raise ValueError('Unknown arch for asm filename: ' + filename) | 146 raise ValueError('Unknown arch for asm filename: ' + filename) |
| 147 | 147 |
| 148 | 148 |
| 149 def WriteAsmFiles(perlasms): | 149 def WriteAsmFiles(perlasms): |
| 150 """Generates asm files from perlasm directives for each supported OS x | 150 """Generates asm files from perlasm directives for each supported OS x |
| 151 platform combination.""" | 151 platform combination.""" |
| 152 asmfiles = {} | 152 asmfiles = {} |
| 153 | 153 |
| 154 for osarch in OS_ARCH_COMBOS: | 154 for osarch in OS_ARCH_COMBOS: |
| 155 (osname, arch, perlasm_style, asm_ext) = osarch | 155 (osname, arch, perlasm_style, extra_args, asm_ext) = osarch |
| 156 key = (osname, arch) | 156 key = (osname, arch) |
| 157 outDir = '%s-%s' % key | 157 outDir = '%s-%s' % key |
| 158 | 158 |
| 159 for perlasm in perlasms: | 159 for perlasm in perlasms: |
| 160 filename = os.path.basename(perlasm['input']) | 160 filename = os.path.basename(perlasm['input']) |
| 161 output = perlasm['output'] | 161 output = perlasm['output'] |
| 162 if not output.startswith('src'): | 162 if not output.startswith('src'): |
| 163 raise ValueError('output missing src: %s' % output) | 163 raise ValueError('output missing src: %s' % output) |
| 164 output = os.path.join(outDir, output[4:]) | 164 output = os.path.join(outDir, output[4:]) |
| 165 output = output.replace('${ASM_EXT}', asm_ext) | 165 output = output.replace('${ASM_EXT}', asm_ext) |
| 166 | 166 |
| 167 if arch == ArchForAsmFilename(filename): | 167 if arch == ArchForAsmFilename(filename): |
| 168 PerlAsm(output, perlasm['input'], perlasm_style, perlasm['extra_args']) | 168 PerlAsm(output, perlasm['input'], perlasm_style, |
| 169 perlasm['extra_args'] + extra_args) |
| 169 asmfiles.setdefault(key, []).append(output) | 170 asmfiles.setdefault(key, []).append(output) |
| 170 | 171 |
| 171 for (key, non_perl_asm_files) in NON_PERL_FILES.iteritems(): | 172 for (key, non_perl_asm_files) in NON_PERL_FILES.iteritems(): |
| 172 asmfiles.setdefault(key, []).extend(non_perl_asm_files) | 173 asmfiles.setdefault(key, []).extend(non_perl_asm_files) |
| 173 | 174 |
| 174 return asmfiles | 175 return asmfiles |
| 175 | 176 |
| 176 | 177 |
| 177 def PrintVariableSection(out, name, files): | 178 def PrintVariableSection(out, name, files): |
| 178 out.write(' \'%s\': [\n' % name) | 179 out.write(' \'%s\': [\n' % name) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 199 (osname, arch), asm_files) | 200 (osname, arch), asm_files) |
| 200 | 201 |
| 201 gypi.write(' }\n}\n') | 202 gypi.write(' }\n}\n') |
| 202 | 203 |
| 203 test_c_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests) | 204 test_c_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests) |
| 204 | 205 |
| 205 with open('boringssl_tests.gypi', 'w+') as test_gypi: | 206 with open('boringssl_tests.gypi', 'w+') as test_gypi: |
| 206 test_gypi.write(FILE_HEADER + '{\n \'targets\': [\n') | 207 test_gypi.write(FILE_HEADER + '{\n \'targets\': [\n') |
| 207 | 208 |
| 208 test_names = [] | 209 test_names = [] |
| 209 for test in test_c_files: | 210 for test in sorted(test_c_files): |
| 210 test_name = 'boringssl_%s' % os.path.splitext(os.path.basename(test))[0] | 211 test_name = 'boringssl_%s' % os.path.splitext(os.path.basename(test))[0] |
| 211 test_gypi.write(""" { | 212 test_gypi.write(""" { |
| 212 'target_name': '%s', | 213 'target_name': '%s', |
| 213 'type': 'executable', | 214 'type': 'executable', |
| 214 'dependencies': [ | 215 'dependencies': [ |
| 215 'boringssl', | 216 'boringssl', |
| 216 ], | 217 ], |
| 217 'sources': [ | 218 'sources': [ |
| 218 '%s', | 219 '%s', |
| 219 ], | 220 ], |
| 220 },\n""" % (test_name, test)) | 221 },\n""" % (test_name, test)) |
| 221 test_names.append(test_name) | 222 test_names.append(test_name) |
| 222 | 223 |
| 223 test_names.sort() | 224 test_names.sort() |
| 224 | 225 |
| 225 test_gypi.write(""" ], | 226 test_gypi.write(""" ], |
| 226 'variables': { | 227 'variables': { |
| 227 'boringssl_test_targets': [\n""") | 228 'boringssl_test_targets': [\n""") |
| 228 | 229 |
| 229 for test in test_names: | 230 for test in test_names: |
| 230 test_gypi.write(""" '%s',\n""" % test) | 231 test_gypi.write(""" '%s',\n""" % test) |
| 231 | 232 |
| 232 test_gypi.write(' ],\n }\n}\n') | 233 test_gypi.write(' ],\n }\n}\n') |
| 233 | 234 |
| 234 return 0 | 235 return 0 |
| 235 | 236 |
| 236 | 237 |
| 237 if __name__ == '__main__': | 238 if __name__ == '__main__': |
| 238 sys.exit(main()) | 239 sys.exit(main()) |
| OLD | NEW |