build-dhrystone 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. import os
  3. import shutil
  4. import common
  5. import shlex
  6. from shell_helpers import LF
  7. class Main(common.BuildCliFunction):
  8. def __init__(self):
  9. super().__init__(
  10. description='''\
  11. https://cirosantilli.com/linux-kernel-module-cheat#dhrystone
  12. '''
  13. )
  14. self._add_argument('--ccflags')
  15. self._add_argument('--force-rebuild')
  16. self._add_argument('--optimization-level')
  17. def setup(self, env):
  18. self.root_relpath = os.path.join('submodules', 'dhrystone')
  19. def build(self):
  20. build_dir = self.get_build_dir()
  21. cflags = ['-O{}'.format(self.env['optimization_level'])]
  22. extra_flags = []
  23. if self.env['static']:
  24. cflags.extend(['-static'])
  25. if self.env['force_rebuild']:
  26. extra_flags.extend(['-B', LF])
  27. if self.env['mode'] == 'baremetal':
  28. extra_objs = [
  29. self.env['baremetal_syscalls_obj'],
  30. self.env['baremetal_syscalls_asm_obj']
  31. ]
  32. else:
  33. extra_objs = []
  34. ret = self.sh.run_cmd(
  35. [
  36. 'make', LF,
  37. '-j', str(self.env['nproc']), LF,
  38. '-C', os.path.join(self.env['submodules_dir'], 'dhrystone'), LF,
  39. 'CC={}'.format(self.env['gcc_path']), LF,
  40. 'CFLAGS_EXTRA={}'.format(' '.join(cflags)), LF,
  41. 'EXTRA_OBJS={}'.format(' '.join(extra_objs)), LF,
  42. 'OUT_DIR={}'.format(build_dir), LF,
  43. ]
  44. + extra_flags
  45. )
  46. if ret == 0 and self.env['copy_overlay']:
  47. self.sh.copy_file_if_update(
  48. os.path.join(build_dir, 'dhrystone'),
  49. os.path.join(self.env['out_rootfs_overlay_lkmc_dir'], self.root_relpath, 'dhrystone'),
  50. )
  51. return ret
  52. def get_build_dir(self):
  53. return os.path.join(self.env['build_dir'], self.root_relpath)
  54. if __name__ == '__main__':
  55. Main().cli()