diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000000..a2a67d5ec0 --- /dev/null +++ b/Android.bp @@ -0,0 +1,32 @@ +headers_src = [ + "include/uapi/*/**/*.h", +] + +video_headers_out = [ + "vidc/media/v4l2_vidc_extensions.h", +] + +video_kernel_headers_verbose = "--verbose " +genrule { + name: "qti_generate_video_kernel_headers", + tools: ["headers_install.sh"], + tool_files: [ + "video_kernel_headers.py", + ], + srcs: headers_src, + cmd: "python3 -u $(location video_kernel_headers.py) " + + video_kernel_headers_verbose + + "--header_arch arm64 " + + "--gen_dir $(genDir) " + + "--video_include_uapi $(locations include/uapi/*/**/*.h) " + + "--headers_install $(location headers_install.sh)", + out: video_headers_out, +} + +cc_library_headers { + name: "qti_video_kernel_uapi", + generated_headers: ["qti_generate_video_kernel_headers"], + export_generated_headers: ["qti_generate_video_kernel_headers"], + vendor: true, + recovery_available: true +} diff --git a/video_kernel_headers.py b/video_kernel_headers.py new file mode 100644 index 0000000000..3046ca60a1 --- /dev/null +++ b/video_kernel_headers.py @@ -0,0 +1,88 @@ +# Copyright (c) 2020, The Linux Foundation. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 as published by +# the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . + +import argparse +import filecmp +import os +import re +import subprocess +import sys + +def run_headers_install(verbose, gen_dir, headers_install, prefix, h): + if not h.startswith(prefix): + print('error: expected prefix [%s] on header [%s]' % (prefix, h)) + return False + + out_h = os.path.join(gen_dir, h[len(prefix):]) + (out_h_dirname, out_h_basename) = os.path.split(out_h) + cmd = ["bash", headers_install, h, out_h] + + if verbose: + print('run_headers_install: cmd is %s' % cmd) + + result = subprocess.call(cmd) + + if result != 0: + print('error: run_headers_install: cmd %s failed %d' % (cmd, result)) + return False + return True + +def gen_video_headers(verbose, gen_dir, headers_install, video_include_uapi): + error_count = 0 + for h in video_include_uapi: + video_uapi_include_prefix = os.path.join(h.split('/include/uapi/')[0], + 'include', + 'uapi') + os.sep + + if not run_headers_install( + verbose, gen_dir, headers_install, + video_uapi_include_prefix, h): error_count += 1 + return error_count + +def main(): + """Parse command line arguments and perform top level control.""" + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + # Arguments that apply to every invocation of this script. + parser.add_argument( + '--verbose', action='store_true', + help='Print output that describes the workings of this script.') + parser.add_argument( + '--header_arch', required=True, + help='The arch for which to generate headers.') + parser.add_argument( + '--gen_dir', required=True, + help='Where to place the generated files.') + parser.add_argument( + '--video_include_uapi', required=True, nargs='*', + help='The list of techpack/*/include/uapi header files.') + parser.add_argument( + '--headers_install', required=True, + help='The headers_install tool to process input headers.') + + args = parser.parse_args() + + if args.verbose: + print('header_arch [%s]' % args.header_arch) + print('gen_dir [%s]' % args.gen_dir) + print('video_include_uapi [%s]' % args.video_include_uapi) + print('headers_install [%s]' % args.headers_install) + + return gen_video_headers(args.verbose, args.gen_dir, + args.headers_install, args.video_include_uapi) + +if __name__ == '__main__': + sys.exit(main())