ipa_kernel_headers.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # SPDX-License-Identifier: GPL-2.0-only
  2. # Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  3. import argparse
  4. import filecmp
  5. import os
  6. import re
  7. import subprocess
  8. import sys
  9. def run_headers_install(verbose, gen_dir, headers_install, unifdef, prefix, h):
  10. if not h.startswith(prefix):
  11. print('error: expected prefix [%s] on header [%s]' % (prefix, h))
  12. return False
  13. out_h = os.path.join(gen_dir, h[len(prefix):])
  14. (out_h_dirname, out_h_basename) = os.path.split(out_h)
  15. env = os.environ.copy()
  16. env["LOC_UNIFDEF"] = unifdef
  17. cmd = ["sh", headers_install, h, out_h]
  18. if verbose:
  19. print('run_headers_install: cmd is %s' % cmd)
  20. result = subprocess.call(cmd, env=env)
  21. if result != 0:
  22. print('error: run_headers_install: cmd %s failed %d' % (cmd, result))
  23. return False
  24. return True
  25. def gen_ipa_headers(verbose, gen_dir, headers_install, unifdef, ipa_include_uapi):
  26. error_count = 0
  27. for h in ipa_include_uapi:
  28. ipa_uapi_include_prefix = os.path.join(h.split('/include/uapi/')[0],
  29. 'include',
  30. 'uapi') + os.sep
  31. if not run_headers_install(
  32. verbose, gen_dir, headers_install, unifdef,
  33. ipa_uapi_include_prefix, h): error_count += 1
  34. return error_count
  35. def main():
  36. """Parse command line arguments and perform top level control."""
  37. parser = argparse.ArgumentParser(
  38. description=__doc__,
  39. formatter_class=argparse.RawDescriptionHelpFormatter)
  40. # Arguments that apply to every invocation of this script.
  41. parser.add_argument(
  42. '--verbose', action='store_true',
  43. help='Print output that describes the workings of this script.')
  44. parser.add_argument(
  45. '--gen_dir', required=True,
  46. help='Where to place the generated files.')
  47. parser.add_argument(
  48. '--ipa_include_uapi', required=True, nargs='*',
  49. help='The list of header files.')
  50. parser.add_argument(
  51. '--headers_install', required=True,
  52. help='The headers_install tool to process input headers.')
  53. parser.add_argument(
  54. '--unifdef',
  55. required=True,
  56. help='The unifdef tool used by headers_install.')
  57. args = parser.parse_args()
  58. if args.verbose:
  59. print('gen_dir [%s]' % args.gen_dir)
  60. print('ipa_include_uapi [%s]' % args.ipa_include_uapi)
  61. print('headers_install [%s]' % args.headers_install)
  62. print('unifdef [%s]' % args.unifdef)
  63. return gen_ipa_headers(args.verbose, args.gen_dir,
  64. args.headers_install, args.unifdef, args.ipa_include_uapi)
  65. if __name__ == '__main__':
  66. sys.exit(main())