#!/usr/bin/env python3 import os import common from shell_helpers import LF class Main(common.BuildCliFunction): def _get_make_cmd(self): allowed_toolchains = ['buildroot'] if self.env['arch'] == 'x86_64': arch = 'x86' else: arch = self.env['arch'] return [ 'make', LF, '-j', str(self.env['nproc']), LF, '-f', 'Makefile.{}'.format(arch), LF, 'CC={}'.format(self.env['gcc_path']), LF, 'CROSS_COMPILE={}'.format(self.env['toolchain_prefix_dash']), LF, 'LD={}'.format(self.env['ld_path']), LF, 'PWD={}'.format(self.env['gem5_m5_source_dir']), LF, ] def build(self): os.makedirs(self.env['gem5_m5_build_dir'], exist_ok=True) # 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(), cwd=self.env['gem5_m5_source_dir'], ) os.makedirs(self.env['out_rootfs_overlay_bin_dir'], exist_ok=True) self.sh.cp( os.path.join(self.env['gem5_m5_source_dir'], 'm5'), self.env['out_rootfs_overlay_bin_dir'] ) def clean(self): self.sh.run_cmd( self._get_make_cmd() + ['clean', LF], cwd=self.env['gem5_m5_source_dir'], ) return None if __name__ == '__main__': Main().cli()