Example #1
0
 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']))
Example #2
0
    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)
Example #3
0
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))
Example #4
0
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))