#!/usr/bin/env python3 import os import common class CrosstoolNgComponent(common.Component): def do_build(self, args): common.raise_no_x86(args.arch) build_dir = self.get_build_dir(args) defconfig_dest = os.path.join(common.crosstool_ng_util_dir, 'defconfig') os.makedirs(common.crosstool_ng_util_dir, exist_ok=True) os.makedirs(common.crosstool_ng_download_dir, exist_ok=True) # Bootstrap out-ot-tree WONTFIX. I've tried. # https://github.com/crosstool-ng/crosstool-ng/issues/1021 os.chdir(common.crosstool_ng_src_dir) common.run_cmd( [os.path.join(common.crosstool_ng_src_dir, 'bootstrap'), common.Newline], ) os.chdir(common.crosstool_ng_util_dir) common.run_cmd( [ os.path.join(common.crosstool_ng_src_dir, 'configure'), common.Newline, '--enable-local', common.Newline, ], ) common.run_cmd( [ 'make', common.Newline, '-j', str(args.nproc), common.Newline, ], ) # Build the toolchain. common.cp( os.path.join(common.root_dir, 'crosstool_ng_config', args.arch), defconfig_dest ) common.write_configs( common.crosstool_ng_defconfig, [ 'CT_PREFIX_DIR="{}"'.format(common.crosstool_ng_install_dir), 'CT_WORK_DIR="{}"'.format(build_dir), 'CT_LOCAL_TARBALLS_DIR="{}"'.format(common.crosstool_ng_download_dir), ] ) common.run_cmd( [ common.crosstool_ng_executable, common.Newline, 'defconfig', common.Newline, ], ) os.unlink(defconfig_dest) common.run_cmd( [ common.crosstool_ng_executable, common.Newline, 'build', common.Newline, 'CT_JOBS={}'.format(str(args.nproc)), common.Newline, ], out_file=os.path.join(build_dir, 'lkmc.log'), delete_env=['LD_LIBRARY_PATH'], extra_paths=[common.ccache_dir], ) def get_argparse_args(self): return { 'description': '''\ Build crosstool-NG with Newlib for bare metal compilation' ''' } def get_build_dir(self, args): return common.crosstool_ng_build_dir if __name__ == '__main__': CrosstoolNgComponent().build()