#!/usr/bin/env python3 import common from shell_helpers import LF class Main(common.BuildCliFunction): def __init__(self): super().__init__( description='''\ Build the gem5 m5 executable. See: https://cirosantilli.com/linux-kernel-module-cheat#gem5-m5-executable ''' ) def _get_make_cmd(self): allowed_toolchains = ['buildroot'] return [ 'scons', LF, '-C', self.env['gem5_m5_source_dir'], LF, '-j', str(self.env['nproc']), LF, 'CROSS_COMPILE={}'.format(self.env['toolchain_prefix_dash']), LF, self.env['gem5_m5_source_dir_build'], LF ] def build(self): self.sh.mkdir_p(self.env['gem5_m5_build_dir']) # We must clean first or else the build outputs of one arch can conflict with the other. # I should stop being lazy and go actually patch gem5 to support out of tree m5 build... self.clean() self.sh.run_cmd( self._get_make_cmd(), ) self.sh.mkdir_p(self.env['out_rootfs_overlay_bin_dir']) self.sh.cp( self.env['gem5_m5_source_dir_build'], self.env['out_rootfs_overlay_bin_dir'] ) def clean(self): self.sh.run_cmd( self._get_make_cmd() + ['--clean', LF], ) if __name__ == '__main__': Main().cli()