diff --git a/.cirrus.expect b/.cirrus.expect index e83288c..9a9ee41 100755 --- a/.cirrus.expect +++ b/.cirrus.expect @@ -6,7 +6,7 @@ set timeout -1 -spawn ./rootfs.sh qemu-system-x86_64 3500M +spawn python3 rootfs.py --qemu-cmd qemu-system-x86_64 --qemu-ram 3500 expect { "not syncing: Attempted to kill init" {} "Bootstrapping completed." {} diff --git a/.cirrus.yml b/.cirrus.yml index a729146..b8fef13 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,7 +1,19 @@ # SPDX-FileCopyrightText: 2021 fosslinux +# SPDX-FileCopyrightText: 2021 Andrius Štikonas # # SPDX-License-Identifier: GPL-3.0-or-later +pylint_task: + container: + image: debian:bullseye + deps_script: + - apt-get -y update + - apt-get -y dist-upgrade + - apt-get -y install python3-requests pylint + - apt-get -y clean + check_script: + - pylint rootfs.py sysa.py lib/utils.py + shell_lint_task: container: image: debian:stable diff --git a/.gitignore b/.gitignore index 958a1c5..deae682 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ tmp/ kernel sources/ +__pycache__ diff --git a/lib/utils.py b/lib/utils.py new file mode 100755 index 0000000..ca256dc --- /dev/null +++ b/lib/utils.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +""" +This file contains a few self-contained helper functions +""" + +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2021 Andrius Štikonas + +import os +import shutil +import subprocess +import sys + + +def run(*args, **kwargs): + """A small wrapper around subprocess.run""" + arguments = [str(arg) for arg in args] + + if kwargs.pop('verbose', False): + print(arguments) + + try: + subprocess.run(arguments, check=True, **kwargs) + except subprocess.CalledProcessError: + print("Bootstrapping failed") + sys.exit(1) + +def mount(source, target, fs_type, options='', **kwargs): + """Mount filesystem""" + run('sudo', 'mount', source, target, '-t', fs_type, '-o', options, **kwargs) + +def umount(target, **kwargs): + """Unmount filesystem""" + run('sudo', 'umount', target, **kwargs) + +def copytree(src, dst, ignore=shutil.ignore_patterns('*.git*')): + """Copy directory tree into another directory""" + file_name = os.path.basename(src) + shutil.copytree(src, os.path.join(dst, file_name), ignore=ignore) + +def get_target(file_name): + """Determine package installation directory""" + bname = os.path.basename(file_name) + + # Remove file extension. This is not completely trivial because + # tar archives often come with double extensions. + first_ext = os.path.splitext(os.path.basename(bname)) + second_ext = os.path.splitext(first_ext[0]) + if second_ext[1] == '.tar': + bname = second_ext[0] + else: + bname = first_ext[0] + return bname diff --git a/rootfs.py b/rootfs.py new file mode 100755 index 0000000..7d748c1 --- /dev/null +++ b/rootfs.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +""" +A helper application used to start bootstrapping process. +It has a few modes of operation, you can create initramfs with +binary seeds and sources that you can boot into or alternatively +you can run bootstap inside chroot. +""" + +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2021 Andrius Štikonas + +import argparse +import glob +import os +import subprocess + +from sysa import SysA +from lib.utils import run + +def main(): + """ + A few command line arguments to customize bootstrap. + This function also creates SysA object which prepares directory + structure with bootstrap seeds and all sources. + """ + parser = argparse.ArgumentParser() + parser.add_argument("-a", "--arch", help="Bootstrap architecture", + default="x86") + parser.add_argument("-c", "--chroot", help="Run inside chroot", + action="store_true") + parser.add_argument("-p", "--preserve", help="Do not unmount temporary dir", + action="store_true") + parser.add_argument("-t", "--tmpdir", help="Temporary directory") + + # QEMU arguments + parser.add_argument("-q", "--qemu-cmd", help="QEMU command", + default="qemu-system-x86_64") + parser.add_argument("-r", "--qemu-ram", help="Memory (in megabytes) allocated to QEMU VM", + default=8000) + parser.add_argument("-k", "--kernel", help="Kernel to use (default is ./kernel)", + default="kernel") + + parser.add_argument("-m", "--minikernel", help="Use minikernel", + action="store_true") + + args = parser.parse_args() + if args.chroot and args.minikernel: + raise ValueError("chroot and minikernel options cannot be used simultaneously.") + + if args.arch != "x86": + raise ValueError("Only x86 is supported at the moment.") + + system_a = SysA(arch=args.arch, preserve_tmp=args.preserve, tmpdir=args.tmpdir) + initramfs_path = os.path.join(system_a.tmp_dir, "initramfs") + + if not args.chroot: + make_initramfs(system_a.tmp_dir, initramfs_path) + + bootstrap(args, system_a.tmp_dir, initramfs_path) + +def make_initramfs(tmp_dir, initramfs_path): + """Package binary bootstrap seeds and sources into initramfs.""" + file_list = glob.glob(os.path.join(tmp_dir, '**'), recursive=True) + + # Use built-in removeprefix once we can use Python 3.9 + def remove_prefix(text, prefix): + if text.startswith(prefix): + return text[len(prefix):] + return text # or whatever + + file_list = [remove_prefix(f, tmp_dir + os.sep) for f in file_list] + + with open(initramfs_path, "w") as initramfs: + cpio = subprocess.Popen(["cpio", "--format", "newc", "--create", "--directory", tmp_dir], + stdin=subprocess.PIPE, stdout=initramfs) + cpio.communicate(input='\n'.join(file_list).encode()) + +def bootstrap(args, tmp_dir, initramfs_path): + """Kick off bootstrap process.""" + print("Bootstrapping %s" % (args.arch)) + if args.chroot: + init = os.path.join(os.sep, 'bootstrap-seeds', 'POSIX', args.arch, 'kaem-optional-seed') + run('sudo', 'env', '-i', 'PATH=/bin', 'chroot', tmp_dir, init) + return + + if args.minikernel: + run('git', 'clone', '--depth', '1', '--branch', 'v0.4', + 'https://github.com/bittorf/kritis-linux.git') + run('kritis-linux/ci_helper.sh', '--arch', 'x86_64', '--ramsize', + '-m', str(args.qemu_ram) + 'M', '--kernel', '5.10.8', '--initrd', initramfs_path) + return + + run(args.qemu_cmd, + '-enable-kvm', + '-m', str(args.qemu_ram) + 'M', + '-nographic', + '-no-reboot', + '-kernel', args.kernel, + '-initrd', initramfs_path, + '-append', "console=ttyS0") + +if __name__=="__main__": + main() diff --git a/sysa.py b/sysa.py new file mode 100755 index 0000000..b03ce0b --- /dev/null +++ b/sysa.py @@ -0,0 +1,445 @@ +#!/usr/bin/env python3 +"""System A""" +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2021 Andrius Štikonas + +import hashlib +import os +from distutils.dir_util import copy_tree +import shutil + +import requests + +from lib.utils import mount, umount, copytree, run, get_target + + +class SysA: + """ + Class responsible for preparing sources for System A. + """ + def __init__(self, arch, preserve_tmp, tmpdir): + self.git_dir = os.path.dirname(os.path.join(__file__)) + self.arch = arch + self.preserve_tmp = preserve_tmp + + if tmpdir is None: + self.tmp_dir = os.path.join(self.git_dir, 'sysa', 'tmp') + else: + self.tmp_dir = tmpdir + self.sysa_dir = os.path.join(self.git_dir, 'sysa') + self.after_dir = os.path.join(self.tmp_dir, 'after') + + self.prepare() + + def __del__(self): + if not self.preserve_tmp: + print("Unmounting tmpfs from %s" % (self.tmp_dir)) + umount(self.tmp_dir) + os.rmdir(self.tmp_dir) + + def check_file(self, file_name): + """Check hash of downloaded source file.""" + checksum_store = os.path.join(self.git_dir, 'SHA256SUMS.sources') + with open(checksum_store) as checksum_file: + hashes = checksum_file.read().splitlines() + for hash_line in hashes: + if os.path.basename(file_name) in hash_line: + # Hash is in store, check it + expected_hash = hash_line.split()[0] + + with open(file_name, "rb") as downloaded_file: + downloaded_content = downloaded_file.read() # read entire file as bytes + readable_hash = hashlib.sha256(downloaded_content).hexdigest() + if expected_hash == readable_hash: + return + raise Exception("Checksum mismatch") + + raise Exception("File checksum is not yet recorded") + + def download_file(self, url, file_name=None): + """ + Download a single source archive. + """ + cache_dir = os.path.join(self.git_dir, 'sources') + + # Automatically determine file name based on URL. + if file_name is None: + file_name = os.path.basename(url) + abs_file_name = os.path.join(cache_dir, file_name) + + # Create a cache directory for downloaded sources + if not os.path.isdir(cache_dir): + os.mkdir(cache_dir) + + # Actually download the file + if not os.path.isfile(abs_file_name): + print("Downloading: %s" % (file_name)) + request = requests.get(url, allow_redirects=True) + open(abs_file_name, 'wb').write(request.content) + + # Check SHA256 hash + self.check_file(abs_file_name) + return abs_file_name + + def get_file(self, url, mkbuild=False, output=None): + """ + Download and prepares source packages + + url can be either: + 1. a single URL + 2. list of URLs to download. In this case the first URL is the primary URL + from which we derive the name of package directory + output can be used to override file name of the downloaded file(s). + + mkbuild=True can be used to pre-create build directories before + mkdir is available. + """ + # Single URL + if isinstance(url, str): + assert output is None or isinstance(output, str) + file_name = url if output is None else output + urls = [url] + outputs = [output] + # Multiple URLs + elif isinstance(url, list): + assert output is None or len(output) == len(url) + file_name = url[0] if output is None else output[0] + urls = url + outputs = output if output is not None else [None] * len(url) + else: + raise TypeError("url must be either a string or a list of strings") + + # Determine installation directory + target_name = get_target(file_name) + target_src_dir = os.path.join(self.after_dir, target_name, 'src') + + # Install base files + src_tree = os.path.join(self.sysa_dir, target_name) + copytree(src_tree, self.after_dir) + os.mkdir(target_src_dir) + + for i, _ in enumerate(urls): + # Download files into cache directory + tarball = self.download_file(urls[i], outputs[i]) + + # Install sources into target directory + shutil.copy2(tarball, target_src_dir) + + if mkbuild: + os.mkdir(os.path.join(self.after_dir, target_name, 'build')) + + def prepare(self): + """ + Prepare directory structore for System A. + We create an empty tmpfs, unpack stage0-posix. + Rest of the files are unpacked into more structured directory /after + """ + if not os.path.isdir(self.tmp_dir): + os.mkdir(self.tmp_dir) + print("Mounting tmpfs on %s" % (self.tmp_dir)) + mount('tmpfs', self.tmp_dir, 'tmpfs', 'size=8G') + + self.stage0_posix() + self.after() + + def stage0_posix(self): + """Copy in all the stage0-posix (formerly known as mescc-tools-seed)""" + mescc_tools_seed_base_dir = os.path.join(self.sysa_dir, 'mescc-tools-seed', + 'src', 'mescc-tools-seed') + mescc_tools_seed_dir = os.path.join(mescc_tools_seed_base_dir, self.arch) + copy_tree(mescc_tools_seed_dir, self.tmp_dir) + + m2_planet_dir = os.path.join(mescc_tools_seed_base_dir, 'M2-Planet') + copytree(m2_planet_dir, self.tmp_dir) + + # At the moment not useful for bootstrap but easier to keep it + mes_m2_dir = os.path.join(mescc_tools_seed_base_dir, 'mes-m2') + copytree(mes_m2_dir, self.tmp_dir) + + mescc_tools_patched_dir = os.path.join(self.sysa_dir, 'mescc-tools-seed', + 'src', 'mescc-tools-patched') + shutil.copytree(mescc_tools_patched_dir, + os.path.join(self.tmp_dir, 'mescc-tools'), shutil.ignore_patterns('*.git*')) + + # bootstrap seeds + bootstrap_seeds_dir = os.path.join(self.sysa_dir, 'bootstrap-seeds') + copytree(bootstrap_seeds_dir, self.tmp_dir) + kaem_optional_seed = os.path.join(bootstrap_seeds_dir, 'POSIX', + self.arch, 'kaem-optional-seed') + shutil.copy2(kaem_optional_seed, os.path.join(self.tmp_dir, 'init')) + + # replace the init kaem with our own custom one + shutil.move(os.path.join(self.tmp_dir, 'kaem.run'), + os.path.join(self.tmp_dir, 'mescc-tools-seed.kaem.run')) + shutil.copy2(os.path.join(self.sysa_dir, 'base.kaem.run'), + os.path.join(self.tmp_dir, 'kaem.run')) + + # create directories needed + os.mkdir(os.path.join(self.tmp_dir, 'bin')) + + def after(self): + """ + Prepare sources in /after directory. + After mescc-tools-seed we get into our own directory because + the mescc-tools-seed one is hella messy. + """ + + self.create_after_dirs() + self.mescc_tools_checksum() + self.deploy_extra_files() + self.mescc_tools_extra() + self.mes() + self.tcc_0_9_26() + self.tcc_0_9_27() + self.tar_1_12() + self.get_packages() + + def create_after_dirs(self): + """ + Create some empty directories for early bootstrap + This list can be eventually reduced if we include a small + mkdir implementation written for M2-Planet. + """ + bin_dir = os.path.join(self.after_dir, 'bin') + lib_dir = os.path.join(self.after_dir, 'lib') + include_dir = os.path.join(self.after_dir, 'include') + + os.mkdir(self.after_dir) + os.mkdir(bin_dir) + os.mkdir(lib_dir) + os.mkdir(include_dir) + os.mkdir(os.path.join(lib_dir, self.arch+'-mes')) + os.mkdir(os.path.join(lib_dir, 'tcc')) + os.mkdir(os.path.join(lib_dir, 'linux')) + os.mkdir(os.path.join(lib_dir, 'linux', self.arch+'-mes')) + os.mkdir(os.path.join(include_dir, 'mes')) + os.mkdir(os.path.join(include_dir, 'gnu')) + os.mkdir(os.path.join(include_dir, 'linux')) + os.mkdir(os.path.join(include_dir, 'linux', self.arch)) + os.mkdir(os.path.join(include_dir, 'sys')) + os.mkdir(os.path.join(include_dir, 'mach')) + + # Needed for patch to work, although can be fixed with TMPDIR + os.mkdir(os.path.join(self.tmp_dir, 'tmp')) + + def mescc_tools_checksum(self): + """Early fletcher16 checksum files""" + shutil.copy2(os.path.join(self.sysa_dir, 'mescc-tools-seed', 'checksums'), + os.path.join(self.after_dir, 'mescc-tools-seed-checksums')) + + def deploy_extra_files(self): + """Deploy misc files""" + extra_files = ['helpers.sh', 'run.sh', 'run2.sh', 'pre-sha.sha256sums'] + for extra_file in extra_files: + shutil.copy2(os.path.join(self.sysa_dir, extra_file), self.after_dir) + + shutil.copy2(os.path.join(self.sysa_dir, 'after.kaem'), self.tmp_dir) + shutil.copy2(os.path.join(self.sysa_dir, 'after.kaem.run'), + os.path.join(self.after_dir, 'kaem.run')) + shutil.copy2(os.path.join(self.git_dir, 'SHA256SUMS.sources'), self.after_dir) + + def mescc_tools_extra(self): + """Some additional tools such as cp and chmod (for M2-Planet)""" + copytree(os.path.join(self.sysa_dir, 'mescc-tools-extra'), self.after_dir) + + def mes(self): + """GNU Mes""" + copytree(os.path.join(self.sysa_dir, 'mes'), self.after_dir) + mes_dir = os.path.join(self.after_dir, 'mes', 'src', 'mes') + os.mkdir(os.path.join(mes_dir, 'bin')) + os.mkdir(os.path.join(mes_dir, 'm2')) + + def tcc_0_9_26(self): + """TinyCC 0.9.26 (patched by janneke)""" + copytree(os.path.join(self.sysa_dir, 'tcc-0.9.26'), self.after_dir) + + def tcc_0_9_27(self): + """TinyCC 0.9.27""" + copytree(os.path.join(self.sysa_dir, 'tcc-0.9.27'), self.after_dir) + + def tar_1_12(self): + """GNU Tar 1.12""" + # We have to pre-unpack tar sources. + # Possible alternative is to build a single C file implementation of untar. + tar_url = "https://mirrors.kernel.org/gnu/tar/tar-1.12.tar.gz" + self.get_file(tar_url) + tar_src_dir = os.path.join(self.after_dir, 'tar-1.12', 'src') + tar_tarball = os.path.join(tar_src_dir, os.path.basename(tar_url)) + + run('tar', '-C', tar_src_dir, '-xf', tar_tarball, '--strip-components=1') + + # pylint: disable=line-too-long,too-many-statements + def get_packages(self): + """Prepare remaining sources""" + + # gzip 1.2.4 + self.get_file("https://mirrors.kernel.org/gnu/gzip/gzip-1.2.4.tar", mkbuild=True) + + # sed 4.0.9 + self.get_file("https://mirrors.kernel.org/gnu/sed/sed-4.0.9.tar.gz", mkbuild=True) + + # patch 2.5.9 + self.get_file("https://ftp.gnu.org/pub/gnu/patch/patch-2.5.9.tar.gz", mkbuild=True) + + # sha-2 61555d + self.get_file("https://github.com/amosnier/sha-2/archive/61555d.tar.gz", mkbuild=True, + output="sha-2-61555d.tar.gz") + + # make 3.80 + self.get_file("https://mirrors.kernel.org/gnu/make/make-3.80.tar.gz", mkbuild=True) + + # bzip2 1.0.8 + self.get_file("https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", mkbuild=True) + + # coreutils 5.0 + self.get_file("https://mirrors.kernel.org/gnu/coreutils/coreutils-5.0.tar.bz2", mkbuild=True) + + # heirloom-devtools + self.get_file("http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070527/heirloom-devtools-070527.tar.bz2") + + # bash 2.05b + self.get_file("https://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz") + + # flex 2.5.11 + self.get_file("http://download.nust.na/pub2/openpkg1/sources/DST/flex/flex-2.5.11.tar.gz") + + # musl 1.1.24 + self.get_file("https://musl.libc.org/releases/musl-1.1.24.tar.gz") + + # m4 1.4.7 + self.get_file("https://mirrors.kernel.org/gnu/m4/m4-1.4.7.tar.gz") + + # flex 2.6.4 + self.get_file("https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz") + + # bison 3.4.1 + self.get_file("https://mirrors.kernel.org/gnu/bison/bison-3.4.1.tar.gz") + + # grep 2.4 + self.get_file("https://mirrors.kernel.org/gnu/grep/grep-2.4.tar.gz") + + # diffutils 2.7 + self.get_file("https://mirrors.kernel.org/gnu/diffutils/diffutils-2.7.tar.gz") + + # coreutils 6.10 + self.get_file("https://mirrors.kernel.org/gnu/coreutils/coreutils-6.10.tar.gz") + + # gawk 3.0.4 + self.get_file("https://mirrors.kernel.org/gnu/gawk/gawk-3.0.4.tar.gz") + + # perl 5.000 + self.get_file("https://github.com/Perl/perl5/archive/perl-5.000.tar.gz") + + # perl 5.003 + self.get_file("https://github.com/Perl/perl5/archive/perl-5.003.tar.gz") + + # perl 5.004_05 + self.get_file("https://www.cpan.org/src/5.0/perl5.004_05.tar.gz") + + # perl 5.005_03 + self.get_file("https://www.cpan.org/src/5.0/perl5.005_03.tar.gz") + + # perl 5.6.2 + self.get_file("https://www.cpan.org/src/5.0/perl-5.6.2.tar.gz") + + # autoconf 2.52 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.52.tar.bz2") + + # automake 1.6.3 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.6.3.tar.bz2") + + # automake 1.4-p6 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.4-p6.tar.gz") + + # autoconf 2.13 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.13.tar.gz") + + # autoconf 2.12 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.12.tar.gz") + + # libtool 1.4 + self.get_file("https://mirrors.kernel.org/gnu/libtool/libtool-1.4.tar.gz") + + # binutils 2.14 + self.get_file("https://mirrors.kernel.org/gnu/binutils/binutils-2.14.tar.bz2") + + # autoconf 2.53 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.53.tar.bz2") + + # automake 1.7 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.7.tar.bz2") + + # autoconf 2.54 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.54.tar.bz2") + + # autoconf 2.55 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.55.tar.bz2") + + # automake 1.7.8 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.7.8.tar.bz2") + + # autoconf 2.57 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.57.tar.bz2") + + # autoconf 2.59 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.59.tar.bz2") + + # automake 1.8.5 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.8.5.tar.bz2") + + # help2man 1.36.4 + self.get_file("https://mirrors.kernel.org/gnu/help2man/help2man-1.36.4.tar.gz") + + # autoconf 2.61 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.61.tar.bz2") + + # automake 1.9.6 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.9.6.tar.bz2") + + # findutils 4.2.33 + self.get_file(["https://mirrors.kernel.org/gnu/findutils/findutils-4.2.33.tar.gz", + "https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-8e128e.tar.gz"]) + + # libtool 2.2.4 + self.get_file("https://mirrors.kernel.org/gnu/libtool/libtool-2.2.4.tar.bz2") + + # automake 1.10.3 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.10.3.tar.bz2") + + # autoconf 2.65 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.bz2") + + # gcc 4.0.4 + self.get_file("https://mirrors.kernel.org/gnu/gcc/gcc-4.0.4/gcc-core-4.0.4.tar.bz2", + output="gcc-4.0.4.tar.bz2") + + # musl 1.2.2 + self.get_file("https://musl.libc.org/releases/musl-1.2.2.tar.gz") + + # bash 5.1 + self.get_file("https://mirrors.kernel.org/gnu/bash/bash-5.1.tar.gz") + + # xz 5.0.5 + self.get_file("https://tukaani.org/xz/xz-5.0.5.tar.bz2") + + # automake 1.11.2 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.11.2.tar.bz2") + + # autoconf 2.69 + self.get_file("https://mirrors.kernel.org/gnu/autoconf/autoconf-2.69.tar.xz") + + # automake 1.12.6 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.12.6.tar.xz") + + # automake 1.13.4 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.13.4.tar.xz") + + # automake 1.15.1 + self.get_file("https://mirrors.kernel.org/gnu/automake/automake-1.15.1.tar.xz") + + # tar 1.34 + self.get_file(["https://mirrors.kernel.org/gnu/tar/tar-1.34.tar.xz", + "https://git.savannah.gnu.org/cgit/gnulib.git/snapshot/gnulib-30820c.tar.gz"]) + + # gmp 6.2.1 + self.get_file("https://mirrors.kernel.org/gnu/gmp/gmp-6.2.1.tar.xz") diff --git a/sysa/heirloom-devtools-070527/src/.placeholder b/sysa/heirloom-devtools-070527/src/.placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/sysa/mes/checksums b/sysa/mes/checksums index ed17a14..62c37a0 100644 --- a/sysa/mes/checksums +++ b/sysa/mes/checksums @@ -1,13 +1,13 @@ 63031 /after/bin/mes 23643 /after/bin/mescc.scm -36724 /after/lib/crt1.s -42390 /after/lib/crt1.o -39638 /after/lib/x86.M1 -526 /after/lib/libmescc.s -10591 /after/lib/libc+tcc.s -45027 /after/lib/libc.s -17259 /after/lib/libmescc.a -20204 /after/lib/libc+tcc.a -34645 /after/lib/libc.a -8245 /after/lib/linux/elf32-header.hex2 -15474 /after/lib/linux/elf32-footer-single-main.hex2 +36724 /after/lib/x86-mes/crt1.s +42390 /after/lib/x86-mes/crt1.o +39638 /after/lib/x86-mes/x86.M1 +526 /after/lib/x86-mes/libmescc.s +10591 /after/lib/x86-mes/libc+tcc.s +45027 /after/lib/x86-mes/libc.s +17259 /after/lib/x86-mes/libmescc.a +20204 /after/lib/x86-mes/libc+tcc.a +34645 /after/lib/x86-mes/libc.a +8245 /after/lib/linux/x86-mes/elf32-header.hex2 +15474 /after/lib/linux/x86-mes/elf32-footer-single-main.hex2 diff --git a/sysa/mes/mes.kaem b/sysa/mes/mes.kaem index c6fc792..a51f63c 100755 --- a/sysa/mes/mes.kaem +++ b/sysa/mes/mes.kaem @@ -212,17 +212,17 @@ ${MES} --no-auto-compile -e main ${bindir}/mescc.scm -- -L ${libdir} -nostdlib - cp ${bindir}/mes-new ${bindir}/mes # Install libraries -cp ${libdir}/x86-mes/libc.a ${prefix}/lib/ -cp ${libdir}/x86-mes/libc+tcc.a ${prefix}/lib/ -cp ${libdir}/x86-mes/libmescc.a ${prefix}/lib/ -cp ${libdir}/x86-mes/libc.s ${prefix}/lib/ -cp ${libdir}/x86-mes/libc+tcc.s ${prefix}/lib/ -cp ${libdir}/x86-mes/libmescc.s ${prefix}/lib/ -cp ${libdir}/x86-mes/x86.M1 ${prefix}/lib/ -cp crt1.o ${prefix}/lib/ -cp crt1.s ${prefix}/lib/ -cp ${libdir}/linux/x86-mes/elf32-footer-single-main.hex2 ${prefix}/lib/linux/ -cp ${libdir}/linux/x86-mes/elf32-header.hex2 ${prefix}/lib/linux/ +cp ${libdir}/x86-mes/libc.a ${prefix}/lib/x86-mes/ +cp ${libdir}/x86-mes/libc+tcc.a ${prefix}/lib/x86-mes/ +cp ${libdir}/x86-mes/libmescc.a ${prefix}/lib/x86-mes/ +cp ${libdir}/x86-mes/libc.s ${prefix}/lib/x86-mes/ +cp ${libdir}/x86-mes/libc+tcc.s ${prefix}/lib/x86-mes/ +cp ${libdir}/x86-mes/libmescc.s ${prefix}/lib/x86-mes/ +cp ${libdir}/x86-mes/x86.M1 ${prefix}/lib/x86-mes/ +cp crt1.o ${prefix}/lib/x86-mes/ +cp crt1.s ${prefix}/lib/x86-mes/ +cp ${libdir}/linux/x86-mes/elf32-footer-single-main.hex2 ${prefix}/lib/linux/x86-mes/ +cp ${libdir}/linux/x86-mes/elf32-header.hex2 ${prefix}/lib/linux/x86-mes/ # Install header files cp include/alloca.h ${incdir}/alloca.h diff --git a/sysa/pre-sha.sha256sums b/sysa/pre-sha.sha256sums index 736f9ef..c5cac65 100644 --- a/sysa/pre-sha.sha256sums +++ b/sysa/pre-sha.sha256sums @@ -20,18 +20,18 @@ bc9ddf9854bd954c71bb1cf5b0af77fd65b8fa7f290b42c75020fb8893deb53c /after/bin/sha cacc2cda3ce6c2cc0cb761b8aa2115a003e166c94d1039974fc0221263897c52 /after/bin/tcc-0.9.26 fc2d3f6a7227836526d278d4e4b642a72c1a83c03c3363f3376100798e0eb145 /after/bin/zcat 44b5f15e1f015685fe4c3d66eda5ba52aac77b94f2edd98b764cec05ca350d49 /after/lib/crt1.o -90811dafd33ad56b8e4b0adcc04263f9329b9047b7cc337abe8151a75017172c /after/lib/crt1.s +90811dafd33ad56b8e4b0adcc04263f9329b9047b7cc337abe8151a75017172c /after/lib/x86-mes/crt1.s 09d4f9821a2566f7e56381a19259c41bd97f3c5ed83f490705acbfd1139a7736 /after/lib/crti.o 461ca1494737fab86fe1c1d3addeaf9d0ece413e353abcdea8674db3f700cda3 /after/lib/crtn.o 34f62227f8cc61d365d92a182f8f3cc91cc6c50a1bbb8f4774a4383bceaefa5f /after/lib/libc.a 34f62227f8cc61d365d92a182f8f3cc91cc6c50a1bbb8f4774a4383bceaefa5f /after/lib/libc+gnu.a -b5ce4e1288a27864156d74268090c13aea6b5a261fa81c75bfbe844d0689d03d /after/lib/libc.s -3156e619dbd85c471e2a8d053ba536eaaa8f91da657003777b8e87e7bab4266d /after/lib/libc+tcc.a -aaf89a9d6818cdb8ece73454631b1a1ae83503e5eb7777d38cdaf141cba0e530 /after/lib/libc+tcc.s +b5ce4e1288a27864156d74268090c13aea6b5a261fa81c75bfbe844d0689d03d /after/lib/x86-mes/libc.s +3156e619dbd85c471e2a8d053ba536eaaa8f91da657003777b8e87e7bab4266d /after/lib/x86-mes/libc+tcc.a +aaf89a9d6818cdb8ece73454631b1a1ae83503e5eb7777d38cdaf141cba0e530 /after/lib/x86-mes/libc+tcc.s 12c07ae103e7e3b390150a79e5c600d88de14e9bb73a066f6342582729ef5a3f /after/lib/libgetopt.a -52f697278ccdff5e457f27e10f465a91ab9858f0c6cee0683831cadb3109bbb7 /after/lib/libmescc.a -d8646707db6aa2a76fdc5dbb3521376439e357f9f1de1d67f02a1afeefd342ac /after/lib/libmescc.s -f9873d9aab12e70f24d97f8319e17a1e698ca60779ae9a6ab3ede648cd60fc61 /after/lib/linux/elf32-footer-single-main.hex2 -b16ab368bc4c7b8bd896d03cba565a60e97760dea4da9f5c8a1a3d2902a79df6 /after/lib/linux/elf32-header.hex2 +52f697278ccdff5e457f27e10f465a91ab9858f0c6cee0683831cadb3109bbb7 /after/lib/x86-mes/libmescc.a +d8646707db6aa2a76fdc5dbb3521376439e357f9f1de1d67f02a1afeefd342ac /after/lib/x86-mes/libmescc.s +f9873d9aab12e70f24d97f8319e17a1e698ca60779ae9a6ab3ede648cd60fc61 /after/lib/linux/x86-mes/elf32-footer-single-main.hex2 +b16ab368bc4c7b8bd896d03cba565a60e97760dea4da9f5c8a1a3d2902a79df6 /after/lib/linux/x86-mes/elf32-header.hex2 a650b13efc65073fb851e9db89728089d8845c401f85faaa09801874ab058089 /after/lib/tcc/libtcc1.a -c9944a799d584abfa76f385c14ac0caf6f46d03b34bf2712493602b12826c6b2 /after/lib/x86.M1 +c9944a799d584abfa76f385c14ac0caf6f46d03b34bf2712493602b12826c6b2 /after/lib/x86-mes/x86.M1 diff --git a/sysa/tcc-0.9.26/checksums b/sysa/tcc-0.9.26/checksums index 20ea422..9272c0c 100644 --- a/sysa/tcc-0.9.26/checksums +++ b/sysa/tcc-0.9.26/checksums @@ -9,7 +9,6 @@ 35666 /after/bin/tcc-0.9.26 47832 /after/lib/libc.a 47832 /after/lib/libc+gnu.a -20204 /after/lib/libc+tcc.a 54049 /after/lib/libgetopt.a 23061 /after/lib/crt1.o 16980 /after/lib/crti.o diff --git a/sysa/tcc-0.9.27/checksums/tcc-0.9.27 b/sysa/tcc-0.9.27/checksums/tcc-0.9.27 index 39e88fa..a891c8a 100644 --- a/sysa/tcc-0.9.27/checksums/tcc-0.9.27 +++ b/sysa/tcc-0.9.27/checksums/tcc-0.9.27 @@ -1,7 +1,6 @@ 35075 /after/bin/tcc 47832 /after/lib/libc.a 47832 /after/lib/libc+gnu.a -20204 /after/lib/libc+tcc.a 54049 /after/lib/libgetopt.a 23061 /after/lib/crt1.o 16980 /after/lib/crti.o