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 <agl@google.com>
diff --git a/util/generate_build_files.py b/util/generate_build_files.py index 6c3977d..7936528 100644 --- a/util/generate_build_files.py +++ b/util/generate_build_files.py
@@ -618,6 +618,14 @@ ''') +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 @@ 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=<path>]' - ' [android|android-cmake|bazel|eureka|gn|gyp]') + parser = optparse.OptionParser(usage='Usage: %%prog [--prefix=<path>] [%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 @@ 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))