From 8c0a6ebfc245bdbb3d7315cf8a47b91e4326fa44 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Thu, 16 Jul 2020 14:45:51 -0400 Subject: [PATCH] Add a JSON output to generate_build_files.py. gRPC are currently importing generate_build_files.py, injecting a custom printer, and running into problems with the symlinks they set up to make this work, as well as needing to delete duplicate generated files. https://github.com/grpc/grpc/blob/53a5ad34c0b5fca2cc9fd9ec4b354ff79c12948b/src/boringssl/gen_build_yaml.py#L130 https://boringssl-review.googlesource.com/c/boringssl/+/42164 Rather than layer on more hacks, add a JSON output to generate_build_files.py. This outputs a sources.json file that folks with especially custom builds can consume. (Looks like gRPC converts to some home-grown YAML format which I imagine is further processed by some other generator?) We can then add it to master-with-bazel's output. Change-Id: I82b4ea0647386ca6c76a977f057b9962f40d41c8 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/42204 Reviewed-by: Adam Langley --- util/generate_build_files.py | 40 +++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/util/generate_build_files.py b/util/generate_build_files.py index 6c3977d40..793652875 100644 --- a/util/generate_build_files.py +++ b/util/generate_build_files.py @@ -618,6 +618,14 @@ endif() ''') +class JSON(object): + def WriteFiles(self, files, asm_outputs): + sources = dict(files) + for ((osname, arch), asm_files) in asm_outputs: + sources['crypto_%s_%s' % (osname, arch)] = asm_files + with open('sources.json', 'w+') as f: + json.dump(sources, f, sort_keys=True, indent=2) + def FindCMakeFiles(directory): """Returns list of all CMakeLists.txt files recursively in directory.""" cmakefiles = [] @@ -947,10 +955,20 @@ def main(platforms): return 0 +ALL_PLATFORMS = { + 'android': Android, + 'android-cmake': AndroidCMake, + 'bazel': Bazel, + 'cmake': CMake, + 'eureka': Eureka, + 'gn': GN, + 'gyp': GYP, + 'json': JSON, +} if __name__ == '__main__': - parser = optparse.OptionParser(usage='Usage: %prog [--prefix=]' - ' [android|android-cmake|bazel|eureka|gn|gyp]') + parser = optparse.OptionParser(usage='Usage: %%prog [--prefix=] [%s]' % + '|'.join(sorted(ALL_PLATFORMS.keys()))) parser.add_option('--prefix', dest='prefix', help='For Bazel, prepend argument to all source files') parser.add_option( @@ -967,22 +985,10 @@ if __name__ == '__main__': platforms = [] for s in args: - if s == 'android': - platforms.append(Android()) - elif s == 'android-cmake': - platforms.append(AndroidCMake()) - elif s == 'bazel': - platforms.append(Bazel()) - elif s == 'eureka': - platforms.append(Eureka()) - elif s == 'gn': - platforms.append(GN()) - elif s == 'gyp': - platforms.append(GYP()) - elif s == 'cmake': - platforms.append(CMake()) - else: + platform = ALL_PLATFORMS.get(s) + if platform is None: parser.print_help() sys.exit(1) + platforms.append(platform()) sys.exit(main(platforms))