build-qemu 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. import os
  3. import common
  4. class QemuComponent(self.Component):
  5. def add_parser_arguments(self, parser):
  6. parser.add_argument(
  7. '--userland',
  8. default=False,
  9. help='Build QEMU user mode instead of system.',
  10. )
  11. parser.add_argument(
  12. 'extra_config_args',
  13. default=[],
  14. metavar='extra-config-args',
  15. nargs='*'
  16. )
  17. def do_build(self, args):
  18. build_dir = self.get_build_dir(args)
  19. os.makedirs(build_dir, exist_ok=True)
  20. if kwargs['verbose']:
  21. verbose = ['V=1']
  22. else:
  23. verbose = []
  24. if kwargs['userland']:
  25. target_list = '{}-linux-user'.format(kwargs['arch'])
  26. else:
  27. target_list = '{}-softmmu'.format(kwargs['arch'])
  28. self.sh.run_cmd(
  29. [
  30. os.path.join(kwargs['qemu_src_dir'], 'configure'), LF,
  31. '--enable-debug', LF,
  32. '--enable-trace-backends=simple', LF,
  33. '--target-list={}'.format(target_list), LF,
  34. '--enable-sdl', LF,
  35. '--with-sdlabi=2.0', LF,
  36. ] +
  37. self.sh.add_newlines(kwargs['extra_config_args']),
  38. extra_paths=[kwargs['ccache_dir']],
  39. cwd=build_dir
  40. )
  41. self.sh.run_cmd(
  42. (
  43. [
  44. 'make', LF,
  45. '-j', str(kwargs['nproc']), LF,
  46. ] +
  47. verbose
  48. ),
  49. cwd=build_dir,
  50. extra_paths=[kwargs['ccache_dir']],
  51. )
  52. def get_build_dir(self, args):
  53. return kwargs['qemu_build_dir']
  54. if __name__ == '__main__':
  55. QemuComponent().build()