Introduce libcrypto_bcm_sources for Android. Splits Android sources into two groups allowing different compilation rules. Also make output conform to Android blueprint style guide by remove the final blank line. AOSP change: http://r.android.com/c/platform/external/boringssl/+/1103191 Test: Built using AOSP change above. Change-Id: I45ce32c75a524757fe87654b8c77a2195b365c84 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/37084 Reviewed-by: Adam Langley <agl@google.com> Commit-Queue: Adam Langley <agl@google.com>
diff --git a/util/generate_build_files.py b/util/generate_build_files.py index 7066d79..57e5e1b 100644 --- a/util/generate_build_files.py +++ b/util/generate_build_files.py
@@ -76,7 +76,6 @@ # limitations under the License. # This file is created by generate_build_files.py. Do not edit manually. - """ def PrintVariableSection(self, out, name, files): @@ -90,14 +89,44 @@ with open('sources.bp', 'w+') as blueprint: blueprint.write(self.header.replace('#', '//')) - blueprint.write('cc_defaults {\n') - blueprint.write(' name: "libcrypto_sources",\n') - blueprint.write(' srcs: [\n') - for f in sorted(files['crypto']): - blueprint.write(' "%s",\n' % f) - blueprint.write(' ],\n') - blueprint.write(' target: {\n') + # Separate out BCM files to allow different compilation rules (specific to Android FIPS) + bcm_c_files = files['bcm_crypto'] + non_bcm_c_files = [file for file in files['crypto'] if file not in bcm_c_files] + non_bcm_asm = self.FilterBcmAsm(asm_outputs, False) + bcm_asm = self.FilterBcmAsm(asm_outputs, True) + self.PrintDefaults(blueprint, 'libcrypto_sources', non_bcm_c_files, non_bcm_asm) + self.PrintDefaults(blueprint, 'libcrypto_bcm_sources', bcm_c_files, bcm_asm) + self.PrintDefaults(blueprint, 'libssl_sources', files['ssl']) + self.PrintDefaults(blueprint, 'bssl_sources', files['tool']) + self.PrintDefaults(blueprint, 'boringssl_test_support_sources', files['test_support']) + self.PrintDefaults(blueprint, 'boringssl_crypto_test_sources', files['crypto_test']) + self.PrintDefaults(blueprint, 'boringssl_ssl_test_sources', files['ssl_test']) + + # Legacy Android.mk format, only used by Trusty in new branches + with open('sources.mk', 'w+') as makefile: + makefile.write(self.header) + makefile.write('\n') + self.PrintVariableSection(makefile, 'crypto_sources', files['crypto']) + + for ((osname, arch), asm_files) in asm_outputs: + if osname != 'linux': + continue + self.PrintVariableSection( + makefile, '%s_%s_sources' % (osname, arch), asm_files) + + def PrintDefaults(self, blueprint, name, files, asm_outputs={}): + """Print a cc_defaults section from a list of C files and optionally assembly outputs""" + blueprint.write('\n') + blueprint.write('cc_defaults {\n') + blueprint.write(' name: "%s",\n' % name) + blueprint.write(' srcs: [\n') + for f in sorted(files): + blueprint.write(' "%s",\n' % f) + blueprint.write(' ],\n') + + if asm_outputs: + blueprint.write(' target: {\n') for ((osname, arch), asm_files) in asm_outputs: if osname != 'linux' or arch == 'ppc64le': continue @@ -110,61 +139,22 @@ blueprint.write(' "%s",\n' % f) blueprint.write(' ],\n') blueprint.write(' },\n') - blueprint.write(' },\n') - blueprint.write('}\n\n') - blueprint.write('cc_defaults {\n') - blueprint.write(' name: "libssl_sources",\n') - blueprint.write(' srcs: [\n') - for f in sorted(files['ssl']): - blueprint.write(' "%s",\n' % f) - blueprint.write(' ],\n') - blueprint.write('}\n\n') + blueprint.write('}\n') - blueprint.write('cc_defaults {\n') - blueprint.write(' name: "bssl_sources",\n') - blueprint.write(' srcs: [\n') - for f in sorted(files['tool']): - blueprint.write(' "%s",\n' % f) - blueprint.write(' ],\n') - blueprint.write('}\n\n') + def FilterBcmAsm(self, asm, want_bcm): + """Filter a list of assembly outputs based on whether they belong in BCM - blueprint.write('cc_defaults {\n') - blueprint.write(' name: "boringssl_test_support_sources",\n') - blueprint.write(' srcs: [\n') - for f in sorted(files['test_support']): - blueprint.write(' "%s",\n' % f) - blueprint.write(' ],\n') - blueprint.write('}\n\n') + Args: + asm: Assembly file lists to filter + want_bcm: If true then include BCM files, otherwise do not - blueprint.write('cc_defaults {\n') - blueprint.write(' name: "boringssl_crypto_test_sources",\n') - blueprint.write(' srcs: [\n') - for f in sorted(files['crypto_test']): - blueprint.write(' "%s",\n' % f) - blueprint.write(' ],\n') - blueprint.write('}\n\n') - - blueprint.write('cc_defaults {\n') - blueprint.write(' name: "boringssl_ssl_test_sources",\n') - blueprint.write(' srcs: [\n') - for f in sorted(files['ssl_test']): - blueprint.write(' "%s",\n' % f) - blueprint.write(' ],\n') - blueprint.write('}\n\n') - - # Legacy Android.mk format, only used by Trusty in new branches - with open('sources.mk', 'w+') as makefile: - makefile.write(self.header) - - self.PrintVariableSection(makefile, 'crypto_sources', files['crypto']) - - for ((osname, arch), asm_files) in asm_outputs: - if osname != 'linux': - continue - self.PrintVariableSection( - makefile, '%s_%s_sources' % (osname, arch), asm_files) + Returns: + A copy of |asm| with files filtered according to |want_bcm| + """ + return [(archinfo, filter(lambda p: ("/crypto/fipsmodule/" in p) == want_bcm, files)) + for (archinfo, files) in asm] class AndroidCMake(object): @@ -661,6 +651,11 @@ fips_fragments.append(p256) crypto_c_files.remove(p256) + # BCM shared library C files + bcm_crypto_c_files = [ + os.path.join('src', 'crypto', 'fipsmodule', 'bcm.c') + ] + # Generate err_data.c with open('err_data.c', 'w+') as err_data: subprocess.check_call(['go', 'run', 'err_data_generate.go'], @@ -718,6 +713,7 @@ FindHeaderFiles(os.path.join('src', 'third_party', 'sike'), NoTests)) files = { + 'bcm_crypto': bcm_crypto_c_files, 'crypto': crypto_c_files, 'crypto_headers': crypto_h_files, 'crypto_internal_headers': crypto_internal_h_files,