mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-13 20:12:26 +00:00
63 lines
1.9 KiB
Python
Executable File
63 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import shutil
|
|
|
|
import common
|
|
import shlex
|
|
from shell_helpers import LF
|
|
|
|
class Main(common.BuildCliFunction):
|
|
def __init__(self):
|
|
super().__init__(
|
|
description='''\
|
|
https://cirosantilli.com/linux-kernel-module-cheat#dhrystone
|
|
'''
|
|
)
|
|
self._add_argument('--ccflags')
|
|
self._add_argument('--force-rebuild')
|
|
self._add_argument('--optimization-level')
|
|
|
|
def setup(self, env):
|
|
self.root_relpath = os.path.join('submodules', 'dhrystone')
|
|
|
|
def build(self):
|
|
build_dir = self.get_build_dir()
|
|
cflags = ['-O{}'.format(self.env['optimization_level'])]
|
|
extra_flags = []
|
|
if self.env['static']:
|
|
cflags.extend(['-static'])
|
|
if self.env['force_rebuild']:
|
|
extra_flags.extend(['-B', LF])
|
|
if self.env['mode'] == 'baremetal':
|
|
extra_objs = [
|
|
self.env['baremetal_syscalls_obj'],
|
|
self.env['baremetal_syscalls_asm_obj']
|
|
]
|
|
else:
|
|
extra_objs = []
|
|
ret = self.sh.run_cmd(
|
|
[
|
|
'make', LF,
|
|
'-j', str(self.env['nproc']), LF,
|
|
'-C', os.path.join(self.env['submodules_dir'], 'dhrystone'), LF,
|
|
'CC={}'.format(self.env['gcc_path']), LF,
|
|
'CFLAGS={}'.format(' '.join(cflags)), LF,
|
|
'EXTRA_OBJS={}'.format(' '.join(extra_objs)), LF,
|
|
'OUT_DIR={}'.format(build_dir), LF,
|
|
]
|
|
+ extra_flags
|
|
)
|
|
if ret == 0 and self.env['mode'] == 'userland':
|
|
self.sh.copy_file_if_update(
|
|
os.path.join(build_dir, 'dhrystone'),
|
|
os.path.join(self.env['out_rootfs_overlay_lkmc_dir'], self.root_relpath, 'dhrystone'),
|
|
)
|
|
return ret
|
|
|
|
def get_build_dir(self):
|
|
return os.path.join(self.env['build_dir'], self.root_relpath)
|
|
|
|
if __name__ == '__main__':
|
|
Main().cli()
|