diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000000..872e636f98 --- /dev/null +++ b/Android.bp @@ -0,0 +1,36 @@ +headers_src = [ + "include/uapi/*/**/*.h", +] + +display_headers_out = [ + "display/drm/msm_drm_pp.h", + "display/drm/sde_drm.h", + "display/hdcp/msm_hdmi_hdcp_mgr.h", + "display/media/mmm_color_fmt.h", + "display/media/msm_sde_rotator.h", +] + +display_kernel_headers_verbose = "--verbose " +genrule { + name: "qti_generate_display_kernel_headers", + tools: ["headers_install.sh"], + tool_files: [ + "display_kernel_headers.py", + ], + srcs: headers_src, + cmd: "python3 $(location display_kernel_headers.py) " + + display_kernel_headers_verbose + + "--header_arch arm64 " + + "--gen_dir $(genDir) " + + "--display_include_uapi $(locations include/uapi/*/**/*.h) " + + "--headers_install $(location headers_install.sh)", + out: display_headers_out, +} + +cc_library_headers { + name: "qti_display_kernel_headers", + generated_headers: ["qti_generate_display_kernel_headers"], + export_generated_headers: ["qti_generate_display_kernel_headers"], + vendor: true, + recovery_available: true +} diff --git a/display_kernel_headers.py b/display_kernel_headers.py new file mode 100644 index 0000000000..07be2ea35d --- /dev/null +++ b/display_kernel_headers.py @@ -0,0 +1,86 @@ + # Copyright (c) 2020-2021, 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_display_headers(verbose, gen_dir, headers_install, display_include_uapi): + error_count = 0 + for h in display_include_uapi: + display_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, + display_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( + '--display_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('display_include_uapi [%s]' % args.display_include_uapi) + print('headers_install [%s]' % args.headers_install) + + return gen_display_headers(args.verbose, args.gen_dir, + args.headers_install, args.display_include_uapi) + +if __name__ == '__main__': + sys.exit(main()) +