mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-13 20:12:26 +00:00
This in particular had broken ./build --download-dependencies -aA -aa -ax all not sure why, but there must be a change in directory somewhere then. The only chdir we do in this repo was for ctng crap, I'm also restoring that chdir back after we are done.
92 lines
3.2 KiB
Python
Executable File
92 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
|
|
import common
|
|
from shell_helpers import LF
|
|
|
|
class Main(common.BuildCliFunction):
|
|
def __init__(self):
|
|
super().__init__(
|
|
defaults={
|
|
'mode': 'baremetal',
|
|
},
|
|
description='''\
|
|
Build crosstool-NG with Newlib for bare metal compilation
|
|
''',
|
|
)
|
|
|
|
def build(self):
|
|
build_dir = self.get_build_dir()
|
|
defconfig_dest = os.path.join(self.env['crosstool_ng_source_copy_dir'], 'defconfig')
|
|
os.makedirs(self.env['crosstool_ng_download_dir'], exist_ok=True)
|
|
|
|
# Bootstrap out-ot-tree WONTFIX. I've tried.
|
|
# https://github.com/crosstool-ng/crosstool-ng/issues/1021
|
|
#
|
|
# Then out-of-tree ./ctng usage also started to fail in 1.24.0.
|
|
#
|
|
# So instead of fighting upstream, I'll just take the Buildroot approach
|
|
# to life and rsync the entire source tree into the build tree. Fun times.
|
|
self.sh.copy_dir_if_update(
|
|
self.env['crosstool_ng_source_dir'],
|
|
self.env['crosstool_ng_source_copy_dir'],
|
|
)
|
|
self.sh.run_cmd(
|
|
[os.path.join(self.env['crosstool_ng_source_copy_dir'], 'bootstrap'), LF],
|
|
cwd=self.env['crosstool_ng_source_copy_dir'],
|
|
)
|
|
self.sh.run_cmd(
|
|
[
|
|
# abspath here makes Ubuntu 16.04 fail with:
|
|
# configure: error: source directory already configured; run "make distclean" there first
|
|
# after another build has been done. Don't ask me why.
|
|
os.path.join(os.curdir, 'configure'), LF,
|
|
'--enable-local', LF,
|
|
],
|
|
cwd=self.env['crosstool_ng_source_copy_dir'],
|
|
)
|
|
self.sh.run_cmd(
|
|
['make', '-j', str(self.env['nproc']), LF],
|
|
cwd=self.env['crosstool_ng_source_copy_dir'],
|
|
)
|
|
|
|
# Build the toolchain.
|
|
self.sh.cp(
|
|
os.path.join(self.env['root_dir'], 'crosstool_ng_config', self.env['arch']),
|
|
defconfig_dest
|
|
)
|
|
self.sh.write_configs(
|
|
self.env['crosstool_ng_defconfig'],
|
|
[
|
|
'CT_PREFIX_DIR="{}"'.format(self.env['crosstool_ng_install_dir']),
|
|
'CT_WORK_DIR="{}"'.format(build_dir),
|
|
'CT_LOCAL_TARBALLS_DIR="{}"'.format(self.env['crosstool_ng_download_dir']),
|
|
]
|
|
)
|
|
self.sh.run_cmd(
|
|
[
|
|
self.env['crosstool_ng_executable'], LF,
|
|
'defconfig', LF,
|
|
],
|
|
cwd=self.env['crosstool_ng_source_copy_dir'],
|
|
)
|
|
self.sh.rmrf(defconfig_dest)
|
|
self.sh.run_cmd(
|
|
[
|
|
self.env['crosstool_ng_executable'], LF,
|
|
'build', LF,
|
|
'CT_JOBS={}'.format(str(self.env['nproc'])), LF,
|
|
],
|
|
cwd=self.env['crosstool_ng_source_copy_dir'],
|
|
out_file=os.path.join(build_dir, self.env['repo_short_id'] + '.log'),
|
|
delete_env=['LD_LIBRARY_PATH'],
|
|
extra_paths=[self.env['ccache_dir']],
|
|
)
|
|
|
|
def get_build_dir(self):
|
|
return self.env['crosstool_ng_build_dir']
|
|
|
|
if __name__ == '__main__':
|
|
Main().cli()
|