Improve generate_build_files.py gn support.
Split gn and gyp generators apart. Since we're pre-generating files, there's no need to make BoringSSL's build depend on the gypi_to_gn.py script. Also emit the tests and a list of fuzzers so we don't need to manually update BUILD.gn each time. The new gn generator is based on the bazel one since they're fairly similar. BUG=chromium:429246 Change-Id: I5a819a964d6ac6e56e9251bb3fd3de1db08214a4 Reviewed-on: https://boringssl-review.googlesource.com/7726 Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
818aff01fb
commit
38d01c6b95
@ -48,76 +48,6 @@ NON_PERL_FILES = {
|
||||
}
|
||||
|
||||
|
||||
class Chromium(object):
|
||||
|
||||
def __init__(self):
|
||||
self.header = \
|
||||
"""# Copyright (c) 2014 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# This file is created by generate_build_files.py. Do not edit manually.
|
||||
|
||||
"""
|
||||
|
||||
def PrintVariableSection(self, out, name, files):
|
||||
out.write(' \'%s\': [\n' % name)
|
||||
for f in sorted(files):
|
||||
out.write(' \'%s\',\n' % f)
|
||||
out.write(' ],\n')
|
||||
|
||||
def WriteFiles(self, files, asm_outputs):
|
||||
with open('boringssl.gypi', 'w+') as gypi:
|
||||
gypi.write(self.header + '{\n \'variables\': {\n')
|
||||
|
||||
self.PrintVariableSection(
|
||||
gypi, 'boringssl_ssl_sources', files['ssl'])
|
||||
self.PrintVariableSection(
|
||||
gypi, 'boringssl_crypto_sources', files['crypto'])
|
||||
|
||||
for ((osname, arch), asm_files) in asm_outputs:
|
||||
self.PrintVariableSection(gypi, 'boringssl_%s_%s_sources' %
|
||||
(osname, arch), asm_files)
|
||||
|
||||
gypi.write(' }\n}\n')
|
||||
|
||||
with open('boringssl_tests.gypi', 'w+') as test_gypi:
|
||||
test_gypi.write(self.header + '{\n \'targets\': [\n')
|
||||
|
||||
test_names = []
|
||||
for test in sorted(files['test']):
|
||||
test_name = 'boringssl_%s' % os.path.splitext(os.path.basename(test))[0]
|
||||
test_gypi.write(""" {
|
||||
'target_name': '%s',
|
||||
'type': 'executable',
|
||||
'dependencies': [
|
||||
'boringssl.gyp:boringssl',
|
||||
],
|
||||
'sources': [
|
||||
'%s',
|
||||
'<@(boringssl_test_support_sources)',
|
||||
],
|
||||
# TODO(davidben): Fix size_t truncations in BoringSSL.
|
||||
# https://crbug.com/429039
|
||||
'msvs_disabled_warnings': [ 4267, ],
|
||||
},\n""" % (test_name, test))
|
||||
test_names.append(test_name)
|
||||
|
||||
test_names.sort()
|
||||
|
||||
test_gypi.write(' ],\n \'variables\': {\n')
|
||||
|
||||
self.PrintVariableSection(
|
||||
test_gypi, 'boringssl_test_support_sources', files['test_support'])
|
||||
|
||||
test_gypi.write(' \'boringssl_test_targets\': [\n')
|
||||
|
||||
for test in test_names:
|
||||
test_gypi.write(""" '%s',\n""" % test)
|
||||
|
||||
test_gypi.write(' ],\n }\n}\n')
|
||||
|
||||
|
||||
class Android(object):
|
||||
|
||||
def __init__(self):
|
||||
@ -284,6 +214,148 @@ class Bazel(object):
|
||||
out.write(' )\n')
|
||||
|
||||
|
||||
class GN(object):
|
||||
|
||||
def __init__(self):
|
||||
self.firstSection = True
|
||||
self.header = \
|
||||
"""# Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# This file is created by generate_build_files.py. Do not edit manually.
|
||||
|
||||
"""
|
||||
|
||||
def PrintVariableSection(self, out, name, files):
|
||||
if not self.firstSection:
|
||||
out.write('\n')
|
||||
self.firstSection = False
|
||||
|
||||
out.write('%s = [\n' % name)
|
||||
for f in sorted(files):
|
||||
out.write(' "%s",\n' % f)
|
||||
out.write(']\n')
|
||||
|
||||
def WriteFiles(self, files, asm_outputs):
|
||||
with open('BUILD.generated.gni', 'w+') as out:
|
||||
out.write(self.header)
|
||||
|
||||
self.PrintVariableSection(out, 'crypto_sources', files['crypto'])
|
||||
self.PrintVariableSection(out, 'ssl_sources', files['ssl'])
|
||||
|
||||
for ((osname, arch), asm_files) in asm_outputs:
|
||||
self.PrintVariableSection(
|
||||
out, 'crypto_sources_%s_%s' % (osname, arch), asm_files)
|
||||
|
||||
fuzzers = [os.path.splitext(os.path.basename(fuzzer))[0]
|
||||
for fuzzer in files['fuzz']]
|
||||
self.PrintVariableSection(out, 'fuzzers', fuzzers)
|
||||
|
||||
with open('BUILD.generated_tests.gni', 'w+') as out:
|
||||
self.firstSection = True
|
||||
out.write(self.header)
|
||||
|
||||
self.PrintVariableSection(out, '_test_support_sources',
|
||||
files['test_support'])
|
||||
out.write('\n')
|
||||
|
||||
out.write('template("create_tests") {\n')
|
||||
|
||||
all_tests = []
|
||||
for test in sorted(files['test']):
|
||||
test_name = 'boringssl_%s' % os.path.splitext(os.path.basename(test))[0]
|
||||
all_tests.append(test_name)
|
||||
|
||||
out.write(' executable("%s") {\n' % test_name)
|
||||
out.write(' sources = [\n')
|
||||
out.write(' "%s",\n' % test)
|
||||
out.write(' ]\n')
|
||||
out.write(' sources += _test_support_sources\n')
|
||||
out.write(' configs += invoker.configs\n')
|
||||
out.write(' deps = invoker.deps\n')
|
||||
out.write(' }\n')
|
||||
out.write('\n')
|
||||
|
||||
out.write(' group(target_name) {\n')
|
||||
out.write(' deps = [\n')
|
||||
for test_name in sorted(all_tests):
|
||||
out.write(' ":%s",\n' % test_name)
|
||||
out.write(' ]\n')
|
||||
out.write(' }\n')
|
||||
out.write('}\n')
|
||||
|
||||
|
||||
class GYP(object):
|
||||
|
||||
def __init__(self):
|
||||
self.header = \
|
||||
"""# Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# This file is created by generate_build_files.py. Do not edit manually.
|
||||
|
||||
"""
|
||||
|
||||
def PrintVariableSection(self, out, name, files):
|
||||
out.write(' \'%s\': [\n' % name)
|
||||
for f in sorted(files):
|
||||
out.write(' \'%s\',\n' % f)
|
||||
out.write(' ],\n')
|
||||
|
||||
def WriteFiles(self, files, asm_outputs):
|
||||
with open('boringssl.gypi', 'w+') as gypi:
|
||||
gypi.write(self.header + '{\n \'variables\': {\n')
|
||||
|
||||
self.PrintVariableSection(
|
||||
gypi, 'boringssl_ssl_sources', files['ssl'])
|
||||
self.PrintVariableSection(
|
||||
gypi, 'boringssl_crypto_sources', files['crypto'])
|
||||
|
||||
for ((osname, arch), asm_files) in asm_outputs:
|
||||
self.PrintVariableSection(gypi, 'boringssl_%s_%s_sources' %
|
||||
(osname, arch), asm_files)
|
||||
|
||||
gypi.write(' }\n}\n')
|
||||
|
||||
with open('boringssl_tests.gypi', 'w+') as test_gypi:
|
||||
test_gypi.write(self.header + '{\n \'targets\': [\n')
|
||||
|
||||
test_names = []
|
||||
for test in sorted(files['test']):
|
||||
test_name = 'boringssl_%s' % os.path.splitext(os.path.basename(test))[0]
|
||||
test_gypi.write(""" {
|
||||
'target_name': '%s',
|
||||
'type': 'executable',
|
||||
'dependencies': [
|
||||
'boringssl.gyp:boringssl',
|
||||
],
|
||||
'sources': [
|
||||
'%s',
|
||||
'<@(boringssl_test_support_sources)',
|
||||
],
|
||||
# TODO(davidben): Fix size_t truncations in BoringSSL.
|
||||
# https://crbug.com/429039
|
||||
'msvs_disabled_warnings': [ 4267, ],
|
||||
},\n""" % (test_name, test))
|
||||
test_names.append(test_name)
|
||||
|
||||
test_names.sort()
|
||||
|
||||
test_gypi.write(' ],\n \'variables\': {\n')
|
||||
|
||||
self.PrintVariableSection(
|
||||
test_gypi, 'boringssl_test_support_sources', files['test_support'])
|
||||
|
||||
test_gypi.write(' \'boringssl_test_targets\': [\n')
|
||||
|
||||
for test in sorted(test_names):
|
||||
test_gypi.write(""" '%s',\n""" % test)
|
||||
|
||||
test_gypi.write(' ],\n }\n}\n')
|
||||
|
||||
|
||||
def FindCMakeFiles(directory):
|
||||
"""Returns list of all CMakeLists.txt files recursively in directory."""
|
||||
cmakefiles = []
|
||||
@ -457,7 +529,7 @@ def WriteAsmFiles(perlasms):
|
||||
def main(platforms):
|
||||
crypto_c_files = FindCFiles(os.path.join('src', 'crypto'), NoTests)
|
||||
ssl_c_files = FindCFiles(os.path.join('src', 'ssl'), NoTests)
|
||||
tool_cc_files = FindCFiles(os.path.join('src', 'tool'), NoTests)
|
||||
tool_c_files = FindCFiles(os.path.join('src', 'tool'), NoTests)
|
||||
|
||||
# Generate err_data.c
|
||||
with open('err_data.c', 'w+') as err_data:
|
||||
@ -466,12 +538,14 @@ def main(platforms):
|
||||
stdout=err_data)
|
||||
crypto_c_files.append('err_data.c')
|
||||
|
||||
test_support_cc_files = FindCFiles(os.path.join('src', 'crypto', 'test'),
|
||||
AllFiles)
|
||||
test_support_c_files = FindCFiles(os.path.join('src', 'crypto', 'test'),
|
||||
AllFiles)
|
||||
|
||||
test_c_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests)
|
||||
test_c_files += FindCFiles(os.path.join('src', 'ssl'), OnlyTests)
|
||||
|
||||
fuzz_c_files = FindCFiles(os.path.join('src', 'fuzz'), NoTests)
|
||||
|
||||
ssl_h_files = (
|
||||
FindHeaderFiles(
|
||||
os.path.join('src', 'include', 'openssl'),
|
||||
@ -511,12 +585,13 @@ def main(platforms):
|
||||
'crypto': crypto_c_files,
|
||||
'crypto_headers': crypto_h_files,
|
||||
'crypto_internal_headers': crypto_internal_h_files,
|
||||
'fuzz': fuzz_c_files,
|
||||
'ssl': ssl_c_files,
|
||||
'ssl_headers': ssl_h_files,
|
||||
'ssl_internal_headers': ssl_internal_h_files,
|
||||
'tool': tool_cc_files,
|
||||
'tool': tool_c_files,
|
||||
'test': test_c_files,
|
||||
'test_support': test_support_cc_files,
|
||||
'test_support': test_support_c_files,
|
||||
'tests': tests,
|
||||
}
|
||||
|
||||
@ -529,7 +604,7 @@ def main(platforms):
|
||||
|
||||
|
||||
def Usage():
|
||||
print 'Usage: python %s [chromium|android|android-standalone|bazel]' % sys.argv[0]
|
||||
print 'Usage: python %s [android|android-standalone|bazel|gn|gyp]' % sys.argv[0]
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@ -539,14 +614,16 @@ if __name__ == '__main__':
|
||||
|
||||
platforms = []
|
||||
for s in sys.argv[1:]:
|
||||
if s == 'chromium' or s == 'gyp':
|
||||
platforms.append(Chromium())
|
||||
elif s == 'android':
|
||||
if s == 'android':
|
||||
platforms.append(Android())
|
||||
elif s == 'android-standalone':
|
||||
platforms.append(AndroidStandalone())
|
||||
elif s == 'bazel':
|
||||
platforms.append(Bazel())
|
||||
elif s == 'gn':
|
||||
platforms.append(GN())
|
||||
elif s == 'gyp':
|
||||
platforms.append(GYP())
|
||||
else:
|
||||
Usage()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user