You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.0 KiB
70 lines
2.0 KiB
4 months ago
|
#!/usr/bin/env python
|
||
|
# Copyright (c) 2018 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.
|
||
|
"""code generator for gpu workaround definitions"""
|
||
|
|
||
|
import os
|
||
|
import os.path
|
||
|
import sys
|
||
|
from optparse import OptionParser
|
||
|
|
||
|
_LICENSE = """// Copyright 2018 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.
|
||
|
|
||
|
"""
|
||
|
|
||
|
_DO_NOT_EDIT_WARNING = ("// This file is auto-generated from " +
|
||
|
os.path.basename(__file__) + "\n" +
|
||
|
"// DO NOT EDIT!\n\n")
|
||
|
|
||
|
def merge_files_into_workarounds(files):
|
||
|
workarounds = set()
|
||
|
for filename in files:
|
||
|
with open(filename, 'r') as f:
|
||
|
workarounds.update([workaround.strip() for workaround in f])
|
||
|
return sorted(list(workarounds))
|
||
|
|
||
|
|
||
|
def write_header(filename, workarounds):
|
||
|
max_workaround_len = len(max(workarounds, key=len))
|
||
|
|
||
|
with open(filename, 'w') as f:
|
||
|
f.write(_LICENSE)
|
||
|
f.write(_DO_NOT_EDIT_WARNING)
|
||
|
|
||
|
indent = ' '
|
||
|
macro = 'GPU_OP'
|
||
|
|
||
|
# length of max string passed to write + 1
|
||
|
max_len = len(indent) + len(macro) + 1 + max_workaround_len + 1 + 1
|
||
|
write = lambda line: f.write(line + ' ' * (max_len - len(line)) + '\\\n')
|
||
|
|
||
|
write('#define GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)')
|
||
|
for w in workarounds:
|
||
|
write(indent + macro + '(' + w.upper() + ',')
|
||
|
write(indent + ' ' * (len(macro) + 1) + w + ')')
|
||
|
|
||
|
# one extra line to consume the the last \
|
||
|
f.write('// The End\n')
|
||
|
|
||
|
|
||
|
def main(argv):
|
||
|
usage = "usage: %prog [options] file1 file2 file3 etc"
|
||
|
parser = OptionParser(usage=usage)
|
||
|
parser.add_option(
|
||
|
"--output-file",
|
||
|
dest="output_file",
|
||
|
default="gpu_driver_bug_workaround_autogen.h",
|
||
|
help="the name of the header file to write")
|
||
|
|
||
|
(options, _) = parser.parse_args(args=argv)
|
||
|
|
||
|
workarounds = merge_files_into_workarounds(parser.largs)
|
||
|
write_header(options.output_file, workarounds)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.exit(main(sys.argv[1:]))
|