def set_target_machine(self, machine): self._target_arch = get_machine_info(machine) logger.info('Cross compiling kernel target {!r}'.format( self._target_arch['kernel'])) self.build_packages.extend(self._target_arch['cross-build-packages']) self.make_cmd.append('ARCH={}'.format(self._target_arch['kernel'])) self.make_cmd.append('CROSS_COMPILE={}'.format( self._target_arch['cross-compiler-prefix']))
def __init__(self, name, options): super().__init__(name, options) self.make_targets = [self.options.kernel_image_target, 'modules'] self.dtbs = ['{}.dtb'.format(i) for i in self.options.kernel_device_trees] if self.dtbs: self.make_targets.extend(self.dtbs) self.make_install_targets = [ 'modules_install', 'INSTALL_MOD_PATH={}'.format(self.installdir)] self.make_install_targets.extend(self._get_fw_install_targets()) self.os_snap = os.path.join(self.sourcedir, 'os.snap') self._target_arch = get_machine_info(target_machine)
def _get_include_paths(envvar, root): machine_info = common.get_machine_info(common.target_machine) paths = [ os.path.join(root, 'include'), os.path.join(root, 'usr', 'include'), os.path.join(root, 'include', machine_info['triplet']), os.path.join(root, 'usr', 'include', machine_info['triplet']), ] include_paths = ['-I{}'.format(p) for p in paths if os.path.exists(p)] if not include_paths: return '' else: return '{envvar}="{include_paths} ${envvar}"'.format( envvar=envvar, include_paths=' '.join(include_paths))
def _get_library_paths(envvar, root, prepend='-L', sep=' '): machine_info = common.get_machine_info(common.target_machine) paths = [ os.path.join(root, 'lib'), os.path.join(root, 'usr', 'lib'), os.path.join(root, 'lib', machine_info['triplet']), os.path.join(root, 'usr', 'lib', machine_info['triplet']), ] library_paths = ['{}{}'.format(prepend, l) for l in paths if os.path.exists(l)] if not library_paths: return '' else: return '{envvar}="{library_paths}{sep}${envvar}"'.format( envvar=envvar, sep=sep, library_paths=sep.join(library_paths))
def create_assets(): build_arch_path = os.path.join( builddir, 'arch', get_machine_info(platform.machine())['kernel'], 'boot') initrd_path = os.path.join( installdir, 'initrd-{}.img'.format(kernel_version)) release_path = os.path.join( builddir, 'include', 'config', 'kernel.release') kernel_path = os.path.join( build_arch_path, self.options.kernel_image_target) system_map_path = os.path.join(builddir, 'System.map') modules_dep_path = os.path.join( installdir, 'lib', 'modules', kernel_version, 'modules.dep') modules_dep_bin_path = '{}.bin'.format(modules_dep_path) fw_bin_path = os.path.join( installdir, 'lib', 'firmware', 'fake-fw.bin') os.makedirs(os.path.join( installdir, 'lib', 'firmware', 'fake-fw-dir')) dtb_path = os.path.join(build_arch_path, 'dts', 'fake-dtb.dtb') os.makedirs(os.path.dirname(release_path)) with open(release_path, 'w') as f: if do_release: f.write('{}\n'.format(kernel_version)) else: f.write('\n') files = [initrd_path, modules_dep_path, modules_dep_bin_path, fw_bin_path] if do_kernel: files.append(kernel_path) if do_system_map: files.append(system_map_path) if do_dtbs: files.append(dtb_path) for f in files: os.makedirs(os.path.dirname(f), exist_ok=True) open(f, 'w').close()
def test_build_with_missing_kernel_fails(self): self.options.kconfigfile = 'config' with open(self.options.kconfigfile, 'w') as f: f.write('ACCEPT=y\n') plugin = kernel.KernelPlugin('test-part', self.options) self._simulate_build( plugin.sourcedir, plugin.builddir, plugin.installdir, do_kernel=False) with self.assertRaises(ValueError) as raised: plugin.build() self.assertEqual( 'kernel build did not output a vmlinux binary in top level dir, ' 'expected {!r}'.format(os.path.join( plugin.builddir, 'arch', get_machine_info(platform.machine())['kernel'], 'boot', 'bzImage')), str(raised.exception))