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):
|
class Android(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -284,6 +214,148 @@ class Bazel(object):
|
|||||||
out.write(' )\n')
|
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):
|
def FindCMakeFiles(directory):
|
||||||
"""Returns list of all CMakeLists.txt files recursively in directory."""
|
"""Returns list of all CMakeLists.txt files recursively in directory."""
|
||||||
cmakefiles = []
|
cmakefiles = []
|
||||||
@ -457,7 +529,7 @@ def WriteAsmFiles(perlasms):
|
|||||||
def main(platforms):
|
def main(platforms):
|
||||||
crypto_c_files = FindCFiles(os.path.join('src', 'crypto'), NoTests)
|
crypto_c_files = FindCFiles(os.path.join('src', 'crypto'), NoTests)
|
||||||
ssl_c_files = FindCFiles(os.path.join('src', 'ssl'), 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
|
# Generate err_data.c
|
||||||
with open('err_data.c', 'w+') as err_data:
|
with open('err_data.c', 'w+') as err_data:
|
||||||
@ -466,12 +538,14 @@ def main(platforms):
|
|||||||
stdout=err_data)
|
stdout=err_data)
|
||||||
crypto_c_files.append('err_data.c')
|
crypto_c_files.append('err_data.c')
|
||||||
|
|
||||||
test_support_cc_files = FindCFiles(os.path.join('src', 'crypto', 'test'),
|
test_support_c_files = FindCFiles(os.path.join('src', 'crypto', 'test'),
|
||||||
AllFiles)
|
AllFiles)
|
||||||
|
|
||||||
test_c_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests)
|
test_c_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests)
|
||||||
test_c_files += FindCFiles(os.path.join('src', 'ssl'), OnlyTests)
|
test_c_files += FindCFiles(os.path.join('src', 'ssl'), OnlyTests)
|
||||||
|
|
||||||
|
fuzz_c_files = FindCFiles(os.path.join('src', 'fuzz'), NoTests)
|
||||||
|
|
||||||
ssl_h_files = (
|
ssl_h_files = (
|
||||||
FindHeaderFiles(
|
FindHeaderFiles(
|
||||||
os.path.join('src', 'include', 'openssl'),
|
os.path.join('src', 'include', 'openssl'),
|
||||||
@ -511,12 +585,13 @@ def main(platforms):
|
|||||||
'crypto': crypto_c_files,
|
'crypto': crypto_c_files,
|
||||||
'crypto_headers': crypto_h_files,
|
'crypto_headers': crypto_h_files,
|
||||||
'crypto_internal_headers': crypto_internal_h_files,
|
'crypto_internal_headers': crypto_internal_h_files,
|
||||||
|
'fuzz': fuzz_c_files,
|
||||||
'ssl': ssl_c_files,
|
'ssl': ssl_c_files,
|
||||||
'ssl_headers': ssl_h_files,
|
'ssl_headers': ssl_h_files,
|
||||||
'ssl_internal_headers': ssl_internal_h_files,
|
'ssl_internal_headers': ssl_internal_h_files,
|
||||||
'tool': tool_cc_files,
|
'tool': tool_c_files,
|
||||||
'test': test_c_files,
|
'test': test_c_files,
|
||||||
'test_support': test_support_cc_files,
|
'test_support': test_support_c_files,
|
||||||
'tests': tests,
|
'tests': tests,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,7 +604,7 @@ def main(platforms):
|
|||||||
|
|
||||||
|
|
||||||
def Usage():
|
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)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
@ -539,14 +614,16 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
platforms = []
|
platforms = []
|
||||||
for s in sys.argv[1:]:
|
for s in sys.argv[1:]:
|
||||||
if s == 'chromium' or s == 'gyp':
|
if s == 'android':
|
||||||
platforms.append(Chromium())
|
|
||||||
elif s == 'android':
|
|
||||||
platforms.append(Android())
|
platforms.append(Android())
|
||||||
elif s == 'android-standalone':
|
elif s == 'android-standalone':
|
||||||
platforms.append(AndroidStandalone())
|
platforms.append(AndroidStandalone())
|
||||||
elif s == 'bazel':
|
elif s == 'bazel':
|
||||||
platforms.append(Bazel())
|
platforms.append(Bazel())
|
||||||
|
elif s == 'gn':
|
||||||
|
platforms.append(GN())
|
||||||
|
elif s == 'gyp':
|
||||||
|
platforms.append(GYP())
|
||||||
else:
|
else:
|
||||||
Usage()
|
Usage()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user