From 1b8e6908243d1fdb8c9118b8db123ccdb6457d5b Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Thu, 20 Apr 2023 15:26:33 +1000 Subject: [PATCH 01/35] trusting-trust.stage0-posix: init at unstable-2023-04-16 --- .../linux/trusting-trust/default.nix | 14 + .../trusting-trust/stage0-posix/default.nix | 62 ++++ .../trusting-trust/stage0-posix/hex0.nix | 14 + .../stage0-posix/kaem-minimal.nix | 14 + .../stage0-posix/mescc-tools-extra/build.kaem | 20 ++ .../mescc-tools-extra/default.nix | 12 + .../stage0-posix/mescc-tools/build.kaem | 184 +++++++++++ .../stage0-posix/mescc-tools/default.nix | 66 ++++ .../trusting-trust/stage0-posix/sources.nix | 40 +++ .../stage0-posix/stage0-posix-x86.nix | 310 ++++++++++++++++++ .../trusting-trust/stage0-posix/utils.nix | 63 ++++ pkgs/top-level/all-packages.nix | 2 + 12 files changed, 801 insertions(+) create mode 100644 pkgs/os-specific/linux/trusting-trust/default.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/default.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/hex0.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/kaem-minimal.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/build.kaem create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/default.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/build.kaem create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/default.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/sources.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/stage0-posix-x86.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/stage0-posix/utils.nix diff --git a/pkgs/os-specific/linux/trusting-trust/default.nix b/pkgs/os-specific/linux/trusting-trust/default.nix new file mode 100644 index 0000000000000..374fdd51ed889 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/default.nix @@ -0,0 +1,14 @@ +{ lib +, newScope +, system +}: + +lib.makeScope newScope (self: with self; { + callPackage = self.callPackage; + + fetchurl = import ../../../build-support/fetchurl/boot.nix { + inherit system; + }; + + inherit (callPackage ./stage0-posix { }) kaem mkKaemDerivation m2libc mescc-tools mescc-tools-extra writeTextFile writeText; +}) diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/default.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/default.nix new file mode 100644 index 0000000000000..d7643ee972243 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/default.nix @@ -0,0 +1,62 @@ +{ lib +, system +, newScope +}: + +lib.makeScope newScope (self: with self; { + callPackage = self.callPackage; + + runBareCommand = pname: builder: args: derivation { + inherit system builder args; + name = "${pname}-${version}"; + }; + + inherit (callPackage ./sources.nix { }) version bootstrap-seeds-src m2-mesoplanet-src m2-planet-src m2libc mescc-tools-src mescc-tools-extra-src stage0-posix-x86-src; + + hex0 = callPackage ./hex0.nix { }; + + kaem-minimal = callPackage ./kaem-minimal.nix { }; + + inherit (callPackage ./stage0-posix-x86.nix { }) blood-elf-0 hex2 kaem-unwrapped M1 M2; + + mkKaemDerivation0 = args@{ + name, + script, + ... + }: + derivation ({ + inherit system name; + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + script + ]; + + ARCH = "x86"; + OPERATING_SYSTEM = "linux"; + BLOOD_FLAG = " "; + BASE_ADDRESS = "0x8048000"; + ENDIAN_FLAG = "--little-endian"; + } // (builtins.removeAttrs args [ "name" "script" ])); + + mescc-tools = callPackage ./mescc-tools { }; + + mescc-tools-extra = callPackage ./mescc-tools-extra { }; + + inherit (callPackage ./utils.nix { }) writeTextFile writeText mkKaemDerivation; + + # Now that mescc-tools-extra is available we can install kaem at /bin/kaem + # to make it findable in environments + kaem = mkKaemDerivation0 { + name = "kaem-${version}"; + script = builtins.toFile "kaem-wrapper.kaem" '' + mkdir -p ''${out}/bin + cp ''${kaem-unwrapped} ''${out}/bin/kaem + chmod 555 ''${out}/bin/kaem + ''; + PATH = lib.makeBinPath [ mescc-tools-extra ]; + inherit kaem-unwrapped; + }; +}) diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/hex0.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/hex0.nix new file mode 100644 index 0000000000000..50c293a447062 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/hex0.nix @@ -0,0 +1,14 @@ +{ runBareCommand +, system +, bootstrap-seeds-src +}: +let + throwSystem = throw "Unsupported system: ${system}"; + arch = { + i686-linux = "x86"; + }.${system} or throwSystem; + + seed = "${bootstrap-seeds-src}/POSIX/${arch}/hex0-seed"; + src = "${bootstrap-seeds-src}/POSIX/${arch}/hex0_${arch}.hex0"; +in +runBareCommand "hex0" seed [ src (placeholder "out") ] diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/kaem-minimal.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/kaem-minimal.nix new file mode 100644 index 0000000000000..a142fb352933e --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/kaem-minimal.nix @@ -0,0 +1,14 @@ +{ runBareCommand +, system +, bootstrap-seeds-src +, hex0 +}: +let + throwSystem = throw "Unsupported system: ${system}"; + arch = { + i686-linux = "x86"; + }.${system} or throwSystem; + + src = "${bootstrap-seeds-src}/POSIX/${arch}/kaem-minimal.hex0"; +in +runBareCommand "kaem-minimal" hex0 [ src (placeholder "out") ] diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/build.kaem b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/build.kaem new file mode 100644 index 0000000000000..871762fe1bae6 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/build.kaem @@ -0,0 +1,20 @@ +# This is a modified version of mescc-tools-extra/mescc-tools-extra.kaem +# https://github.com/oriansj/mescc-tools-extra/blob/ec53af69d6d2119b47b369cd0ec37ac806e7ad60/mescc-tools-extra.kaem + +alias CC="${mescc-tools}/bin/M2-Mesoplanet --operating-system ${OPERATING_SYSTEM} --architecture ${ARCH} -f" + +# Create output folder +CC ${src}/mkdir.c -o ./mkdir +./mkdir -p ${out}/bin + +CC ${src}/sha256sum.c -o ${out}/bin/sha256sum +CC ${src}/match.c -o ${out}/bin/match +CC ${src}/mkdir.c -o ${out}/bin/mkdir +CC ${src}/untar.c -o ${out}/bin/untar +CC ${src}/ungz.c -o ${out}/bin/ungz +CC ${src}/unbz2.c -o ${out}/bin/unbz2 +CC ${src}/catm.c -o ${out}/bin/catm +CC ${src}/cp.c -o ${out}/bin/cp +CC ${src}/chmod.c -o ${out}/bin/chmod +CC ${src}/rm.c -o ${out}/bin/rm +CC ${src}/replace.c -o ${out}/bin/replace diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/default.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/default.nix new file mode 100644 index 0000000000000..f1943508b2059 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/default.nix @@ -0,0 +1,12 @@ +{ mkKaemDerivation0 +, mescc-tools-extra-src +, mescc-tools +, version +}: +mkKaemDerivation0 { + name = "mescc-tools-extra-${version}"; + script = ./build.kaem; + + src = mescc-tools-extra-src; + inherit mescc-tools; +} diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/build.kaem b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/build.kaem new file mode 100644 index 0000000000000..7d87db13bae21 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/build.kaem @@ -0,0 +1,184 @@ +# This is a modified version of stage0-posix/x86/mescc-tools-full-kaem.kaem +# https://github.com/oriansj/stage0-posix-x86/blob/56e6b8df3e95f4bc04f8b420a4cd8c82c70b9efa/mescc-tools-full-kaem.kaem + +${mkdir} -p ${out}/bin +${cp} ${M2} ${out}/bin/M2 +${chmod} 0555 ${out}/bin/M2 +${cp} ${M1} ${out}/bin/M1 +${chmod} 0555 ${out}/bin/M1 +${cp} ${hex2} ${out}/bin/hex2 +${chmod} 0555 ${out}/bin/hex2 + +# M2-Mesoplanet searches for runtime dependencies in environment variables +# We can hardcode them with the "replace" utility from mescc-tools-extra +${replace} \ + --file ${m2-mesoplanet-src}/cc.c \ + --output ./cc_patched.c \ + --match-on "env_lookup(\"M2LIBC_PATH\")" \ + --replace-with "\"${m2libc}\"" +${replace} \ + --file ${m2-mesoplanet-src}/cc_spawn.c \ + --output ./cc_spawn_patched.c \ + --match-on "env_lookup(\"PATH\")" \ + --replace-with "\"${out}/bin:\"" + +############################################### +# Phase-12 Build M2-Mesoplanet from M2-Planet # +############################################### + +${M2} --architecture ${ARCH} \ + -f ${m2libc}/sys/types.h \ + -f ${m2libc}/stddef.h \ + -f ${m2libc}/${ARCH}/linux/fcntl.c \ + -f ${m2libc}/fcntl.c \ + -f ${m2libc}/${ARCH}/linux/unistd.c \ + -f ${m2libc}/${ARCH}/linux/sys/stat.c \ + -f ${m2libc}/stdlib.c \ + -f ${m2libc}/stdio.h \ + -f ${m2libc}/stdio.c \ + -f ${m2libc}/string.c \ + -f ${m2libc}/bootstrappable.c \ + -f ${m2-mesoplanet-src}/cc.h \ + -f ${m2-mesoplanet-src}/cc_globals.c \ + -f ${m2-mesoplanet-src}/cc_env.c \ + -f ${m2-mesoplanet-src}/cc_reader.c \ + -f ./cc_spawn_patched.c \ + -f ${m2-mesoplanet-src}/cc_core.c \ + -f ${m2-mesoplanet-src}/cc_macro.c \ + -f ./cc_patched.c \ + --debug \ + -o ./M2-Mesoplanet-1.M1 + +${blood-elf-0} ${ENDIAN_FLAG} ${BLOOD_FLAG} -f ./M2-Mesoplanet-1.M1 -o ./M2-Mesoplanet-1-footer.M1 + +${M1} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + -f ${m2libc}/${ARCH}/${ARCH}_defs.M1 \ + -f ${m2libc}/${ARCH}/libc-full.M1 \ + -f ./M2-Mesoplanet-1.M1 \ + -f ./M2-Mesoplanet-1-footer.M1 \ + -o ./M2-Mesoplanet-1.hex2 + +${hex2} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + --base-address ${BASE_ADDRESS} \ + -f ${m2libc}/${ARCH}/ELF-${ARCH}-debug.hex2 \ + -f ./M2-Mesoplanet-1.hex2 \ + -o ${out}/bin/M2-Mesoplanet + +################################################# +# Phase-13 Build final blood-elf from C sources # +################################################# + +${M2} --architecture ${ARCH} \ + -f ${m2libc}/sys/types.h \ + -f ${m2libc}/stddef.h \ + -f ${m2libc}/${ARCH}/linux/fcntl.c \ + -f ${m2libc}/fcntl.c \ + -f ${m2libc}/${ARCH}/linux/unistd.c \ + -f ${m2libc}/stdlib.c \ + -f ${m2libc}/stdio.h \ + -f ${m2libc}/stdio.c \ + -f ${m2libc}/bootstrappable.c \ + -f ${mescc-tools-src}/stringify.c \ + -f ${mescc-tools-src}/blood-elf.c \ + --debug \ + -o ./blood-elf-1.M1 + +${blood-elf-0} ${BLOOD_FLAG} ${ENDIAN_FLAG} -f ./blood-elf-1.M1 -o ./blood-elf-1-footer.M1 +${M1} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + -f ${m2libc}/${ARCH}/${ARCH}_defs.M1 \ + -f ${m2libc}/${ARCH}/libc-full.M1 \ + -f ./blood-elf-1.M1 \ + -f ./blood-elf-1-footer.M1 \ + -o ./blood-elf-1.hex2 + +${hex2} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + --base-address ${BASE_ADDRESS} \ + -f ${m2libc}/${ARCH}/ELF-${ARCH}-debug.hex2 \ + -f ./blood-elf-1.hex2 \ + -o ${out}/bin/blood-elf + +# Now we have our shipping debuggable blood-elf, the rest will be down hill from +# here as we have ALL of the core pieces of compiling and assembling debuggable +# programs in a debuggable form with corresponding C source code. + +############################################# +# Phase-14 Build get_machine from C sources # +############################################# + +${M2} --architecture ${ARCH} \ + -f ${m2libc}/sys/types.h \ + -f ${m2libc}/stddef.h \ + -f ${m2libc}/${ARCH}/linux/unistd.c \ + -f ${m2libc}/${ARCH}/linux/fcntl.c \ + -f ${m2libc}/fcntl.c \ + -f ${m2libc}/stdlib.c \ + -f ${m2libc}/stdio.h \ + -f ${m2libc}/stdio.c \ + -f ${m2libc}/bootstrappable.c \ + -f ${mescc-tools-src}/get_machine.c \ + --debug \ + -o get_machine.M1 + +${out}/bin/blood-elf ${BLOOD_FLAG} ${ENDIAN_FLAG} -f ./get_machine.M1 -o ./get_machine-footer.M1 + +${M1} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + -f ${m2libc}/${ARCH}/${ARCH}_defs.M1 \ + -f ${m2libc}/${ARCH}/libc-full.M1 \ + -f ./get_machine.M1 \ + -f ./get_machine-footer.M1 \ + -o ./get_machine.hex2 + +${hex2} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + --base-address ${BASE_ADDRESS} \ + -f ${m2libc}/${ARCH}/ELF-${ARCH}-debug.hex2 \ + -f ./get_machine.hex2 \ + -o ${out}/bin/get_machine + +############################################ +# Phase-15 Build M2-Planet from M2-Planet # +############################################ + +${M2} --architecture ${ARCH} \ + -f ${m2libc}/sys/types.h \ + -f ${m2libc}/stddef.h \ + -f ${m2libc}/${ARCH}/linux/unistd.c \ + -f ${m2libc}/${ARCH}/linux/fcntl.c \ + -f ${m2libc}/fcntl.c \ + -f ${m2libc}/stdlib.c \ + -f ${m2libc}/stdio.h \ + -f ${m2libc}/stdio.c \ + -f ${m2libc}/bootstrappable.c \ + -f ${m2-planet-src}/cc.h \ + -f ${m2-planet-src}/cc_globals.c \ + -f ${m2-planet-src}/cc_reader.c \ + -f ${m2-planet-src}/cc_strings.c \ + -f ${m2-planet-src}/cc_types.c \ + -f ${m2-planet-src}/cc_core.c \ + -f ${m2-planet-src}/cc_macro.c \ + -f ${m2-planet-src}/cc.c \ + --debug \ + -o ./M2-1.M1 + +${out}/bin/blood-elf ${ENDIAN_FLAG} ${BLOOD_FLAG} -f ./M2-1.M1 -o ./M2-1-footer.M1 + +${M1} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + -f ${m2libc}/${ARCH}/${ARCH}_defs.M1 \ + -f ${m2libc}/${ARCH}/libc-full.M1 \ + -f ./M2-1.M1 \ + -f ./M2-1-footer.M1 \ + -o ./M2-1.hex2 + +${hex2} --architecture ${ARCH} \ + ${ENDIAN_FLAG} \ + --base-address ${BASE_ADDRESS} \ + -f ${m2libc}/${ARCH}/ELF-${ARCH}-debug.hex2 \ + -f ./M2-1.hex2 \ + -o ${out}/bin/M2-Planet + diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/default.nix new file mode 100644 index 0000000000000..8e5e8a463b043 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/default.nix @@ -0,0 +1,66 @@ +{ lib +, mkKaemDerivation0 +, M1 +, M2 +, blood-elf-0 +, hex2 +, m2libc +, m2-mesoplanet-src +, m2-planet-src +, mescc-tools-src +, mescc-tools-extra-src +, version +}: + +let + # We need a few tools from mescc-tools-extra to assemble the output folder + buildMesccToolsExtraUtil = name: + mkKaemDerivation0 { + name = "mescc-tools-extra-${name}-${version}"; + script = builtins.toFile "build-${name}.kaem" '' + ''${M2} --architecture ''${ARCH} \ + -f ''${m2libc}/sys/types.h \ + -f ''${m2libc}/stddef.h \ + -f ''${m2libc}/''${ARCH}/linux/fcntl.c \ + -f ''${m2libc}/fcntl.c \ + -f ''${m2libc}/''${ARCH}/linux/unistd.c \ + -f ''${m2libc}/''${ARCH}/linux/sys/stat.c \ + -f ''${m2libc}/stdlib.c \ + -f ''${m2libc}/stdio.h \ + -f ''${m2libc}/stdio.c \ + -f ''${m2libc}/string.c \ + -f ''${m2libc}/bootstrappable.c \ + -f ''${mescc-tools-extra-src}/${name}.c \ + --debug \ + -o ${name}.M1 + + ''${blood-elf-0} ''${ENDIAN_FLAG} -f ${name}.M1 -o ${name}-footer.M1 + + ''${M1} --architecture ''${ARCH} \ + ''${ENDIAN_FLAG} \ + -f ''${m2libc}/''${ARCH}/''${ARCH}_defs.M1 \ + -f ''${m2libc}/''${ARCH}/libc-full.M1 \ + -f ${name}.M1 \ + -f ${name}-footer.M1 \ + -o ${name}.hex2 + + ''${hex2} --architecture ''${ARCH} \ + ''${ENDIAN_FLAG} \ + -f ''${m2libc}/''${ARCH}/ELF-''${ARCH}-debug.hex2 \ + -f ${name}.hex2 \ + --base-address ''${BASE_ADDRESS} \ + -o ''${out} + ''; + inherit M1 M2 blood-elf-0 hex2 m2libc mescc-tools-extra-src; + }; + mkdir = buildMesccToolsExtraUtil "mkdir"; + cp = buildMesccToolsExtraUtil "cp"; + chmod = buildMesccToolsExtraUtil "chmod"; + replace = buildMesccToolsExtraUtil "replace"; +in +mkKaemDerivation0 { + name = "mescc-tools-${version}"; + script = ./build.kaem; + + inherit M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc m2-mesoplanet-src m2-planet-src mescc-tools-src; +} diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/sources.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/sources.nix new file mode 100644 index 0000000000000..098b99f304ac1 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/sources.nix @@ -0,0 +1,40 @@ +{}: +{ + # Pinned from https://github.com/oriansj/stage0-posix/commit/4ad489ffc261ee036cfd33f20d939d7c5b05844e + version = "unstable-2023-04-16"; + + bootstrap-seeds-src = builtins.fetchTarball { + url = "https://github.com/oriansj/bootstrap-seeds/archive/e4974affa1934274a8b8c29f19c87e758e650f52.tar.gz"; + sha256 = "0f325x9sixbv35b5s6cjd2qi41n84kmzia11n6w4r6rrldw6wci2"; + }; + + m2-mesoplanet-src = builtins.fetchTarball { + url = "https://github.com/oriansj/M2-Mesoplanet/archive/4bf3e2eded821cf9b69fd63a033272197a8703f7.tar.gz"; + sha256 = "0db13grmxg5hp1jj8vss2ms9c7znk319pkhmnd1ygzg5w8i2v0cj"; + }; + + m2-planet-src = builtins.fetchTarball { + url = "https://github.com/oriansj/M2-Planet/archive/f02aaaf67bf004eccd5fd0efb33ced481a0d8346.tar.gz"; + sha256 = "0bysizqr8nffzzjq6m59gs1m5z2smwfbymijjkxr3l8rxx819vck"; + }; + + m2libc = builtins.fetchTarball { + url = "https://github.com/oriansj/M2libc/archive/1139b2bbf5f9c2618e52298917460ec75c345451.tar.gz"; + sha256 = "113bsmpas8iwflnyjh34ap0p0y23bgdkca9viz9l87kwjbag5y4p"; + }; + + mescc-tools-src = builtins.fetchTarball { + url = "https://github.com/oriansj/mescc-tools/archive/3f941824677d74b30d80de08436d63b783adc17f.tar.gz"; + sha256 = "0cl5934giah2hdzi5q3w3qmkhpm7gx9qjc7nhbwvs3gbmq10nk36"; + }; + + mescc-tools-extra-src = builtins.fetchTarball { + url = "https://github.com/oriansj/mescc-tools-extra/archive/ec53af69d6d2119b47b369cd0ec37ac806e7ad60.tar.gz"; + sha256 = "1kn8mpx104ij9gxifl10dbyalizyn3ifszj5i3msidvr5k7ciay1"; + }; + + stage0-posix-x86-src = builtins.fetchTarball { + url = "https://github.com/oriansj/stage0-posix-x86/archive/56e6b8df3e95f4bc04f8b420a4cd8c82c70b9efa.tar.gz"; + sha256 = "0fih58js6kpflbx9bkl3ikpmbxljlfpg36s78dnaiy6nim36aw7d"; + }; +} diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/stage0-posix-x86.nix new file mode 100644 index 0000000000000..457aa04bd85a2 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/stage0-posix-x86.nix @@ -0,0 +1,310 @@ +# This is a translation of stage0-posix/stage0-posix/x86/mescc-tools-mini-kaem.kaem to nix +# https://github.com/oriansj/stage0-posix-x86/blob/56e6b8df3e95f4bc04f8b420a4cd8c82c70b9efa/mescc-tools-mini-kaem.kaem + +# Warning all binaries prior to the use of blood-elf will not be readable by +# Objdump, you may need to use ndism or gdb to view the assembly in the binary. + +{ runBareCommand +, system +, hex0 +, stage0-posix-x86-src +, m2libc +, m2-planet-src +, mescc-tools-src +}: +rec { + out = placeholder "out"; + + ################################ + # Phase-1 Build hex1 from hex0 # + ################################ + + hex1 = runBareCommand "hex1" hex0 ["${stage0-posix-x86-src}/hex1_x86.hex0" out]; + + # hex1 adds support for single character labels and is available in various forms + # in mescc-tools/x86_bootstrap to allow you various ways to verify correctness + + ################################ + # Phase-2 Build hex2 from hex1 # + ################################ + + hex2-0 = runBareCommand "hex2" hex1 ["${stage0-posix-x86-src}/hex2_x86.hex1" out]; + + # hex2 adds support for long labels and absolute addresses thus allowing it + # to function as an effective linker for later stages of the bootstrap + # This is a minimal version which will be used to bootstrap a much more advanced + # version in a later stage. + + ################################# + # Phase-2b Build catm from hex2 # + ################################# + + catm = runBareCommand "catm" hex2-0 ["${stage0-posix-x86-src}/catm_x86.hex2" out]; + + # catm removes the need for cat or shell support for redirection by providing + # equivalent functionality via catm output_file input1 input2 ... inputN + + ############################## + # Phase-3 Build M0 from hex2 # + ############################## + + M0_hex2 = runBareCommand "M0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" "${stage0-posix-x86-src}/M0_x86.hex2"]; + M0 = runBareCommand "M0" hex2-0 [M0_hex2 out]; + + # M0 is the architecture specific version of M1 and is by design single + # architecture only and will be replaced by the C code version of M1 + + ################################ + # Phase-4 Build cc_x86 from M0 # + ################################ + + cc_x86-0_hex2 = runBareCommand "cc_x86-0.hex2" M0 ["${stage0-posix-x86-src}/cc_x86.M1" out]; + cc_x86-1_hex2 = runBareCommand "cc_x86-1.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" cc_x86-0_hex2]; + cc_x86 = runBareCommand "cc_x86" hex2-0 [cc_x86-1_hex2 out]; + + ####################################### + # Phase-5 Build M2-Planet from cc_x86 # + ####################################### + + M2-0_c = runBareCommand "M2-0.c" catm [ + out + "${m2libc}/x86/linux/bootstrap.c" + "${m2-planet-src}/cc.h" + "${m2libc}/bootstrappable.c" + "${m2-planet-src}/cc_globals.c" + "${m2-planet-src}/cc_reader.c" + "${m2-planet-src}/cc_strings.c" + "${m2-planet-src}/cc_types.c" + "${m2-planet-src}/cc_core.c" + "${m2-planet-src}/cc_macro.c" + "${m2-planet-src}/cc.c" + ]; + M2-0_M1 = runBareCommand "M2-0.M1" cc_x86 [M2-0_c out]; + M2-0-0_M1 = runBareCommand "M2-0-0.M1" catm [out "${stage0-posix-x86-src}/x86_defs.M1" "${stage0-posix-x86-src}/libc-core.M1" M2-0_M1]; + M2-0_hex2 = runBareCommand "M2-0.hex2" M0 [M2-0-0_M1 out]; + M2-0-0_hex2 = runBareCommand "M2-0-0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" M2-0_hex2]; + M2 = runBareCommand "M2" hex2-0 [M2-0-0_hex2 out]; + + ############################################ + # Phase-6 Build blood-elf-0 from C sources # + ############################################ + + blood-elf-0_M1 = runBareCommand "blood-elf-0.M1" M2 [ + "--architecture" "x86" + "-f" "${m2libc}/x86/linux/bootstrap.c" + "-f" "${m2libc}/bootstrappable.c" + "-f" "${mescc-tools-src}/stringify.c" + "-f" "${mescc-tools-src}/blood-elf.c" + "--bootstrap-mode" + "-o" out + ]; + + blood-elf-0-0_M1 = runBareCommand "blood-elf-0-0.M1" catm [out "${m2libc}/x86/x86_defs.M1" "${m2libc}/x86/libc-core.M1" blood-elf-0_M1]; + blood-elf-0_hex2 = runBareCommand "blood-elf-0.hex2" M0 [blood-elf-0-0_M1 out]; + blood-elf-0-0_hex2 = runBareCommand "blood-elf-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86.hex2" blood-elf-0_hex2]; + blood-elf-0 = runBareCommand "blood-elf-0" hex2-0 [blood-elf-0-0_hex2 out]; + + # This is the last stage where the binaries will not have debug info + # and the last piece built that isn't part of the output binaries + + ##################################### + # Phase-7 Build M1-0 from C sources # + ##################################### + + M1-macro-0_M1 = runBareCommand "M1-macro-0.M1" M2 [ + "--architecture" "x86" + "-f" "${m2libc}/x86/linux/bootstrap.c" + "-f" "${m2libc}/bootstrappable.c" + "-f" "${mescc-tools-src}/stringify.c" + "-f" "${mescc-tools-src}/M1-macro.c" + "--bootstrap-mode" + "--debug" + "-o" out + ]; + + M1-macro-0-footer_M1 = runBareCommand "M1-macro-0-footer.M1" blood-elf-0 ["-f" M1-macro-0_M1 "--little-endian" "-o" out]; + M1-macro-0-0_M1 = runBareCommand "M1-macro-0-0.M1" catm [out "${m2libc}/x86/x86_defs.M1" "${m2libc}/x86/libc-core.M1" M1-macro-0_M1 M1-macro-0-footer_M1]; + M1-macro-0_hex2 = runBareCommand "M1-macro-0.hex2" M0 [M1-macro-0-0_M1 out]; + M1-macro-0-0_hex2 = runBareCommand "M1-macro-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86-debug.hex2" M1-macro-0_hex2]; + M1-0 = runBareCommand "M1-0" hex2-0 [M1-macro-0-0_hex2 out]; + + # This is the last stage where catm will need to be used and the last stage where + # M0 is used, as we will being using it's much more powerful and cross-platform + # version with a bunch of extra goodies. + + ####################################### + # Phase-8 Build hex2-1 from C sources # + ####################################### + + hex2_linker-0_M1 = runBareCommand "hex2_linker-0.M1" M2 [ + "--architecture" "x86" + "-f" "${m2libc}/sys/types.h" + "-f" "${m2libc}/stddef.h" + "-f" "${m2libc}/x86/linux/unistd.c" + "-f" "${m2libc}/x86/linux/fcntl.c" + "-f" "${m2libc}/fcntl.c" + "-f" "${m2libc}/x86/linux/sys/stat.c" + "-f" "${m2libc}/stdlib.c" + "-f" "${m2libc}/stdio.h" + "-f" "${m2libc}/stdio.c" + "-f" "${m2libc}/bootstrappable.c" + "-f" "${mescc-tools-src}/hex2.h" + "-f" "${mescc-tools-src}/hex2_linker.c" + "-f" "${mescc-tools-src}/hex2_word.c" + "-f" "${mescc-tools-src}/hex2.c" + "--debug" + "-o" out + ]; + + hex2_linker-0-footer_M1 = runBareCommand "hex2_linker-0-footer.M1" blood-elf-0 ["-f" hex2_linker-0_M1 "--little-endian" "-o" out]; + + hex2_linker-0_hex2 = runBareCommand "hex2_linker-0.hex2" M1-0 [ + "--architecture" "x86" + "--little-endian" + "-f" "${m2libc}/x86/x86_defs.M1" + "-f" "${m2libc}/x86/libc-full.M1" + "-f" hex2_linker-0_M1 + "-f" hex2_linker-0-footer_M1 + "-o" out + ]; + + hex2_linker-0-0_hex2 = runBareCommand "hex2_linker-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86-debug.hex2" hex2_linker-0_hex2]; + + hex2-1 = runBareCommand "hex2-1" hex2-0 [hex2_linker-0-0_hex2 out]; + + # This is the last stage where we will be using the handwritten hex2 and instead + # be using the far more powerful, cross-platform version with a bunch more goodies + + ################################### + # Phase-9 Build M1 from C sources # + ################################### + + M1-macro-1_M1 = runBareCommand "M1-macro-1.M1" M2 [ + "--architecture" "x86" + "-f" "${m2libc}/sys/types.h" + "-f" "${m2libc}/stddef.h" + "-f" "${m2libc}/x86/linux/fcntl.c" + "-f" "${m2libc}/fcntl.c" + "-f" "${m2libc}/x86/linux/unistd.c" + "-f" "${m2libc}/string.c" + "-f" "${m2libc}/stdlib.c" + "-f" "${m2libc}/stdio.h" + "-f" "${m2libc}/stdio.c" + "-f" "${m2libc}/bootstrappable.c" + "-f" "${mescc-tools-src}/stringify.c" + "-f" "${mescc-tools-src}/M1-macro.c" + "--debug" + "-o" out + ]; + + M1-macro-1-footer_M1 = runBareCommand "M1-macro-1-footer.M1" blood-elf-0 ["-f" M1-macro-1_M1 "--little-endian" "-o" out]; + + M1-macro-1_hex2 = runBareCommand "M1-macro-1.hex2" M1-0 [ + "--architecture" "x86" + "--little-endian" + "-f" "${m2libc}/x86/x86_defs.M1" + "-f" "${m2libc}/x86/libc-full.M1" + "-f" M1-macro-1_M1 + "-f" M1-macro-1-footer_M1 + "-o" out + ]; + + M1 = runBareCommand "M1" hex2-1 [ + "--architecture" "x86" + "--little-endian" + "--base-address" "0x8048000" + "-f" "${m2libc}/x86/ELF-x86-debug.hex2" + "-f" M1-macro-1_hex2 + "-o" out + ]; + + ###################################### + # Phase-10 Build hex2 from C sources # + ###################################### + + hex2_linker-2_M1 = runBareCommand "hex2_linker-2.M1" M2 [ + "--architecture" "x86" + "-f" "${m2libc}/sys/types.h" + "-f" "${m2libc}/stddef.h" + "-f" "${m2libc}/x86/linux/unistd.c" + "-f" "${m2libc}/x86/linux/fcntl.c" + "-f" "${m2libc}/fcntl.c" + "-f" "${m2libc}/x86/linux/sys/stat.c" + "-f" "${m2libc}/stdlib.c" + "-f" "${m2libc}/stdio.h" + "-f" "${m2libc}/stdio.c" + "-f" "${m2libc}/bootstrappable.c" + "-f" "${mescc-tools-src}/hex2.h" + "-f" "${mescc-tools-src}/hex2_linker.c" + "-f" "${mescc-tools-src}/hex2_word.c" + "-f" "${mescc-tools-src}/hex2.c" + "--debug" + "-o" out + ]; + + hex2_linker-2-footer_M1 = runBareCommand "hex2_linker-2-footer.M1" blood-elf-0 ["-f" hex2_linker-2_M1 "--little-endian" "-o" out]; + + hex2_linker-2_hex2 = runBareCommand "hex2_linker-2.hex2" M1 [ + "--architecture" "x86" + "--little-endian" + "-f" "${m2libc}/x86/x86_defs.M1" + "-f" "${m2libc}/x86/libc-full.M1" + "-f" hex2_linker-2_M1 + "-f" hex2_linker-2-footer_M1 + "-o" out + ]; + + hex2 = runBareCommand "hex2" hex2-1 [ + "--architecture" "x86" + "--little-endian" + "--base-address" "0x8048000" + "-f" "${m2libc}/x86/ELF-x86-debug.hex2" + "-f" hex2_linker-2_hex2 + "-o" out + ]; + + ###################################### + # Phase-11 Build kaem from C sources # + ###################################### + + kaem_M1 = runBareCommand "kaem.M1" M2 [ + "--architecture" "x86" + "-f" "${m2libc}/sys/types.h" + "-f" "${m2libc}/stddef.h" + "-f" "${m2libc}/string.c" + "-f" "${m2libc}/x86/linux/unistd.c" + "-f" "${m2libc}/x86/linux/fcntl.c" + "-f" "${m2libc}/fcntl.c" + "-f" "${m2libc}/stdlib.c" + "-f" "${m2libc}/stdio.h" + "-f" "${m2libc}/stdio.c" + "-f" "${m2libc}/bootstrappable.c" + "-f" "${mescc-tools-src}/Kaem/kaem.h" + "-f" "${mescc-tools-src}/Kaem/variable.c" + "-f" "${mescc-tools-src}/Kaem/kaem_globals.c" + "-f" "${mescc-tools-src}/Kaem/kaem.c" + "--debug" + "-o" out + ]; + + kaem-footer_M1 = runBareCommand "kaem-footer.M1" blood-elf-0 ["-f" kaem_M1 "--little-endian" "-o" out]; + + kaem_hex2 = runBareCommand "kaem.hex2" M1 [ + "--architecture" "x86" + "--little-endian" + "-f" "${m2libc}/x86/x86_defs.M1" + "-f" "${m2libc}/x86/libc-full.M1" + "-f" kaem_M1 + "-f" kaem-footer_M1 + "-o" out + ]; + + kaem-unwrapped = runBareCommand "kaem-unwrapped" hex2 [ + "--architecture" "x86" + "--little-endian" + "-f" "${m2libc}/x86/ELF-x86-debug.hex2" + "-f" kaem_hex2 + "--base-address" "0x8048000" + "-o" out + ]; +} diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/utils.nix b/pkgs/os-specific/linux/trusting-trust/stage0-posix/utils.nix new file mode 100644 index 0000000000000..8b013d30b20fa --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/stage0-posix/utils.nix @@ -0,0 +1,63 @@ +{ lib +, system +, mkKaemDerivation0 +, kaem +, mescc-tools +, mescc-tools-extra +}: + +rec { + writeTextFile = + { name # the name of the derivation + , text + , executable ? false # run chmod +x ? + , destination ? "" # relative path appended to $out eg "/bin/foo" + , allowSubstitutes ? false + , preferLocalBuild ? true + }: + mkKaemDerivation0 { + inherit name text executable allowSubstitutes preferLocalBuild; + passAsFile = [ "text" ]; + + PATH = lib.makeBinPath [ mescc-tools-extra ]; + script = builtins.toFile "write-text-file.kaem" '' + target=''${out}${destination} + if match x${if builtins.dirOf destination == "" then "0" else "1"} x1; then + mkdir -p ''${out}${builtins.dirOf destination} + fi + cp ''${textPath} ''${target} + if match x''${executable} x1; then + chmod 555 ''${target} + fi + ''; + }; + + writeText = name: text: writeTextFile {inherit name text;}; + + mkKaemDerivation = args@{ + pname ? null, + version ? null, + name ? null, + buildPhase, + buildInputs ? [], + ... + }: + assert name == null -> pname != null && version != null; + let + rname = if name != null then name else "${pname}-${version}"; + in + derivation ({ + inherit system; + name = rname; + + builder = "${kaem}/bin/kaem"; + args = [ + "--verbose" + "--strict" + "--file" + (writeText "${rname}-builder" buildPhase) + ]; + + PATH = lib.makeBinPath (buildInputs ++ [ kaem mescc-tools mescc-tools-extra ]); + } // (builtins.removeAttrs args [ "pname" "version" "name" "buildPhase" "buildInputs" ])); +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b71f0c6f1da8f..f21cec291fb6e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -27459,6 +27459,8 @@ with pkgs; trust-dns = callPackage ../servers/dns/trust-dns { }; + trusting-trust = recurseIntoAttrs (callPackage ../os-specific/linux/trusting-trust { }); + trustymail = callPackage ../tools/security/trustymail { }; tunctl = callPackage ../os-specific/linux/tunctl { }; From ba4a163e61f9466e1d6c505c0a2a3abc7de6375d Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 24 Apr 2023 11:38:32 +1000 Subject: [PATCH 02/35] trusting-trust.mes: init at 0.24.2 --- .../linux/trusting-trust/default.nix | 2 + .../linux/trusting-trust/mes/config.h | 2 + .../linux/trusting-trust/mes/default.nix | 297 ++++++++++++++++++ 3 files changed, 301 insertions(+) create mode 100644 pkgs/os-specific/linux/trusting-trust/mes/config.h create mode 100644 pkgs/os-specific/linux/trusting-trust/mes/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/default.nix b/pkgs/os-specific/linux/trusting-trust/default.nix index 374fdd51ed889..d6092c03156dc 100644 --- a/pkgs/os-specific/linux/trusting-trust/default.nix +++ b/pkgs/os-specific/linux/trusting-trust/default.nix @@ -11,4 +11,6 @@ lib.makeScope newScope (self: with self; { }; inherit (callPackage ./stage0-posix { }) kaem mkKaemDerivation m2libc mescc-tools mescc-tools-extra writeTextFile writeText; + + mes = callPackage ./mes { }; }) diff --git a/pkgs/os-specific/linux/trusting-trust/mes/config.h b/pkgs/os-specific/linux/trusting-trust/mes/config.h new file mode 100644 index 0000000000000..6501827d12cea --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/mes/config.h @@ -0,0 +1,2 @@ +#undef SYSTEM_LIBC +#define MES_VERSION "@VERSION@" \ No newline at end of file diff --git a/pkgs/os-specific/linux/trusting-trust/mes/default.nix b/pkgs/os-specific/linux/trusting-trust/mes/default.nix new file mode 100644 index 0000000000000..3e04cc54c1c53 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/mes/default.nix @@ -0,0 +1,297 @@ +{ mkKaemDerivation +, fetchurl +, writeText +, m2libc +, mescc-tools +}: +let + version = "0.24.2"; + ARCH = "x86"; + + src = fetchurl { + url = "mirror://gnu/mes/mes-${version}.tar.gz"; + sha256 = "0vp8v88zszh1imm3dvdfi3m8cywshdj7xcrsq4cgmss69s2y1nkx"; + }; + + nyaccVersion = "1.00.2"; + nyaccModules = builtins.fetchTarball { + url = "http://download.savannah.nongnu.org/releases/nyacc/nyacc-${nyaccVersion}.tar.gz"; + sha256 = "06rg6pn4k8smyydwls1abc9h702cri3z65ac9gvc4rxxklpynslk"; + }; +in +(mkKaemDerivation { + pname = "mes"; + inherit version; + + # Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem + buildPhase = '' + # Unpack source + ungz --file ${src} --output mes.tar + mkdir ''${out} ''${out}/bin ''${out}/share + cd ''${out}/share + untar --non-strict --file ''${NIX_BUILD_TOP}/mes.tar # ignore symlinks + + MES_PREFIX=''${out}/share/mes-${version} + LIBDIR=''${MES_PREFIX}/lib + + cd ''${MES_PREFIX} + + cp ${./config.h} include/mes/config.h + replace --file include/mes/config.h --output include/mes/config.h --match-on @VERSION@ --replace-with ${version} + + mkdir include/arch + cp include/linux/x86/syscall.h include/arch/syscall.h + cp include/linux/x86/kernel-stat.h include/arch/kernel-stat.h + + # Remove pregenerated files + rm mes/module/mes/psyntax.pp mes/module/mes/psyntax.pp.header + + # These files are symlinked in the repo + cp mes/module/srfi/srfi-9-struct.mes mes/module/srfi/srfi-9.mes + cp mes/module/srfi/srfi-9/gnu-struct.mes mes/module/srfi/srfi-9/gnu.mes + + # Fixes to support newer M2-Planet + catm x86_defs.M1 ${m2libc}/x86/x86_defs.M1 lib/m2/x86/x86_defs.M1 + cp x86_defs.M1 lib/m2/x86/x86_defs.M1 + rm x86_defs.M1 + + # Remove environment impurities + __GUILE_LOAD_PATH="\"''${MES_PREFIX}/mes/module:''${MES_PREFIX}/module:${nyaccModules}/module\"" + boot0_scm=mes/module/mes/boot-0.scm + guile_mes=mes/module/mes/guile.mes + replace --file ''${boot0_scm} --output ''${boot0_scm} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} + replace --file ''${guile_mes} --output ''${guile_mes} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} + + module_mescc_scm=module/mescc/mescc.scm + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"M1\")" --replace-with "\"${mescc-tools}/bin/M1\"" + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"HEX2\")" --replace-with "\"${mescc-tools}/bin/hex2\"" + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"BLOOD_ELF\")" --replace-with "\"${mescc-tools}/bin/blood-elf\"" + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" + + mes_c=src/mes.c + replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" + replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" + + gc_c=src/gc.c + replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_ARENA\")" --replace-with "\"100000000\"" + replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_MAX_ARENA\")" --replace-with "\"100000000\"" + replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_STACK\")" --replace-with "\"6000000\"" + + # Create mescc.scm + mescc_in=scripts/mescc.scm.in + replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" + replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"includedir\")" --replace-with "\"''${MES_PREFIX}/include\"" + replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"libdir\")" --replace-with "\"''${MES_PREFIX}/lib\"" + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @prefix@ --replace-with ''${MES_PREFIX} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @VERSION@ --replace-with ${version} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_cpu@ --replace-with ${ARCH} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_kernel@ --replace-with linux + cp ''${mescc_in} ''${out}/bin/mescc.scm + chmod 555 ''${out}/bin/mescc.scm + + # Build mes-m2 + mes_cpu=${ARCH} + stage0_cpu=${ARCH} + kaem --verbose --strict --file kaem.run + cp bin/mes-m2 ''${out}/bin/mes-m2 + chmod 555 ''${out}/bin/mes-m2 + + + # Recompile Mes and Mes C library using mes-m2 bootstrapped Mes + cd ''${NIX_BUILD_TOP} + alias mescc="''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -D HAVE_CONFIG_H=1 -I ''${MES_PREFIX}/include -I ''${MES_PREFIX}/include/linux/x86 -c" + + # Start with crt1.o + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/crt1.c + + # Now for libc-mini.a + mescc ''${MES_PREFIX}/lib/mes/eputs.c + mescc ''${MES_PREFIX}/lib/mes/oputs.c + mescc ''${MES_PREFIX}/lib/mes/globals.c + mescc ''${MES_PREFIX}/lib/stdlib/exit.c + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_exit.c + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_write.c + mescc ''${MES_PREFIX}/lib/stdlib/puts.c + mescc ''${MES_PREFIX}/lib/string/strlen.c + mescc ''${MES_PREFIX}/lib/mes/mini-write.c + catm libc-mini.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o mini-write.o + catm libc-mini.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s mini-write.s + + # libmescc.a + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall-internal.c + catm libmescc.a globals.o syscall-internal.o + catm libmescc.s globals.s syscall-internal.s + + # libc.a + mescc ''${MES_PREFIX}/lib/ctype/isnumber.c + mescc ''${MES_PREFIX}/lib/mes/abtol.c + mescc ''${MES_PREFIX}/lib/mes/cast.c + mescc ''${MES_PREFIX}/lib/mes/eputc.c + mescc ''${MES_PREFIX}/lib/mes/fdgetc.c + mescc ''${MES_PREFIX}/lib/mes/fdputc.c + mescc ''${MES_PREFIX}/lib/mes/fdputs.c + mescc ''${MES_PREFIX}/lib/mes/fdungetc.c + mescc ''${MES_PREFIX}/lib/mes/itoa.c + mescc ''${MES_PREFIX}/lib/mes/ltoa.c + mescc ''${MES_PREFIX}/lib/mes/ltoab.c + mescc ''${MES_PREFIX}/lib/mes/mes_open.c + mescc ''${MES_PREFIX}/lib/mes/ntoab.c + mescc ''${MES_PREFIX}/lib/mes/oputc.c + mescc ''${MES_PREFIX}/lib/mes/ultoa.c + mescc ''${MES_PREFIX}/lib/mes/utoa.c + mescc ''${MES_PREFIX}/lib/ctype/isdigit.c + mescc ''${MES_PREFIX}/lib/ctype/isspace.c + mescc ''${MES_PREFIX}/lib/ctype/isxdigit.c + mescc ''${MES_PREFIX}/lib/mes/assert_msg.c + mescc ''${MES_PREFIX}/lib/posix/write.c + mescc ''${MES_PREFIX}/lib/stdlib/atoi.c + mescc ''${MES_PREFIX}/lib/linux/lseek.c + mescc ''${MES_PREFIX}/lib/mes/__assert_fail.c + mescc ''${MES_PREFIX}/lib/mes/__buffered_read.c + mescc ''${MES_PREFIX}/lib/mes/__mes_debug.c + mescc ''${MES_PREFIX}/lib/posix/execv.c + mescc ''${MES_PREFIX}/lib/posix/getcwd.c + mescc ''${MES_PREFIX}/lib/posix/getenv.c + mescc ''${MES_PREFIX}/lib/posix/isatty.c + mescc ''${MES_PREFIX}/lib/posix/open.c + mescc ''${MES_PREFIX}/lib/posix/buffered-read.c + mescc ''${MES_PREFIX}/lib/posix/setenv.c + mescc ''${MES_PREFIX}/lib/posix/wait.c + mescc ''${MES_PREFIX}/lib/stdio/fgetc.c + mescc ''${MES_PREFIX}/lib/stdio/fputc.c + mescc ''${MES_PREFIX}/lib/stdio/fputs.c + mescc ''${MES_PREFIX}/lib/stdio/getc.c + mescc ''${MES_PREFIX}/lib/stdio/getchar.c + mescc ''${MES_PREFIX}/lib/stdio/putc.c + mescc ''${MES_PREFIX}/lib/stdio/putchar.c + mescc ''${MES_PREFIX}/lib/stdio/ungetc.c + mescc ''${MES_PREFIX}/lib/stdlib/free.c + mescc ''${MES_PREFIX}/lib/stdlib/realloc.c + mescc ''${MES_PREFIX}/lib/string/memchr.c + mescc ''${MES_PREFIX}/lib/string/memcmp.c + mescc ''${MES_PREFIX}/lib/string/memcpy.c + mescc ''${MES_PREFIX}/lib/string/memmove.c + mescc ''${MES_PREFIX}/lib/string/memset.c + mescc ''${MES_PREFIX}/lib/string/strcmp.c + mescc ''${MES_PREFIX}/lib/string/strcpy.c + mescc ''${MES_PREFIX}/lib/string/strncmp.c + mescc ''${MES_PREFIX}/lib/posix/raise.c + mescc ''${MES_PREFIX}/lib/linux/access.c + mescc ''${MES_PREFIX}/lib/linux/brk.c + mescc ''${MES_PREFIX}/lib/linux/chmod.c + mescc ''${MES_PREFIX}/lib/linux/clock_gettime.c + mescc ''${MES_PREFIX}/lib/linux/dup.c + mescc ''${MES_PREFIX}/lib/linux/dup2.c + mescc ''${MES_PREFIX}/lib/linux/execve.c + mescc ''${MES_PREFIX}/lib/linux/fork.c + mescc ''${MES_PREFIX}/lib/linux/fsync.c + mescc ''${MES_PREFIX}/lib/linux/_getcwd.c + mescc ''${MES_PREFIX}/lib/linux/gettimeofday.c + mescc ''${MES_PREFIX}/lib/linux/ioctl3.c + mescc ''${MES_PREFIX}/lib/linux/malloc.c + mescc ''${MES_PREFIX}/lib/linux/_open3.c + mescc ''${MES_PREFIX}/lib/linux/_read.c + mescc ''${MES_PREFIX}/lib/linux/time.c + mescc ''${MES_PREFIX}/lib/linux/unlink.c + mescc ''${MES_PREFIX}/lib/linux/waitpid.c + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall.c + mescc ''${MES_PREFIX}/lib/linux/getpid.c + mescc ''${MES_PREFIX}/lib/linux/kill.c + catm libc.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o isnumber.o abtol.o cast.o eputc.o fdgetc.o fdputc.o fdputs.o fdungetc.o itoa.o ltoa.o ltoab.o mes_open.o ntoab.o oputc.o ultoa.o utoa.o isdigit.o isspace.o isxdigit.o assert_msg.o write.o atoi.o lseek.o __assert_fail.o __buffered_read.o __mes_debug.o execv.o getcwd.o getenv.o isatty.o open.o buffered-read.o setenv.o wait.o fgetc.o fputc.o fputs.o getc.o getchar.o putc.o putchar.o ungetc.o free.o malloc.o realloc.o memchr.o memcmp.o memcpy.o memmove.o memset.o strcmp.o strcpy.o strncmp.o raise.o access.o brk.o chmod.o clock_gettime.o dup.o dup2.o execve.o fork.o fsync.o _getcwd.o gettimeofday.o ioctl3.o _open3.o _read.o time.o unlink.o waitpid.o syscall.o getpid.o kill.o + catm libc.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s isnumber.s abtol.s cast.s eputc.s fdgetc.s fdputc.s fdputs.s fdungetc.s itoa.s ltoa.s ltoab.s mes_open.s ntoab.s oputc.s ultoa.s utoa.s isdigit.s isspace.s isxdigit.s assert_msg.s write.s atoi.s lseek.s __assert_fail.s __buffered_read.s __mes_debug.s execv.s getcwd.s getenv.s isatty.s open.s buffered-read.s setenv.s wait.s fgetc.s fputc.s fputs.s getc.s getchar.s putc.s putchar.s ungetc.s free.s malloc.s realloc.s memchr.s memcmp.s memcpy.s memmove.s memset.s strcmp.s strcpy.s strncmp.s raise.s access.s brk.s chmod.s clock_gettime.s dup.s dup2.s execve.s fork.s fsync.s _getcwd.s gettimeofday.s ioctl3.s _open3.s _read.s time.s unlink.s waitpid.s syscall.s getpid.s kill.s + + # libc+tcc.a + mescc ''${MES_PREFIX}/lib/ctype/islower.c + mescc ''${MES_PREFIX}/lib/ctype/isupper.c + mescc ''${MES_PREFIX}/lib/ctype/tolower.c + mescc ''${MES_PREFIX}/lib/ctype/toupper.c + mescc ''${MES_PREFIX}/lib/mes/abtod.c + mescc ''${MES_PREFIX}/lib/mes/dtoab.c + mescc ''${MES_PREFIX}/lib/mes/search-path.c + mescc ''${MES_PREFIX}/lib/posix/execvp.c + mescc ''${MES_PREFIX}/lib/stdio/fclose.c + mescc ''${MES_PREFIX}/lib/stdio/fdopen.c + mescc ''${MES_PREFIX}/lib/stdio/ferror.c + mescc ''${MES_PREFIX}/lib/stdio/fflush.c + mescc ''${MES_PREFIX}/lib/stdio/fopen.c + mescc ''${MES_PREFIX}/lib/stdio/fprintf.c + mescc ''${MES_PREFIX}/lib/stdio/fread.c + mescc ''${MES_PREFIX}/lib/stdio/fseek.c + mescc ''${MES_PREFIX}/lib/stdio/ftell.c + mescc ''${MES_PREFIX}/lib/stdio/fwrite.c + mescc ''${MES_PREFIX}/lib/stdio/printf.c + mescc ''${MES_PREFIX}/lib/stdio/remove.c + mescc ''${MES_PREFIX}/lib/stdio/snprintf.c + mescc ''${MES_PREFIX}/lib/stdio/sprintf.c + mescc ''${MES_PREFIX}/lib/stdio/sscanf.c + mescc ''${MES_PREFIX}/lib/stdio/vfprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vsnprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vsprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vsscanf.c + mescc ''${MES_PREFIX}/lib/stdlib/calloc.c + mescc ''${MES_PREFIX}/lib/stdlib/qsort.c + mescc ''${MES_PREFIX}/lib/stdlib/strtod.c + mescc ''${MES_PREFIX}/lib/stdlib/strtof.c + mescc ''${MES_PREFIX}/lib/stdlib/strtol.c + mescc ''${MES_PREFIX}/lib/stdlib/strtold.c + mescc ''${MES_PREFIX}/lib/stdlib/strtoll.c + mescc ''${MES_PREFIX}/lib/stdlib/strtoul.c + mescc ''${MES_PREFIX}/lib/stdlib/strtoull.c + mescc ''${MES_PREFIX}/lib/string/memmem.c + mescc ''${MES_PREFIX}/lib/string/strcat.c + mescc ''${MES_PREFIX}/lib/string/strchr.c + mescc ''${MES_PREFIX}/lib/string/strlwr.c + mescc ''${MES_PREFIX}/lib/string/strncpy.c + mescc ''${MES_PREFIX}/lib/string/strrchr.c + mescc ''${MES_PREFIX}/lib/string/strstr.c + mescc ''${MES_PREFIX}/lib/string/strupr.c + mescc ''${MES_PREFIX}/lib/stub/sigaction.c + mescc ''${MES_PREFIX}/lib/stub/ldexp.c + mescc ''${MES_PREFIX}/lib/stub/mprotect.c + mescc ''${MES_PREFIX}/lib/stub/localtime.c + mescc ''${MES_PREFIX}/lib/stub/sigemptyset.c + mescc ''${MES_PREFIX}/lib/x86-mes-mescc/setjmp.c + mescc ''${MES_PREFIX}/lib/linux/close.c + mescc ''${MES_PREFIX}/lib/linux/rmdir.c + mescc ''${MES_PREFIX}/lib/linux/stat.c + catm libc+tcc.a libc.a islower.o isupper.o tolower.o toupper.o abtod.o dtoab.o search-path.o execvp.o fclose.o fdopen.o ferror.o fflush.o fopen.o fprintf.o fread.o fseek.o ftell.o fwrite.o printf.o remove.o snprintf.o sprintf.o sscanf.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o vsscanf.o calloc.o qsort.o strtod.o strtof.o strtol.o strtold.o strtoll.o strtoul.o strtoull.o memmem.o strcat.o strchr.o strlwr.o strncpy.o strrchr.o strstr.o strupr.o sigaction.o ldexp.o mprotect.o localtime.o sigemptyset.o setjmp.o close.o rmdir.o stat.o + catm libc+tcc.s libc.s islower.s isupper.s tolower.s toupper.s abtod.s dtoab.s search-path.s execvp.s fclose.s fdopen.s ferror.s fflush.s fopen.s fprintf.s fread.s fseek.s ftell.s fwrite.s printf.s remove.s snprintf.s sprintf.s sscanf.s vfprintf.s vprintf.s vsnprintf.s vsprintf.s vsscanf.s calloc.s qsort.s strtod.s strtof.s strtol.s strtold.s strtoll.s strtoul.s strtoull.s memmem.s strcat.s strchr.s strlwr.s strncpy.s strrchr.s strstr.s strupr.s sigaction.s ldexp.s mprotect.s localtime.s sigemptyset.s setjmp.s close.s rmdir.s stat.s + + # Build mes itself + mescc ''${MES_PREFIX}/src/builtins.c + mescc ''${MES_PREFIX}/src/cc.c + mescc ''${MES_PREFIX}/src/core.c + mescc ''${MES_PREFIX}/src/display.c + mescc ''${MES_PREFIX}/src/eval-apply.c + mescc ''${MES_PREFIX}/src/gc.c + mescc ''${MES_PREFIX}/src/globals.c + mescc ''${MES_PREFIX}/src/hash.c + mescc ''${MES_PREFIX}/src/lib.c + mescc ''${MES_PREFIX}/src/math.c + mescc ''${MES_PREFIX}/src/mes.c + mescc ''${MES_PREFIX}/src/module.c + mescc ''${MES_PREFIX}/src/posix.c + mescc ''${MES_PREFIX}/src/reader.c + mescc ''${MES_PREFIX}/src/stack.c + mescc ''${MES_PREFIX}/src/string.c + mescc ''${MES_PREFIX}/src/struct.c + mescc ''${MES_PREFIX}/src/symbol.c + mescc ''${MES_PREFIX}/src/vector.c + + # Install libraries + cp libc.a ''${MES_PREFIX}/lib/x86-mes/ + cp libc+tcc.a ''${MES_PREFIX}/lib/x86-mes/ + cp libmescc.a ''${MES_PREFIX}/lib/x86-mes/ + cp libc.s ''${MES_PREFIX}/lib/x86-mes/ + cp libc+tcc.s ''${MES_PREFIX}/lib/x86-mes/ + cp libmescc.s ''${MES_PREFIX}/lib/x86-mes/ + cp crt1.o ''${MES_PREFIX}/lib/x86-mes/ + cp crt1.s ''${MES_PREFIX}/lib/x86-mes/ + + # Link everything into new mes executable + ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- --base-address 0x08048000 -L ''${MES_PREFIX}/lib -nostdlib -o ''${out}/bin/mes -L . crt1.o builtins.o cc.o core.o display.o eval-apply.o gc.o globals.o hash.o lib.o math.o mes.o module.o posix.o reader.o stack.o string.o struct.o symbol.o vector.o -lc -lmescc + ''; +}) // { + mesPrefix = "/share/mes-${version}"; +} From ccafb8b110fb503aeaa9fb2f5d132bb5c009b8b4 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 24 Apr 2023 14:35:22 +1000 Subject: [PATCH 03/35] trusting-trust.tinycc-with-mes-libc: init at unstable-2023-04-20 --- .../linux/trusting-trust/default.nix | 2 + .../trusting-trust/tinycc/bootstrappable.nix | 160 ++++++++++++++++++ .../linux/trusting-trust/tinycc/default.nix | 138 +++++++++++++++ 3 files changed, 300 insertions(+) create mode 100644 pkgs/os-specific/linux/trusting-trust/tinycc/bootstrappable.nix create mode 100644 pkgs/os-specific/linux/trusting-trust/tinycc/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/default.nix b/pkgs/os-specific/linux/trusting-trust/default.nix index d6092c03156dc..24b9f735f9493 100644 --- a/pkgs/os-specific/linux/trusting-trust/default.nix +++ b/pkgs/os-specific/linux/trusting-trust/default.nix @@ -13,4 +13,6 @@ lib.makeScope newScope (self: with self; { inherit (callPackage ./stage0-posix { }) kaem mkKaemDerivation m2libc mescc-tools mescc-tools-extra writeTextFile writeText; mes = callPackage ./mes { }; + + tinycc-with-mes-libc = callPackage ./tinycc/default.nix { }; }) diff --git a/pkgs/os-specific/linux/trusting-trust/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/trusting-trust/tinycc/bootstrappable.nix new file mode 100644 index 0000000000000..872295a740720 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/tinycc/bootstrappable.nix @@ -0,0 +1,160 @@ +# Bootstrappable TCC is a fork from mainline TCC development +# that can be compiled by MesCC + +{ lib +, mkKaemDerivation +, fetchurl +, mes +, buildTinyccN +, unified-libc +}: +let + version = "unstable-2023-04-20"; + src = builtins.fetchTarball { + url = "https://gitlab.com/janneke/tinycc/-/archive/80114c4da6b17fbaabb399cc29f427e368309bc8/tinycc-80114c4da6b17fbaabb399cc29f427e368309bc8.tar.gz"; + sha256 = "1xhn5qgph32dlxp3fkl4d78f21hvlb2r5dpxvh295x8spkbmbrwp"; + }; + + mes-tcc = mkKaemDerivation rec { + pname = "mes-tcc"; + version = "0.9.27"; + + buildPhase = '' + # Create config.h + catm config.h + + ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ + -S \ + -o tcc.s \ + -I . \ + -D BOOTSTRAP=1 \ + -I ${src} \ + -D TCC_TARGET_I386=1 \ + -D inline= \ + -D CONFIG_TCCDIR=\"''${out}/lib\" \ + -D CONFIG_SYSROOT=\"\" \ + -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include\" \ + -D TCC_LIBGCC=\"${mes}${mes.mesPrefix}/lib/x86-mes/libc.a\" \ + -D CONFIG_TCC_LIBTCC1_MES=0 \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"${version}\" \ + -D ONE_SOURCE=1 \ + ${src}/tcc.c + + mkdir -p ''${out}/bin + ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ + -l c+tcc \ + -o ''${out}/bin/tcc \ + tcc.s + + # Quick test + ''${out}/bin/tcc -version + + # Recompile the mes C library + mkdir -p ''${out}/lib + cd ${mes}${mes.mesPrefix} + + # crt1.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c + + # crtn.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c + + # crti.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c + + # libc+gcc.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o + + # libtcc1.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/libtcc1.o lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o + + # libgetopt.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o + ''; + }; + + boot0-tcc = buildTinyccN { + pname = "boot0-tcc"; + inherit src version; + prev = mes-tcc; + buildOptions = [ + "-D HAVE_LONG_LONG_STUB=1" + "-D HAVE_SETJMP=1" + ]; + libtccBuildOptions = [ + "-D HAVE_LONG_LONG_STUB=1" + ]; + }; + + boot1-tcc = buildTinyccN { + pname = "boot1-tcc"; + inherit src version; + prev = boot0-tcc; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + ]; + libtccBuildOptions = [ + "-D HAVE_LONG_LONG=1" + ]; + }; + + boot2-tcc = buildTinyccN { + pname = "boot2-tcc"; + inherit src version; + prev = boot1-tcc; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT_STUB=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT_STUB=1" + "-D HAVE_LONG_LONG=1" + ]; + }; + + boot3-tcc = buildTinyccN { + pname = "boot3-tcc"; + inherit src version; + prev = boot2-tcc; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + ]; + }; + + boot4-tcc = buildTinyccN { + pname = "boot4-tcc"; + inherit src version; + prev = boot3-tcc; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + ]; + }; +in +boot4-tcc diff --git a/pkgs/os-specific/linux/trusting-trust/tinycc/default.nix b/pkgs/os-specific/linux/trusting-trust/tinycc/default.nix new file mode 100644 index 0000000000000..f7e8bf7d2f8f7 --- /dev/null +++ b/pkgs/os-specific/linux/trusting-trust/tinycc/default.nix @@ -0,0 +1,138 @@ +{ lib +, mkKaemDerivation +, fetchurl +, callPackage +, mes +}: +let + version = "unstable-2023-04-20"; + src = builtins.fetchTarball { + url = "https://repo.or.cz/tinycc.git/snapshot/86f3d8e33105435946383aee52487b5ddf918140.tar.gz"; + sha256 = "009xvbiskg2ims2xag8w78yksnrqpm33asq5arxaph05hd59yss0"; + }; + + unified-libc = mkKaemDerivation { + name = "mes-unified-libc.c"; + buildPhase = '' + cd ${mes}${mes.mesPrefix}/lib + catm ''${out} ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c dirent/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/x86-mes-gcc/_exit.c linux/x86-mes-gcc/syscall.c linux/x86-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/rand.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c x86-mes-gcc/setjmp.c + ''; + }; + + buildTinyccN = { + pname, + src, + version, + prev, + buildOptions, + libtccBuildOptions, + }: + let + options = lib.strings.concatStringsSep " " buildOptions; + libtccOptions = lib.strings.concatStringsSep " " libtccBuildOptions; + in + mkKaemDerivation { + inherit pname version; + buildPhase = '' + catm config.h + mkdir -p ''${out}/bin ''${out}/lib + ${prev}/bin/tcc \ + -g \ + -v \ + -static \ + -o ''${out}/bin/tcc \ + -D BOOTSTRAP=1 \ + ${options} \ + -I . \ + -I ${src} \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"''${out}/lib\" \ + -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"\" \ + -D CONFIG_TCC_LIBPATHS=\"''${out}/lib\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include:${src}/include\" \ + -D TCC_LIBGCC=\"libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"${version}\" \ + -D ONE_SOURCE=1 \ + -L ${prev}/lib \ + ${src}/tcc.c + + ''${out}/bin/tcc -v + + cd ${mes}${mes.mesPrefix} + # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c + ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o ''${TMPDIR}/libtcc1.o ${src}/lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o + ''; + }; + + boot4-tcc = callPackage ./bootstrappable.nix { inherit buildTinyccN unified-libc; }; + + tccdefs = mkKaemDerivation { + pname = "tccdefs"; + inherit version; + buildPhase = '' + mkdir ''${out} + ${boot4-tcc}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c + ./c2str ${src}/include/tccdefs.h ''${out}/tccdefs_.h + ''; + }; + + boot5-tcc = buildTinyccN { + pname = "boot5-tcc"; + inherit src version; + prev = boot4-tcc; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + }; + + tinycc-with-mes-libc = buildTinyccN { + pname = "tinycc-with-mes-libc"; + inherit src version; + prev = boot5-tcc; + buildOptions = [ + "-std=c99" + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + }; +in +tinycc-with-mes-libc From d0594d2f4230dcd59182245e15ad7c35fae6ee41 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 17:04:01 +1000 Subject: [PATCH 04/35] minimal-bootstrap: rename from trusting-trust --- .../linux/{trusting-trust => minimal-bootstrap}/default.nix | 0 .../linux/{trusting-trust => minimal-bootstrap}/mes/config.h | 0 .../{trusting-trust => minimal-bootstrap}/mes/default.nix | 0 .../stage0-posix/default.nix | 0 .../stage0-posix/hex0.nix | 0 .../stage0-posix/kaem-minimal.nix | 0 .../stage0-posix/mescc-tools-extra/build.kaem | 0 .../stage0-posix/mescc-tools-extra/default.nix | 0 .../stage0-posix/mescc-tools/build.kaem | 0 .../stage0-posix/mescc-tools/default.nix | 0 .../stage0-posix/sources.nix | 0 .../stage0-posix/stage0-posix-x86.nix | 0 .../stage0-posix/utils.nix | 0 .../tinycc/bootstrappable.nix | 0 .../{trusting-trust => minimal-bootstrap}/tinycc/default.nix | 0 pkgs/top-level/all-packages.nix | 4 ++-- 16 files changed, 2 insertions(+), 2 deletions(-) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/default.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/mes/config.h (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/mes/default.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/default.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/hex0.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/kaem-minimal.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/mescc-tools-extra/build.kaem (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/mescc-tools-extra/default.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/mescc-tools/build.kaem (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/mescc-tools/default.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/sources.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/stage0-posix-x86.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/stage0-posix/utils.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/tinycc/bootstrappable.nix (100%) rename pkgs/os-specific/linux/{trusting-trust => minimal-bootstrap}/tinycc/default.nix (100%) diff --git a/pkgs/os-specific/linux/trusting-trust/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/default.nix rename to pkgs/os-specific/linux/minimal-bootstrap/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/mes/config.h b/pkgs/os-specific/linux/minimal-bootstrap/mes/config.h similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/mes/config.h rename to pkgs/os-specific/linux/minimal-bootstrap/mes/config.h diff --git a/pkgs/os-specific/linux/trusting-trust/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/mes/default.nix rename to pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/default.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/hex0.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/kaem-minimal.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/kaem-minimal.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/build.kaem b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/build.kaem rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools-extra/default.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/build.kaem b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/build.kaem rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/mescc-tools/default.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/sources.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/sources.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/sources.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/stage0-posix-x86.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix diff --git a/pkgs/os-specific/linux/trusting-trust/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/stage0-posix/utils.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix diff --git a/pkgs/os-specific/linux/trusting-trust/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/tinycc/bootstrappable.nix rename to pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix diff --git a/pkgs/os-specific/linux/trusting-trust/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix similarity index 100% rename from pkgs/os-specific/linux/trusting-trust/tinycc/default.nix rename to pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f21cec291fb6e..dfdc90afaa85a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -26943,6 +26943,8 @@ with pkgs; metastore = callPackage ../os-specific/linux/metastore { }; + minimal-bootstrap = recurseIntoAttrs (callPackage ../os-specific/linux/minimal-bootstrap { }); + mingetty = callPackage ../os-specific/linux/mingetty { }; miraclecast = callPackage ../os-specific/linux/miraclecast { }; @@ -27459,8 +27461,6 @@ with pkgs; trust-dns = callPackage ../servers/dns/trust-dns { }; - trusting-trust = recurseIntoAttrs (callPackage ../os-specific/linux/trusting-trust { }); - trustymail = callPackage ../tools/security/trustymail { }; tunctl = callPackage ../os-specific/linux/tunctl { }; From b390cba84b25d42a9b27943abe799551df0eddb3 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 17:09:37 +1000 Subject: [PATCH 05/35] minimal-bootstrap.stage0-posix: replace runBareCommand with raw derivation --- .../stage0-posix/default.nix | 5 - .../minimal-bootstrap/stage0-posix/hex0.nix | 14 ++- .../stage0-posix/kaem-minimal.nix | 15 ++- .../stage0-posix/stage0-posix-x86.nix | 93 ++++++++++--------- 4 files changed, 72 insertions(+), 55 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index d7643ee972243..c26bca3785713 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -6,11 +6,6 @@ lib.makeScope newScope (self: with self; { callPackage = self.callPackage; - runBareCommand = pname: builder: args: derivation { - inherit system builder args; - name = "${pname}-${version}"; - }; - inherit (callPackage ./sources.nix { }) version bootstrap-seeds-src m2-mesoplanet-src m2-planet-src m2libc mescc-tools-src mescc-tools-extra-src stage0-posix-x86-src; hex0 = callPackage ./hex0.nix { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix index 50c293a447062..ef9a4ad77c29e 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix @@ -1,6 +1,6 @@ -{ runBareCommand -, system +{ system , bootstrap-seeds-src +, version }: let throwSystem = throw "Unsupported system: ${system}"; @@ -11,4 +11,12 @@ let seed = "${bootstrap-seeds-src}/POSIX/${arch}/hex0-seed"; src = "${bootstrap-seeds-src}/POSIX/${arch}/hex0_${arch}.hex0"; in -runBareCommand "hex0" seed [ src (placeholder "out") ] +derivation { + inherit system; + name = "hex0-${version}"; + builder = seed; + args = [ + src + (placeholder "out") + ]; +} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix index a142fb352933e..760e7983f4435 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix @@ -1,7 +1,7 @@ -{ runBareCommand -, system +{ system , bootstrap-seeds-src , hex0 +, version }: let throwSystem = throw "Unsupported system: ${system}"; @@ -11,4 +11,13 @@ let src = "${bootstrap-seeds-src}/POSIX/${arch}/kaem-minimal.hex0"; in -runBareCommand "kaem-minimal" hex0 [ src (placeholder "out") ] +derivation { + inherit system; + name = "kaem-minimal-${version}"; + builder = hex0; + args = [ + src + (placeholder "out") + ]; +} + diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix index 457aa04bd85a2..4c47917433df7 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix @@ -4,22 +4,27 @@ # Warning all binaries prior to the use of blood-elf will not be readable by # Objdump, you may need to use ndism or gdb to view the assembly in the binary. -{ runBareCommand -, system +{ system , hex0 , stage0-posix-x86-src , m2libc , m2-planet-src , mescc-tools-src +, version }: rec { out = placeholder "out"; + run = pname: builder: args: derivation { + inherit system builder args; + name = "${pname}-${version}"; + }; + ################################ # Phase-1 Build hex1 from hex0 # ################################ - hex1 = runBareCommand "hex1" hex0 ["${stage0-posix-x86-src}/hex1_x86.hex0" out]; + hex1 = run "hex1" hex0 ["${stage0-posix-x86-src}/hex1_x86.hex0" out]; # hex1 adds support for single character labels and is available in various forms # in mescc-tools/x86_bootstrap to allow you various ways to verify correctness @@ -28,7 +33,7 @@ rec { # Phase-2 Build hex2 from hex1 # ################################ - hex2-0 = runBareCommand "hex2" hex1 ["${stage0-posix-x86-src}/hex2_x86.hex1" out]; + hex2-0 = run "hex2" hex1 ["${stage0-posix-x86-src}/hex2_x86.hex1" out]; # hex2 adds support for long labels and absolute addresses thus allowing it # to function as an effective linker for later stages of the bootstrap @@ -39,7 +44,7 @@ rec { # Phase-2b Build catm from hex2 # ################################# - catm = runBareCommand "catm" hex2-0 ["${stage0-posix-x86-src}/catm_x86.hex2" out]; + catm = run "catm" hex2-0 ["${stage0-posix-x86-src}/catm_x86.hex2" out]; # catm removes the need for cat or shell support for redirection by providing # equivalent functionality via catm output_file input1 input2 ... inputN @@ -48,8 +53,8 @@ rec { # Phase-3 Build M0 from hex2 # ############################## - M0_hex2 = runBareCommand "M0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" "${stage0-posix-x86-src}/M0_x86.hex2"]; - M0 = runBareCommand "M0" hex2-0 [M0_hex2 out]; + M0_hex2 = run "M0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" "${stage0-posix-x86-src}/M0_x86.hex2"]; + M0 = run "M0" hex2-0 [M0_hex2 out]; # M0 is the architecture specific version of M1 and is by design single # architecture only and will be replaced by the C code version of M1 @@ -58,15 +63,15 @@ rec { # Phase-4 Build cc_x86 from M0 # ################################ - cc_x86-0_hex2 = runBareCommand "cc_x86-0.hex2" M0 ["${stage0-posix-x86-src}/cc_x86.M1" out]; - cc_x86-1_hex2 = runBareCommand "cc_x86-1.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" cc_x86-0_hex2]; - cc_x86 = runBareCommand "cc_x86" hex2-0 [cc_x86-1_hex2 out]; + cc_x86-0_hex2 = run "cc_x86-0.hex2" M0 ["${stage0-posix-x86-src}/cc_x86.M1" out]; + cc_x86-1_hex2 = run "cc_x86-1.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" cc_x86-0_hex2]; + cc_x86 = run "cc_x86" hex2-0 [cc_x86-1_hex2 out]; ####################################### # Phase-5 Build M2-Planet from cc_x86 # ####################################### - M2-0_c = runBareCommand "M2-0.c" catm [ + M2-0_c = run "M2-0.c" catm [ out "${m2libc}/x86/linux/bootstrap.c" "${m2-planet-src}/cc.h" @@ -79,17 +84,17 @@ rec { "${m2-planet-src}/cc_macro.c" "${m2-planet-src}/cc.c" ]; - M2-0_M1 = runBareCommand "M2-0.M1" cc_x86 [M2-0_c out]; - M2-0-0_M1 = runBareCommand "M2-0-0.M1" catm [out "${stage0-posix-x86-src}/x86_defs.M1" "${stage0-posix-x86-src}/libc-core.M1" M2-0_M1]; - M2-0_hex2 = runBareCommand "M2-0.hex2" M0 [M2-0-0_M1 out]; - M2-0-0_hex2 = runBareCommand "M2-0-0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" M2-0_hex2]; - M2 = runBareCommand "M2" hex2-0 [M2-0-0_hex2 out]; + M2-0_M1 = run "M2-0.M1" cc_x86 [M2-0_c out]; + M2-0-0_M1 = run "M2-0-0.M1" catm [out "${stage0-posix-x86-src}/x86_defs.M1" "${stage0-posix-x86-src}/libc-core.M1" M2-0_M1]; + M2-0_hex2 = run "M2-0.hex2" M0 [M2-0-0_M1 out]; + M2-0-0_hex2 = run "M2-0-0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" M2-0_hex2]; + M2 = run "M2" hex2-0 [M2-0-0_hex2 out]; ############################################ # Phase-6 Build blood-elf-0 from C sources # ############################################ - blood-elf-0_M1 = runBareCommand "blood-elf-0.M1" M2 [ + blood-elf-0_M1 = run "blood-elf-0.M1" M2 [ "--architecture" "x86" "-f" "${m2libc}/x86/linux/bootstrap.c" "-f" "${m2libc}/bootstrappable.c" @@ -99,10 +104,10 @@ rec { "-o" out ]; - blood-elf-0-0_M1 = runBareCommand "blood-elf-0-0.M1" catm [out "${m2libc}/x86/x86_defs.M1" "${m2libc}/x86/libc-core.M1" blood-elf-0_M1]; - blood-elf-0_hex2 = runBareCommand "blood-elf-0.hex2" M0 [blood-elf-0-0_M1 out]; - blood-elf-0-0_hex2 = runBareCommand "blood-elf-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86.hex2" blood-elf-0_hex2]; - blood-elf-0 = runBareCommand "blood-elf-0" hex2-0 [blood-elf-0-0_hex2 out]; + blood-elf-0-0_M1 = run "blood-elf-0-0.M1" catm [out "${m2libc}/x86/x86_defs.M1" "${m2libc}/x86/libc-core.M1" blood-elf-0_M1]; + blood-elf-0_hex2 = run "blood-elf-0.hex2" M0 [blood-elf-0-0_M1 out]; + blood-elf-0-0_hex2 = run "blood-elf-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86.hex2" blood-elf-0_hex2]; + blood-elf-0 = run "blood-elf-0" hex2-0 [blood-elf-0-0_hex2 out]; # This is the last stage where the binaries will not have debug info # and the last piece built that isn't part of the output binaries @@ -111,7 +116,7 @@ rec { # Phase-7 Build M1-0 from C sources # ##################################### - M1-macro-0_M1 = runBareCommand "M1-macro-0.M1" M2 [ + M1-macro-0_M1 = run "M1-macro-0.M1" M2 [ "--architecture" "x86" "-f" "${m2libc}/x86/linux/bootstrap.c" "-f" "${m2libc}/bootstrappable.c" @@ -122,11 +127,11 @@ rec { "-o" out ]; - M1-macro-0-footer_M1 = runBareCommand "M1-macro-0-footer.M1" blood-elf-0 ["-f" M1-macro-0_M1 "--little-endian" "-o" out]; - M1-macro-0-0_M1 = runBareCommand "M1-macro-0-0.M1" catm [out "${m2libc}/x86/x86_defs.M1" "${m2libc}/x86/libc-core.M1" M1-macro-0_M1 M1-macro-0-footer_M1]; - M1-macro-0_hex2 = runBareCommand "M1-macro-0.hex2" M0 [M1-macro-0-0_M1 out]; - M1-macro-0-0_hex2 = runBareCommand "M1-macro-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86-debug.hex2" M1-macro-0_hex2]; - M1-0 = runBareCommand "M1-0" hex2-0 [M1-macro-0-0_hex2 out]; + M1-macro-0-footer_M1 = run "M1-macro-0-footer.M1" blood-elf-0 ["-f" M1-macro-0_M1 "--little-endian" "-o" out]; + M1-macro-0-0_M1 = run "M1-macro-0-0.M1" catm [out "${m2libc}/x86/x86_defs.M1" "${m2libc}/x86/libc-core.M1" M1-macro-0_M1 M1-macro-0-footer_M1]; + M1-macro-0_hex2 = run "M1-macro-0.hex2" M0 [M1-macro-0-0_M1 out]; + M1-macro-0-0_hex2 = run "M1-macro-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86-debug.hex2" M1-macro-0_hex2]; + M1-0 = run "M1-0" hex2-0 [M1-macro-0-0_hex2 out]; # This is the last stage where catm will need to be used and the last stage where # M0 is used, as we will being using it's much more powerful and cross-platform @@ -136,7 +141,7 @@ rec { # Phase-8 Build hex2-1 from C sources # ####################################### - hex2_linker-0_M1 = runBareCommand "hex2_linker-0.M1" M2 [ + hex2_linker-0_M1 = run "hex2_linker-0.M1" M2 [ "--architecture" "x86" "-f" "${m2libc}/sys/types.h" "-f" "${m2libc}/stddef.h" @@ -156,9 +161,9 @@ rec { "-o" out ]; - hex2_linker-0-footer_M1 = runBareCommand "hex2_linker-0-footer.M1" blood-elf-0 ["-f" hex2_linker-0_M1 "--little-endian" "-o" out]; + hex2_linker-0-footer_M1 = run "hex2_linker-0-footer.M1" blood-elf-0 ["-f" hex2_linker-0_M1 "--little-endian" "-o" out]; - hex2_linker-0_hex2 = runBareCommand "hex2_linker-0.hex2" M1-0 [ + hex2_linker-0_hex2 = run "hex2_linker-0.hex2" M1-0 [ "--architecture" "x86" "--little-endian" "-f" "${m2libc}/x86/x86_defs.M1" @@ -168,9 +173,9 @@ rec { "-o" out ]; - hex2_linker-0-0_hex2 = runBareCommand "hex2_linker-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86-debug.hex2" hex2_linker-0_hex2]; + hex2_linker-0-0_hex2 = run "hex2_linker-0-0.hex2" catm [out "${m2libc}/x86/ELF-x86-debug.hex2" hex2_linker-0_hex2]; - hex2-1 = runBareCommand "hex2-1" hex2-0 [hex2_linker-0-0_hex2 out]; + hex2-1 = run "hex2-1" hex2-0 [hex2_linker-0-0_hex2 out]; # This is the last stage where we will be using the handwritten hex2 and instead # be using the far more powerful, cross-platform version with a bunch more goodies @@ -179,7 +184,7 @@ rec { # Phase-9 Build M1 from C sources # ################################### - M1-macro-1_M1 = runBareCommand "M1-macro-1.M1" M2 [ + M1-macro-1_M1 = run "M1-macro-1.M1" M2 [ "--architecture" "x86" "-f" "${m2libc}/sys/types.h" "-f" "${m2libc}/stddef.h" @@ -197,9 +202,9 @@ rec { "-o" out ]; - M1-macro-1-footer_M1 = runBareCommand "M1-macro-1-footer.M1" blood-elf-0 ["-f" M1-macro-1_M1 "--little-endian" "-o" out]; + M1-macro-1-footer_M1 = run "M1-macro-1-footer.M1" blood-elf-0 ["-f" M1-macro-1_M1 "--little-endian" "-o" out]; - M1-macro-1_hex2 = runBareCommand "M1-macro-1.hex2" M1-0 [ + M1-macro-1_hex2 = run "M1-macro-1.hex2" M1-0 [ "--architecture" "x86" "--little-endian" "-f" "${m2libc}/x86/x86_defs.M1" @@ -209,7 +214,7 @@ rec { "-o" out ]; - M1 = runBareCommand "M1" hex2-1 [ + M1 = run "M1" hex2-1 [ "--architecture" "x86" "--little-endian" "--base-address" "0x8048000" @@ -222,7 +227,7 @@ rec { # Phase-10 Build hex2 from C sources # ###################################### - hex2_linker-2_M1 = runBareCommand "hex2_linker-2.M1" M2 [ + hex2_linker-2_M1 = run "hex2_linker-2.M1" M2 [ "--architecture" "x86" "-f" "${m2libc}/sys/types.h" "-f" "${m2libc}/stddef.h" @@ -242,9 +247,9 @@ rec { "-o" out ]; - hex2_linker-2-footer_M1 = runBareCommand "hex2_linker-2-footer.M1" blood-elf-0 ["-f" hex2_linker-2_M1 "--little-endian" "-o" out]; + hex2_linker-2-footer_M1 = run "hex2_linker-2-footer.M1" blood-elf-0 ["-f" hex2_linker-2_M1 "--little-endian" "-o" out]; - hex2_linker-2_hex2 = runBareCommand "hex2_linker-2.hex2" M1 [ + hex2_linker-2_hex2 = run "hex2_linker-2.hex2" M1 [ "--architecture" "x86" "--little-endian" "-f" "${m2libc}/x86/x86_defs.M1" @@ -254,7 +259,7 @@ rec { "-o" out ]; - hex2 = runBareCommand "hex2" hex2-1 [ + hex2 = run "hex2" hex2-1 [ "--architecture" "x86" "--little-endian" "--base-address" "0x8048000" @@ -267,7 +272,7 @@ rec { # Phase-11 Build kaem from C sources # ###################################### - kaem_M1 = runBareCommand "kaem.M1" M2 [ + kaem_M1 = run "kaem.M1" M2 [ "--architecture" "x86" "-f" "${m2libc}/sys/types.h" "-f" "${m2libc}/stddef.h" @@ -287,9 +292,9 @@ rec { "-o" out ]; - kaem-footer_M1 = runBareCommand "kaem-footer.M1" blood-elf-0 ["-f" kaem_M1 "--little-endian" "-o" out]; + kaem-footer_M1 = run "kaem-footer.M1" blood-elf-0 ["-f" kaem_M1 "--little-endian" "-o" out]; - kaem_hex2 = runBareCommand "kaem.hex2" M1 [ + kaem_hex2 = run "kaem.hex2" M1 [ "--architecture" "x86" "--little-endian" "-f" "${m2libc}/x86/x86_defs.M1" @@ -299,7 +304,7 @@ rec { "-o" out ]; - kaem-unwrapped = runBareCommand "kaem-unwrapped" hex2 [ + kaem-unwrapped = run "kaem-unwrapped" hex2 [ "--architecture" "x86" "--little-endian" "-f" "${m2libc}/x86/ELF-x86-debug.hex2" From c8ecd8ed5778bf57a1044a0dfbb7254e790e3a74 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 17:23:42 +1000 Subject: [PATCH 06/35] minimal-bootstrap.stage0-posix: replace mkKaemDerivation with runCommand --- .../linux/minimal-bootstrap/default.nix | 2 +- .../linux/minimal-bootstrap/mes/default.nix | 499 +++++++++--------- .../stage0-posix/default.nix | 2 +- .../minimal-bootstrap/stage0-posix/utils.nix | 22 +- .../tinycc/bootstrappable.nix | 129 +++-- .../minimal-bootstrap/tinycc/default.nix | 112 ++-- 6 files changed, 367 insertions(+), 399 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 24b9f735f9493..510f0e047ec00 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -10,7 +10,7 @@ lib.makeScope newScope (self: with self; { inherit system; }; - inherit (callPackage ./stage0-posix { }) kaem mkKaemDerivation m2libc mescc-tools mescc-tools-extra writeTextFile writeText; + inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; mes = callPackage ./mes { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index 3e04cc54c1c53..6c179c4fbfec5 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -1,4 +1,4 @@ -{ mkKaemDerivation +{ runCommand , fetchurl , writeText , m2libc @@ -19,279 +19,274 @@ let sha256 = "06rg6pn4k8smyydwls1abc9h702cri3z65ac9gvc4rxxklpynslk"; }; in -(mkKaemDerivation { - pname = "mes"; - inherit version; +# Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem +(runCommand "mes-${version}" {} '' + # Unpack source + ungz --file ${src} --output mes.tar + mkdir ''${out} ''${out}/bin ''${out}/share + cd ''${out}/share + untar --non-strict --file ''${NIX_BUILD_TOP}/mes.tar # ignore symlinks - # Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem - buildPhase = '' - # Unpack source - ungz --file ${src} --output mes.tar - mkdir ''${out} ''${out}/bin ''${out}/share - cd ''${out}/share - untar --non-strict --file ''${NIX_BUILD_TOP}/mes.tar # ignore symlinks + MES_PREFIX=''${out}/share/mes-${version} + LIBDIR=''${MES_PREFIX}/lib - MES_PREFIX=''${out}/share/mes-${version} - LIBDIR=''${MES_PREFIX}/lib + cd ''${MES_PREFIX} - cd ''${MES_PREFIX} + cp ${./config.h} include/mes/config.h + replace --file include/mes/config.h --output include/mes/config.h --match-on @VERSION@ --replace-with ${version} - cp ${./config.h} include/mes/config.h - replace --file include/mes/config.h --output include/mes/config.h --match-on @VERSION@ --replace-with ${version} + mkdir include/arch + cp include/linux/x86/syscall.h include/arch/syscall.h + cp include/linux/x86/kernel-stat.h include/arch/kernel-stat.h - mkdir include/arch - cp include/linux/x86/syscall.h include/arch/syscall.h - cp include/linux/x86/kernel-stat.h include/arch/kernel-stat.h + # Remove pregenerated files + rm mes/module/mes/psyntax.pp mes/module/mes/psyntax.pp.header - # Remove pregenerated files - rm mes/module/mes/psyntax.pp mes/module/mes/psyntax.pp.header + # These files are symlinked in the repo + cp mes/module/srfi/srfi-9-struct.mes mes/module/srfi/srfi-9.mes + cp mes/module/srfi/srfi-9/gnu-struct.mes mes/module/srfi/srfi-9/gnu.mes - # These files are symlinked in the repo - cp mes/module/srfi/srfi-9-struct.mes mes/module/srfi/srfi-9.mes - cp mes/module/srfi/srfi-9/gnu-struct.mes mes/module/srfi/srfi-9/gnu.mes + # Fixes to support newer M2-Planet + catm x86_defs.M1 ${m2libc}/x86/x86_defs.M1 lib/m2/x86/x86_defs.M1 + cp x86_defs.M1 lib/m2/x86/x86_defs.M1 + rm x86_defs.M1 - # Fixes to support newer M2-Planet - catm x86_defs.M1 ${m2libc}/x86/x86_defs.M1 lib/m2/x86/x86_defs.M1 - cp x86_defs.M1 lib/m2/x86/x86_defs.M1 - rm x86_defs.M1 + # Remove environment impurities + __GUILE_LOAD_PATH="\"''${MES_PREFIX}/mes/module:''${MES_PREFIX}/module:${nyaccModules}/module\"" + boot0_scm=mes/module/mes/boot-0.scm + guile_mes=mes/module/mes/guile.mes + replace --file ''${boot0_scm} --output ''${boot0_scm} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} + replace --file ''${guile_mes} --output ''${guile_mes} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} - # Remove environment impurities - __GUILE_LOAD_PATH="\"''${MES_PREFIX}/mes/module:''${MES_PREFIX}/module:${nyaccModules}/module\"" - boot0_scm=mes/module/mes/boot-0.scm - guile_mes=mes/module/mes/guile.mes - replace --file ''${boot0_scm} --output ''${boot0_scm} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} - replace --file ''${guile_mes} --output ''${guile_mes} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} + module_mescc_scm=module/mescc/mescc.scm + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"M1\")" --replace-with "\"${mescc-tools}/bin/M1\"" + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"HEX2\")" --replace-with "\"${mescc-tools}/bin/hex2\"" + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"BLOOD_ELF\")" --replace-with "\"${mescc-tools}/bin/blood-elf\"" + replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" - module_mescc_scm=module/mescc/mescc.scm - replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"M1\")" --replace-with "\"${mescc-tools}/bin/M1\"" - replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"HEX2\")" --replace-with "\"${mescc-tools}/bin/hex2\"" - replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"BLOOD_ELF\")" --replace-with "\"${mescc-tools}/bin/blood-elf\"" - replace --file ''${module_mescc_scm} --output ''${module_mescc_scm} --match-on "(getenv \"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" + mes_c=src/mes.c + replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" + replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" - mes_c=src/mes.c - replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" - replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" + gc_c=src/gc.c + replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_ARENA\")" --replace-with "\"100000000\"" + replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_MAX_ARENA\")" --replace-with "\"100000000\"" + replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_STACK\")" --replace-with "\"6000000\"" - gc_c=src/gc.c - replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_ARENA\")" --replace-with "\"100000000\"" - replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_MAX_ARENA\")" --replace-with "\"100000000\"" - replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_STACK\")" --replace-with "\"6000000\"" + # Create mescc.scm + mescc_in=scripts/mescc.scm.in + replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" + replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"includedir\")" --replace-with "\"''${MES_PREFIX}/include\"" + replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"libdir\")" --replace-with "\"''${MES_PREFIX}/lib\"" + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @prefix@ --replace-with ''${MES_PREFIX} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @VERSION@ --replace-with ${version} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_cpu@ --replace-with ${ARCH} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_kernel@ --replace-with linux + cp ''${mescc_in} ''${out}/bin/mescc.scm + chmod 555 ''${out}/bin/mescc.scm - # Create mescc.scm - mescc_in=scripts/mescc.scm.in - replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" - replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"includedir\")" --replace-with "\"''${MES_PREFIX}/include\"" - replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"libdir\")" --replace-with "\"''${MES_PREFIX}/lib\"" - replace --file ''${mescc_in} --output ''${mescc_in} --match-on @prefix@ --replace-with ''${MES_PREFIX} - replace --file ''${mescc_in} --output ''${mescc_in} --match-on @VERSION@ --replace-with ${version} - replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_cpu@ --replace-with ${ARCH} - replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_kernel@ --replace-with linux - cp ''${mescc_in} ''${out}/bin/mescc.scm - chmod 555 ''${out}/bin/mescc.scm + # Build mes-m2 + mes_cpu=${ARCH} + stage0_cpu=${ARCH} + kaem --verbose --strict --file kaem.run + cp bin/mes-m2 ''${out}/bin/mes-m2 + chmod 555 ''${out}/bin/mes-m2 - # Build mes-m2 - mes_cpu=${ARCH} - stage0_cpu=${ARCH} - kaem --verbose --strict --file kaem.run - cp bin/mes-m2 ''${out}/bin/mes-m2 - chmod 555 ''${out}/bin/mes-m2 + # Recompile Mes and Mes C library using mes-m2 bootstrapped Mes + cd ''${NIX_BUILD_TOP} + alias mescc="''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -D HAVE_CONFIG_H=1 -I ''${MES_PREFIX}/include -I ''${MES_PREFIX}/include/linux/x86 -c" - # Recompile Mes and Mes C library using mes-m2 bootstrapped Mes - cd ''${NIX_BUILD_TOP} - alias mescc="''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -D HAVE_CONFIG_H=1 -I ''${MES_PREFIX}/include -I ''${MES_PREFIX}/include/linux/x86 -c" + # Start with crt1.o + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/crt1.c - # Start with crt1.o - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/crt1.c + # Now for libc-mini.a + mescc ''${MES_PREFIX}/lib/mes/eputs.c + mescc ''${MES_PREFIX}/lib/mes/oputs.c + mescc ''${MES_PREFIX}/lib/mes/globals.c + mescc ''${MES_PREFIX}/lib/stdlib/exit.c + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_exit.c + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_write.c + mescc ''${MES_PREFIX}/lib/stdlib/puts.c + mescc ''${MES_PREFIX}/lib/string/strlen.c + mescc ''${MES_PREFIX}/lib/mes/mini-write.c + catm libc-mini.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o mini-write.o + catm libc-mini.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s mini-write.s - # Now for libc-mini.a - mescc ''${MES_PREFIX}/lib/mes/eputs.c - mescc ''${MES_PREFIX}/lib/mes/oputs.c - mescc ''${MES_PREFIX}/lib/mes/globals.c - mescc ''${MES_PREFIX}/lib/stdlib/exit.c - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_exit.c - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_write.c - mescc ''${MES_PREFIX}/lib/stdlib/puts.c - mescc ''${MES_PREFIX}/lib/string/strlen.c - mescc ''${MES_PREFIX}/lib/mes/mini-write.c - catm libc-mini.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o mini-write.o - catm libc-mini.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s mini-write.s + # libmescc.a + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall-internal.c + catm libmescc.a globals.o syscall-internal.o + catm libmescc.s globals.s syscall-internal.s - # libmescc.a - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall-internal.c - catm libmescc.a globals.o syscall-internal.o - catm libmescc.s globals.s syscall-internal.s + # libc.a + mescc ''${MES_PREFIX}/lib/ctype/isnumber.c + mescc ''${MES_PREFIX}/lib/mes/abtol.c + mescc ''${MES_PREFIX}/lib/mes/cast.c + mescc ''${MES_PREFIX}/lib/mes/eputc.c + mescc ''${MES_PREFIX}/lib/mes/fdgetc.c + mescc ''${MES_PREFIX}/lib/mes/fdputc.c + mescc ''${MES_PREFIX}/lib/mes/fdputs.c + mescc ''${MES_PREFIX}/lib/mes/fdungetc.c + mescc ''${MES_PREFIX}/lib/mes/itoa.c + mescc ''${MES_PREFIX}/lib/mes/ltoa.c + mescc ''${MES_PREFIX}/lib/mes/ltoab.c + mescc ''${MES_PREFIX}/lib/mes/mes_open.c + mescc ''${MES_PREFIX}/lib/mes/ntoab.c + mescc ''${MES_PREFIX}/lib/mes/oputc.c + mescc ''${MES_PREFIX}/lib/mes/ultoa.c + mescc ''${MES_PREFIX}/lib/mes/utoa.c + mescc ''${MES_PREFIX}/lib/ctype/isdigit.c + mescc ''${MES_PREFIX}/lib/ctype/isspace.c + mescc ''${MES_PREFIX}/lib/ctype/isxdigit.c + mescc ''${MES_PREFIX}/lib/mes/assert_msg.c + mescc ''${MES_PREFIX}/lib/posix/write.c + mescc ''${MES_PREFIX}/lib/stdlib/atoi.c + mescc ''${MES_PREFIX}/lib/linux/lseek.c + mescc ''${MES_PREFIX}/lib/mes/__assert_fail.c + mescc ''${MES_PREFIX}/lib/mes/__buffered_read.c + mescc ''${MES_PREFIX}/lib/mes/__mes_debug.c + mescc ''${MES_PREFIX}/lib/posix/execv.c + mescc ''${MES_PREFIX}/lib/posix/getcwd.c + mescc ''${MES_PREFIX}/lib/posix/getenv.c + mescc ''${MES_PREFIX}/lib/posix/isatty.c + mescc ''${MES_PREFIX}/lib/posix/open.c + mescc ''${MES_PREFIX}/lib/posix/buffered-read.c + mescc ''${MES_PREFIX}/lib/posix/setenv.c + mescc ''${MES_PREFIX}/lib/posix/wait.c + mescc ''${MES_PREFIX}/lib/stdio/fgetc.c + mescc ''${MES_PREFIX}/lib/stdio/fputc.c + mescc ''${MES_PREFIX}/lib/stdio/fputs.c + mescc ''${MES_PREFIX}/lib/stdio/getc.c + mescc ''${MES_PREFIX}/lib/stdio/getchar.c + mescc ''${MES_PREFIX}/lib/stdio/putc.c + mescc ''${MES_PREFIX}/lib/stdio/putchar.c + mescc ''${MES_PREFIX}/lib/stdio/ungetc.c + mescc ''${MES_PREFIX}/lib/stdlib/free.c + mescc ''${MES_PREFIX}/lib/stdlib/realloc.c + mescc ''${MES_PREFIX}/lib/string/memchr.c + mescc ''${MES_PREFIX}/lib/string/memcmp.c + mescc ''${MES_PREFIX}/lib/string/memcpy.c + mescc ''${MES_PREFIX}/lib/string/memmove.c + mescc ''${MES_PREFIX}/lib/string/memset.c + mescc ''${MES_PREFIX}/lib/string/strcmp.c + mescc ''${MES_PREFIX}/lib/string/strcpy.c + mescc ''${MES_PREFIX}/lib/string/strncmp.c + mescc ''${MES_PREFIX}/lib/posix/raise.c + mescc ''${MES_PREFIX}/lib/linux/access.c + mescc ''${MES_PREFIX}/lib/linux/brk.c + mescc ''${MES_PREFIX}/lib/linux/chmod.c + mescc ''${MES_PREFIX}/lib/linux/clock_gettime.c + mescc ''${MES_PREFIX}/lib/linux/dup.c + mescc ''${MES_PREFIX}/lib/linux/dup2.c + mescc ''${MES_PREFIX}/lib/linux/execve.c + mescc ''${MES_PREFIX}/lib/linux/fork.c + mescc ''${MES_PREFIX}/lib/linux/fsync.c + mescc ''${MES_PREFIX}/lib/linux/_getcwd.c + mescc ''${MES_PREFIX}/lib/linux/gettimeofday.c + mescc ''${MES_PREFIX}/lib/linux/ioctl3.c + mescc ''${MES_PREFIX}/lib/linux/malloc.c + mescc ''${MES_PREFIX}/lib/linux/_open3.c + mescc ''${MES_PREFIX}/lib/linux/_read.c + mescc ''${MES_PREFIX}/lib/linux/time.c + mescc ''${MES_PREFIX}/lib/linux/unlink.c + mescc ''${MES_PREFIX}/lib/linux/waitpid.c + mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall.c + mescc ''${MES_PREFIX}/lib/linux/getpid.c + mescc ''${MES_PREFIX}/lib/linux/kill.c + catm libc.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o isnumber.o abtol.o cast.o eputc.o fdgetc.o fdputc.o fdputs.o fdungetc.o itoa.o ltoa.o ltoab.o mes_open.o ntoab.o oputc.o ultoa.o utoa.o isdigit.o isspace.o isxdigit.o assert_msg.o write.o atoi.o lseek.o __assert_fail.o __buffered_read.o __mes_debug.o execv.o getcwd.o getenv.o isatty.o open.o buffered-read.o setenv.o wait.o fgetc.o fputc.o fputs.o getc.o getchar.o putc.o putchar.o ungetc.o free.o malloc.o realloc.o memchr.o memcmp.o memcpy.o memmove.o memset.o strcmp.o strcpy.o strncmp.o raise.o access.o brk.o chmod.o clock_gettime.o dup.o dup2.o execve.o fork.o fsync.o _getcwd.o gettimeofday.o ioctl3.o _open3.o _read.o time.o unlink.o waitpid.o syscall.o getpid.o kill.o + catm libc.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s isnumber.s abtol.s cast.s eputc.s fdgetc.s fdputc.s fdputs.s fdungetc.s itoa.s ltoa.s ltoab.s mes_open.s ntoab.s oputc.s ultoa.s utoa.s isdigit.s isspace.s isxdigit.s assert_msg.s write.s atoi.s lseek.s __assert_fail.s __buffered_read.s __mes_debug.s execv.s getcwd.s getenv.s isatty.s open.s buffered-read.s setenv.s wait.s fgetc.s fputc.s fputs.s getc.s getchar.s putc.s putchar.s ungetc.s free.s malloc.s realloc.s memchr.s memcmp.s memcpy.s memmove.s memset.s strcmp.s strcpy.s strncmp.s raise.s access.s brk.s chmod.s clock_gettime.s dup.s dup2.s execve.s fork.s fsync.s _getcwd.s gettimeofday.s ioctl3.s _open3.s _read.s time.s unlink.s waitpid.s syscall.s getpid.s kill.s - # libc.a - mescc ''${MES_PREFIX}/lib/ctype/isnumber.c - mescc ''${MES_PREFIX}/lib/mes/abtol.c - mescc ''${MES_PREFIX}/lib/mes/cast.c - mescc ''${MES_PREFIX}/lib/mes/eputc.c - mescc ''${MES_PREFIX}/lib/mes/fdgetc.c - mescc ''${MES_PREFIX}/lib/mes/fdputc.c - mescc ''${MES_PREFIX}/lib/mes/fdputs.c - mescc ''${MES_PREFIX}/lib/mes/fdungetc.c - mescc ''${MES_PREFIX}/lib/mes/itoa.c - mescc ''${MES_PREFIX}/lib/mes/ltoa.c - mescc ''${MES_PREFIX}/lib/mes/ltoab.c - mescc ''${MES_PREFIX}/lib/mes/mes_open.c - mescc ''${MES_PREFIX}/lib/mes/ntoab.c - mescc ''${MES_PREFIX}/lib/mes/oputc.c - mescc ''${MES_PREFIX}/lib/mes/ultoa.c - mescc ''${MES_PREFIX}/lib/mes/utoa.c - mescc ''${MES_PREFIX}/lib/ctype/isdigit.c - mescc ''${MES_PREFIX}/lib/ctype/isspace.c - mescc ''${MES_PREFIX}/lib/ctype/isxdigit.c - mescc ''${MES_PREFIX}/lib/mes/assert_msg.c - mescc ''${MES_PREFIX}/lib/posix/write.c - mescc ''${MES_PREFIX}/lib/stdlib/atoi.c - mescc ''${MES_PREFIX}/lib/linux/lseek.c - mescc ''${MES_PREFIX}/lib/mes/__assert_fail.c - mescc ''${MES_PREFIX}/lib/mes/__buffered_read.c - mescc ''${MES_PREFIX}/lib/mes/__mes_debug.c - mescc ''${MES_PREFIX}/lib/posix/execv.c - mescc ''${MES_PREFIX}/lib/posix/getcwd.c - mescc ''${MES_PREFIX}/lib/posix/getenv.c - mescc ''${MES_PREFIX}/lib/posix/isatty.c - mescc ''${MES_PREFIX}/lib/posix/open.c - mescc ''${MES_PREFIX}/lib/posix/buffered-read.c - mescc ''${MES_PREFIX}/lib/posix/setenv.c - mescc ''${MES_PREFIX}/lib/posix/wait.c - mescc ''${MES_PREFIX}/lib/stdio/fgetc.c - mescc ''${MES_PREFIX}/lib/stdio/fputc.c - mescc ''${MES_PREFIX}/lib/stdio/fputs.c - mescc ''${MES_PREFIX}/lib/stdio/getc.c - mescc ''${MES_PREFIX}/lib/stdio/getchar.c - mescc ''${MES_PREFIX}/lib/stdio/putc.c - mescc ''${MES_PREFIX}/lib/stdio/putchar.c - mescc ''${MES_PREFIX}/lib/stdio/ungetc.c - mescc ''${MES_PREFIX}/lib/stdlib/free.c - mescc ''${MES_PREFIX}/lib/stdlib/realloc.c - mescc ''${MES_PREFIX}/lib/string/memchr.c - mescc ''${MES_PREFIX}/lib/string/memcmp.c - mescc ''${MES_PREFIX}/lib/string/memcpy.c - mescc ''${MES_PREFIX}/lib/string/memmove.c - mescc ''${MES_PREFIX}/lib/string/memset.c - mescc ''${MES_PREFIX}/lib/string/strcmp.c - mescc ''${MES_PREFIX}/lib/string/strcpy.c - mescc ''${MES_PREFIX}/lib/string/strncmp.c - mescc ''${MES_PREFIX}/lib/posix/raise.c - mescc ''${MES_PREFIX}/lib/linux/access.c - mescc ''${MES_PREFIX}/lib/linux/brk.c - mescc ''${MES_PREFIX}/lib/linux/chmod.c - mescc ''${MES_PREFIX}/lib/linux/clock_gettime.c - mescc ''${MES_PREFIX}/lib/linux/dup.c - mescc ''${MES_PREFIX}/lib/linux/dup2.c - mescc ''${MES_PREFIX}/lib/linux/execve.c - mescc ''${MES_PREFIX}/lib/linux/fork.c - mescc ''${MES_PREFIX}/lib/linux/fsync.c - mescc ''${MES_PREFIX}/lib/linux/_getcwd.c - mescc ''${MES_PREFIX}/lib/linux/gettimeofday.c - mescc ''${MES_PREFIX}/lib/linux/ioctl3.c - mescc ''${MES_PREFIX}/lib/linux/malloc.c - mescc ''${MES_PREFIX}/lib/linux/_open3.c - mescc ''${MES_PREFIX}/lib/linux/_read.c - mescc ''${MES_PREFIX}/lib/linux/time.c - mescc ''${MES_PREFIX}/lib/linux/unlink.c - mescc ''${MES_PREFIX}/lib/linux/waitpid.c - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall.c - mescc ''${MES_PREFIX}/lib/linux/getpid.c - mescc ''${MES_PREFIX}/lib/linux/kill.c - catm libc.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o isnumber.o abtol.o cast.o eputc.o fdgetc.o fdputc.o fdputs.o fdungetc.o itoa.o ltoa.o ltoab.o mes_open.o ntoab.o oputc.o ultoa.o utoa.o isdigit.o isspace.o isxdigit.o assert_msg.o write.o atoi.o lseek.o __assert_fail.o __buffered_read.o __mes_debug.o execv.o getcwd.o getenv.o isatty.o open.o buffered-read.o setenv.o wait.o fgetc.o fputc.o fputs.o getc.o getchar.o putc.o putchar.o ungetc.o free.o malloc.o realloc.o memchr.o memcmp.o memcpy.o memmove.o memset.o strcmp.o strcpy.o strncmp.o raise.o access.o brk.o chmod.o clock_gettime.o dup.o dup2.o execve.o fork.o fsync.o _getcwd.o gettimeofday.o ioctl3.o _open3.o _read.o time.o unlink.o waitpid.o syscall.o getpid.o kill.o - catm libc.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s isnumber.s abtol.s cast.s eputc.s fdgetc.s fdputc.s fdputs.s fdungetc.s itoa.s ltoa.s ltoab.s mes_open.s ntoab.s oputc.s ultoa.s utoa.s isdigit.s isspace.s isxdigit.s assert_msg.s write.s atoi.s lseek.s __assert_fail.s __buffered_read.s __mes_debug.s execv.s getcwd.s getenv.s isatty.s open.s buffered-read.s setenv.s wait.s fgetc.s fputc.s fputs.s getc.s getchar.s putc.s putchar.s ungetc.s free.s malloc.s realloc.s memchr.s memcmp.s memcpy.s memmove.s memset.s strcmp.s strcpy.s strncmp.s raise.s access.s brk.s chmod.s clock_gettime.s dup.s dup2.s execve.s fork.s fsync.s _getcwd.s gettimeofday.s ioctl3.s _open3.s _read.s time.s unlink.s waitpid.s syscall.s getpid.s kill.s + # libc+tcc.a + mescc ''${MES_PREFIX}/lib/ctype/islower.c + mescc ''${MES_PREFIX}/lib/ctype/isupper.c + mescc ''${MES_PREFIX}/lib/ctype/tolower.c + mescc ''${MES_PREFIX}/lib/ctype/toupper.c + mescc ''${MES_PREFIX}/lib/mes/abtod.c + mescc ''${MES_PREFIX}/lib/mes/dtoab.c + mescc ''${MES_PREFIX}/lib/mes/search-path.c + mescc ''${MES_PREFIX}/lib/posix/execvp.c + mescc ''${MES_PREFIX}/lib/stdio/fclose.c + mescc ''${MES_PREFIX}/lib/stdio/fdopen.c + mescc ''${MES_PREFIX}/lib/stdio/ferror.c + mescc ''${MES_PREFIX}/lib/stdio/fflush.c + mescc ''${MES_PREFIX}/lib/stdio/fopen.c + mescc ''${MES_PREFIX}/lib/stdio/fprintf.c + mescc ''${MES_PREFIX}/lib/stdio/fread.c + mescc ''${MES_PREFIX}/lib/stdio/fseek.c + mescc ''${MES_PREFIX}/lib/stdio/ftell.c + mescc ''${MES_PREFIX}/lib/stdio/fwrite.c + mescc ''${MES_PREFIX}/lib/stdio/printf.c + mescc ''${MES_PREFIX}/lib/stdio/remove.c + mescc ''${MES_PREFIX}/lib/stdio/snprintf.c + mescc ''${MES_PREFIX}/lib/stdio/sprintf.c + mescc ''${MES_PREFIX}/lib/stdio/sscanf.c + mescc ''${MES_PREFIX}/lib/stdio/vfprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vsnprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vsprintf.c + mescc ''${MES_PREFIX}/lib/stdio/vsscanf.c + mescc ''${MES_PREFIX}/lib/stdlib/calloc.c + mescc ''${MES_PREFIX}/lib/stdlib/qsort.c + mescc ''${MES_PREFIX}/lib/stdlib/strtod.c + mescc ''${MES_PREFIX}/lib/stdlib/strtof.c + mescc ''${MES_PREFIX}/lib/stdlib/strtol.c + mescc ''${MES_PREFIX}/lib/stdlib/strtold.c + mescc ''${MES_PREFIX}/lib/stdlib/strtoll.c + mescc ''${MES_PREFIX}/lib/stdlib/strtoul.c + mescc ''${MES_PREFIX}/lib/stdlib/strtoull.c + mescc ''${MES_PREFIX}/lib/string/memmem.c + mescc ''${MES_PREFIX}/lib/string/strcat.c + mescc ''${MES_PREFIX}/lib/string/strchr.c + mescc ''${MES_PREFIX}/lib/string/strlwr.c + mescc ''${MES_PREFIX}/lib/string/strncpy.c + mescc ''${MES_PREFIX}/lib/string/strrchr.c + mescc ''${MES_PREFIX}/lib/string/strstr.c + mescc ''${MES_PREFIX}/lib/string/strupr.c + mescc ''${MES_PREFIX}/lib/stub/sigaction.c + mescc ''${MES_PREFIX}/lib/stub/ldexp.c + mescc ''${MES_PREFIX}/lib/stub/mprotect.c + mescc ''${MES_PREFIX}/lib/stub/localtime.c + mescc ''${MES_PREFIX}/lib/stub/sigemptyset.c + mescc ''${MES_PREFIX}/lib/x86-mes-mescc/setjmp.c + mescc ''${MES_PREFIX}/lib/linux/close.c + mescc ''${MES_PREFIX}/lib/linux/rmdir.c + mescc ''${MES_PREFIX}/lib/linux/stat.c + catm libc+tcc.a libc.a islower.o isupper.o tolower.o toupper.o abtod.o dtoab.o search-path.o execvp.o fclose.o fdopen.o ferror.o fflush.o fopen.o fprintf.o fread.o fseek.o ftell.o fwrite.o printf.o remove.o snprintf.o sprintf.o sscanf.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o vsscanf.o calloc.o qsort.o strtod.o strtof.o strtol.o strtold.o strtoll.o strtoul.o strtoull.o memmem.o strcat.o strchr.o strlwr.o strncpy.o strrchr.o strstr.o strupr.o sigaction.o ldexp.o mprotect.o localtime.o sigemptyset.o setjmp.o close.o rmdir.o stat.o + catm libc+tcc.s libc.s islower.s isupper.s tolower.s toupper.s abtod.s dtoab.s search-path.s execvp.s fclose.s fdopen.s ferror.s fflush.s fopen.s fprintf.s fread.s fseek.s ftell.s fwrite.s printf.s remove.s snprintf.s sprintf.s sscanf.s vfprintf.s vprintf.s vsnprintf.s vsprintf.s vsscanf.s calloc.s qsort.s strtod.s strtof.s strtol.s strtold.s strtoll.s strtoul.s strtoull.s memmem.s strcat.s strchr.s strlwr.s strncpy.s strrchr.s strstr.s strupr.s sigaction.s ldexp.s mprotect.s localtime.s sigemptyset.s setjmp.s close.s rmdir.s stat.s - # libc+tcc.a - mescc ''${MES_PREFIX}/lib/ctype/islower.c - mescc ''${MES_PREFIX}/lib/ctype/isupper.c - mescc ''${MES_PREFIX}/lib/ctype/tolower.c - mescc ''${MES_PREFIX}/lib/ctype/toupper.c - mescc ''${MES_PREFIX}/lib/mes/abtod.c - mescc ''${MES_PREFIX}/lib/mes/dtoab.c - mescc ''${MES_PREFIX}/lib/mes/search-path.c - mescc ''${MES_PREFIX}/lib/posix/execvp.c - mescc ''${MES_PREFIX}/lib/stdio/fclose.c - mescc ''${MES_PREFIX}/lib/stdio/fdopen.c - mescc ''${MES_PREFIX}/lib/stdio/ferror.c - mescc ''${MES_PREFIX}/lib/stdio/fflush.c - mescc ''${MES_PREFIX}/lib/stdio/fopen.c - mescc ''${MES_PREFIX}/lib/stdio/fprintf.c - mescc ''${MES_PREFIX}/lib/stdio/fread.c - mescc ''${MES_PREFIX}/lib/stdio/fseek.c - mescc ''${MES_PREFIX}/lib/stdio/ftell.c - mescc ''${MES_PREFIX}/lib/stdio/fwrite.c - mescc ''${MES_PREFIX}/lib/stdio/printf.c - mescc ''${MES_PREFIX}/lib/stdio/remove.c - mescc ''${MES_PREFIX}/lib/stdio/snprintf.c - mescc ''${MES_PREFIX}/lib/stdio/sprintf.c - mescc ''${MES_PREFIX}/lib/stdio/sscanf.c - mescc ''${MES_PREFIX}/lib/stdio/vfprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vsnprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vsprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vsscanf.c - mescc ''${MES_PREFIX}/lib/stdlib/calloc.c - mescc ''${MES_PREFIX}/lib/stdlib/qsort.c - mescc ''${MES_PREFIX}/lib/stdlib/strtod.c - mescc ''${MES_PREFIX}/lib/stdlib/strtof.c - mescc ''${MES_PREFIX}/lib/stdlib/strtol.c - mescc ''${MES_PREFIX}/lib/stdlib/strtold.c - mescc ''${MES_PREFIX}/lib/stdlib/strtoll.c - mescc ''${MES_PREFIX}/lib/stdlib/strtoul.c - mescc ''${MES_PREFIX}/lib/stdlib/strtoull.c - mescc ''${MES_PREFIX}/lib/string/memmem.c - mescc ''${MES_PREFIX}/lib/string/strcat.c - mescc ''${MES_PREFIX}/lib/string/strchr.c - mescc ''${MES_PREFIX}/lib/string/strlwr.c - mescc ''${MES_PREFIX}/lib/string/strncpy.c - mescc ''${MES_PREFIX}/lib/string/strrchr.c - mescc ''${MES_PREFIX}/lib/string/strstr.c - mescc ''${MES_PREFIX}/lib/string/strupr.c - mescc ''${MES_PREFIX}/lib/stub/sigaction.c - mescc ''${MES_PREFIX}/lib/stub/ldexp.c - mescc ''${MES_PREFIX}/lib/stub/mprotect.c - mescc ''${MES_PREFIX}/lib/stub/localtime.c - mescc ''${MES_PREFIX}/lib/stub/sigemptyset.c - mescc ''${MES_PREFIX}/lib/x86-mes-mescc/setjmp.c - mescc ''${MES_PREFIX}/lib/linux/close.c - mescc ''${MES_PREFIX}/lib/linux/rmdir.c - mescc ''${MES_PREFIX}/lib/linux/stat.c - catm libc+tcc.a libc.a islower.o isupper.o tolower.o toupper.o abtod.o dtoab.o search-path.o execvp.o fclose.o fdopen.o ferror.o fflush.o fopen.o fprintf.o fread.o fseek.o ftell.o fwrite.o printf.o remove.o snprintf.o sprintf.o sscanf.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o vsscanf.o calloc.o qsort.o strtod.o strtof.o strtol.o strtold.o strtoll.o strtoul.o strtoull.o memmem.o strcat.o strchr.o strlwr.o strncpy.o strrchr.o strstr.o strupr.o sigaction.o ldexp.o mprotect.o localtime.o sigemptyset.o setjmp.o close.o rmdir.o stat.o - catm libc+tcc.s libc.s islower.s isupper.s tolower.s toupper.s abtod.s dtoab.s search-path.s execvp.s fclose.s fdopen.s ferror.s fflush.s fopen.s fprintf.s fread.s fseek.s ftell.s fwrite.s printf.s remove.s snprintf.s sprintf.s sscanf.s vfprintf.s vprintf.s vsnprintf.s vsprintf.s vsscanf.s calloc.s qsort.s strtod.s strtof.s strtol.s strtold.s strtoll.s strtoul.s strtoull.s memmem.s strcat.s strchr.s strlwr.s strncpy.s strrchr.s strstr.s strupr.s sigaction.s ldexp.s mprotect.s localtime.s sigemptyset.s setjmp.s close.s rmdir.s stat.s + # Build mes itself + mescc ''${MES_PREFIX}/src/builtins.c + mescc ''${MES_PREFIX}/src/cc.c + mescc ''${MES_PREFIX}/src/core.c + mescc ''${MES_PREFIX}/src/display.c + mescc ''${MES_PREFIX}/src/eval-apply.c + mescc ''${MES_PREFIX}/src/gc.c + mescc ''${MES_PREFIX}/src/globals.c + mescc ''${MES_PREFIX}/src/hash.c + mescc ''${MES_PREFIX}/src/lib.c + mescc ''${MES_PREFIX}/src/math.c + mescc ''${MES_PREFIX}/src/mes.c + mescc ''${MES_PREFIX}/src/module.c + mescc ''${MES_PREFIX}/src/posix.c + mescc ''${MES_PREFIX}/src/reader.c + mescc ''${MES_PREFIX}/src/stack.c + mescc ''${MES_PREFIX}/src/string.c + mescc ''${MES_PREFIX}/src/struct.c + mescc ''${MES_PREFIX}/src/symbol.c + mescc ''${MES_PREFIX}/src/vector.c - # Build mes itself - mescc ''${MES_PREFIX}/src/builtins.c - mescc ''${MES_PREFIX}/src/cc.c - mescc ''${MES_PREFIX}/src/core.c - mescc ''${MES_PREFIX}/src/display.c - mescc ''${MES_PREFIX}/src/eval-apply.c - mescc ''${MES_PREFIX}/src/gc.c - mescc ''${MES_PREFIX}/src/globals.c - mescc ''${MES_PREFIX}/src/hash.c - mescc ''${MES_PREFIX}/src/lib.c - mescc ''${MES_PREFIX}/src/math.c - mescc ''${MES_PREFIX}/src/mes.c - mescc ''${MES_PREFIX}/src/module.c - mescc ''${MES_PREFIX}/src/posix.c - mescc ''${MES_PREFIX}/src/reader.c - mescc ''${MES_PREFIX}/src/stack.c - mescc ''${MES_PREFIX}/src/string.c - mescc ''${MES_PREFIX}/src/struct.c - mescc ''${MES_PREFIX}/src/symbol.c - mescc ''${MES_PREFIX}/src/vector.c + # Install libraries + cp libc.a ''${MES_PREFIX}/lib/x86-mes/ + cp libc+tcc.a ''${MES_PREFIX}/lib/x86-mes/ + cp libmescc.a ''${MES_PREFIX}/lib/x86-mes/ + cp libc.s ''${MES_PREFIX}/lib/x86-mes/ + cp libc+tcc.s ''${MES_PREFIX}/lib/x86-mes/ + cp libmescc.s ''${MES_PREFIX}/lib/x86-mes/ + cp crt1.o ''${MES_PREFIX}/lib/x86-mes/ + cp crt1.s ''${MES_PREFIX}/lib/x86-mes/ - # Install libraries - cp libc.a ''${MES_PREFIX}/lib/x86-mes/ - cp libc+tcc.a ''${MES_PREFIX}/lib/x86-mes/ - cp libmescc.a ''${MES_PREFIX}/lib/x86-mes/ - cp libc.s ''${MES_PREFIX}/lib/x86-mes/ - cp libc+tcc.s ''${MES_PREFIX}/lib/x86-mes/ - cp libmescc.s ''${MES_PREFIX}/lib/x86-mes/ - cp crt1.o ''${MES_PREFIX}/lib/x86-mes/ - cp crt1.s ''${MES_PREFIX}/lib/x86-mes/ - - # Link everything into new mes executable - ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- --base-address 0x08048000 -L ''${MES_PREFIX}/lib -nostdlib -o ''${out}/bin/mes -L . crt1.o builtins.o cc.o core.o display.o eval-apply.o gc.o globals.o hash.o lib.o math.o mes.o module.o posix.o reader.o stack.o string.o struct.o symbol.o vector.o -lc -lmescc - ''; -}) // { + # Link everything into new mes executable + ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- --base-address 0x08048000 -L ''${MES_PREFIX}/lib -nostdlib -o ''${out}/bin/mes -L . crt1.o builtins.o cc.o core.o display.o eval-apply.o gc.o globals.o hash.o lib.o math.o mes.o module.o posix.o reader.o stack.o string.o struct.o symbol.o vector.o -lc -lmescc +'') // { mesPrefix = "/share/mes-${version}"; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index c26bca3785713..ca015991a9d8f 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -40,7 +40,7 @@ lib.makeScope newScope (self: with self; { mescc-tools-extra = callPackage ./mescc-tools-extra { }; - inherit (callPackage ./utils.nix { }) writeTextFile writeText mkKaemDerivation; + inherit (callPackage ./utils.nix { }) writeTextFile writeText runCommand; # Now that mescc-tools-extra is available we can install kaem at /bin/kaem # to make it findable in environments diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index 8b013d30b20fa..ce579c3d2210d 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -34,30 +34,18 @@ rec { writeText = name: text: writeTextFile {inherit name text;}; - mkKaemDerivation = args@{ - pname ? null, - version ? null, - name ? null, - buildPhase, - buildInputs ? [], - ... - }: - assert name == null -> pname != null && version != null; - let - rname = if name != null then name else "${pname}-${version}"; - in + runCommand = name: env: buildCommand: derivation ({ - inherit system; - name = rname; + inherit name system; builder = "${kaem}/bin/kaem"; args = [ "--verbose" "--strict" "--file" - (writeText "${rname}-builder" buildPhase) + (writeText "${name}-builder" buildCommand) ]; - PATH = lib.makeBinPath (buildInputs ++ [ kaem mescc-tools mescc-tools-extra ]); - } // (builtins.removeAttrs args [ "pname" "version" "name" "buildPhase" "buildInputs" ])); + PATH = lib.makeBinPath ((env.nativeBuildInputs or []) ++ [ kaem mescc-tools mescc-tools-extra ]); + } // (builtins.removeAttrs env [ "nativeBuildInputs" ])); } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index 872295a740720..ba57c794fa4c0 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -2,7 +2,7 @@ # that can be compiled by MesCC { lib -, mkKaemDerivation +, runCommand , fetchurl , mes , buildTinyccN @@ -15,72 +15,67 @@ let sha256 = "1xhn5qgph32dlxp3fkl4d78f21hvlb2r5dpxvh295x8spkbmbrwp"; }; - mes-tcc = mkKaemDerivation rec { - pname = "mes-tcc"; - version = "0.9.27"; - - buildPhase = '' - # Create config.h - catm config.h - - ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ - -S \ - -o tcc.s \ - -I . \ - -D BOOTSTRAP=1 \ - -I ${src} \ - -D TCC_TARGET_I386=1 \ - -D inline= \ - -D CONFIG_TCCDIR=\"''${out}/lib\" \ - -D CONFIG_SYSROOT=\"\" \ - -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ - -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ - -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include\" \ - -D TCC_LIBGCC=\"${mes}${mes.mesPrefix}/lib/x86-mes/libc.a\" \ - -D CONFIG_TCC_LIBTCC1_MES=0 \ - -D CONFIG_TCCBOOT=1 \ - -D CONFIG_TCC_STATIC=1 \ - -D CONFIG_USE_LIBGCC=1 \ - -D TCC_MES_LIBC=1 \ - -D TCC_VERSION=\"${version}\" \ - -D ONE_SOURCE=1 \ - ${src}/tcc.c - - mkdir -p ''${out}/bin - ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ - -l c+tcc \ - -o ''${out}/bin/tcc \ - tcc.s - - # Quick test - ''${out}/bin/tcc -version - - # Recompile the mes C library - mkdir -p ''${out}/lib - cd ${mes}${mes.mesPrefix} - - # crt1.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c - - # crtn.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c - - # crti.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c - - # libc+gcc.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o - - # libtcc1.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/libtcc1.o lib/libtcc1.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o - - # libgetopt.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o - ''; - }; + mes-tcc = runCommand "mes-tcc-${version}" {} '' + # Create config.h + catm config.h + + ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ + -S \ + -o tcc.s \ + -I . \ + -D BOOTSTRAP=1 \ + -I ${src} \ + -D TCC_TARGET_I386=1 \ + -D inline= \ + -D CONFIG_TCCDIR=\"''${out}/lib\" \ + -D CONFIG_SYSROOT=\"\" \ + -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include\" \ + -D TCC_LIBGCC=\"${mes}${mes.mesPrefix}/lib/x86-mes/libc.a\" \ + -D CONFIG_TCC_LIBTCC1_MES=0 \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"${version}\" \ + -D ONE_SOURCE=1 \ + ${src}/tcc.c + + mkdir -p ''${out}/bin + ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ + -l c+tcc \ + -o ''${out}/bin/tcc \ + tcc.s + + # Quick test + ''${out}/bin/tcc -version + + # Recompile the mes C library + mkdir -p ''${out}/lib + cd ${mes}${mes.mesPrefix} + + # crt1.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c + + # crtn.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c + + # crti.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c + + # libc+gcc.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o + + # libtcc1.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/libtcc1.o lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o + + # libgetopt.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o + ''; boot0-tcc = buildTinyccN { pname = "boot0-tcc"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index f7e8bf7d2f8f7..cd1a5397f2129 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -1,5 +1,5 @@ { lib -, mkKaemDerivation +, runCommand , fetchurl , callPackage , mes @@ -11,13 +11,10 @@ let sha256 = "009xvbiskg2ims2xag8w78yksnrqpm33asq5arxaph05hd59yss0"; }; - unified-libc = mkKaemDerivation { - name = "mes-unified-libc.c"; - buildPhase = '' - cd ${mes}${mes.mesPrefix}/lib - catm ''${out} ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c dirent/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/x86-mes-gcc/_exit.c linux/x86-mes-gcc/syscall.c linux/x86-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/rand.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c x86-mes-gcc/setjmp.c - ''; - }; + unified-libc = runCommand "mes-unified-libc.c" {} '' + cd ${mes}${mes.mesPrefix}/lib + catm ''${out} ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c dirent/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/x86-mes-gcc/_exit.c linux/x86-mes-gcc/syscall.c linux/x86-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/rand.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c x86-mes-gcc/setjmp.c + ''; buildTinyccN = { pname, @@ -31,64 +28,57 @@ let options = lib.strings.concatStringsSep " " buildOptions; libtccOptions = lib.strings.concatStringsSep " " libtccBuildOptions; in - mkKaemDerivation { - inherit pname version; - buildPhase = '' - catm config.h - mkdir -p ''${out}/bin ''${out}/lib - ${prev}/bin/tcc \ - -g \ - -v \ - -static \ - -o ''${out}/bin/tcc \ - -D BOOTSTRAP=1 \ - ${options} \ - -I . \ - -I ${src} \ - -D TCC_TARGET_I386=1 \ - -D CONFIG_TCCDIR=\"''${out}/lib\" \ - -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ - -D CONFIG_TCC_ELFINTERP=\"\" \ - -D CONFIG_TCC_LIBPATHS=\"''${out}/lib\" \ - -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include:${src}/include\" \ - -D TCC_LIBGCC=\"libc.a\" \ - -D TCC_LIBTCC1=\"libtcc1.a\" \ - -D CONFIG_TCCBOOT=1 \ - -D CONFIG_TCC_STATIC=1 \ - -D CONFIG_USE_LIBGCC=1 \ - -D TCC_MES_LIBC=1 \ - -D TCC_VERSION=\"${version}\" \ - -D ONE_SOURCE=1 \ - -L ${prev}/lib \ - ${src}/tcc.c + runCommand "${pname}-${version}" {} '' + catm config.h + mkdir -p ''${out}/bin ''${out}/lib + ${prev}/bin/tcc \ + -g \ + -v \ + -static \ + -o ''${out}/bin/tcc \ + -D BOOTSTRAP=1 \ + ${options} \ + -I . \ + -I ${src} \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"''${out}/lib\" \ + -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"\" \ + -D CONFIG_TCC_LIBPATHS=\"''${out}/lib\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include:${src}/include\" \ + -D TCC_LIBGCC=\"libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"${version}\" \ + -D ONE_SOURCE=1 \ + -L ${prev}/lib \ + ${src}/tcc.c - ''${out}/bin/tcc -v + ''${out}/bin/tcc -v - cd ${mes}${mes.mesPrefix} - # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c - ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o ''${TMPDIR}/libtcc1.o ${src}/lib/libtcc1.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o - ''; - }; + cd ${mes}${mes.mesPrefix} + # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c + ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o ''${TMPDIR}/libtcc1.o ${src}/lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o + ''; boot4-tcc = callPackage ./bootstrappable.nix { inherit buildTinyccN unified-libc; }; - tccdefs = mkKaemDerivation { - pname = "tccdefs"; - inherit version; - buildPhase = '' - mkdir ''${out} - ${boot4-tcc}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c - ./c2str ${src}/include/tccdefs.h ''${out}/tccdefs_.h - ''; - }; + tccdefs = runCommand "tccdefs-${version}" {} '' + mkdir ''${out} + ${boot4-tcc}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c + ./c2str ${src}/include/tccdefs.h ''${out}/tccdefs_.h + ''; boot5-tcc = buildTinyccN { pname = "boot5-tcc"; From 71dcd605578fd936ed147e7ca212954360add766 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 18:24:17 +1000 Subject: [PATCH 07/35] minimal-bootstrap: remove most uses of builtins.fetchTarball --- .../linux/minimal-bootstrap/default.nix | 2 +- .../linux/minimal-bootstrap/mes/default.nix | 9 ++++---- .../stage0-posix/default.nix | 2 +- .../minimal-bootstrap/stage0-posix/utils.nix | 22 +++++++++++++++++++ .../tinycc/bootstrappable.nix | 11 +++++----- .../minimal-bootstrap/tinycc/default.nix | 8 +++---- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 510f0e047ec00..98559814f692a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -10,7 +10,7 @@ lib.makeScope newScope (self: with self; { inherit system; }; - inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; + inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand fetchtarball; mes = callPackage ./mes { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index 6c179c4fbfec5..50433c40e7d75 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -1,5 +1,6 @@ { runCommand , fetchurl +, fetchtarball , writeText , m2libc , mescc-tools @@ -14,10 +15,10 @@ let }; nyaccVersion = "1.00.2"; - nyaccModules = builtins.fetchTarball { - url = "http://download.savannah.nongnu.org/releases/nyacc/nyacc-${nyaccVersion}.tar.gz"; - sha256 = "06rg6pn4k8smyydwls1abc9h702cri3z65ac9gvc4rxxklpynslk"; - }; + nyaccModules = (fetchtarball { + url = "mirror://savannah/nyacc/nyacc-${nyaccVersion}.tar.gz"; + sha256 = "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"; + }) + "/nyacc-${nyaccVersion}"; in # Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem (runCommand "mes-${version}" {} '' diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index ca015991a9d8f..a5324633a4f7a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -40,7 +40,7 @@ lib.makeScope newScope (self: with self; { mescc-tools-extra = callPackage ./mescc-tools-extra { }; - inherit (callPackage ./utils.nix { }) writeTextFile writeText runCommand; + inherit (callPackage ./utils.nix { }) writeTextFile writeText runCommand fetchtarball; # Now that mescc-tools-extra is available we can install kaem at /bin/kaem # to make it findable in environments diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index ce579c3d2210d..b24b8ffdf5c06 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -1,6 +1,7 @@ { lib , system , mkKaemDerivation0 +, fetchurl , kaem , mescc-tools , mescc-tools-extra @@ -48,4 +49,25 @@ rec { PATH = lib.makeBinPath ((env.nativeBuildInputs or []) ++ [ kaem mescc-tools mescc-tools-extra ]); } // (builtins.removeAttrs env [ "nativeBuildInputs" ])); + + # Fetch and unpack a .tar.gz file. Does not strip top-level directory + fetchtarball = + { url + # Unlike fetchzip, this hash is of the tarball and not the decompressed output + , sha256 + , name ? baseNameOf (toString url) + , postFetch ? "" + }: + let + tarball = fetchurl { inherit url sha256; }; + in + runCommand name {} '' + cd ''${TMP} + ungz --file ${tarball} --output tmp.tar + mkdir ''${out} + cd ''${out} + untar --file ''${TMP}/tmp.tar + + ${postFetch} + ''; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index ba57c794fa4c0..0884656dc00f8 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -3,17 +3,18 @@ { lib , runCommand -, fetchurl +, fetchtarball , mes , buildTinyccN , unified-libc }: let version = "unstable-2023-04-20"; - src = builtins.fetchTarball { - url = "https://gitlab.com/janneke/tinycc/-/archive/80114c4da6b17fbaabb399cc29f427e368309bc8/tinycc-80114c4da6b17fbaabb399cc29f427e368309bc8.tar.gz"; - sha256 = "1xhn5qgph32dlxp3fkl4d78f21hvlb2r5dpxvh295x8spkbmbrwp"; - }; + rev = "80114c4da6b17fbaabb399cc29f427e368309bc8"; + src = (fetchtarball { + url = "https://gitlab.com/janneke/tinycc/-/archive/${rev}/tinycc-${rev}.tar.gz"; + sha256 = "1a0cw9a62qc76qqn5sjmp3xrbbvsz2dxrw21lrnx9q0s74mwaxbq"; + }) + "/tinycc-${rev}"; mes-tcc = runCommand "mes-tcc-${version}" {} '' # Create config.h diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index cd1a5397f2129..961f259189cc6 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -1,15 +1,15 @@ { lib , runCommand -, fetchurl +, fetchtarball , callPackage , mes }: let version = "unstable-2023-04-20"; - src = builtins.fetchTarball { + src = (fetchtarball { url = "https://repo.or.cz/tinycc.git/snapshot/86f3d8e33105435946383aee52487b5ddf918140.tar.gz"; - sha256 = "009xvbiskg2ims2xag8w78yksnrqpm33asq5arxaph05hd59yss0"; - }; + sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; + }) + "/tinycc-86f3d8e"; unified-libc = runCommand "mes-unified-libc.c" {} '' cd ${mes}${mes.mesPrefix}/lib From ba346eb8acd5fdb483180091cc9353ab74a7c4f7 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 18:46:33 +1000 Subject: [PATCH 08/35] minimal-bootstrap.stage0-posix: remove builtins.fetchTarball --- .../stage0-posix/default.nix | 15 +++- .../minimal-bootstrap/stage0-posix/hex0.nix | 8 +-- .../stage0-posix/kaem-minimal.nix | 6 +- .../stage0-posix/mescc-tools-extra/build.kaem | 27 +++---- .../mescc-tools-extra/default.nix | 5 +- .../stage0-posix/mescc-tools/build.kaem | 38 +++++----- .../stage0-posix/mescc-tools/default.nix | 11 ++- .../stage0-posix/sources.nix | 40 ----------- .../stage0-posix/stage0-posix-x86.nix | 72 +++++++++---------- 9 files changed, 95 insertions(+), 127 deletions(-) delete mode 100644 pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/sources.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index a5324633a4f7a..99df9d7061913 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -6,7 +6,20 @@ lib.makeScope newScope (self: with self; { callPackage = self.callPackage; - inherit (callPackage ./sources.nix { }) version bootstrap-seeds-src m2-mesoplanet-src m2-planet-src m2libc mescc-tools-src mescc-tools-extra-src stage0-posix-x86-src; + # Pinned from https://github.com/oriansj/stage0-posix/commit/bdd3ee779adb9f4a299059d09e68dfedecfd4226 + version = "unstable-2023-04-24"; + + # We don't have access to utilities such as fetchgit and fetchzip since they + # would introduce a circular dependency. The only tool we have to fetch source + # trees is `import ` with the unpack option, taking a + # NAR (Nix ARchive) file as input. This requires source tarballs to be repackaged. + src = import { + url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-04-25/stage0-posix-${version}-source.nar.xz"; + hash = "sha256-hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; + unpack = true; + }; + + m2libc = src + "/M2libc"; hex0 = callPackage ./hex0.nix { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix index ef9a4ad77c29e..37a387e26e89b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix @@ -1,5 +1,5 @@ { system -, bootstrap-seeds-src +, src , version }: let @@ -8,15 +8,15 @@ let i686-linux = "x86"; }.${system} or throwSystem; - seed = "${bootstrap-seeds-src}/POSIX/${arch}/hex0-seed"; - src = "${bootstrap-seeds-src}/POSIX/${arch}/hex0_${arch}.hex0"; + seed = "${src}/bootstrap-seeds/POSIX/${arch}/hex0-seed"; + source = "${src}/bootstrap-seeds/POSIX/${arch}/hex0_${arch}.hex0"; in derivation { inherit system; name = "hex0-${version}"; builder = seed; args = [ - src + source (placeholder "out") ]; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix index 760e7983f4435..0e3fe9f6b8194 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix @@ -1,5 +1,5 @@ { system -, bootstrap-seeds-src +, src , hex0 , version }: @@ -9,14 +9,14 @@ let i686-linux = "x86"; }.${system} or throwSystem; - src = "${bootstrap-seeds-src}/POSIX/${arch}/kaem-minimal.hex0"; + source = "${src}/bootstrap-seeds/POSIX/${arch}/kaem-minimal.hex0"; in derivation { inherit system; name = "kaem-minimal-${version}"; builder = hex0; args = [ - src + source (placeholder "out") ]; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem index 871762fe1bae6..12471bd0519ec 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem @@ -2,19 +2,20 @@ # https://github.com/oriansj/mescc-tools-extra/blob/ec53af69d6d2119b47b369cd0ec37ac806e7ad60/mescc-tools-extra.kaem alias CC="${mescc-tools}/bin/M2-Mesoplanet --operating-system ${OPERATING_SYSTEM} --architecture ${ARCH} -f" +cd ${src}/mescc-tools-extra # Create output folder -CC ${src}/mkdir.c -o ./mkdir -./mkdir -p ${out}/bin +CC mkdir.c -o ${TMP}/mkdir +${TMP}/mkdir -p ${out}/bin -CC ${src}/sha256sum.c -o ${out}/bin/sha256sum -CC ${src}/match.c -o ${out}/bin/match -CC ${src}/mkdir.c -o ${out}/bin/mkdir -CC ${src}/untar.c -o ${out}/bin/untar -CC ${src}/ungz.c -o ${out}/bin/ungz -CC ${src}/unbz2.c -o ${out}/bin/unbz2 -CC ${src}/catm.c -o ${out}/bin/catm -CC ${src}/cp.c -o ${out}/bin/cp -CC ${src}/chmod.c -o ${out}/bin/chmod -CC ${src}/rm.c -o ${out}/bin/rm -CC ${src}/replace.c -o ${out}/bin/replace +CC sha256sum.c -o ${out}/bin/sha256sum +CC match.c -o ${out}/bin/match +CC mkdir.c -o ${out}/bin/mkdir +CC untar.c -o ${out}/bin/untar +CC ungz.c -o ${out}/bin/ungz +CC unbz2.c -o ${out}/bin/unbz2 +CC catm.c -o ${out}/bin/catm +CC cp.c -o ${out}/bin/cp +CC chmod.c -o ${out}/bin/chmod +CC rm.c -o ${out}/bin/rm +CC replace.c -o ${out}/bin/replace diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix index f1943508b2059..fdb080a331131 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix @@ -1,5 +1,5 @@ { mkKaemDerivation0 -, mescc-tools-extra-src +, src , mescc-tools , version }: @@ -7,6 +7,5 @@ mkKaemDerivation0 { name = "mescc-tools-extra-${version}"; script = ./build.kaem; - src = mescc-tools-extra-src; - inherit mescc-tools; + inherit src mescc-tools; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem index 7d87db13bae21..e0b5975705095 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem @@ -12,12 +12,12 @@ ${chmod} 0555 ${out}/bin/hex2 # M2-Mesoplanet searches for runtime dependencies in environment variables # We can hardcode them with the "replace" utility from mescc-tools-extra ${replace} \ - --file ${m2-mesoplanet-src}/cc.c \ + --file ${src}/M2-Mesoplanet/cc.c \ --output ./cc_patched.c \ --match-on "env_lookup(\"M2LIBC_PATH\")" \ --replace-with "\"${m2libc}\"" ${replace} \ - --file ${m2-mesoplanet-src}/cc_spawn.c \ + --file ${src}/M2-Mesoplanet/cc_spawn.c \ --output ./cc_spawn_patched.c \ --match-on "env_lookup(\"PATH\")" \ --replace-with "\"${out}/bin:\"" @@ -38,13 +38,13 @@ ${M2} --architecture ${ARCH} \ -f ${m2libc}/stdio.c \ -f ${m2libc}/string.c \ -f ${m2libc}/bootstrappable.c \ - -f ${m2-mesoplanet-src}/cc.h \ - -f ${m2-mesoplanet-src}/cc_globals.c \ - -f ${m2-mesoplanet-src}/cc_env.c \ - -f ${m2-mesoplanet-src}/cc_reader.c \ + -f ${src}/M2-Mesoplanet/cc.h \ + -f ${src}/M2-Mesoplanet/cc_globals.c \ + -f ${src}/M2-Mesoplanet/cc_env.c \ + -f ${src}/M2-Mesoplanet/cc_reader.c \ -f ./cc_spawn_patched.c \ - -f ${m2-mesoplanet-src}/cc_core.c \ - -f ${m2-mesoplanet-src}/cc_macro.c \ + -f ${src}/M2-Mesoplanet/cc_core.c \ + -f ${src}/M2-Mesoplanet/cc_macro.c \ -f ./cc_patched.c \ --debug \ -o ./M2-Mesoplanet-1.M1 @@ -80,8 +80,8 @@ ${M2} --architecture ${ARCH} \ -f ${m2libc}/stdio.h \ -f ${m2libc}/stdio.c \ -f ${m2libc}/bootstrappable.c \ - -f ${mescc-tools-src}/stringify.c \ - -f ${mescc-tools-src}/blood-elf.c \ + -f ${src}/mescc-tools/stringify.c \ + -f ${src}/mescc-tools/blood-elf.c \ --debug \ -o ./blood-elf-1.M1 @@ -119,7 +119,7 @@ ${M2} --architecture ${ARCH} \ -f ${m2libc}/stdio.h \ -f ${m2libc}/stdio.c \ -f ${m2libc}/bootstrappable.c \ - -f ${mescc-tools-src}/get_machine.c \ + -f ${src}/mescc-tools/get_machine.c \ --debug \ -o get_machine.M1 @@ -154,14 +154,14 @@ ${M2} --architecture ${ARCH} \ -f ${m2libc}/stdio.h \ -f ${m2libc}/stdio.c \ -f ${m2libc}/bootstrappable.c \ - -f ${m2-planet-src}/cc.h \ - -f ${m2-planet-src}/cc_globals.c \ - -f ${m2-planet-src}/cc_reader.c \ - -f ${m2-planet-src}/cc_strings.c \ - -f ${m2-planet-src}/cc_types.c \ - -f ${m2-planet-src}/cc_core.c \ - -f ${m2-planet-src}/cc_macro.c \ - -f ${m2-planet-src}/cc.c \ + -f ${src}/M2-Planet/cc.h \ + -f ${src}/M2-Planet/cc_globals.c \ + -f ${src}/M2-Planet/cc_reader.c \ + -f ${src}/M2-Planet/cc_strings.c \ + -f ${src}/M2-Planet/cc_types.c \ + -f ${src}/M2-Planet/cc_core.c \ + -f ${src}/M2-Planet/cc_macro.c \ + -f ${src}/M2-Planet/cc.c \ --debug \ -o ./M2-1.M1 diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix index 8e5e8a463b043..d2b97bff862f1 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix @@ -5,10 +5,7 @@ , blood-elf-0 , hex2 , m2libc -, m2-mesoplanet-src -, m2-planet-src -, mescc-tools-src -, mescc-tools-extra-src +, src , version }: @@ -30,7 +27,7 @@ let -f ''${m2libc}/stdio.c \ -f ''${m2libc}/string.c \ -f ''${m2libc}/bootstrappable.c \ - -f ''${mescc-tools-extra-src}/${name}.c \ + -f ''${src}/mescc-tools-extra/${name}.c \ --debug \ -o ${name}.M1 @@ -51,7 +48,7 @@ let --base-address ''${BASE_ADDRESS} \ -o ''${out} ''; - inherit M1 M2 blood-elf-0 hex2 m2libc mescc-tools-extra-src; + inherit M1 M2 blood-elf-0 hex2 m2libc src; }; mkdir = buildMesccToolsExtraUtil "mkdir"; cp = buildMesccToolsExtraUtil "cp"; @@ -62,5 +59,5 @@ mkKaemDerivation0 { name = "mescc-tools-${version}"; script = ./build.kaem; - inherit M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc m2-mesoplanet-src m2-planet-src mescc-tools-src; + inherit M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/sources.nix deleted file mode 100644 index 098b99f304ac1..0000000000000 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/sources.nix +++ /dev/null @@ -1,40 +0,0 @@ -{}: -{ - # Pinned from https://github.com/oriansj/stage0-posix/commit/4ad489ffc261ee036cfd33f20d939d7c5b05844e - version = "unstable-2023-04-16"; - - bootstrap-seeds-src = builtins.fetchTarball { - url = "https://github.com/oriansj/bootstrap-seeds/archive/e4974affa1934274a8b8c29f19c87e758e650f52.tar.gz"; - sha256 = "0f325x9sixbv35b5s6cjd2qi41n84kmzia11n6w4r6rrldw6wci2"; - }; - - m2-mesoplanet-src = builtins.fetchTarball { - url = "https://github.com/oriansj/M2-Mesoplanet/archive/4bf3e2eded821cf9b69fd63a033272197a8703f7.tar.gz"; - sha256 = "0db13grmxg5hp1jj8vss2ms9c7znk319pkhmnd1ygzg5w8i2v0cj"; - }; - - m2-planet-src = builtins.fetchTarball { - url = "https://github.com/oriansj/M2-Planet/archive/f02aaaf67bf004eccd5fd0efb33ced481a0d8346.tar.gz"; - sha256 = "0bysizqr8nffzzjq6m59gs1m5z2smwfbymijjkxr3l8rxx819vck"; - }; - - m2libc = builtins.fetchTarball { - url = "https://github.com/oriansj/M2libc/archive/1139b2bbf5f9c2618e52298917460ec75c345451.tar.gz"; - sha256 = "113bsmpas8iwflnyjh34ap0p0y23bgdkca9viz9l87kwjbag5y4p"; - }; - - mescc-tools-src = builtins.fetchTarball { - url = "https://github.com/oriansj/mescc-tools/archive/3f941824677d74b30d80de08436d63b783adc17f.tar.gz"; - sha256 = "0cl5934giah2hdzi5q3w3qmkhpm7gx9qjc7nhbwvs3gbmq10nk36"; - }; - - mescc-tools-extra-src = builtins.fetchTarball { - url = "https://github.com/oriansj/mescc-tools-extra/archive/ec53af69d6d2119b47b369cd0ec37ac806e7ad60.tar.gz"; - sha256 = "1kn8mpx104ij9gxifl10dbyalizyn3ifszj5i3msidvr5k7ciay1"; - }; - - stage0-posix-x86-src = builtins.fetchTarball { - url = "https://github.com/oriansj/stage0-posix-x86/archive/56e6b8df3e95f4bc04f8b420a4cd8c82c70b9efa.tar.gz"; - sha256 = "0fih58js6kpflbx9bkl3ikpmbxljlfpg36s78dnaiy6nim36aw7d"; - }; -} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix index 4c47917433df7..e1a123e56d597 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix @@ -6,10 +6,8 @@ { system , hex0 -, stage0-posix-x86-src , m2libc -, m2-planet-src -, mescc-tools-src +, src , version }: rec { @@ -24,7 +22,7 @@ rec { # Phase-1 Build hex1 from hex0 # ################################ - hex1 = run "hex1" hex0 ["${stage0-posix-x86-src}/hex1_x86.hex0" out]; + hex1 = run "hex1" hex0 ["${src}/x86/hex1_x86.hex0" out]; # hex1 adds support for single character labels and is available in various forms # in mescc-tools/x86_bootstrap to allow you various ways to verify correctness @@ -33,7 +31,7 @@ rec { # Phase-2 Build hex2 from hex1 # ################################ - hex2-0 = run "hex2" hex1 ["${stage0-posix-x86-src}/hex2_x86.hex1" out]; + hex2-0 = run "hex2" hex1 ["${src}/x86/hex2_x86.hex1" out]; # hex2 adds support for long labels and absolute addresses thus allowing it # to function as an effective linker for later stages of the bootstrap @@ -44,7 +42,7 @@ rec { # Phase-2b Build catm from hex2 # ################################# - catm = run "catm" hex2-0 ["${stage0-posix-x86-src}/catm_x86.hex2" out]; + catm = run "catm" hex2-0 ["${src}/x86/catm_x86.hex2" out]; # catm removes the need for cat or shell support for redirection by providing # equivalent functionality via catm output_file input1 input2 ... inputN @@ -53,7 +51,7 @@ rec { # Phase-3 Build M0 from hex2 # ############################## - M0_hex2 = run "M0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" "${stage0-posix-x86-src}/M0_x86.hex2"]; + M0_hex2 = run "M0.hex2" catm [out "${src}/x86/ELF-i386.hex2" "${src}/x86/M0_x86.hex2"]; M0 = run "M0" hex2-0 [M0_hex2 out]; # M0 is the architecture specific version of M1 and is by design single @@ -63,8 +61,8 @@ rec { # Phase-4 Build cc_x86 from M0 # ################################ - cc_x86-0_hex2 = run "cc_x86-0.hex2" M0 ["${stage0-posix-x86-src}/cc_x86.M1" out]; - cc_x86-1_hex2 = run "cc_x86-1.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" cc_x86-0_hex2]; + cc_x86-0_hex2 = run "cc_x86-0.hex2" M0 ["${src}/x86/cc_x86.M1" out]; + cc_x86-1_hex2 = run "cc_x86-1.hex2" catm [out "${src}/x86/ELF-i386.hex2" cc_x86-0_hex2]; cc_x86 = run "cc_x86" hex2-0 [cc_x86-1_hex2 out]; ####################################### @@ -74,20 +72,20 @@ rec { M2-0_c = run "M2-0.c" catm [ out "${m2libc}/x86/linux/bootstrap.c" - "${m2-planet-src}/cc.h" + "${src}/M2-Planet/cc.h" "${m2libc}/bootstrappable.c" - "${m2-planet-src}/cc_globals.c" - "${m2-planet-src}/cc_reader.c" - "${m2-planet-src}/cc_strings.c" - "${m2-planet-src}/cc_types.c" - "${m2-planet-src}/cc_core.c" - "${m2-planet-src}/cc_macro.c" - "${m2-planet-src}/cc.c" + "${src}/M2-Planet/cc_globals.c" + "${src}/M2-Planet/cc_reader.c" + "${src}/M2-Planet/cc_strings.c" + "${src}/M2-Planet/cc_types.c" + "${src}/M2-Planet/cc_core.c" + "${src}/M2-Planet/cc_macro.c" + "${src}/M2-Planet/cc.c" ]; M2-0_M1 = run "M2-0.M1" cc_x86 [M2-0_c out]; - M2-0-0_M1 = run "M2-0-0.M1" catm [out "${stage0-posix-x86-src}/x86_defs.M1" "${stage0-posix-x86-src}/libc-core.M1" M2-0_M1]; + M2-0-0_M1 = run "M2-0-0.M1" catm [out "${src}/x86/x86_defs.M1" "${src}/x86/libc-core.M1" M2-0_M1]; M2-0_hex2 = run "M2-0.hex2" M0 [M2-0-0_M1 out]; - M2-0-0_hex2 = run "M2-0-0.hex2" catm [out "${stage0-posix-x86-src}/ELF-i386.hex2" M2-0_hex2]; + M2-0-0_hex2 = run "M2-0-0.hex2" catm [out "${src}/x86/ELF-i386.hex2" M2-0_hex2]; M2 = run "M2" hex2-0 [M2-0-0_hex2 out]; ############################################ @@ -98,8 +96,8 @@ rec { "--architecture" "x86" "-f" "${m2libc}/x86/linux/bootstrap.c" "-f" "${m2libc}/bootstrappable.c" - "-f" "${mescc-tools-src}/stringify.c" - "-f" "${mescc-tools-src}/blood-elf.c" + "-f" "${src}/mescc-tools/stringify.c" + "-f" "${src}/mescc-tools/blood-elf.c" "--bootstrap-mode" "-o" out ]; @@ -120,8 +118,8 @@ rec { "--architecture" "x86" "-f" "${m2libc}/x86/linux/bootstrap.c" "-f" "${m2libc}/bootstrappable.c" - "-f" "${mescc-tools-src}/stringify.c" - "-f" "${mescc-tools-src}/M1-macro.c" + "-f" "${src}/mescc-tools/stringify.c" + "-f" "${src}/mescc-tools/M1-macro.c" "--bootstrap-mode" "--debug" "-o" out @@ -153,10 +151,10 @@ rec { "-f" "${m2libc}/stdio.h" "-f" "${m2libc}/stdio.c" "-f" "${m2libc}/bootstrappable.c" - "-f" "${mescc-tools-src}/hex2.h" - "-f" "${mescc-tools-src}/hex2_linker.c" - "-f" "${mescc-tools-src}/hex2_word.c" - "-f" "${mescc-tools-src}/hex2.c" + "-f" "${src}/mescc-tools/hex2.h" + "-f" "${src}/mescc-tools/hex2_linker.c" + "-f" "${src}/mescc-tools/hex2_word.c" + "-f" "${src}/mescc-tools/hex2.c" "--debug" "-o" out ]; @@ -196,8 +194,8 @@ rec { "-f" "${m2libc}/stdio.h" "-f" "${m2libc}/stdio.c" "-f" "${m2libc}/bootstrappable.c" - "-f" "${mescc-tools-src}/stringify.c" - "-f" "${mescc-tools-src}/M1-macro.c" + "-f" "${src}/mescc-tools/stringify.c" + "-f" "${src}/mescc-tools/M1-macro.c" "--debug" "-o" out ]; @@ -239,10 +237,10 @@ rec { "-f" "${m2libc}/stdio.h" "-f" "${m2libc}/stdio.c" "-f" "${m2libc}/bootstrappable.c" - "-f" "${mescc-tools-src}/hex2.h" - "-f" "${mescc-tools-src}/hex2_linker.c" - "-f" "${mescc-tools-src}/hex2_word.c" - "-f" "${mescc-tools-src}/hex2.c" + "-f" "${src}/mescc-tools/hex2.h" + "-f" "${src}/mescc-tools/hex2_linker.c" + "-f" "${src}/mescc-tools/hex2_word.c" + "-f" "${src}/mescc-tools/hex2.c" "--debug" "-o" out ]; @@ -284,10 +282,10 @@ rec { "-f" "${m2libc}/stdio.h" "-f" "${m2libc}/stdio.c" "-f" "${m2libc}/bootstrappable.c" - "-f" "${mescc-tools-src}/Kaem/kaem.h" - "-f" "${mescc-tools-src}/Kaem/variable.c" - "-f" "${mescc-tools-src}/Kaem/kaem_globals.c" - "-f" "${mescc-tools-src}/Kaem/kaem.c" + "-f" "${src}/mescc-tools/Kaem/kaem.h" + "-f" "${src}/mescc-tools/Kaem/variable.c" + "-f" "${src}/mescc-tools/Kaem/kaem_globals.c" + "-f" "${src}/mescc-tools/Kaem/kaem.c" "--debug" "-o" out ]; From 5d423c3ac081651d4c8fc57667b08dd0b47eee80 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 19:10:49 +1000 Subject: [PATCH 09/35] minimal-bootstrap: add source attribution --- .../linux/minimal-bootstrap/mes/default.nix | 8 ++++++- .../stage0-posix/mescc-tools-extra/build.kaem | 18 +++++++++++++++ .../stage0-posix/mescc-tools/build.kaem | 20 ++++++++++++++++ .../stage0-posix/stage0-posix-x86.nix | 23 +++++++++++++++++++ .../tinycc/bootstrappable.nix | 9 ++++++++ .../minimal-bootstrap/tinycc/default.nix | 6 +++++ 6 files changed, 83 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index 50433c40e7d75..02d069b1ece94 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -1,3 +1,10 @@ +# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem +# +# SPDX-FileCopyrightText: 2020-2022 Andrius Štikonas +# SPDX-FileCopyrightText: 2020-2022 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + { runCommand , fetchurl , fetchtarball @@ -20,7 +27,6 @@ let sha256 = "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"; }) + "/nyacc-${nyaccVersion}"; in -# Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem (runCommand "mes-${version}" {} '' # Unpack source ungz --file ${src} --output mes.tar diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem index 12471bd0519ec..e50fc1c68474d 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/build.kaem @@ -1,5 +1,23 @@ # This is a modified version of mescc-tools-extra/mescc-tools-extra.kaem # https://github.com/oriansj/mescc-tools-extra/blob/ec53af69d6d2119b47b369cd0ec37ac806e7ad60/mescc-tools-extra.kaem +# - Paths to build inputs have been changed for nix +# - Added additional step to create $out directory + +## Copyright (C) 2017 Jeremiah Orians +## This file is part of mescc-tools. +## +## mescc-tools is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## mescc-tools is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with mescc-tools. If not, see . alias CC="${mescc-tools}/bin/M2-Mesoplanet --operating-system ${OPERATING_SYSTEM} --architecture ${ARCH} -f" cd ${src}/mescc-tools-extra diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem index e0b5975705095..3a7ae25fbd828 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/build.kaem @@ -1,5 +1,25 @@ # This is a modified version of stage0-posix/x86/mescc-tools-full-kaem.kaem # https://github.com/oriansj/stage0-posix-x86/blob/56e6b8df3e95f4bc04f8b420a4cd8c82c70b9efa/mescc-tools-full-kaem.kaem +# - Paths to build inputs have been changed for nix + +# Mes --- Maxwell Equations of Software +# Copyright © 2017,2019 Jan Nieuwenhuizen +# Copyright © 2017,2019 Jeremiah Orians +# +# This file is part of Mes. +# +# Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Mes. If not, see . ${mkdir} -p ${out}/bin ${cp} ${M2} ${out}/bin/M2 diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix index e1a123e56d597..917518958f41e 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix @@ -1,5 +1,28 @@ # This is a translation of stage0-posix/stage0-posix/x86/mescc-tools-mini-kaem.kaem to nix # https://github.com/oriansj/stage0-posix-x86/blob/56e6b8df3e95f4bc04f8b420a4cd8c82c70b9efa/mescc-tools-mini-kaem.kaem +# +# We have access to mini-kaem at this point but it doesn't support substituting +# environment variables. Without variables there's no way of passing in store inputs, +# or the $out path, other than as command line arguments directly + +# Mes --- Maxwell Equations of Software +# Copyright © 2017,2019 Jan Nieuwenhuizen +# Copyright © 2017,2019 Jeremiah Orians +# +# This file is part of Mes. +# +# Mes is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# Mes is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Mes. If not, see . # Warning all binaries prior to the use of blood-elf will not be readable by # Objdump, you may need to use ndism or gdb to view the assembly in the binary. diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index 0884656dc00f8..0b495430913e1 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -1,6 +1,12 @@ # Bootstrappable TCC is a fork from mainline TCC development # that can be compiled by MesCC +# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.26/tcc-0.9.26.kaem +# +# SPDX-FileCopyrightText: 2021-22 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + { lib , runCommand , fetchtarball @@ -78,6 +84,9 @@ let ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o ''; + # Bootstrap stage build flags obtained from + # https://gitlab.com/janneke/tinycc/-/blob/80114c4da6b17fbaabb399cc29f427e368309bc8/boot.sh + boot0-tcc = buildTinyccN { pname = "boot0-tcc"; inherit src version; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index 961f259189cc6..3930e4758434c 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -1,3 +1,9 @@ +# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.27/tcc-0.9.27.kaem +# +# SPDX-FileCopyrightText: 2021-22 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + { lib , runCommand , fetchtarball From dc11b48d10e9fc012820359f79e1cf4305874efd Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 25 Apr 2023 19:29:09 +1000 Subject: [PATCH 10/35] minimal-bootstrap.tinycc: refactor mes-libc into separate file --- .../linux/minimal-bootstrap/tinycc/bootstrappable.nix | 6 +++--- .../linux/minimal-bootstrap/tinycc/default.nix | 11 +++++------ .../linux/minimal-bootstrap/tinycc/mes-libc.kaem | 10 ++++++++++ 3 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index 0b495430913e1..6fca288148d25 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -12,7 +12,7 @@ , fetchtarball , mes , buildTinyccN -, unified-libc +, mes-libc }: let version = "unstable-2023-04-20"; @@ -72,8 +72,8 @@ let ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c # libc+gcc.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/mes-libc.o ${mes-libc} + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/mes-libc.o # libtcc1.a ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/libtcc1.o lib/libtcc1.c diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index 3930e4758434c..34af572db155a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -17,9 +17,8 @@ let sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; }) + "/tinycc-86f3d8e"; - unified-libc = runCommand "mes-unified-libc.c" {} '' - cd ${mes}${mes.mesPrefix}/lib - catm ''${out} ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c dirent/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/x86-mes-gcc/_exit.c linux/x86-mes-gcc/syscall.c linux/x86-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/rand.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c x86-mes-gcc/setjmp.c + mes-libc = runCommand "mes-libc-${version}.c" { MES_PREFIX = "${mes}${mes.mesPrefix}"; } '' + kaem --verbose --strict --file ${./mes-libc.kaem} ''; buildTinyccN = { @@ -72,13 +71,13 @@ let ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o ''${TMPDIR}/libtcc1.o ${src}/lib/libtcc1.c ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/unified-libc.o ${unified-libc} - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/unified-libc.o + ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/mes-libc.o ${mes-libc} + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/mes-libc.o ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o ''; - boot4-tcc = callPackage ./bootstrappable.nix { inherit buildTinyccN unified-libc; }; + boot4-tcc = callPackage ./bootstrappable.nix { inherit buildTinyccN mes-libc; }; tccdefs = runCommand "tccdefs-${version}" {} '' mkdir ''${out} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem new file mode 100644 index 0000000000000..68835d5d92d1e --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem @@ -0,0 +1,10 @@ +# Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.27/tcc-0.9.27.kaem +# +# SPDX-FileCopyrightText: 2021-22 fosslinux +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Concatenate all source files into a convenient bundle +cd ${MES_PREFIX}/lib +catm ${out} ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c dirent/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/x86-mes-gcc/_exit.c linux/x86-mes-gcc/syscall.c linux/x86-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/rand.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c x86-mes-gcc/setjmp.c From 59e11ad4e4c4f825cf5080dc30d30d7e185cda81 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Wed, 26 Apr 2023 14:26:43 +1000 Subject: [PATCH 11/35] minimal-bootstrap: add meta attributes --- .../linux/minimal-bootstrap/mes/default.nix | 15 +++++++-- .../stage0-posix/default.nix | 21 ++++++++----- .../minimal-bootstrap/stage0-posix/hex0.nix | 31 ++++++++++--------- .../stage0-posix/kaem-minimal.nix | 28 +++++++++-------- .../mescc-tools-extra/default.nix | 14 +++++++-- .../stage0-posix/mescc-tools/default.nix | 15 ++++++--- .../stage0-posix/stage0-posix-x86.nix | 20 +++++++++--- .../minimal-bootstrap/stage0-posix/utils.nix | 21 ++++++++++++- .../tinycc/bootstrappable.nix | 18 ++++++++--- .../minimal-bootstrap/tinycc/default.nix | 19 +++++++++--- 10 files changed, 143 insertions(+), 59 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index 02d069b1ece94..d40014b8f70e6 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -5,7 +5,8 @@ # # SPDX-License-Identifier: GPL-3.0-or-later -{ runCommand +{ lib +, runCommand , fetchurl , fetchtarball , writeText @@ -27,7 +28,17 @@ let sha256 = "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"; }) + "/nyacc-${nyaccVersion}"; in -(runCommand "mes-${version}" {} '' +(runCommand "mes-${version}" { + pname = "mes"; + inherit version; + meta = with lib; { + description = "Scheme interpreter and C compiler for bootstrapping"; + homepage = "https://www.gnu.org/software/mes"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; +} '' # Unpack source ungz --file ${src} --output mes.tar mkdir ''${out} ''${out}/bin ''${out}/share diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 99df9d7061913..212e224c8b897 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -28,12 +28,11 @@ lib.makeScope newScope (self: with self; { inherit (callPackage ./stage0-posix-x86.nix { }) blood-elf-0 hex2 kaem-unwrapped M1 M2; mkKaemDerivation0 = args@{ - name, script, ... }: - derivation ({ - inherit system name; + derivationWithMeta ({ + inherit system; builder = kaem-unwrapped; args = [ "--verbose" @@ -47,24 +46,32 @@ lib.makeScope newScope (self: with self; { BLOOD_FLAG = " "; BASE_ADDRESS = "0x8048000"; ENDIAN_FLAG = "--little-endian"; - } // (builtins.removeAttrs args [ "name" "script" ])); + } // (builtins.removeAttrs args [ "script" ])); mescc-tools = callPackage ./mescc-tools { }; mescc-tools-extra = callPackage ./mescc-tools-extra { }; - inherit (callPackage ./utils.nix { }) writeTextFile writeText runCommand fetchtarball; + inherit (callPackage ./utils.nix { }) derivationWithMeta writeTextFile writeText runCommand fetchtarball; # Now that mescc-tools-extra is available we can install kaem at /bin/kaem # to make it findable in environments kaem = mkKaemDerivation0 { - name = "kaem-${version}"; + pname = "kaem"; script = builtins.toFile "kaem-wrapper.kaem" '' mkdir -p ''${out}/bin cp ''${kaem-unwrapped} ''${out}/bin/kaem chmod 555 ''${out}/bin/kaem ''; PATH = lib.makeBinPath [ mescc-tools-extra ]; - inherit kaem-unwrapped; + inherit version kaem-unwrapped; + + meta = with lib; { + description = "Minimal build tool for running scripts on systems that lack any shell"; + homepage = "https://github.com/oriansj/mescc-tools"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; }; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix index 37a387e26e89b..84d4823a4afd1 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix @@ -1,22 +1,23 @@ -{ system +{ lib +, derivationWithMeta +, system , src , version }: -let - throwSystem = throw "Unsupported system: ${system}"; - arch = { - i686-linux = "x86"; - }.${system} or throwSystem; - - seed = "${src}/bootstrap-seeds/POSIX/${arch}/hex0-seed"; - source = "${src}/bootstrap-seeds/POSIX/${arch}/hex0_${arch}.hex0"; -in -derivation { - inherit system; - name = "hex0-${version}"; - builder = seed; +derivationWithMeta { + inherit system version; + pname = "hex0"; + builder = "${src}/bootstrap-seeds/POSIX/x86/hex0-seed"; args = [ - source + "${src}/bootstrap-seeds/POSIX/x86/hex0_x86.hex0" (placeholder "out") ]; + + meta = with lib; { + description = "Minimal assembler for bootstrapping"; + homepage = "https://github.com/oriansj/stage0-posix"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix index 0e3fe9f6b8194..9561226ea3f3a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix @@ -1,23 +1,25 @@ -{ system +{ lib +, derivationWithMeta +, system , src , hex0 , version }: -let - throwSystem = throw "Unsupported system: ${system}"; - arch = { - i686-linux = "x86"; - }.${system} or throwSystem; - - source = "${src}/bootstrap-seeds/POSIX/${arch}/kaem-minimal.hex0"; -in -derivation { - inherit system; - name = "kaem-minimal-${version}"; +derivationWithMeta { + inherit system version; + pname = "kaem-minimal"; builder = hex0; args = [ - source + "${src}/bootstrap-seeds/POSIX/x86/kaem-minimal.hex0" (placeholder "out") ]; + + meta = with lib; { + description = "First stage minimal scriptable build tool for bootstrapping"; + homepage = "https://github.com/oriansj/stage0-posix"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix index fdb080a331131..adde0428f2387 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix @@ -1,11 +1,19 @@ -{ mkKaemDerivation0 +{ lib +, mkKaemDerivation0 , src , mescc-tools , version }: mkKaemDerivation0 { - name = "mescc-tools-extra-${version}"; + inherit version src mescc-tools; + pname = "mescc-tools-extra"; script = ./build.kaem; - inherit src mescc-tools; + meta = with lib; { + description = "Collection of tools written for use in bootstrapping"; + homepage = "https://github.com/oriansj/mescc-tools-extra"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix index d2b97bff862f1..6ec55941890b3 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix @@ -13,7 +13,7 @@ let # We need a few tools from mescc-tools-extra to assemble the output folder buildMesccToolsExtraUtil = name: mkKaemDerivation0 { - name = "mescc-tools-extra-${name}-${version}"; + pname = "mescc-tools-extra-${name}"; script = builtins.toFile "build-${name}.kaem" '' ''${M2} --architecture ''${ARCH} \ -f ''${m2libc}/sys/types.h \ @@ -48,7 +48,7 @@ let --base-address ''${BASE_ADDRESS} \ -o ''${out} ''; - inherit M1 M2 blood-elf-0 hex2 m2libc src; + inherit version M1 M2 blood-elf-0 hex2 m2libc src; }; mkdir = buildMesccToolsExtraUtil "mkdir"; cp = buildMesccToolsExtraUtil "cp"; @@ -56,8 +56,15 @@ let replace = buildMesccToolsExtraUtil "replace"; in mkKaemDerivation0 { - name = "mescc-tools-${version}"; + pname = "mescc-tools"; script = ./build.kaem; + inherit version M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src; - inherit M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src; + meta = with lib; { + description = "Collection of tools written for use in bootstrapping"; + homepage = "https://github.com/oriansj/mescc-tools"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix index 917518958f41e..ab831cb5ac7e6 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix @@ -27,7 +27,9 @@ # Warning all binaries prior to the use of blood-elf will not be readable by # Objdump, you may need to use ndism or gdb to view the assembly in the binary. -{ system +{ lib +, derivationWithMeta +, system , hex0 , m2libc , src @@ -36,10 +38,18 @@ rec { out = placeholder "out"; - run = pname: builder: args: derivation { - inherit system builder args; - name = "${pname}-${version}"; - }; + run = pname: builder: args: + derivationWithMeta { + inherit system pname version builder args; + + meta = with lib; { + description = "Collection of tools written for use in bootstrapping"; + homepage = "https://github.com/oriansj/stage0-posix"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; + }; ################################ # Phase-1 Build hex1 from hex0 # diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index b24b8ffdf5c06..e66cd5b5ad461 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -1,5 +1,7 @@ { lib +, stdenv , system +, callPackage , mkKaemDerivation0 , fetchurl , kaem @@ -7,7 +9,24 @@ , mescc-tools-extra }: +let + checkMeta = callPackage ../../../../stdenv/generic/check-meta.nix { + inherit (stdenv) hostPlatform; + }; +in rec { + derivationWithMeta = attrs: + let + validity = checkMeta { inherit attrs; }; + inherit (validity) meta; + in + lib.extendDerivation + validity.handled + { inherit meta; } + (derivation ({ + inherit (meta) name; + } // (builtins.removeAttrs attrs [ "meta" ]))); + writeTextFile = { name # the name of the derivation , text @@ -36,7 +55,7 @@ rec { writeText = name: text: writeTextFile {inherit name text;}; runCommand = name: env: buildCommand: - derivation ({ + derivationWithMeta ({ inherit name system; builder = "${kaem}/bin/kaem"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index 6fca288148d25..c218e74322718 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -22,6 +22,14 @@ let sha256 = "1a0cw9a62qc76qqn5sjmp3xrbbvsz2dxrw21lrnx9q0s74mwaxbq"; }) + "/tinycc-${rev}"; + meta = with lib; { + description = "Tiny C Compiler's bootstrappable fork"; + homepage = "https://gitlab.com/janneke/tinycc"; + license = licenses.lgpl21Only; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; + mes-tcc = runCommand "mes-tcc-${version}" {} '' # Create config.h catm config.h @@ -89,7 +97,7 @@ let boot0-tcc = buildTinyccN { pname = "boot0-tcc"; - inherit src version; + inherit src version meta; prev = mes-tcc; buildOptions = [ "-D HAVE_LONG_LONG_STUB=1" @@ -102,7 +110,7 @@ let boot1-tcc = buildTinyccN { pname = "boot1-tcc"; - inherit src version; + inherit src version meta; prev = boot0-tcc; buildOptions = [ "-D HAVE_BITFIELD=1" @@ -116,7 +124,7 @@ let boot2-tcc = buildTinyccN { pname = "boot2-tcc"; - inherit src version; + inherit src version meta; prev = boot1-tcc; buildOptions = [ "-D HAVE_BITFIELD=1" @@ -132,7 +140,7 @@ let boot3-tcc = buildTinyccN { pname = "boot3-tcc"; - inherit src version; + inherit src version meta; prev = boot2-tcc; buildOptions = [ "-D HAVE_BITFIELD=1" @@ -148,7 +156,7 @@ let boot4-tcc = buildTinyccN { pname = "boot4-tcc"; - inherit src version; + inherit src version meta; prev = boot3-tcc; buildOptions = [ "-D HAVE_BITFIELD=1" diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index 34af572db155a..12e876ec4362c 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -17,23 +17,34 @@ let sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; }) + "/tinycc-86f3d8e"; + meta = with lib; { + description = "Small, fast, and embeddable C compiler and interpreter"; + homepage = "https://repo.or.cz/w/tinycc.git"; + license = licenses.lgpl21Only; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; + mes-libc = runCommand "mes-libc-${version}.c" { MES_PREFIX = "${mes}${mes.mesPrefix}"; } '' kaem --verbose --strict --file ${./mes-libc.kaem} ''; buildTinyccN = { pname, - src, version, + src, prev, buildOptions, libtccBuildOptions, + meta }: let options = lib.strings.concatStringsSep " " buildOptions; libtccOptions = lib.strings.concatStringsSep " " libtccBuildOptions; in - runCommand "${pname}-${version}" {} '' + runCommand "${pname}-${version}" { + inherit pname version meta; + } '' catm config.h mkdir -p ''${out}/bin ''${out}/lib ${prev}/bin/tcc \ @@ -87,7 +98,7 @@ let boot5-tcc = buildTinyccN { pname = "boot5-tcc"; - inherit src version; + inherit src version meta; prev = boot4-tcc; buildOptions = [ "-D HAVE_BITFIELD=1" @@ -109,7 +120,7 @@ let tinycc-with-mes-libc = buildTinyccN { pname = "tinycc-with-mes-libc"; - inherit src version; + inherit src version meta; prev = boot5-tcc; buildOptions = [ "-std=c99" From 60ebcafd4768bbe77f162d5c17ec35569be405e5 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Wed, 26 Apr 2023 15:01:30 +1000 Subject: [PATCH 12/35] minimal-bootstrap.stage0-posix: remove mkKaemDerivation0 abstration --- .../stage0-posix/default.nix | 41 +++----- .../mescc-tools-extra/default.nix | 21 +++- .../stage0-posix/mescc-tools/default.nix | 95 +++++++++++-------- .../minimal-bootstrap/stage0-posix/utils.nix | 33 ++++--- 4 files changed, 107 insertions(+), 83 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 212e224c8b897..c29e440b0af9b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -27,27 +27,6 @@ lib.makeScope newScope (self: with self; { inherit (callPackage ./stage0-posix-x86.nix { }) blood-elf-0 hex2 kaem-unwrapped M1 M2; - mkKaemDerivation0 = args@{ - script, - ... - }: - derivationWithMeta ({ - inherit system; - builder = kaem-unwrapped; - args = [ - "--verbose" - "--strict" - "--file" - script - ]; - - ARCH = "x86"; - OPERATING_SYSTEM = "linux"; - BLOOD_FLAG = " "; - BASE_ADDRESS = "0x8048000"; - ENDIAN_FLAG = "--little-endian"; - } // (builtins.removeAttrs args [ "script" ])); - mescc-tools = callPackage ./mescc-tools { }; mescc-tools-extra = callPackage ./mescc-tools-extra { }; @@ -56,15 +35,21 @@ lib.makeScope newScope (self: with self; { # Now that mescc-tools-extra is available we can install kaem at /bin/kaem # to make it findable in environments - kaem = mkKaemDerivation0 { + kaem = derivationWithMeta { + inherit system version kaem-unwrapped; pname = "kaem"; - script = builtins.toFile "kaem-wrapper.kaem" '' - mkdir -p ''${out}/bin - cp ''${kaem-unwrapped} ''${out}/bin/kaem - chmod 555 ''${out}/bin/kaem - ''; + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + (builtins.toFile "kaem-wrapper.kaem" '' + mkdir -p ''${out}/bin + cp ''${kaem-unwrapped} ''${out}/bin/kaem + chmod 555 ''${out}/bin/kaem + '') + ]; PATH = lib.makeBinPath [ mescc-tools-extra ]; - inherit version kaem-unwrapped; meta = with lib; { description = "Minimal build tool for running scripts on systems that lack any shell"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix index adde0428f2387..a3958f3ce952b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix @@ -1,13 +1,24 @@ { lib -, mkKaemDerivation0 -, src +, system +, derivationWithMeta +, kaem-unwrapped , mescc-tools +, src , version }: -mkKaemDerivation0 { - inherit version src mescc-tools; +derivationWithMeta { + inherit system version src mescc-tools; pname = "mescc-tools-extra"; - script = ./build.kaem; + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + ./build.kaem + ]; + + ARCH = "x86"; + OPERATING_SYSTEM = "linux"; meta = with lib; { description = "Collection of tools written for use in bootstrapping"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix index 6ec55941890b3..1cdef7729f0f2 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix @@ -1,5 +1,7 @@ { lib -, mkKaemDerivation0 +, system +, derivationWithMeta +, kaem-unwrapped , M1 , M2 , blood-elf-0 @@ -10,55 +12,74 @@ }: let + ARCH = "x86"; + BLOOD_FLAG = " "; + BASE_ADDRESS = "0x8048000"; + ENDIAN_FLAG = "--little-endian"; + # We need a few tools from mescc-tools-extra to assemble the output folder buildMesccToolsExtraUtil = name: - mkKaemDerivation0 { + derivationWithMeta { pname = "mescc-tools-extra-${name}"; - script = builtins.toFile "build-${name}.kaem" '' - ''${M2} --architecture ''${ARCH} \ - -f ''${m2libc}/sys/types.h \ - -f ''${m2libc}/stddef.h \ - -f ''${m2libc}/''${ARCH}/linux/fcntl.c \ - -f ''${m2libc}/fcntl.c \ - -f ''${m2libc}/''${ARCH}/linux/unistd.c \ - -f ''${m2libc}/''${ARCH}/linux/sys/stat.c \ - -f ''${m2libc}/stdlib.c \ - -f ''${m2libc}/stdio.h \ - -f ''${m2libc}/stdio.c \ - -f ''${m2libc}/string.c \ - -f ''${m2libc}/bootstrappable.c \ - -f ''${src}/mescc-tools-extra/${name}.c \ - --debug \ - -o ${name}.M1 + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + (builtins.toFile "build-${name}.kaem" '' + ''${M2} --architecture ''${ARCH} \ + -f ''${m2libc}/sys/types.h \ + -f ''${m2libc}/stddef.h \ + -f ''${m2libc}/''${ARCH}/linux/fcntl.c \ + -f ''${m2libc}/fcntl.c \ + -f ''${m2libc}/''${ARCH}/linux/unistd.c \ + -f ''${m2libc}/''${ARCH}/linux/sys/stat.c \ + -f ''${m2libc}/stdlib.c \ + -f ''${m2libc}/stdio.h \ + -f ''${m2libc}/stdio.c \ + -f ''${m2libc}/string.c \ + -f ''${m2libc}/bootstrappable.c \ + -f ''${src}/mescc-tools-extra/${name}.c \ + --debug \ + -o ${name}.M1 + + ''${blood-elf-0} ''${ENDIAN_FLAG} -f ${name}.M1 -o ${name}-footer.M1 + + ''${M1} --architecture ''${ARCH} \ + ''${ENDIAN_FLAG} \ + -f ''${m2libc}/''${ARCH}/''${ARCH}_defs.M1 \ + -f ''${m2libc}/''${ARCH}/libc-full.M1 \ + -f ${name}.M1 \ + -f ${name}-footer.M1 \ + -o ${name}.hex2 - ''${blood-elf-0} ''${ENDIAN_FLAG} -f ${name}.M1 -o ${name}-footer.M1 + ''${hex2} --architecture ''${ARCH} \ + ''${ENDIAN_FLAG} \ + -f ''${m2libc}/''${ARCH}/ELF-''${ARCH}-debug.hex2 \ + -f ${name}.hex2 \ + --base-address ''${BASE_ADDRESS} \ + -o ''${out} + '') + ]; + inherit system version M1 M2 blood-elf-0 hex2 m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; - ''${M1} --architecture ''${ARCH} \ - ''${ENDIAN_FLAG} \ - -f ''${m2libc}/''${ARCH}/''${ARCH}_defs.M1 \ - -f ''${m2libc}/''${ARCH}/libc-full.M1 \ - -f ${name}.M1 \ - -f ${name}-footer.M1 \ - -o ${name}.hex2 - ''${hex2} --architecture ''${ARCH} \ - ''${ENDIAN_FLAG} \ - -f ''${m2libc}/''${ARCH}/ELF-''${ARCH}-debug.hex2 \ - -f ${name}.hex2 \ - --base-address ''${BASE_ADDRESS} \ - -o ''${out} - ''; - inherit version M1 M2 blood-elf-0 hex2 m2libc src; }; mkdir = buildMesccToolsExtraUtil "mkdir"; cp = buildMesccToolsExtraUtil "cp"; chmod = buildMesccToolsExtraUtil "chmod"; replace = buildMesccToolsExtraUtil "replace"; in -mkKaemDerivation0 { +derivationWithMeta { pname = "mescc-tools"; - script = ./build.kaem; - inherit version M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src; + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + ./build.kaem + ]; + inherit system version M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; meta = with lib; { description = "Collection of tools written for use in bootstrapping"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index e66cd5b5ad461..13ff75d99a615 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -2,9 +2,9 @@ , stdenv , system , callPackage -, mkKaemDerivation0 , fetchurl , kaem +, kaem-unwrapped , mescc-tools , mescc-tools-extra }: @@ -35,21 +35,28 @@ rec { , allowSubstitutes ? false , preferLocalBuild ? true }: - mkKaemDerivation0 { - inherit name text executable allowSubstitutes preferLocalBuild; + derivationWithMeta { + inherit system name text executable allowSubstitutes preferLocalBuild; passAsFile = [ "text" ]; + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + (builtins.toFile "write-text-file.kaem" '' + target=''${out}${destination} + if match x${if builtins.dirOf destination == "" then "0" else "1"} x1; then + mkdir -p ''${out}${builtins.dirOf destination} + fi + cp ''${textPath} ''${target} + if match x''${executable} x1; then + chmod 555 ''${target} + fi + '') + ]; + PATH = lib.makeBinPath [ mescc-tools-extra ]; - script = builtins.toFile "write-text-file.kaem" '' - target=''${out}${destination} - if match x${if builtins.dirOf destination == "" then "0" else "1"} x1; then - mkdir -p ''${out}${builtins.dirOf destination} - fi - cp ''${textPath} ''${target} - if match x''${executable} x1; then - chmod 555 ''${target} - fi - ''; }; writeText = name: text: writeTextFile {inherit name text;}; From 773cadd5e71d7776d5f17daa2a9975ee6ebf5587 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Wed, 26 Apr 2023 15:08:52 +1000 Subject: [PATCH 13/35] minimal-bootstrap.kaem: move definition --- .../stage0-posix/default.nix | 30 ++-------------- .../stage0-posix/kaem/default.nix | 34 +++++++++++++++++++ .../{kaem-minimal.nix => kaem/minimal.nix} | 0 3 files changed, 36 insertions(+), 28 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix rename pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/{kaem-minimal.nix => kaem/minimal.nix} (100%) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index c29e440b0af9b..5f33264e2b22f 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -23,7 +23,8 @@ lib.makeScope newScope (self: with self; { hex0 = callPackage ./hex0.nix { }; - kaem-minimal = callPackage ./kaem-minimal.nix { }; + kaem = callPackage ./kaem { }; + kaem-minimal = callPackage ./kaem/minimal.nix { }; inherit (callPackage ./stage0-posix-x86.nix { }) blood-elf-0 hex2 kaem-unwrapped M1 M2; @@ -32,31 +33,4 @@ lib.makeScope newScope (self: with self; { mescc-tools-extra = callPackage ./mescc-tools-extra { }; inherit (callPackage ./utils.nix { }) derivationWithMeta writeTextFile writeText runCommand fetchtarball; - - # Now that mescc-tools-extra is available we can install kaem at /bin/kaem - # to make it findable in environments - kaem = derivationWithMeta { - inherit system version kaem-unwrapped; - pname = "kaem"; - builder = kaem-unwrapped; - args = [ - "--verbose" - "--strict" - "--file" - (builtins.toFile "kaem-wrapper.kaem" '' - mkdir -p ''${out}/bin - cp ''${kaem-unwrapped} ''${out}/bin/kaem - chmod 555 ''${out}/bin/kaem - '') - ]; - PATH = lib.makeBinPath [ mescc-tools-extra ]; - - meta = with lib; { - description = "Minimal build tool for running scripts on systems that lack any shell"; - homepage = "https://github.com/oriansj/mescc-tools"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ emilytrau ]; - platforms = [ "i686-linux" ]; - }; - }; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix new file mode 100644 index 0000000000000..0db34b0638b4a --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix @@ -0,0 +1,34 @@ +{ lib +, system +, derivationWithMeta +, kaem-unwrapped +, mescc-tools-extra +, version +}: + +# Once mescc-tools-extra is available we can install kaem at /bin/kaem +# to make it findable in environments +derivationWithMeta { + inherit system version kaem-unwrapped; + pname = "kaem"; + builder = kaem-unwrapped; + args = [ + "--verbose" + "--strict" + "--file" + (builtins.toFile "kaem-wrapper.kaem" '' + mkdir -p ''${out}/bin + cp ''${kaem-unwrapped} ''${out}/bin/kaem + chmod 555 ''${out}/bin/kaem + '') + ]; + PATH = lib.makeBinPath [ mescc-tools-extra ]; + + meta = with lib; { + description = "Minimal build tool for running scripts on systems that lack any shell"; + homepage = "https://github.com/oriansj/mescc-tools"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; +} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix similarity index 100% rename from pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem-minimal.nix rename to pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix From 8ea19fbc18d07975bd3bb13de8abf5e1fbe279de Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Wed, 26 Apr 2023 15:13:27 +1000 Subject: [PATCH 14/35] minimal-bootstrap: inherit system from hostPlatform --- pkgs/os-specific/linux/minimal-bootstrap/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 98559814f692a..ff24faeb635da 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -1,11 +1,13 @@ { lib , newScope -, system +, stdenv }: lib.makeScope newScope (self: with self; { callPackage = self.callPackage; + inherit (stdenv.hostPlatform) system; + fetchurl = import ../../../build-support/fetchurl/boot.nix { inherit system; }; From 8ef86405b6b213fdf2ddcc3afe4fff1128eebd7c Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Thu, 27 Apr 2023 02:16:37 +1000 Subject: [PATCH 15/35] minimal-bootstrap.writeTextFile: remove extra derivations --- .../linux/minimal-bootstrap/stage0-posix/utils.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index 13ff75d99a615..89b99977e42cc 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -45,9 +45,9 @@ rec { "--strict" "--file" (builtins.toFile "write-text-file.kaem" '' - target=''${out}${destination} - if match x${if builtins.dirOf destination == "" then "0" else "1"} x1; then - mkdir -p ''${out}${builtins.dirOf destination} + target=''${out}''${destination} + if match x''${mkdirDestination} x1; then + mkdir -p ''${out}''${destinationDir} fi cp ''${textPath} ''${target} if match x''${executable} x1; then @@ -57,6 +57,9 @@ rec { ]; PATH = lib.makeBinPath [ mescc-tools-extra ]; + mkdirDestination = if builtins.dirOf destination == "." then "0" else "1"; + destinationDir = builtins.dirOf destination; + inherit destination; }; writeText = name: text: writeTextFile {inherit name text;}; From 8950041e2ba85960594a82b67b6cfb15c3a3a500 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sun, 30 Apr 2023 10:56:53 +1000 Subject: [PATCH 16/35] minimal-bootstrap.mes: inline config.h --- pkgs/os-specific/linux/minimal-bootstrap/mes/config.h | 2 -- pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix | 8 ++++++-- 2 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 pkgs/os-specific/linux/minimal-bootstrap/mes/config.h diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/config.h b/pkgs/os-specific/linux/minimal-bootstrap/mes/config.h deleted file mode 100644 index 6501827d12cea..0000000000000 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/config.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef SYSTEM_LIBC -#define MES_VERSION "@VERSION@" \ No newline at end of file diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index d40014b8f70e6..d2aabba2736c9 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -27,6 +27,11 @@ let url = "mirror://savannah/nyacc/nyacc-${nyaccVersion}.tar.gz"; sha256 = "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"; }) + "/nyacc-${nyaccVersion}"; + + config_h = builtins.toFile "config.h" '' + #undef SYSTEM_LIBC + #define MES_VERSION "${version}" + ''; in (runCommand "mes-${version}" { pname = "mes"; @@ -50,8 +55,7 @@ in cd ''${MES_PREFIX} - cp ${./config.h} include/mes/config.h - replace --file include/mes/config.h --output include/mes/config.h --match-on @VERSION@ --replace-with ${version} + cp ${config_h} include/mes/config.h mkdir include/arch cp include/linux/x86/syscall.h include/arch/syscall.h From d59fb08f647a80dd58c103f7870ecc2e0acefae6 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sun, 30 Apr 2023 11:32:54 +1000 Subject: [PATCH 17/35] minimal-bootstrap: makeDerivationWithMeta supports passthru --- .../linux/minimal-bootstrap/stage0-posix/utils.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index 89b99977e42cc..c2b0c753a93a5 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -17,15 +17,16 @@ in rec { derivationWithMeta = attrs: let + passthru = attrs.passthru or {}; validity = checkMeta { inherit attrs; }; inherit (validity) meta; in lib.extendDerivation validity.handled - { inherit meta; } + ({ inherit meta passthru; } // passthru) (derivation ({ inherit (meta) name; - } // (builtins.removeAttrs attrs [ "meta" ]))); + } // (builtins.removeAttrs attrs [ "meta" "passthru" ]))); writeTextFile = { name # the name of the derivation From 760ab354879a78636074e1940f9a18fe18278592 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sun, 30 Apr 2023 11:33:44 +1000 Subject: [PATCH 18/35] minimal-bootstrap.nyacc: init at 1.00.2, split from mes --- .../linux/minimal-bootstrap/default.nix | 1 + .../linux/minimal-bootstrap/mes/default.nix | 25 ++++++------ .../linux/minimal-bootstrap/mes/nyacc.nix | 39 +++++++++++++++++++ 3 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/mes/nyacc.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index ff24faeb635da..459321cb0da25 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -14,6 +14,7 @@ lib.makeScope newScope (self: with self; { inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand fetchtarball; + nyacc = callPackage ./mes/nyacc.nix { }; mes = callPackage ./mes { }; tinycc-with-mes-libc = callPackage ./tinycc/default.nix { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index d2aabba2736c9..f851f77ca0db3 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -8,12 +8,13 @@ { lib , runCommand , fetchurl -, fetchtarball , writeText , m2libc , mescc-tools +, nyacc }: let + pname = "mes"; version = "0.24.2"; ARCH = "x86"; @@ -22,20 +23,18 @@ let sha256 = "0vp8v88zszh1imm3dvdfi3m8cywshdj7xcrsq4cgmss69s2y1nkx"; }; - nyaccVersion = "1.00.2"; - nyaccModules = (fetchtarball { - url = "mirror://savannah/nyacc/nyacc-${nyaccVersion}.tar.gz"; - sha256 = "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"; - }) + "/nyacc-${nyaccVersion}"; - config_h = builtins.toFile "config.h" '' #undef SYSTEM_LIBC #define MES_VERSION "${version}" ''; in -(runCommand "mes-${version}" { - pname = "mes"; - inherit version; +runCommand "${pname}-${version}" { + inherit pname version; + + passthru = { + mesPrefix = "/share/mes-${version}"; + }; + meta = with lib; { description = "Scheme interpreter and C compiler for bootstrapping"; homepage = "https://www.gnu.org/software/mes"; @@ -74,7 +73,7 @@ in rm x86_defs.M1 # Remove environment impurities - __GUILE_LOAD_PATH="\"''${MES_PREFIX}/mes/module:''${MES_PREFIX}/module:${nyaccModules}/module\"" + __GUILE_LOAD_PATH="\"''${MES_PREFIX}/mes/module:''${MES_PREFIX}/module:${nyacc.guilePath}\"" boot0_scm=mes/module/mes/boot-0.scm guile_mes=mes/module/mes/guile.mes replace --file ''${boot0_scm} --output ''${boot0_scm} --match-on "(getenv \"GUILE_LOAD_PATH\")" --replace-with ''${__GUILE_LOAD_PATH} @@ -309,6 +308,4 @@ in # Link everything into new mes executable ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- --base-address 0x08048000 -L ''${MES_PREFIX}/lib -nostdlib -o ''${out}/bin/mes -L . crt1.o builtins.o cc.o core.o display.o eval-apply.o gc.o globals.o hash.o lib.o math.o mes.o module.o posix.o reader.o stack.o string.o struct.o symbol.o vector.o -lc -lmescc -'') // { - mesPrefix = "/share/mes-${version}"; -} +'' diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/nyacc.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/nyacc.nix new file mode 100644 index 0000000000000..7a196fd5ef99f --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/nyacc.nix @@ -0,0 +1,39 @@ +{ lib +, runCommand +, fetchurl +, nyacc +}: +let + pname = "nyacc"; + # NYACC is a tightly coupled dependency of mes. This version is known to work + # with mes 0.24.2. + # https://git.savannah.gnu.org/cgit/mes.git/tree/INSTALL?h=v0.24.2&id=7562330ec746f09b4060d3081e3377fb7083897d#n31 + version = "1.00.2"; + + src = fetchurl { + url = "mirror://savannah/nyacc/nyacc-${version}.tar.gz"; + sha256 = "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"; + }; +in +runCommand "${pname}-${version}" { + inherit pname version; + + passthru.guilePath = "${nyacc}/share/${pname}-${version}/module"; + + meta = with lib; { + description = "Modules for generating parsers and lexical analyzers"; + longDescription = '' + Not Yet Another Compiler Compiler is a set of guile modules for + generating computer language parsers and lexical analyzers. + ''; + homepage = "https://savannah.nongnu.org/projects/nyacc"; + license = licenses.lgpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = platforms.all; + }; +} '' + ungz --file ${src} --output nyacc.tar + mkdir -p ''${out}/share + cd ''${out}/share + untar --file ''${NIX_BUILD_TOP}/nyacc.tar +'' From a4caff6ea407bf21a8b4e921ad6af736e1f9577e Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sun, 30 Apr 2023 11:46:22 +1000 Subject: [PATCH 19/35] minimal-bootstrap: remove confusing fetchtarball abstraction --- .../linux/minimal-bootstrap/default.nix | 2 +- .../stage0-posix/default.nix | 2 +- .../minimal-bootstrap/stage0-posix/utils.nix | 20 ------------------- .../tinycc/bootstrappable.nix | 12 ++++++++--- .../minimal-bootstrap/tinycc/default.nix | 12 ++++++++--- 5 files changed, 20 insertions(+), 28 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 459321cb0da25..4195397700e23 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -12,7 +12,7 @@ lib.makeScope newScope (self: with self; { inherit system; }; - inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand fetchtarball; + inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; nyacc = callPackage ./mes/nyacc.nix { }; mes = callPackage ./mes { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 5f33264e2b22f..b8d79bde939b7 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -32,5 +32,5 @@ lib.makeScope newScope (self: with self; { mescc-tools-extra = callPackage ./mescc-tools-extra { }; - inherit (callPackage ./utils.nix { }) derivationWithMeta writeTextFile writeText runCommand fetchtarball; + inherit (callPackage ./utils.nix { }) derivationWithMeta writeTextFile writeText runCommand; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index c2b0c753a93a5..bf3d34b96b0a8 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -80,24 +80,4 @@ rec { PATH = lib.makeBinPath ((env.nativeBuildInputs or []) ++ [ kaem mescc-tools mescc-tools-extra ]); } // (builtins.removeAttrs env [ "nativeBuildInputs" ])); - # Fetch and unpack a .tar.gz file. Does not strip top-level directory - fetchtarball = - { url - # Unlike fetchzip, this hash is of the tarball and not the decompressed output - , sha256 - , name ? baseNameOf (toString url) - , postFetch ? "" - }: - let - tarball = fetchurl { inherit url sha256; }; - in - runCommand name {} '' - cd ''${TMP} - ungz --file ${tarball} --output tmp.tar - mkdir ''${out} - cd ''${out} - untar --file ''${TMP}/tmp.tar - - ${postFetch} - ''; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index c218e74322718..7db7049fcab97 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -9,7 +9,7 @@ { lib , runCommand -, fetchtarball +, fetchurl , mes , buildTinyccN , mes-libc @@ -17,10 +17,16 @@ let version = "unstable-2023-04-20"; rev = "80114c4da6b17fbaabb399cc29f427e368309bc8"; - src = (fetchtarball { + tarball = fetchurl { url = "https://gitlab.com/janneke/tinycc/-/archive/${rev}/tinycc-${rev}.tar.gz"; sha256 = "1a0cw9a62qc76qqn5sjmp3xrbbvsz2dxrw21lrnx9q0s74mwaxbq"; - }) + "/tinycc-${rev}"; + }; + src = (runCommand "tinycc-bootstrappable-${version}-source" {} '' + ungz --file ${tarball} --output tinycc.tar + mkdir -p ''${out} + cd ''${out} + untar --file ''${NIX_BUILD_TOP}/tinycc.tar + '') + "/tinycc-${rev}"; meta = with lib; { description = "Tiny C Compiler's bootstrappable fork"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index 12e876ec4362c..2a3bd2a337e5c 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -6,16 +6,22 @@ { lib , runCommand -, fetchtarball +, fetchurl , callPackage , mes }: let version = "unstable-2023-04-20"; - src = (fetchtarball { + tarball = fetchurl { url = "https://repo.or.cz/tinycc.git/snapshot/86f3d8e33105435946383aee52487b5ddf918140.tar.gz"; sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; - }) + "/tinycc-86f3d8e"; + }; + src = (runCommand "tinycc-${version}-source" {} '' + ungz --file ${tarball} --output tinycc.tar + mkdir -p ''${out} + cd ''${out} + untar --file ''${NIX_BUILD_TOP}/tinycc.tar + '') + "/tinycc-86f3d8e"; meta = with lib; { description = "Small, fast, and embeddable C compiler and interpreter"; From 7ed2e9a660ac450cc990343f4f9e9eebc2d55743 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sun, 30 Apr 2023 11:54:39 +1000 Subject: [PATCH 20/35] minimal-bootstrap: be more explicit when declaring "system" --- pkgs/os-specific/linux/minimal-bootstrap/default.nix | 4 +--- .../linux/minimal-bootstrap/stage0-posix/default.nix | 1 - .../linux/minimal-bootstrap/stage0-posix/hex0.nix | 3 +-- .../linux/minimal-bootstrap/stage0-posix/kaem/default.nix | 3 +-- .../linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix | 3 +-- .../stage0-posix/mescc-tools-extra/default.nix | 3 +-- .../minimal-bootstrap/stage0-posix/mescc-tools/default.nix | 5 ++--- .../minimal-bootstrap/stage0-posix/stage0-posix-x86.nix | 3 +-- .../linux/minimal-bootstrap/stage0-posix/utils.nix | 6 +++--- 9 files changed, 11 insertions(+), 20 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 4195397700e23..e6d5efbd6278d 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -6,10 +6,8 @@ lib.makeScope newScope (self: with self; { callPackage = self.callPackage; - inherit (stdenv.hostPlatform) system; - fetchurl = import ../../../build-support/fetchurl/boot.nix { - inherit system; + inherit (stdenv.buildPlatform) system; }; inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index b8d79bde939b7..beed65c4c1270 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -1,5 +1,4 @@ { lib -, system , newScope }: diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix index 84d4823a4afd1..8b8bca9ac962e 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix @@ -1,11 +1,10 @@ { lib , derivationWithMeta -, system , src , version }: derivationWithMeta { - inherit system version; + inherit version; pname = "hex0"; builder = "${src}/bootstrap-seeds/POSIX/x86/hex0-seed"; args = [ diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix index 0db34b0638b4a..2af660ad7a44d 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/default.nix @@ -1,5 +1,4 @@ { lib -, system , derivationWithMeta , kaem-unwrapped , mescc-tools-extra @@ -9,7 +8,7 @@ # Once mescc-tools-extra is available we can install kaem at /bin/kaem # to make it findable in environments derivationWithMeta { - inherit system version kaem-unwrapped; + inherit version kaem-unwrapped; pname = "kaem"; builder = kaem-unwrapped; args = [ diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix index 9561226ea3f3a..2fa1cefd7227b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/kaem/minimal.nix @@ -1,12 +1,11 @@ { lib , derivationWithMeta -, system , src , hex0 , version }: derivationWithMeta { - inherit system version; + inherit version; pname = "kaem-minimal"; builder = hex0; args = [ diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix index a3958f3ce952b..2d8c2a5334d6b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools-extra/default.nix @@ -1,5 +1,4 @@ { lib -, system , derivationWithMeta , kaem-unwrapped , mescc-tools @@ -7,7 +6,7 @@ , version }: derivationWithMeta { - inherit system version src mescc-tools; + inherit version src mescc-tools; pname = "mescc-tools-extra"; builder = kaem-unwrapped; args = [ diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix index 1cdef7729f0f2..51748bdc4cdfb 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix @@ -1,5 +1,4 @@ { lib -, system , derivationWithMeta , kaem-unwrapped , M1 @@ -61,7 +60,7 @@ let -o ''${out} '') ]; - inherit system version M1 M2 blood-elf-0 hex2 m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; + inherit version M1 M2 blood-elf-0 hex2 m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; }; @@ -79,7 +78,7 @@ derivationWithMeta { "--file" ./build.kaem ]; - inherit system version M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; + inherit version M1 M2 blood-elf-0 hex2 mkdir cp chmod replace m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; meta = with lib; { description = "Collection of tools written for use in bootstrapping"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix index ab831cb5ac7e6..ae697a1caa92e 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/stage0-posix-x86.nix @@ -29,7 +29,6 @@ { lib , derivationWithMeta -, system , hex0 , m2libc , src @@ -40,7 +39,7 @@ rec { run = pname: builder: args: derivationWithMeta { - inherit system pname version builder args; + inherit pname version builder args; meta = with lib; { description = "Collection of tools written for use in bootstrapping"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index bf3d34b96b0a8..62a247a535516 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -1,6 +1,5 @@ { lib , stdenv -, system , callPackage , fetchurl , kaem @@ -25,6 +24,7 @@ rec { validity.handled ({ inherit meta passthru; } // passthru) (derivation ({ + inherit (stdenv.buildPlatform) system; inherit (meta) name; } // (builtins.removeAttrs attrs [ "meta" "passthru" ]))); @@ -37,7 +37,7 @@ rec { , preferLocalBuild ? true }: derivationWithMeta { - inherit system name text executable allowSubstitutes preferLocalBuild; + inherit name text executable allowSubstitutes preferLocalBuild; passAsFile = [ "text" ]; builder = kaem-unwrapped; @@ -67,7 +67,7 @@ rec { runCommand = name: env: buildCommand: derivationWithMeta ({ - inherit name system; + inherit name; builder = "${kaem}/bin/kaem"; args = [ From ae7bbb0e4d78d59db19eb13ae13994fe776d0e45 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Sun, 30 Apr 2023 15:38:20 +1000 Subject: [PATCH 21/35] minimal-bootstrap.mes: major rewrite for readability --- .../linux/minimal-bootstrap/mes/default.nix | 338 ++++++++---------- .../minimal-bootstrap/tinycc/default.nix | 15 +- .../minimal-bootstrap/tinycc/mes-libc.kaem | 10 - 3 files changed, 157 insertions(+), 206 deletions(-) delete mode 100644 pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index f851f77ca0db3..4baf9ac2cce19 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -1,10 +1,3 @@ -# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem -# -# SPDX-FileCopyrightText: 2020-2022 Andrius Štikonas -# SPDX-FileCopyrightText: 2020-2022 fosslinux -# -# SPDX-License-Identifier: GPL-3.0-or-later - { lib , runCommand , fetchurl @@ -16,7 +9,6 @@ let pname = "mes"; version = "0.24.2"; - ARCH = "x86"; src = fetchurl { url = "mirror://gnu/mes/mes-${version}.tar.gz"; @@ -27,12 +19,113 @@ let #undef SYSTEM_LIBC #define MES_VERSION "${version}" ''; + + # Maintenance note: + # Build steps have been adapted from build-aux/bootstrap.sh.in + # as well as the live-bootstrap project + # https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem + + # Maintenance note: list of source files derived from build-aux/configure-lib.sh + libc_mini_shared_SOURCES = cc: [ + "lib/mes/eputs.c" + "lib/mes/oputs.c" + "lib/mes/globals.c" + "lib/stdlib/exit.c" + "lib/linux/x86-mes-${cc}/_exit.c" + "lib/linux/x86-mes-${cc}/_write.c" + "lib/stdlib/puts.c" + "lib/string/strlen.c" + ]; + libc_mini_SOURCES = cc: libc_mini_shared_SOURCES cc ++ [ + "lib/mes/mini-write.c" + ]; + libmescc_SOURCES = cc: [ + "lib/mes/globals.c" + "lib/linux/x86-mes-${cc}/syscall-internal.c" + ]; + libmes_SOURCES = cc: libc_mini_shared_SOURCES cc ++ lib.splitString " " ( + "lib/ctype/isnumber.c lib/mes/abtol.c lib/mes/cast.c lib/mes/eputc.c lib/mes/fdgetc.c " + + "lib/mes/fdputc.c lib/mes/fdputs.c lib/mes/fdungetc.c lib/mes/itoa.c lib/mes/ltoa.c " + + "lib/mes/ltoab.c lib/mes/mes_open.c lib/mes/ntoab.c lib/mes/oputc.c lib/mes/ultoa.c " + + "lib/mes/utoa.c lib/stub/__raise.c lib/ctype/isdigit.c lib/ctype/isspace.c " + + "lib/ctype/isxdigit.c lib/mes/assert_msg.c lib/posix/write.c lib/stdlib/atoi.c " + + "lib/linux/lseek.c"); + libc_SOURCES = cc: libmes_SOURCES cc ++ lib.splitString " " ( + "lib/mes/__assert_fail.c lib/mes/__buffered_read.c lib/mes/__mes_debug.c " + + "lib/posix/execv.c lib/posix/getcwd.c lib/posix/getenv.c lib/posix/isatty.c " + + "lib/posix/open.c lib/posix/buffered-read.c lib/posix/setenv.c lib/posix/wait.c " + + "lib/stdio/fgetc.c lib/stdio/fputc.c lib/stdio/fputs.c lib/stdio/getc.c " + + "lib/stdio/getchar.c lib/stdio/putc.c lib/stdio/putchar.c lib/stdio/ungetc.c " + + "lib/stdlib/free.c lib/stdlib/realloc.c lib/string/memchr.c lib/string/memcmp.c " + + "lib/string/memcpy.c lib/string/memmove.c lib/string/memset.c lib/string/strcmp.c " + + "lib/string/strcpy.c lib/string/strncmp.c lib/posix/raise.c " + + "lib/linux/access.c lib/linux/brk.c lib/linux/chmod.c lib/linux/clock_gettime.c " + + "lib/linux/dup.c lib/linux/dup2.c lib/linux/execve.c lib/linux/fork.c lib/linux/fsync.c " + + "lib/linux/_getcwd.c lib/linux/gettimeofday.c lib/linux/ioctl3.c lib/linux/_open3.c " + + "lib/linux/malloc.c lib/linux/_read.c lib/linux/time.c lib/linux/unlink.c " + + "lib/linux/waitpid.c lib/linux/x86-mes-${cc}/syscall.c lib/linux/getpid.c " + + "lib/linux/kill.c"); + libc_tcc_SOURCES = cc: lib.splitString " " ( + "lib/ctype/islower.c lib/ctype/isupper.c lib/ctype/tolower.c lib/ctype/toupper.c " + + "lib/mes/abtod.c lib/mes/dtoab.c lib/mes/search-path.c lib/posix/execvp.c " + + "lib/stdio/fclose.c lib/stdio/fdopen.c lib/stdio/ferror.c lib/stdio/fflush.c " + + "lib/stdio/fopen.c lib/stdio/fprintf.c lib/stdio/fread.c lib/stdio/fseek.c " + + "lib/stdio/ftell.c lib/stdio/fwrite.c lib/stdio/printf.c lib/stdio/remove.c " + + "lib/stdio/snprintf.c lib/stdio/sprintf.c lib/stdio/sscanf.c lib/stdio/vfprintf.c " + + "lib/stdio/vprintf.c lib/stdio/vsnprintf.c lib/stdio/vsprintf.c lib/stdio/vsscanf.c " + + "lib/stdlib/calloc.c lib/stdlib/qsort.c lib/stdlib/strtod.c lib/stdlib/strtof.c " + + "lib/stdlib/strtol.c lib/stdlib/strtold.c lib/stdlib/strtoll.c lib/stdlib/strtoul.c " + + "lib/stdlib/strtoull.c lib/string/memmem.c lib/string/strcat.c lib/string/strchr.c " + + "lib/string/strlwr.c lib/string/strncpy.c lib/string/strrchr.c lib/string/strstr.c " + + "lib/string/strupr.c lib/stub/sigaction.c lib/stub/ldexp.c lib/stub/mprotect.c " + + "lib/stub/localtime.c lib/stub/sigemptyset.c lib/x86-mes-${cc}/setjmp.c " + + "lib/linux/close.c lib/linux/rmdir.c lib/linux/stat.c"); + libc_gnu_SOURCES = cc: libc_tcc_SOURCES cc ++ lib.splitString " " ( + "lib/ctype/isalnum.c lib/ctype/isalpha.c lib/ctype/isascii.c lib/ctype/iscntrl.c " + + "lib/ctype/isgraph.c lib/ctype/isprint.c lib/ctype/ispunct.c lib/dirent/__getdirentries.c " + + "lib/dirent/closedir.c lib/dirent/opendir.c lib/dirent/readdir.c lib/math/ceil.c " + + "lib/math/fabs.c lib/math/floor.c lib/mes/fdgets.c lib/posix/alarm.c lib/posix/execl.c " + + "lib/posix/execlp.c lib/posix/mktemp.c lib/posix/sbrk.c lib/posix/sleep.c " + + "lib/posix/unsetenv.c lib/stdio/clearerr.c lib/stdio/feof.c lib/stdio/fgets.c " + + "lib/stdio/fileno.c lib/stdio/freopen.c lib/stdio/fscanf.c lib/stdio/perror.c " + + "lib/stdio/vfscanf.c lib/stdlib/__exit.c lib/stdlib/abort.c lib/stdlib/abs.c " + + "lib/stdlib/alloca.c lib/stdlib/atexit.c lib/stdlib/atof.c lib/stdlib/atol.c " + + "lib/stdlib/mbstowcs.c lib/string/bcmp.c lib/string/bcopy.c lib/string/bzero.c " + + "lib/string/index.c lib/string/rindex.c lib/string/strcspn.c lib/string/strdup.c " + + "lib/string/strerror.c lib/string/strncat.c lib/string/strpbrk.c lib/string/strspn.c " + + "lib/stub/__cleanup.c lib/stub/atan2.c lib/stub/bsearch.c lib/stub/chown.c " + + "lib/stub/cos.c lib/stub/ctime.c lib/stub/exp.c lib/stub/fpurge.c lib/stub/freadahead.c " + + "lib/stub/frexp.c lib/stub/getgrgid.c lib/stub/getgrnam.c lib/stub/getlogin.c " + + "lib/stub/getpgid.c lib/stub/getpgrp.c lib/stub/getpwnam.c lib/stub/getpwuid.c " + + "lib/stub/gmtime.c lib/stub/log.c lib/stub/mktime.c lib/stub/modf.c lib/stub/pclose.c " + + "lib/stub/popen.c lib/stub/pow.c lib/stub/rand.c lib/stub/rewind.c lib/stub/setbuf.c " + + "lib/stub/setgrent.c lib/stub/setlocale.c lib/stub/setvbuf.c lib/stub/sigaddset.c " + + "lib/stub/sigblock.c lib/stub/sigdelset.c lib/stub/sigsetmask.c lib/stub/sin.c " + + "lib/stub/sqrt.c lib/stub/strftime.c lib/stub/sys_siglist.c lib/stub/system.c " + + "lib/stub/times.c lib/stub/ttyname.c lib/stub/umask.c lib/stub/utime.c " + + "lib/linux/chdir.c lib/linux/fcntl.c lib/linux/fstat.c lib/linux/getdents.c " + + "lib/linux/getegid.c lib/linux/geteuid.c lib/linux/getgid.c lib/linux/getppid.c " + + "lib/linux/getrusage.c lib/linux/getuid.c lib/linux/ioctl.c lib/linux/link.c " + + "lib/linux/lstat.c lib/linux/mkdir.c lib/linux/mknod.c lib/linux/nanosleep.c " + + "lib/linux/pipe.c lib/linux/readlink.c lib/linux/rename.c lib/linux/setgid.c " + + "lib/linux/settimer.c lib/linux/setuid.c lib/linux/signal.c lib/linux/sigprogmask.c " + + "lib/linux/symlink.c"); + mes_SOURCES = cc: lib.splitString " " ( + "src/builtins.c src/cc.c src/core.c src/display.c src/eval-apply.c src/gc.c " + + "src/globals.c src/hash.c src/lib.c src/math.c src/mes.c src/module.c src/posix.c " + + "src/reader.c src/stack.c src/string.c src/struct.c src/symbol.c src/vector.c"); + + compile = sources: lib.concatMapStringsSep "\n" (f: ''CC -c ''${MES_PREFIX}/${f}'') sources; + replaceExt = ext: source: lib.replaceStrings [".c"] [ext] (builtins.baseNameOf source); + archive = out: sources: "catm ${out} ${lib.concatMapStringsSep " " (replaceExt ".o") sources}"; + sourceArchive = out: sources: "catm ${out} ${lib.concatMapStringsSep " " (replaceExt ".s") sources}"; in runCommand "${pname}-${version}" { inherit pname version; passthru = { mesPrefix = "/share/mes-${version}"; + libcSources = libc_SOURCES "gcc" ++ libc_gnu_SOURCES "gcc"; }; meta = with lib; { @@ -89,6 +182,7 @@ runCommand "${pname}-${version}" { replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"MES_PREFIX\")" --replace-with "\"''${MES_PREFIX}\"" replace --file ''${mes_c} --output ''${mes_c} --match-on "getenv (\"srcdest\")" --replace-with "\"''${MES_PREFIX}\"" + # Increase runtime resource limits gc_c=src/gc.c replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_ARENA\")" --replace-with "\"100000000\"" replace --file ''${gc_c} --output ''${gc_c} --match-on "getenv (\"MES_MAX_ARENA\")" --replace-with "\"100000000\"" @@ -101,14 +195,13 @@ runCommand "${pname}-${version}" { replace --file ''${mescc_in} --output ''${mescc_in} --match-on "(getenv \"libdir\")" --replace-with "\"''${MES_PREFIX}/lib\"" replace --file ''${mescc_in} --output ''${mescc_in} --match-on @prefix@ --replace-with ''${MES_PREFIX} replace --file ''${mescc_in} --output ''${mescc_in} --match-on @VERSION@ --replace-with ${version} - replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_cpu@ --replace-with ${ARCH} + replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_cpu@ --replace-with x86 replace --file ''${mescc_in} --output ''${mescc_in} --match-on @mes_kernel@ --replace-with linux cp ''${mescc_in} ''${out}/bin/mescc.scm - chmod 555 ''${out}/bin/mescc.scm # Build mes-m2 - mes_cpu=${ARCH} - stage0_cpu=${ARCH} + mes_cpu=x86 + stage0_cpu=x86 kaem --verbose --strict --file kaem.run cp bin/mes-m2 ''${out}/bin/mes-m2 chmod 555 ''${out}/bin/mes-m2 @@ -116,196 +209,55 @@ runCommand "${pname}-${version}" { # Recompile Mes and Mes C library using mes-m2 bootstrapped Mes cd ''${NIX_BUILD_TOP} - alias mescc="''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -D HAVE_CONFIG_H=1 -I ''${MES_PREFIX}/include -I ''${MES_PREFIX}/include/linux/x86 -c" + alias CC="''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- -D HAVE_CONFIG_H=1 -I ''${MES_PREFIX}/include -I ''${MES_PREFIX}/include/linux/x86" + mkdir -p ''${LIBDIR}/x86-mes - # Start with crt1.o - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/crt1.c + # crt1.o + CC -c ''${MES_PREFIX}/lib/linux/x86-mes-mescc/crt1.c + cp crt1.o ''${LIBDIR}/x86-mes + cp crt1.s ''${LIBDIR}/x86-mes - # Now for libc-mini.a - mescc ''${MES_PREFIX}/lib/mes/eputs.c - mescc ''${MES_PREFIX}/lib/mes/oputs.c - mescc ''${MES_PREFIX}/lib/mes/globals.c - mescc ''${MES_PREFIX}/lib/stdlib/exit.c - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_exit.c - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/_write.c - mescc ''${MES_PREFIX}/lib/stdlib/puts.c - mescc ''${MES_PREFIX}/lib/string/strlen.c - mescc ''${MES_PREFIX}/lib/mes/mini-write.c - catm libc-mini.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o mini-write.o - catm libc-mini.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s mini-write.s + # libc-mini.a + ${compile (libc_mini_SOURCES "mescc")} + ${archive "libc-mini.a" (libc_mini_SOURCES "mescc")} + ${sourceArchive "libc-mini.s" (libc_mini_SOURCES "mescc")} + cp libc-mini.a ''${LIBDIR}/x86-mes + cp libc-mini.s ''${LIBDIR}/x86-mes # libmescc.a - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall-internal.c - catm libmescc.a globals.o syscall-internal.o - catm libmescc.s globals.s syscall-internal.s + ${compile (libmescc_SOURCES "mescc")} + ${archive "libmescc.a" (libmescc_SOURCES "mescc")} + ${sourceArchive "libmescc.s" (libmescc_SOURCES "mescc")} + cp libmescc.a ''${LIBDIR}/x86-mes + cp libmescc.s ''${LIBDIR}/x86-mes # libc.a - mescc ''${MES_PREFIX}/lib/ctype/isnumber.c - mescc ''${MES_PREFIX}/lib/mes/abtol.c - mescc ''${MES_PREFIX}/lib/mes/cast.c - mescc ''${MES_PREFIX}/lib/mes/eputc.c - mescc ''${MES_PREFIX}/lib/mes/fdgetc.c - mescc ''${MES_PREFIX}/lib/mes/fdputc.c - mescc ''${MES_PREFIX}/lib/mes/fdputs.c - mescc ''${MES_PREFIX}/lib/mes/fdungetc.c - mescc ''${MES_PREFIX}/lib/mes/itoa.c - mescc ''${MES_PREFIX}/lib/mes/ltoa.c - mescc ''${MES_PREFIX}/lib/mes/ltoab.c - mescc ''${MES_PREFIX}/lib/mes/mes_open.c - mescc ''${MES_PREFIX}/lib/mes/ntoab.c - mescc ''${MES_PREFIX}/lib/mes/oputc.c - mescc ''${MES_PREFIX}/lib/mes/ultoa.c - mescc ''${MES_PREFIX}/lib/mes/utoa.c - mescc ''${MES_PREFIX}/lib/ctype/isdigit.c - mescc ''${MES_PREFIX}/lib/ctype/isspace.c - mescc ''${MES_PREFIX}/lib/ctype/isxdigit.c - mescc ''${MES_PREFIX}/lib/mes/assert_msg.c - mescc ''${MES_PREFIX}/lib/posix/write.c - mescc ''${MES_PREFIX}/lib/stdlib/atoi.c - mescc ''${MES_PREFIX}/lib/linux/lseek.c - mescc ''${MES_PREFIX}/lib/mes/__assert_fail.c - mescc ''${MES_PREFIX}/lib/mes/__buffered_read.c - mescc ''${MES_PREFIX}/lib/mes/__mes_debug.c - mescc ''${MES_PREFIX}/lib/posix/execv.c - mescc ''${MES_PREFIX}/lib/posix/getcwd.c - mescc ''${MES_PREFIX}/lib/posix/getenv.c - mescc ''${MES_PREFIX}/lib/posix/isatty.c - mescc ''${MES_PREFIX}/lib/posix/open.c - mescc ''${MES_PREFIX}/lib/posix/buffered-read.c - mescc ''${MES_PREFIX}/lib/posix/setenv.c - mescc ''${MES_PREFIX}/lib/posix/wait.c - mescc ''${MES_PREFIX}/lib/stdio/fgetc.c - mescc ''${MES_PREFIX}/lib/stdio/fputc.c - mescc ''${MES_PREFIX}/lib/stdio/fputs.c - mescc ''${MES_PREFIX}/lib/stdio/getc.c - mescc ''${MES_PREFIX}/lib/stdio/getchar.c - mescc ''${MES_PREFIX}/lib/stdio/putc.c - mescc ''${MES_PREFIX}/lib/stdio/putchar.c - mescc ''${MES_PREFIX}/lib/stdio/ungetc.c - mescc ''${MES_PREFIX}/lib/stdlib/free.c - mescc ''${MES_PREFIX}/lib/stdlib/realloc.c - mescc ''${MES_PREFIX}/lib/string/memchr.c - mescc ''${MES_PREFIX}/lib/string/memcmp.c - mescc ''${MES_PREFIX}/lib/string/memcpy.c - mescc ''${MES_PREFIX}/lib/string/memmove.c - mescc ''${MES_PREFIX}/lib/string/memset.c - mescc ''${MES_PREFIX}/lib/string/strcmp.c - mescc ''${MES_PREFIX}/lib/string/strcpy.c - mescc ''${MES_PREFIX}/lib/string/strncmp.c - mescc ''${MES_PREFIX}/lib/posix/raise.c - mescc ''${MES_PREFIX}/lib/linux/access.c - mescc ''${MES_PREFIX}/lib/linux/brk.c - mescc ''${MES_PREFIX}/lib/linux/chmod.c - mescc ''${MES_PREFIX}/lib/linux/clock_gettime.c - mescc ''${MES_PREFIX}/lib/linux/dup.c - mescc ''${MES_PREFIX}/lib/linux/dup2.c - mescc ''${MES_PREFIX}/lib/linux/execve.c - mescc ''${MES_PREFIX}/lib/linux/fork.c - mescc ''${MES_PREFIX}/lib/linux/fsync.c - mescc ''${MES_PREFIX}/lib/linux/_getcwd.c - mescc ''${MES_PREFIX}/lib/linux/gettimeofday.c - mescc ''${MES_PREFIX}/lib/linux/ioctl3.c - mescc ''${MES_PREFIX}/lib/linux/malloc.c - mescc ''${MES_PREFIX}/lib/linux/_open3.c - mescc ''${MES_PREFIX}/lib/linux/_read.c - mescc ''${MES_PREFIX}/lib/linux/time.c - mescc ''${MES_PREFIX}/lib/linux/unlink.c - mescc ''${MES_PREFIX}/lib/linux/waitpid.c - mescc ''${MES_PREFIX}/lib/linux/x86-mes-mescc/syscall.c - mescc ''${MES_PREFIX}/lib/linux/getpid.c - mescc ''${MES_PREFIX}/lib/linux/kill.c - catm libc.a eputs.o oputs.o globals.o exit.o _exit.o _write.o puts.o strlen.o isnumber.o abtol.o cast.o eputc.o fdgetc.o fdputc.o fdputs.o fdungetc.o itoa.o ltoa.o ltoab.o mes_open.o ntoab.o oputc.o ultoa.o utoa.o isdigit.o isspace.o isxdigit.o assert_msg.o write.o atoi.o lseek.o __assert_fail.o __buffered_read.o __mes_debug.o execv.o getcwd.o getenv.o isatty.o open.o buffered-read.o setenv.o wait.o fgetc.o fputc.o fputs.o getc.o getchar.o putc.o putchar.o ungetc.o free.o malloc.o realloc.o memchr.o memcmp.o memcpy.o memmove.o memset.o strcmp.o strcpy.o strncmp.o raise.o access.o brk.o chmod.o clock_gettime.o dup.o dup2.o execve.o fork.o fsync.o _getcwd.o gettimeofday.o ioctl3.o _open3.o _read.o time.o unlink.o waitpid.o syscall.o getpid.o kill.o - catm libc.s eputs.s oputs.s globals.s exit.s _exit.s _write.s puts.s strlen.s isnumber.s abtol.s cast.s eputc.s fdgetc.s fdputc.s fdputs.s fdungetc.s itoa.s ltoa.s ltoab.s mes_open.s ntoab.s oputc.s ultoa.s utoa.s isdigit.s isspace.s isxdigit.s assert_msg.s write.s atoi.s lseek.s __assert_fail.s __buffered_read.s __mes_debug.s execv.s getcwd.s getenv.s isatty.s open.s buffered-read.s setenv.s wait.s fgetc.s fputc.s fputs.s getc.s getchar.s putc.s putchar.s ungetc.s free.s malloc.s realloc.s memchr.s memcmp.s memcpy.s memmove.s memset.s strcmp.s strcpy.s strncmp.s raise.s access.s brk.s chmod.s clock_gettime.s dup.s dup2.s execve.s fork.s fsync.s _getcwd.s gettimeofday.s ioctl3.s _open3.s _read.s time.s unlink.s waitpid.s syscall.s getpid.s kill.s + ${compile (libc_SOURCES "mescc")} + ${archive "libc.a" (libc_SOURCES "mescc")} + ${sourceArchive "libc.s" (libc_SOURCES "mescc")} + cp libc.a ''${LIBDIR}/x86-mes + cp libc.s ''${LIBDIR}/x86-mes # libc+tcc.a - mescc ''${MES_PREFIX}/lib/ctype/islower.c - mescc ''${MES_PREFIX}/lib/ctype/isupper.c - mescc ''${MES_PREFIX}/lib/ctype/tolower.c - mescc ''${MES_PREFIX}/lib/ctype/toupper.c - mescc ''${MES_PREFIX}/lib/mes/abtod.c - mescc ''${MES_PREFIX}/lib/mes/dtoab.c - mescc ''${MES_PREFIX}/lib/mes/search-path.c - mescc ''${MES_PREFIX}/lib/posix/execvp.c - mescc ''${MES_PREFIX}/lib/stdio/fclose.c - mescc ''${MES_PREFIX}/lib/stdio/fdopen.c - mescc ''${MES_PREFIX}/lib/stdio/ferror.c - mescc ''${MES_PREFIX}/lib/stdio/fflush.c - mescc ''${MES_PREFIX}/lib/stdio/fopen.c - mescc ''${MES_PREFIX}/lib/stdio/fprintf.c - mescc ''${MES_PREFIX}/lib/stdio/fread.c - mescc ''${MES_PREFIX}/lib/stdio/fseek.c - mescc ''${MES_PREFIX}/lib/stdio/ftell.c - mescc ''${MES_PREFIX}/lib/stdio/fwrite.c - mescc ''${MES_PREFIX}/lib/stdio/printf.c - mescc ''${MES_PREFIX}/lib/stdio/remove.c - mescc ''${MES_PREFIX}/lib/stdio/snprintf.c - mescc ''${MES_PREFIX}/lib/stdio/sprintf.c - mescc ''${MES_PREFIX}/lib/stdio/sscanf.c - mescc ''${MES_PREFIX}/lib/stdio/vfprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vsnprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vsprintf.c - mescc ''${MES_PREFIX}/lib/stdio/vsscanf.c - mescc ''${MES_PREFIX}/lib/stdlib/calloc.c - mescc ''${MES_PREFIX}/lib/stdlib/qsort.c - mescc ''${MES_PREFIX}/lib/stdlib/strtod.c - mescc ''${MES_PREFIX}/lib/stdlib/strtof.c - mescc ''${MES_PREFIX}/lib/stdlib/strtol.c - mescc ''${MES_PREFIX}/lib/stdlib/strtold.c - mescc ''${MES_PREFIX}/lib/stdlib/strtoll.c - mescc ''${MES_PREFIX}/lib/stdlib/strtoul.c - mescc ''${MES_PREFIX}/lib/stdlib/strtoull.c - mescc ''${MES_PREFIX}/lib/string/memmem.c - mescc ''${MES_PREFIX}/lib/string/strcat.c - mescc ''${MES_PREFIX}/lib/string/strchr.c - mescc ''${MES_PREFIX}/lib/string/strlwr.c - mescc ''${MES_PREFIX}/lib/string/strncpy.c - mescc ''${MES_PREFIX}/lib/string/strrchr.c - mescc ''${MES_PREFIX}/lib/string/strstr.c - mescc ''${MES_PREFIX}/lib/string/strupr.c - mescc ''${MES_PREFIX}/lib/stub/sigaction.c - mescc ''${MES_PREFIX}/lib/stub/ldexp.c - mescc ''${MES_PREFIX}/lib/stub/mprotect.c - mescc ''${MES_PREFIX}/lib/stub/localtime.c - mescc ''${MES_PREFIX}/lib/stub/sigemptyset.c - mescc ''${MES_PREFIX}/lib/x86-mes-mescc/setjmp.c - mescc ''${MES_PREFIX}/lib/linux/close.c - mescc ''${MES_PREFIX}/lib/linux/rmdir.c - mescc ''${MES_PREFIX}/lib/linux/stat.c - catm libc+tcc.a libc.a islower.o isupper.o tolower.o toupper.o abtod.o dtoab.o search-path.o execvp.o fclose.o fdopen.o ferror.o fflush.o fopen.o fprintf.o fread.o fseek.o ftell.o fwrite.o printf.o remove.o snprintf.o sprintf.o sscanf.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o vsscanf.o calloc.o qsort.o strtod.o strtof.o strtol.o strtold.o strtoll.o strtoul.o strtoull.o memmem.o strcat.o strchr.o strlwr.o strncpy.o strrchr.o strstr.o strupr.o sigaction.o ldexp.o mprotect.o localtime.o sigemptyset.o setjmp.o close.o rmdir.o stat.o - catm libc+tcc.s libc.s islower.s isupper.s tolower.s toupper.s abtod.s dtoab.s search-path.s execvp.s fclose.s fdopen.s ferror.s fflush.s fopen.s fprintf.s fread.s fseek.s ftell.s fwrite.s printf.s remove.s snprintf.s sprintf.s sscanf.s vfprintf.s vprintf.s vsnprintf.s vsprintf.s vsscanf.s calloc.s qsort.s strtod.s strtof.s strtol.s strtold.s strtoll.s strtoul.s strtoull.s memmem.s strcat.s strchr.s strlwr.s strncpy.s strrchr.s strstr.s strupr.s sigaction.s ldexp.s mprotect.s localtime.s sigemptyset.s setjmp.s close.s rmdir.s stat.s + ${compile (libc_tcc_SOURCES "mescc")} + ${archive "libc+tcc.a" ([ "libc.a" ] ++ libc_tcc_SOURCES "mescc")} + ${sourceArchive "libc+tcc.s" ([ "libc.s" ] ++ libc_tcc_SOURCES "mescc")} + cp libc+tcc.a ''${LIBDIR}/x86-mes + cp libc+tcc.s ''${LIBDIR}/x86-mes # Build mes itself - mescc ''${MES_PREFIX}/src/builtins.c - mescc ''${MES_PREFIX}/src/cc.c - mescc ''${MES_PREFIX}/src/core.c - mescc ''${MES_PREFIX}/src/display.c - mescc ''${MES_PREFIX}/src/eval-apply.c - mescc ''${MES_PREFIX}/src/gc.c - mescc ''${MES_PREFIX}/src/globals.c - mescc ''${MES_PREFIX}/src/hash.c - mescc ''${MES_PREFIX}/src/lib.c - mescc ''${MES_PREFIX}/src/math.c - mescc ''${MES_PREFIX}/src/mes.c - mescc ''${MES_PREFIX}/src/module.c - mescc ''${MES_PREFIX}/src/posix.c - mescc ''${MES_PREFIX}/src/reader.c - mescc ''${MES_PREFIX}/src/stack.c - mescc ''${MES_PREFIX}/src/string.c - mescc ''${MES_PREFIX}/src/struct.c - mescc ''${MES_PREFIX}/src/symbol.c - mescc ''${MES_PREFIX}/src/vector.c - - # Install libraries - cp libc.a ''${MES_PREFIX}/lib/x86-mes/ - cp libc+tcc.a ''${MES_PREFIX}/lib/x86-mes/ - cp libmescc.a ''${MES_PREFIX}/lib/x86-mes/ - cp libc.s ''${MES_PREFIX}/lib/x86-mes/ - cp libc+tcc.s ''${MES_PREFIX}/lib/x86-mes/ - cp libmescc.s ''${MES_PREFIX}/lib/x86-mes/ - cp crt1.o ''${MES_PREFIX}/lib/x86-mes/ - cp crt1.s ''${MES_PREFIX}/lib/x86-mes/ + ${compile (mes_SOURCES "mescc")} + ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- \ + --base-address 0x08048000 \ + -L ''${MES_PREFIX}/lib \ + -L . \ + -lc \ + -lmescc \ + -nostdlib \ + -o ''${out}/bin/mes \ + crt1.o \ + ${lib.concatMapStringsSep " " (replaceExt ".o") (mes_SOURCES "mescc")} - # Link everything into new mes executable - ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- --base-address 0x08048000 -L ''${MES_PREFIX}/lib -nostdlib -o ''${out}/bin/mes -L . crt1.o builtins.o cc.o core.o display.o eval-apply.o gc.o globals.o hash.o lib.o math.o mes.o module.o posix.o reader.o stack.o string.o struct.o symbol.o vector.o -lc -lmescc + # Check + ''${out}/bin/mes --version '' diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index 2a3bd2a337e5c..6be74242fb45a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -31,9 +31,18 @@ let platforms = [ "i686-linux" ]; }; - mes-libc = runCommand "mes-libc-${version}.c" { MES_PREFIX = "${mes}${mes.mesPrefix}"; } '' - kaem --verbose --strict --file ${./mes-libc.kaem} - ''; + # Concatenate all source files into a convenient bundle + mes-libc = + let + # Passing this many arguments is too much for kaem so we need to + # split the operation in two + firstLibc = lib.take 100 mes.libcSources; + lastLibc = lib.drop 100 mes.libcSources; + in runCommand "mes-libc-${version}.c" {} '' + cd ${mes}${mes.mesPrefix} + catm ''${TMPDIR}/first.c ${lib.concatStringsSep " " firstLibc} + catm ''${out} ''${TMPDIR}/first.c ${lib.concatStringsSep " " lastLibc} + ''; buildTinyccN = { pname, diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem deleted file mode 100644 index 68835d5d92d1e..0000000000000 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes-libc.kaem +++ /dev/null @@ -1,10 +0,0 @@ -# Adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.27/tcc-0.9.27.kaem -# -# SPDX-FileCopyrightText: 2021-22 fosslinux -# SPDX-FileCopyrightText: 2021 Andrius Štikonas -# -# SPDX-License-Identifier: GPL-3.0-or-later - -# Concatenate all source files into a convenient bundle -cd ${MES_PREFIX}/lib -catm ${out} ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c dirent/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/x86-mes-gcc/_exit.c linux/x86-mes-gcc/syscall.c linux/x86-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/rand.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c x86-mes-gcc/setjmp.c From 0cbdbdc20db1dcb8fe34e2ef8cb7df136b525f0b Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 1 May 2023 11:39:23 +1000 Subject: [PATCH 22/35] minimal-bootstrap.mescc-tools: formatting --- .../minimal-bootstrap/stage0-posix/mescc-tools/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix index 51748bdc4cdfb..a41e6bdeab412 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/mescc-tools/default.nix @@ -61,8 +61,6 @@ let '') ]; inherit version M1 M2 blood-elf-0 hex2 m2libc src ARCH BLOOD_FLAG BASE_ADDRESS ENDIAN_FLAG; - - }; mkdir = buildMesccToolsExtraUtil "mkdir"; cp = buildMesccToolsExtraUtil "cp"; From e055a75edd41976b2a20621a04fd993df06bc54e Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 1 May 2023 12:05:30 +1000 Subject: [PATCH 23/35] minimal-bootstrap.ln-boot: init at unstable-2023-05-01 --- .../linux/minimal-bootstrap/default.nix | 2 ++ .../minimal-bootstrap/ln-boot/default.nix | 27 ++++++++++++++++ .../linux/minimal-bootstrap/ln-boot/ln.c | 17 ++++++++++ .../linux/minimal-bootstrap/mes/default.nix | 32 +++++++++++-------- 4 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/ln-boot/default.nix create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/ln-boot/ln.c diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index e6d5efbd6278d..9fff12ccc02cf 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -15,5 +15,7 @@ lib.makeScope newScope (self: with self; { nyacc = callPackage ./mes/nyacc.nix { }; mes = callPackage ./mes { }; + ln-boot = callPackage ./ln-boot { }; + tinycc-with-mes-libc = callPackage ./tinycc/default.nix { }; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/ln-boot/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/ln-boot/default.nix new file mode 100644 index 0000000000000..23c634421cbea --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/ln-boot/default.nix @@ -0,0 +1,27 @@ +{ lib +, runCommand +, mes +}: +let + pname = "ln-boot"; + version = "unstable-2023-05-01"; + + src = ./ln.c; +in +runCommand "${pname}-${version}" { + inherit pname version; + + meta = with lib; { + description = "Basic tool for creating symbolic links"; + license = licenses.mit; + maintainers = with maintainers; [ emilytrau ]; + mainProgram = "ln"; + platforms = platforms.unix; + }; +} '' + mkdir -p ''${out}/bin + ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ + -lc+tcc \ + -o ''${out}/bin/ln \ + ${src} +'' diff --git a/pkgs/os-specific/linux/minimal-bootstrap/ln-boot/ln.c b/pkgs/os-specific/linux/minimal-bootstrap/ln-boot/ln.c new file mode 100644 index 0000000000000..c8dde76a93648 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/ln-boot/ln.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include + +int main(int argc, char** argv) +{ + if (argc != 4 || strcmp(argv[1], "-s")) { + fputs("Usage: ", stdout); + fputs(argv[0], stdout); + fputs("ln -s TARGET LINK_NAME\n", stdout); + exit(EXIT_FAILURE); + } + + symlink(argv[2], argv[3]); + exit(EXIT_SUCCESS); +} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index 4baf9ac2cce19..99df78ed0b9be 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -66,20 +66,24 @@ let + "lib/linux/waitpid.c lib/linux/x86-mes-${cc}/syscall.c lib/linux/getpid.c " + "lib/linux/kill.c"); libc_tcc_SOURCES = cc: lib.splitString " " ( - "lib/ctype/islower.c lib/ctype/isupper.c lib/ctype/tolower.c lib/ctype/toupper.c " - + "lib/mes/abtod.c lib/mes/dtoab.c lib/mes/search-path.c lib/posix/execvp.c " - + "lib/stdio/fclose.c lib/stdio/fdopen.c lib/stdio/ferror.c lib/stdio/fflush.c " - + "lib/stdio/fopen.c lib/stdio/fprintf.c lib/stdio/fread.c lib/stdio/fseek.c " - + "lib/stdio/ftell.c lib/stdio/fwrite.c lib/stdio/printf.c lib/stdio/remove.c " - + "lib/stdio/snprintf.c lib/stdio/sprintf.c lib/stdio/sscanf.c lib/stdio/vfprintf.c " - + "lib/stdio/vprintf.c lib/stdio/vsnprintf.c lib/stdio/vsprintf.c lib/stdio/vsscanf.c " - + "lib/stdlib/calloc.c lib/stdlib/qsort.c lib/stdlib/strtod.c lib/stdlib/strtof.c " - + "lib/stdlib/strtol.c lib/stdlib/strtold.c lib/stdlib/strtoll.c lib/stdlib/strtoul.c " - + "lib/stdlib/strtoull.c lib/string/memmem.c lib/string/strcat.c lib/string/strchr.c " - + "lib/string/strlwr.c lib/string/strncpy.c lib/string/strrchr.c lib/string/strstr.c " - + "lib/string/strupr.c lib/stub/sigaction.c lib/stub/ldexp.c lib/stub/mprotect.c " - + "lib/stub/localtime.c lib/stub/sigemptyset.c lib/x86-mes-${cc}/setjmp.c " - + "lib/linux/close.c lib/linux/rmdir.c lib/linux/stat.c"); + "lib/ctype/islower.c lib/ctype/isupper.c lib/ctype/tolower.c lib/ctype/toupper.c " + + "lib/mes/abtod.c lib/mes/dtoab.c lib/mes/search-path.c lib/posix/execvp.c " + + "lib/stdio/fclose.c lib/stdio/fdopen.c lib/stdio/ferror.c lib/stdio/fflush.c " + + "lib/stdio/fopen.c lib/stdio/fprintf.c lib/stdio/fread.c lib/stdio/fseek.c " + + "lib/stdio/ftell.c lib/stdio/fwrite.c lib/stdio/printf.c lib/stdio/remove.c " + + "lib/stdio/snprintf.c lib/stdio/sprintf.c lib/stdio/sscanf.c lib/stdio/vfprintf.c " + + "lib/stdio/vprintf.c lib/stdio/vsnprintf.c lib/stdio/vsprintf.c lib/stdio/vsscanf.c " + + "lib/stdlib/calloc.c lib/stdlib/qsort.c lib/stdlib/strtod.c lib/stdlib/strtof.c " + + "lib/stdlib/strtol.c lib/stdlib/strtold.c lib/stdlib/strtoll.c lib/stdlib/strtoul.c " + + "lib/stdlib/strtoull.c lib/string/memmem.c lib/string/strcat.c lib/string/strchr.c " + + "lib/string/strlwr.c lib/string/strncpy.c lib/string/strrchr.c lib/string/strstr.c " + + "lib/string/strupr.c lib/stub/sigaction.c lib/stub/ldexp.c lib/stub/mprotect.c " + + "lib/stub/localtime.c lib/stub/sigemptyset.c lib/x86-mes-${cc}/setjmp.c " + + "lib/linux/close.c lib/linux/rmdir.c lib/linux/stat.c" + ) ++ [ + # add symlink() to libc+tcc so we can use it in ln-boot + "lib/linux/symlink.c" + ]; libc_gnu_SOURCES = cc: libc_tcc_SOURCES cc ++ lib.splitString " " ( "lib/ctype/isalnum.c lib/ctype/isalpha.c lib/ctype/isascii.c lib/ctype/iscntrl.c " + "lib/ctype/isgraph.c lib/ctype/isprint.c lib/ctype/ispunct.c lib/dirent/__getdirentries.c " From 1b065103f5e68b54f52b8e7344efdc01b9393859 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 1 May 2023 13:00:55 +1000 Subject: [PATCH 24/35] minimal-bootstrap.mes: split out mes-libc package --- .../linux/minimal-bootstrap/default.nix | 4 +- .../linux/minimal-bootstrap/mes/default.nix | 31 +++++--- .../linux/minimal-bootstrap/mes/libc.nix | 60 ++++++++++++++ .../tinycc/bootstrappable.nix | 78 ++++++++----------- .../minimal-bootstrap/tinycc/default.nix | 67 ++++++++-------- 5 files changed, 146 insertions(+), 94 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/mes/libc.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 9fff12ccc02cf..5146d623d89ef 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -12,10 +12,10 @@ lib.makeScope newScope (self: with self; { inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; - nyacc = callPackage ./mes/nyacc.nix { }; mes = callPackage ./mes { }; + inherit (mes) mes-libc; ln-boot = callPackage ./ln-boot { }; - tinycc-with-mes-libc = callPackage ./tinycc/default.nix { }; + tinycc-mes = callPackage ./tinycc/default.nix { }; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index 99df78ed0b9be..c4685918829a0 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -2,9 +2,9 @@ , runCommand , fetchurl , writeText +, callPackage , m2libc , mescc-tools -, nyacc }: let pname = "mes"; @@ -15,6 +15,8 @@ let sha256 = "0vp8v88zszh1imm3dvdfi3m8cywshdj7xcrsq4cgmss69s2y1nkx"; }; + nyacc = callPackage ./nyacc.nix { inherit nyacc; }; + config_h = builtins.toFile "config.h" '' #undef SYSTEM_LIBC #define MES_VERSION "${version}" @@ -113,23 +115,34 @@ let + "lib/linux/lstat.c lib/linux/mkdir.c lib/linux/mknod.c lib/linux/nanosleep.c " + "lib/linux/pipe.c lib/linux/readlink.c lib/linux/rename.c lib/linux/setgid.c " + "lib/linux/settimer.c lib/linux/setuid.c lib/linux/signal.c lib/linux/sigprogmask.c " - + "lib/linux/symlink.c"); + # sylink.c already included above in libc_tcc_SOURCES + # + "lib/linux/symlink.c" + ); mes_SOURCES = cc: lib.splitString " " ( "src/builtins.c src/cc.c src/core.c src/display.c src/eval-apply.c src/gc.c " + "src/globals.c src/hash.c src/lib.c src/math.c src/mes.c src/module.c src/posix.c " + "src/reader.c src/stack.c src/string.c src/struct.c src/symbol.c src/vector.c"); - compile = sources: lib.concatMapStringsSep "\n" (f: ''CC -c ''${MES_PREFIX}/${f}'') sources; - replaceExt = ext: source: lib.replaceStrings [".c"] [ext] (builtins.baseNameOf source); - archive = out: sources: "catm ${out} ${lib.concatMapStringsSep " " (replaceExt ".o") sources}"; - sourceArchive = out: sources: "catm ${out} ${lib.concatMapStringsSep " " (replaceExt ".s") sources}"; + compile = sources: + lib.concatMapStringsSep + "\n" + (f: ''CC -c ''${MES_PREFIX}/${f}'') + sources; + replaceExt = ext: source: + lib.replaceStrings + [ ".c" ] + [ ext ] + (builtins.baseNameOf source); + archive = out: sources: + "catm ${out} ${lib.concatMapStringsSep " " (replaceExt ".o") sources}"; + sourceArchive = out: sources: + "catm ${out} ${lib.concatMapStringsSep " " (replaceExt ".s") sources}"; in runCommand "${pname}-${version}" { inherit pname version; - passthru = { - mesPrefix = "/share/mes-${version}"; - libcSources = libc_SOURCES "gcc" ++ libc_gnu_SOURCES "gcc"; + passthru.mes-libc = callPackage ./libc.nix { + inherit libc_SOURCES libc_gnu_SOURCES; }; meta = with lib; { diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/libc.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/libc.nix new file mode 100644 index 0000000000000..5b1db36d96e39 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/libc.nix @@ -0,0 +1,60 @@ +{ lib +, runCommand +, ln-boot +, mes +, libc_SOURCES +, libc_gnu_SOURCES +, mes-libc +}: +let + pname = "mes-libc"; + inherit (mes) version; + + # Concatenate all source files into a convenient bundle + # "gcc" variants (eg. "lib/linux/x86-mes-gcc") can also be used with tinycc + sources = libc_SOURCES "gcc" ++ libc_gnu_SOURCES "gcc"; + # Passing this many arguments is too much for kaem so we need to split + # the operation in two + firstLibc = lib.take 100 sources; + lastLibc = lib.drop 100 sources; +in runCommand "${pname}-${version}" { + inherit pname version; + + nativeBuildInputs = [ ln-boot ]; + + passthru.CFLAGS = "-DHAVE_CONFIG_H=1 -I${mes-libc}/include -I${mes-libc}/include/linux/x86"; + + meta = with lib; { + description = "The Mes C Library"; + homepage = "https://www.gnu.org/software/mes"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; +} '' + mkdir -p ''${out}/lib + PREFIX=${mes}/share/mes-${version} + cd ''${PREFIX} + + # mescc compiled libc.a + mkdir ''${out}/lib/x86-mes + cp lib/x86-mes/libc.a ''${out}/lib/x86-mes + + # libc.c + catm ''${TMPDIR}/first.c ${lib.concatStringsSep " " firstLibc} + catm ''${out}/lib/libc.c ''${TMPDIR}/first.c ${lib.concatStringsSep " " lastLibc} + + # crt{1,n,i}.c + cp lib/linux/x86-mes-gcc/crt1.c ''${out}/lib + cp lib/linux/x86-mes-gcc/crtn.c ''${out}/lib + cp lib/linux/x86-mes-gcc/crti.c ''${out}/lib + + # libtcc1.c + cp lib/libtcc1.c ''${out}/lib + + # getopt.c + cp lib/posix/getopt.c ''${out}/lib + + # Install headers + ln -s ''${PREFIX}/include ''${out}/include +'' diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index 7db7049fcab97..bf407f7c4f635 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -11,12 +11,13 @@ , runCommand , fetchurl , mes -, buildTinyccN , mes-libc +, buildTinyccN }: let version = "unstable-2023-04-20"; rev = "80114c4da6b17fbaabb399cc29f427e368309bc8"; + tarball = fetchurl { url = "https://gitlab.com/janneke/tinycc/-/archive/${rev}/tinycc-${rev}.tar.gz"; sha256 = "1a0cw9a62qc76qqn5sjmp3xrbbvsz2dxrw21lrnx9q0s74mwaxbq"; @@ -36,10 +37,8 @@ let platforms = [ "i686-linux" ]; }; - mes-tcc = runCommand "mes-tcc-${version}" {} '' - # Create config.h + tinycc-boot-mes = runCommand "tinycc-boot-mes-${version}" {} '' catm config.h - ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ -S \ -o tcc.s \ @@ -52,8 +51,8 @@ let -D CONFIG_SYSROOT=\"\" \ -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ -D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \ - -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include\" \ - -D TCC_LIBGCC=\"${mes}${mes.mesPrefix}/lib/x86-mes/libc.a\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes-libc}/include\" \ + -D TCC_LIBGCC=\"${mes-libc}/lib/x86-mes/libc.a\" \ -D CONFIG_TCC_LIBTCC1_MES=0 \ -D CONFIG_TCCBOOT=1 \ -D CONFIG_TCC_STATIC=1 \ @@ -62,49 +61,34 @@ let -D TCC_VERSION=\"${version}\" \ -D ONE_SOURCE=1 \ ${src}/tcc.c - mkdir -p ''${out}/bin ${mes}/bin/mes --no-auto-compile -e main ${mes}/bin/mescc.scm -- \ -l c+tcc \ -o ''${out}/bin/tcc \ tcc.s - # Quick test ''${out}/bin/tcc -version - # Recompile the mes C library + # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a mkdir -p ''${out}/lib - cd ${mes}${mes.mesPrefix} - - # crt1.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c - - # crtn.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c - - # crti.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c - - # libc+gcc.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/mes-libc.o ${mes-libc} - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/mes-libc.o - - # libtcc1.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/libtcc1.o lib/libtcc1.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o - - # libgetopt.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crt1.o ${mes-libc}/lib/crt1.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crtn.o ${mes-libc}/lib/crtn.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crti.o ${mes-libc}/lib/crti.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o libc.o ${mes-libc}/lib/libc.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a libc.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o libtcc1.o ${mes-libc}/lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a libtcc1.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o getopt.o ${mes-libc}/lib/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a getopt.o ''; # Bootstrap stage build flags obtained from # https://gitlab.com/janneke/tinycc/-/blob/80114c4da6b17fbaabb399cc29f427e368309bc8/boot.sh - boot0-tcc = buildTinyccN { - pname = "boot0-tcc"; + tinycc-boot0 = buildTinyccN { + pname = "tinycc-boot0"; inherit src version meta; - prev = mes-tcc; + prev = tinycc-boot-mes; buildOptions = [ "-D HAVE_LONG_LONG_STUB=1" "-D HAVE_SETJMP=1" @@ -114,10 +98,10 @@ let ]; }; - boot1-tcc = buildTinyccN { - pname = "boot1-tcc"; + tinycc-boot1 = buildTinyccN { + pname = "tinycc-boot1"; inherit src version meta; - prev = boot0-tcc; + prev = tinycc-boot0; buildOptions = [ "-D HAVE_BITFIELD=1" "-D HAVE_LONG_LONG=1" @@ -128,10 +112,10 @@ let ]; }; - boot2-tcc = buildTinyccN { - pname = "boot2-tcc"; + tinycc-boot2 = buildTinyccN { + pname = "tinycc-boot2"; inherit src version meta; - prev = boot1-tcc; + prev = tinycc-boot1; buildOptions = [ "-D HAVE_BITFIELD=1" "-D HAVE_FLOAT_STUB=1" @@ -144,10 +128,10 @@ let ]; }; - boot3-tcc = buildTinyccN { - pname = "boot3-tcc"; + tinycc-boot3 = buildTinyccN { + pname = "tinycc-boot3"; inherit src version meta; - prev = boot2-tcc; + prev = tinycc-boot2; buildOptions = [ "-D HAVE_BITFIELD=1" "-D HAVE_FLOAT=1" @@ -160,10 +144,10 @@ let ]; }; - boot4-tcc = buildTinyccN { - pname = "boot4-tcc"; + tinycc-bootstrappable = buildTinyccN { + pname = "tinycc-bootstrappable"; inherit src version meta; - prev = boot3-tcc; + prev = tinycc-boot3; buildOptions = [ "-D HAVE_BITFIELD=1" "-D HAVE_FLOAT=1" @@ -176,4 +160,4 @@ let ]; }; in -boot4-tcc +tinycc-bootstrappable diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix index 6be74242fb45a..4e32c804d185c 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix @@ -9,11 +9,15 @@ , fetchurl , callPackage , mes +, mes-libc +, ln-boot }: let version = "unstable-2023-04-20"; + rev = "86f3d8e33105435946383aee52487b5ddf918140"; + tarball = fetchurl { - url = "https://repo.or.cz/tinycc.git/snapshot/86f3d8e33105435946383aee52487b5ddf918140.tar.gz"; + url = "https://repo.or.cz/tinycc.git/snapshot/${rev}.tar.gz"; sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; }; src = (runCommand "tinycc-${version}-source" {} '' @@ -21,7 +25,7 @@ let mkdir -p ''${out} cd ''${out} untar --file ''${NIX_BUILD_TOP}/tinycc.tar - '') + "/tinycc-86f3d8e"; + '') + "/tinycc-${builtins.substring 0 7 rev}"; meta = with lib; { description = "Small, fast, and embeddable C compiler and interpreter"; @@ -31,19 +35,6 @@ let platforms = [ "i686-linux" ]; }; - # Concatenate all source files into a convenient bundle - mes-libc = - let - # Passing this many arguments is too much for kaem so we need to - # split the operation in two - firstLibc = lib.take 100 mes.libcSources; - lastLibc = lib.drop 100 mes.libcSources; - in runCommand "mes-libc-${version}.c" {} '' - cd ${mes}${mes.mesPrefix} - catm ''${TMPDIR}/first.c ${lib.concatStringsSep " " firstLibc} - catm ''${out} ''${TMPDIR}/first.c ${lib.concatStringsSep " " lastLibc} - ''; - buildTinyccN = { pname, version, @@ -59,9 +50,10 @@ let in runCommand "${pname}-${version}" { inherit pname version meta; + nativeBuildInputs = [ ln-boot ]; } '' catm config.h - mkdir -p ''${out}/bin ''${out}/lib + mkdir -p ''${out}/bin ${prev}/bin/tcc \ -g \ -v \ @@ -76,7 +68,7 @@ let -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ -D CONFIG_TCC_ELFINTERP=\"\" \ -D CONFIG_TCC_LIBPATHS=\"''${out}/lib\" \ - -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes}${mes.mesPrefix}/include:${src}/include\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes-libc}/include:${src}/include\" \ -D TCC_LIBGCC=\"libc.a\" \ -D TCC_LIBTCC1=\"libtcc1.a\" \ -D CONFIG_TCCBOOT=1 \ @@ -90,31 +82,34 @@ let ''${out}/bin/tcc -v - cd ${mes}${mes.mesPrefix} # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crt1.o lib/linux/x86-mes-gcc/crt1.c - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crtn.o lib/linux/x86-mes-gcc/crtn.c - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${out}/lib/crti.o lib/linux/x86-mes-gcc/crti.c - ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o ''${TMPDIR}/libtcc1.o ${src}/lib/libtcc1.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a ''${TMPDIR}/libtcc1.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/mes-libc.o ${mes-libc} - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a ''${TMPDIR}/mes-libc.o - ''${out}/bin/tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/x86 -o ''${TMPDIR}/getopt.o lib/posix/getopt.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a ''${TMPDIR}/getopt.o + mkdir -p ''${out}/lib + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crt1.o ${mes-libc}/lib/crt1.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crtn.o ${mes-libc}/lib/crtn.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crti.o ${mes-libc}/lib/crti.c + ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o libtcc1.o ${src}/lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a libtcc1.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o libc.o ${mes-libc}/lib/libc.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a libc.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o getopt.o ${mes-libc}/lib/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a getopt.o + + # Install headers + ln -s ${mes-libc}/include ''${out}/include ''; - boot4-tcc = callPackage ./bootstrappable.nix { inherit buildTinyccN mes-libc; }; + tinycc-bootstrappable = callPackage ./bootstrappable.nix { inherit buildTinyccN; }; tccdefs = runCommand "tccdefs-${version}" {} '' mkdir ''${out} - ${boot4-tcc}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c + ${tinycc-bootstrappable}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c ./c2str ${src}/include/tccdefs.h ''${out}/tccdefs_.h ''; - boot5-tcc = buildTinyccN { - pname = "boot5-tcc"; + tinycc-mes-boot = buildTinyccN { + pname = "tinycc-mes-boot"; inherit src version meta; - prev = boot4-tcc; + prev = tinycc-bootstrappable; buildOptions = [ "-D HAVE_BITFIELD=1" "-D HAVE_FLOAT=1" @@ -133,10 +128,10 @@ let ]; }; - tinycc-with-mes-libc = buildTinyccN { - pname = "tinycc-with-mes-libc"; + tinycc-mes = buildTinyccN { + pname = "tinycc-mes"; inherit src version meta; - prev = boot5-tcc; + prev = tinycc-mes-boot; buildOptions = [ "-std=c99" "-D HAVE_BITFIELD=1" @@ -156,4 +151,4 @@ let ]; }; in -tinycc-with-mes-libc +tinycc-mes From f519f097e4d733de994ee09c4bba80b55b9321af Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 1 May 2023 13:09:32 +1000 Subject: [PATCH 25/35] minimal-libc.tinycc-mes: refactor into common.nix --- .../linux/minimal-bootstrap/default.nix | 3 +- .../tinycc/bootstrappable.nix | 44 ++--- .../linux/minimal-bootstrap/tinycc/common.nix | 69 ++++++++ .../minimal-bootstrap/tinycc/default.nix | 154 ------------------ .../linux/minimal-bootstrap/tinycc/mes.nix | 87 ++++++++++ 5 files changed, 180 insertions(+), 177 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/tinycc/common.nix delete mode 100644 pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 5146d623d89ef..4436cfa3183b5 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -17,5 +17,6 @@ lib.makeScope newScope (self: with self; { ln-boot = callPackage ./ln-boot { }; - tinycc-mes = callPackage ./tinycc/default.nix { }; + tinycc-bootstrappable = callPackage ./tinycc/bootstrappable.nix { }; + tinycc-mes = callPackage ./tinycc/mes.nix { }; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix index bf407f7c4f635..a18f1ec6c91a5 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/bootstrappable.nix @@ -9,12 +9,14 @@ { lib , runCommand +, callPackage , fetchurl , mes , mes-libc -, buildTinyccN }: let + inherit (callPackage ./common.nix { }) buildTinyccMes; + version = "unstable-2023-04-20"; rev = "80114c4da6b17fbaabb399cc29f427e368309bc8"; @@ -85,7 +87,7 @@ let # Bootstrap stage build flags obtained from # https://gitlab.com/janneke/tinycc/-/blob/80114c4da6b17fbaabb399cc29f427e368309bc8/boot.sh - tinycc-boot0 = buildTinyccN { + tinycc-boot0 = buildTinyccMes { pname = "tinycc-boot0"; inherit src version meta; prev = tinycc-boot-mes; @@ -98,7 +100,7 @@ let ]; }; - tinycc-boot1 = buildTinyccN { + tinycc-boot1 = buildTinyccMes { pname = "tinycc-boot1"; inherit src version meta; prev = tinycc-boot0; @@ -112,7 +114,7 @@ let ]; }; - tinycc-boot2 = buildTinyccN { + tinycc-boot2 = buildTinyccMes { pname = "tinycc-boot2"; inherit src version meta; prev = tinycc-boot1; @@ -128,7 +130,7 @@ let ]; }; - tinycc-boot3 = buildTinyccN { + tinycc-boot3 = buildTinyccMes { pname = "tinycc-boot3"; inherit src version meta; prev = tinycc-boot2; @@ -143,21 +145,19 @@ let "-D HAVE_LONG_LONG=1" ]; }; - - tinycc-bootstrappable = buildTinyccN { - pname = "tinycc-bootstrappable"; - inherit src version meta; - prev = tinycc-boot3; - buildOptions = [ - "-D HAVE_BITFIELD=1" - "-D HAVE_FLOAT=1" - "-D HAVE_LONG_LONG=1" - "-D HAVE_SETJMP=1" - ]; - libtccBuildOptions = [ - "-D HAVE_FLOAT=1" - "-D HAVE_LONG_LONG=1" - ]; - }; in -tinycc-bootstrappable +buildTinyccMes { + pname = "tinycc-bootstrappable"; + inherit src version meta; + prev = tinycc-boot3; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + ]; +} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/common.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/common.nix new file mode 100644 index 0000000000000..259097ece4cb1 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/common.nix @@ -0,0 +1,69 @@ +{ lib +, runCommand +, mes-libc +, ln-boot +}: +{ + buildTinyccMes = { + pname, + version, + src, + prev, + buildOptions, + libtccBuildOptions, + meta + }: + let + options = lib.strings.concatStringsSep " " buildOptions; + libtccOptions = lib.strings.concatStringsSep " " libtccBuildOptions; + in + runCommand "${pname}-${version}" { + inherit pname version meta; + nativeBuildInputs = [ ln-boot ]; + } '' + catm config.h + mkdir -p ''${out}/bin + ${prev}/bin/tcc \ + -g \ + -v \ + -static \ + -o ''${out}/bin/tcc \ + -D BOOTSTRAP=1 \ + ${options} \ + -I . \ + -I ${src} \ + -D TCC_TARGET_I386=1 \ + -D CONFIG_TCCDIR=\"''${out}/lib\" \ + -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ + -D CONFIG_TCC_ELFINTERP=\"\" \ + -D CONFIG_TCC_LIBPATHS=\"''${out}/lib\" \ + -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes-libc}/include:${src}/include\" \ + -D TCC_LIBGCC=\"libc.a\" \ + -D TCC_LIBTCC1=\"libtcc1.a\" \ + -D CONFIG_TCCBOOT=1 \ + -D CONFIG_TCC_STATIC=1 \ + -D CONFIG_USE_LIBGCC=1 \ + -D TCC_MES_LIBC=1 \ + -D TCC_VERSION=\"${version}\" \ + -D ONE_SOURCE=1 \ + -L ${prev}/lib \ + ${src}/tcc.c + + ''${out}/bin/tcc -v + + # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a + mkdir -p ''${out}/lib + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crt1.o ${mes-libc}/lib/crt1.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crtn.o ${mes-libc}/lib/crtn.c + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crti.o ${mes-libc}/lib/crti.c + ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o libtcc1.o ${src}/lib/libtcc1.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a libtcc1.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o libc.o ${mes-libc}/lib/libc.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a libc.o + ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o getopt.o ${mes-libc}/lib/getopt.c + ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a getopt.o + + # Install headers + ln -s ${mes-libc}/include ''${out}/include + ''; +} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix deleted file mode 100644 index 4e32c804d185c..0000000000000 --- a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/default.nix +++ /dev/null @@ -1,154 +0,0 @@ -# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.27/tcc-0.9.27.kaem -# -# SPDX-FileCopyrightText: 2021-22 fosslinux -# -# SPDX-License-Identifier: GPL-3.0-or-later - -{ lib -, runCommand -, fetchurl -, callPackage -, mes -, mes-libc -, ln-boot -}: -let - version = "unstable-2023-04-20"; - rev = "86f3d8e33105435946383aee52487b5ddf918140"; - - tarball = fetchurl { - url = "https://repo.or.cz/tinycc.git/snapshot/${rev}.tar.gz"; - sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; - }; - src = (runCommand "tinycc-${version}-source" {} '' - ungz --file ${tarball} --output tinycc.tar - mkdir -p ''${out} - cd ''${out} - untar --file ''${NIX_BUILD_TOP}/tinycc.tar - '') + "/tinycc-${builtins.substring 0 7 rev}"; - - meta = with lib; { - description = "Small, fast, and embeddable C compiler and interpreter"; - homepage = "https://repo.or.cz/w/tinycc.git"; - license = licenses.lgpl21Only; - maintainers = with maintainers; [ emilytrau ]; - platforms = [ "i686-linux" ]; - }; - - buildTinyccN = { - pname, - version, - src, - prev, - buildOptions, - libtccBuildOptions, - meta - }: - let - options = lib.strings.concatStringsSep " " buildOptions; - libtccOptions = lib.strings.concatStringsSep " " libtccBuildOptions; - in - runCommand "${pname}-${version}" { - inherit pname version meta; - nativeBuildInputs = [ ln-boot ]; - } '' - catm config.h - mkdir -p ''${out}/bin - ${prev}/bin/tcc \ - -g \ - -v \ - -static \ - -o ''${out}/bin/tcc \ - -D BOOTSTRAP=1 \ - ${options} \ - -I . \ - -I ${src} \ - -D TCC_TARGET_I386=1 \ - -D CONFIG_TCCDIR=\"''${out}/lib\" \ - -D CONFIG_TCC_CRTPREFIX=\"''${out}/lib\" \ - -D CONFIG_TCC_ELFINTERP=\"\" \ - -D CONFIG_TCC_LIBPATHS=\"''${out}/lib\" \ - -D CONFIG_TCC_SYSINCLUDEPATHS=\"${mes-libc}/include:${src}/include\" \ - -D TCC_LIBGCC=\"libc.a\" \ - -D TCC_LIBTCC1=\"libtcc1.a\" \ - -D CONFIG_TCCBOOT=1 \ - -D CONFIG_TCC_STATIC=1 \ - -D CONFIG_USE_LIBGCC=1 \ - -D TCC_MES_LIBC=1 \ - -D TCC_VERSION=\"${version}\" \ - -D ONE_SOURCE=1 \ - -L ${prev}/lib \ - ${src}/tcc.c - - ''${out}/bin/tcc -v - - # Recompile libc: crt{1,n,i}, libtcc.a, libc.a, libgetopt.a - mkdir -p ''${out}/lib - ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crt1.o ${mes-libc}/lib/crt1.c - ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crtn.o ${mes-libc}/lib/crtn.c - ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o ''${out}/lib/crti.o ${mes-libc}/lib/crti.c - ''${out}/bin/tcc -c -D TCC_TARGET_I386=1 ${libtccOptions} -o libtcc1.o ${src}/lib/libtcc1.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libtcc1.a libtcc1.o - ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o libc.o ${mes-libc}/lib/libc.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libc.a libc.o - ''${out}/bin/tcc ${mes-libc.CFLAGS} -c -o getopt.o ${mes-libc}/lib/getopt.c - ''${out}/bin/tcc -ar cr ''${out}/lib/libgetopt.a getopt.o - - # Install headers - ln -s ${mes-libc}/include ''${out}/include - ''; - - tinycc-bootstrappable = callPackage ./bootstrappable.nix { inherit buildTinyccN; }; - - tccdefs = runCommand "tccdefs-${version}" {} '' - mkdir ''${out} - ${tinycc-bootstrappable}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c - ./c2str ${src}/include/tccdefs.h ''${out}/tccdefs_.h - ''; - - tinycc-mes-boot = buildTinyccN { - pname = "tinycc-mes-boot"; - inherit src version meta; - prev = tinycc-bootstrappable; - buildOptions = [ - "-D HAVE_BITFIELD=1" - "-D HAVE_FLOAT=1" - "-D HAVE_LONG_LONG=1" - "-D HAVE_SETJMP=1" - "-D CONFIG_TCC_PREDEFS=1" - "-I ${tccdefs}" - "-D CONFIG_TCC_SEMLOCK=0" - ]; - libtccBuildOptions = [ - "-D HAVE_FLOAT=1" - "-D HAVE_LONG_LONG=1" - "-D CONFIG_TCC_PREDEFS=1" - "-I ${tccdefs}" - "-D CONFIG_TCC_SEMLOCK=0" - ]; - }; - - tinycc-mes = buildTinyccN { - pname = "tinycc-mes"; - inherit src version meta; - prev = tinycc-mes-boot; - buildOptions = [ - "-std=c99" - "-D HAVE_BITFIELD=1" - "-D HAVE_FLOAT=1" - "-D HAVE_LONG_LONG=1" - "-D HAVE_SETJMP=1" - "-D CONFIG_TCC_PREDEFS=1" - "-I ${tccdefs}" - "-D CONFIG_TCC_SEMLOCK=0" - ]; - libtccBuildOptions = [ - "-D HAVE_FLOAT=1" - "-D HAVE_LONG_LONG=1" - "-D CONFIG_TCC_PREDEFS=1" - "-I ${tccdefs}" - "-D CONFIG_TCC_SEMLOCK=0" - ]; - }; -in -tinycc-mes diff --git a/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes.nix b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes.nix new file mode 100644 index 0000000000000..81674893eada0 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/tinycc/mes.nix @@ -0,0 +1,87 @@ +# Build steps adapted from https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/tcc-0.9.27/tcc-0.9.27.kaem +# +# SPDX-FileCopyrightText: 2021-22 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + +{ lib +, runCommand +, fetchurl +, callPackage +, tinycc-bootstrappable +}: +let + inherit (callPackage ./common.nix { }) buildTinyccMes; + + version = "unstable-2023-04-20"; + rev = "86f3d8e33105435946383aee52487b5ddf918140"; + + tarball = fetchurl { + url = "https://repo.or.cz/tinycc.git/snapshot/${rev}.tar.gz"; + sha256 = "11idrvbwfgj1d03crv994mpbbbyg63j1k64lw1gjy7mkiifw2xap"; + }; + src = (runCommand "tinycc-${version}-source" {} '' + ungz --file ${tarball} --output tinycc.tar + mkdir -p ''${out} + cd ''${out} + untar --file ''${NIX_BUILD_TOP}/tinycc.tar + '') + "/tinycc-${builtins.substring 0 7 rev}"; + + meta = with lib; { + description = "Small, fast, and embeddable C compiler and interpreter"; + homepage = "https://repo.or.cz/w/tinycc.git"; + license = licenses.lgpl21Only; + maintainers = with maintainers; [ emilytrau ]; + platforms = [ "i686-linux" ]; + }; + + tccdefs = runCommand "tccdefs-${version}" {} '' + mkdir ''${out} + ${tinycc-bootstrappable}/bin/tcc -static -DC2STR -o c2str ${src}/conftest.c + ./c2str ${src}/include/tccdefs.h ''${out}/tccdefs_.h + ''; + + tinycc-mes-boot = buildTinyccMes { + pname = "tinycc-mes-boot"; + inherit src version meta; + prev = tinycc-bootstrappable; + buildOptions = [ + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + }; +in +buildTinyccMes { + pname = "tinycc-mes"; + inherit src version meta; + prev = tinycc-mes-boot; + buildOptions = [ + "-std=c99" + "-D HAVE_BITFIELD=1" + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D HAVE_SETJMP=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; + libtccBuildOptions = [ + "-D HAVE_FLOAT=1" + "-D HAVE_LONG_LONG=1" + "-D CONFIG_TCC_PREDEFS=1" + "-I ${tccdefs}" + "-D CONFIG_TCC_SEMLOCK=0" + ]; +} From ebbc6ea8b3053d7f72b3bf5f1f1c431cffc6ca87 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 1 May 2023 13:28:29 +1000 Subject: [PATCH 26/35] minimal-bootstrap.stage0-posix: assert hex0 result --- .../linux/minimal-bootstrap/stage0-posix/hex0.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix index 8b8bca9ac962e..48b2932cfeba8 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix @@ -19,4 +19,9 @@ derivationWithMeta { maintainers = with maintainers; [ emilytrau ]; platforms = [ "i686-linux" ]; }; + + # Ensure the untrusted hex0-seed binary produces a known-good hex0 + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = "sha256-QU3RPGy51W7M2xnfFY1IqruKzusrSLU+L190ztN6JW8="; } From f08154ac04ea224299188a0b5dcb016d3fba2515 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Mon, 1 May 2023 17:54:29 +1000 Subject: [PATCH 27/35] minimal-bootrap: init make-bootstrap-sources.nix --- .../stage0-posix/default.nix | 19 ++++++---- .../stage0-posix/make-bootstrap-sources.nix | 36 +++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index beed65c4c1270..20b12e052dbbf 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -7,13 +7,20 @@ lib.makeScope newScope (self: with self; { # Pinned from https://github.com/oriansj/stage0-posix/commit/bdd3ee779adb9f4a299059d09e68dfedecfd4226 version = "unstable-2023-04-24"; - - # We don't have access to utilities such as fetchgit and fetchzip since they - # would introduce a circular dependency. The only tool we have to fetch source - # trees is `import ` with the unpack option, taking a - # NAR (Nix ARchive) file as input. This requires source tarballs to be repackaged. + rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; + + # Packaged resources required for the first bootstrapping stage. + # Contains source code and 256-byte hex0 binary seed. + # + # We don't have access to utilities such as fetchgit and fetchzip since this + # is this is part of the bootstrap process and would introduce a circular + # dependency. The only tool we have to fetch source trees is `import ` + # with the unpack option, taking a NAR file as input. This requires source + # tarballs to be repackaged. + # + # To build see `make-bootstrap-sources.nix` src = import { - url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-04-25/stage0-posix-${version}-source.nar.xz"; + url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-04-25/stage0-posix-${builtins.substring 0 7 rev}-source.nar.xz"; hash = "sha256-hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; unpack = true; }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix new file mode 100644 index 0000000000000..f69ac6a3ecd0a --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix @@ -0,0 +1,36 @@ +# Packaged resources required for the first bootstrapping stage. +# Contains source code and 256-byte hex0 binary seed. +# +# We don't have access to utilities such as fetchgit and fetchzip since this +# is this is part of the bootstrap process and would introduce a circular +# dependency. The only tool we have to fetch source trees is `import ` +# with the unpack option, taking a NAR file as input. This requires source +# tarballs to be repackaged. +# +# To build: +# +# nix-build pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix +# => ./result/stage0-posix-0000000-source.nar.xz +# + +{ pkgs ? import ../../../../.. {} }: +let + inherit (pkgs) runCommand fetchFromGitHub nix xz; + + pname = "stage0-posix"; + rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; + shortHash = builtins.substring 0 7 rev; + src = fetchFromGitHub { + owner = "oriansj"; + repo = pname; + inherit rev; + sha256 = "hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; + fetchSubmodules = true; + }; +in +runCommand "${pname}-${shortHash}-source" { + nativeBuildInputs = [ nix xz ]; +} '' + mkdir $out + nix-store --dump ${src} | xz -c > "$out/${pname}-${shortHash}-source.nar.xz" +'' From c0566f82e5048aa00c54e99944c7b8ef4b38fd8a Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 2 May 2023 10:23:24 +1000 Subject: [PATCH 28/35] minimal-bootstrap: rebase onto master --- .../linux/minimal-bootstrap/stage0-posix/utils.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index 62a247a535516..239d17e4fbc8e 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -17,8 +17,8 @@ rec { derivationWithMeta = attrs: let passthru = attrs.passthru or {}; - validity = checkMeta { inherit attrs; }; - inherit (validity) meta; + validity = checkMeta.assertValidity { inherit meta attrs; }; + meta = checkMeta.commonMeta { inherit validity attrs; }; in lib.extendDerivation validity.handled From c2fd974d5b284bc2f0e5d815eb0c80a0d8490b2c Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 2 May 2023 10:41:58 +1000 Subject: [PATCH 29/35] minimal-bootstrap.stage0-posix: highlight hex0-seed --- .../linux/minimal-bootstrap/stage0-posix/default.nix | 11 +++++++++++ .../linux/minimal-bootstrap/stage0-posix/hex0.nix | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 20b12e052dbbf..76f0cc537f85b 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -9,6 +9,17 @@ lib.makeScope newScope (self: with self; { version = "unstable-2023-04-24"; rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; + # This 256 byte seed is the only pre-compiled binary in the bootstrap chain. + # While it is included in the stage0-posix source bundle and is synced with + # stage0-posix updates, we have split it out into its own derivation to highlight + # its unique status as a trusted binary seed. + hex0-seed = import { + name = "hex0-seed-${version}"; + url = "https://github.com/oriansj/bootstrap-seeds/raw/b1263ff14a17835f4d12539226208c426ced4fba/POSIX/x86/hex0-seed"; + hash = "sha256-QU3RPGy51W7M2xnfFY1IqruKzusrSLU+L190ztN6JW8="; + executable = true; + }; + # Packaged resources required for the first bootstrapping stage. # Contains source code and 256-byte hex0 binary seed. # diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix index 48b2932cfeba8..0d8c3b18b0b97 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/hex0.nix @@ -1,12 +1,13 @@ { lib , derivationWithMeta +, hex0-seed , src , version }: derivationWithMeta { inherit version; pname = "hex0"; - builder = "${src}/bootstrap-seeds/POSIX/x86/hex0-seed"; + builder = hex0-seed; args = [ "${src}/bootstrap-seeds/POSIX/x86/hex0_x86.hex0" (placeholder "out") From 5f4f945cfffb4e57ad665196af00ab9cc760855c Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 2 May 2023 10:59:15 +1000 Subject: [PATCH 30/35] minimal-bootstrap: refactor out bootstrap-sources.nix --- .../stage0-posix/bootstrap-sources.nix | 34 +++++++++++++++++++ .../stage0-posix/default.nix | 31 +---------------- .../stage0-posix/make-bootstrap-sources.nix | 15 ++++---- 3 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix new file mode 100644 index 0000000000000..58e8d8c852fab --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix @@ -0,0 +1,34 @@ +rec { + name = "stage0-posix-${version}-${rev}-source"; + # Pinned from https://github.com/oriansj/stage0-posix/commit/bdd3ee779adb9f4a299059d09e68dfedecfd4226 + version = "unstable-2023-04-24"; + rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; + + # This 256 byte seed is the only pre-compiled binary in the bootstrap chain. + # While it is included in the stage0-posix source bundle and is synced with + # stage0-posix updates, we have split it out into its own derivation to highlight + # its unique status as a trusted binary seed. + hex0-seed = import { + name = "hex0-seed-${version}"; + url = "https://github.com/oriansj/bootstrap-seeds/raw/b1263ff14a17835f4d12539226208c426ced4fba/POSIX/x86/hex0-seed"; + hash = "sha256-QU3RPGy51W7M2xnfFY1IqruKzusrSLU+L190ztN6JW8="; + executable = true; + }; + + # Packaged resources required for the first bootstrapping stage. + # Contains source code and 256-byte hex0 binary seed. + # + # We don't have access to utilities such as fetchgit and fetchzip since this + # is this is part of the bootstrap process and would introduce a circular + # dependency. The only tool we have to fetch source trees is `import ` + # with the unpack option, taking a NAR file as input. This requires source + # tarballs to be repackaged. + # + # To build see `make-bootstrap-sources.nix` + src = import { + inherit name; + url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-04-25/${name}.nar.xz"; + hash = "sha256-hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; + unpack = true; + }; +} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 76f0cc537f85b..12c106e0a8a46 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -5,36 +5,7 @@ lib.makeScope newScope (self: with self; { callPackage = self.callPackage; - # Pinned from https://github.com/oriansj/stage0-posix/commit/bdd3ee779adb9f4a299059d09e68dfedecfd4226 - version = "unstable-2023-04-24"; - rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; - - # This 256 byte seed is the only pre-compiled binary in the bootstrap chain. - # While it is included in the stage0-posix source bundle and is synced with - # stage0-posix updates, we have split it out into its own derivation to highlight - # its unique status as a trusted binary seed. - hex0-seed = import { - name = "hex0-seed-${version}"; - url = "https://github.com/oriansj/bootstrap-seeds/raw/b1263ff14a17835f4d12539226208c426ced4fba/POSIX/x86/hex0-seed"; - hash = "sha256-QU3RPGy51W7M2xnfFY1IqruKzusrSLU+L190ztN6JW8="; - executable = true; - }; - - # Packaged resources required for the first bootstrapping stage. - # Contains source code and 256-byte hex0 binary seed. - # - # We don't have access to utilities such as fetchgit and fetchzip since this - # is this is part of the bootstrap process and would introduce a circular - # dependency. The only tool we have to fetch source trees is `import ` - # with the unpack option, taking a NAR file as input. This requires source - # tarballs to be repackaged. - # - # To build see `make-bootstrap-sources.nix` - src = import { - url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-04-25/stage0-posix-${builtins.substring 0 7 rev}-source.nar.xz"; - hash = "sha256-hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; - unpack = true; - }; + inherit (import ./bootstrap-sources.nix) version hex0-seed src; m2libc = src + "/M2libc"; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix index f69ac6a3ecd0a..e4924dbde89b4 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix @@ -10,27 +10,26 @@ # To build: # # nix-build pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix -# => ./result/stage0-posix-0000000-source.nar.xz +# => ./result/stage0-posix-$version-$rev-source.nar.xz # { pkgs ? import ../../../../.. {} }: let - inherit (pkgs) runCommand fetchFromGitHub nix xz; + inherit (pkgs) callPackage runCommand fetchFromGitHub nix xz; + + inherit (import ./bootstrap-sources.nix) name rev; - pname = "stage0-posix"; - rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; - shortHash = builtins.substring 0 7 rev; src = fetchFromGitHub { owner = "oriansj"; - repo = pname; + repo = "stage0-posix"; inherit rev; sha256 = "hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; fetchSubmodules = true; }; in -runCommand "${pname}-${shortHash}-source" { +runCommand name { nativeBuildInputs = [ nix xz ]; } '' mkdir $out - nix-store --dump ${src} | xz -c > "$out/${pname}-${shortHash}-source.nar.xz" + nix-store --dump ${src} | xz -c > "$out/${name}.nar.xz" '' From dc975fd1b61417cf99c3bcaf4199befea9c50a3e Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 2 May 2023 13:00:34 +1000 Subject: [PATCH 31/35] minimal-bootstrap.stage0: unstable-2023-04-24 -> unstable-2023-05-02 --- .../stage0-posix/bootstrap-sources.nix | 10 +++++----- .../stage0-posix/make-bootstrap-sources.nix | 13 ++++++++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix index 58e8d8c852fab..f06db98a8efee 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/bootstrap-sources.nix @@ -1,8 +1,8 @@ rec { name = "stage0-posix-${version}-${rev}-source"; - # Pinned from https://github.com/oriansj/stage0-posix/commit/bdd3ee779adb9f4a299059d09e68dfedecfd4226 - version = "unstable-2023-04-24"; - rev = "bdd3ee779adb9f4a299059d09e68dfedecfd4226"; + # Pinned from https://github.com/oriansj/stage0-posix/commit/3189b5f325b7ef8b88e3edec7c1cde4fce73c76c + version = "unstable-2023-05-02"; + rev = "3189b5f325b7ef8b88e3edec7c1cde4fce73c76c"; # This 256 byte seed is the only pre-compiled binary in the bootstrap chain. # While it is included in the stage0-posix source bundle and is synced with @@ -27,8 +27,8 @@ rec { # To build see `make-bootstrap-sources.nix` src = import { inherit name; - url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-04-25/${name}.nar.xz"; - hash = "sha256-hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; + url = "https://github.com/emilytrau/bootstrap-tools-nar-mirror/releases/download/2023-05-02/${name}.nar.xz"; + hash = "sha256-ZRG0k49MxL1UTZhuMTvPoEprdSpJRNVy8QhLE6k+etg="; unpack = true; }; } diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix index e4924dbde89b4..fec03f370bc38 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/make-bootstrap-sources.nix @@ -23,12 +23,23 @@ let owner = "oriansj"; repo = "stage0-posix"; inherit rev; - sha256 = "hMLo32yqXiTXPyW1jpR5zprYzZW8lFQy6KMrkNQZ89I="; + sha256 = "sha256-ZRG0k49MxL1UTZhuMTvPoEprdSpJRNVy8QhLE6k+etg="; fetchSubmodules = true; + postFetch = '' + # Remove vendored/duplicate M2libc's + echo "Removing duplicate M2libc" + rm -rf \ + $out/M2-Mesoplanet/M2libc \ + $out/M2-Planet/M2libc \ + $out/mescc-tools/M2libc \ + $out/mescc-tools-extra/M2libc + ''; }; in runCommand name { nativeBuildInputs = [ nix xz ]; + + passthru = { inherit src; }; } '' mkdir $out nix-store --dump ${src} | xz -c > "$out/${name}.nar.xz" From 365597483fa31442cafa9c60cca177965904b677 Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Tue, 2 May 2023 23:45:02 +1000 Subject: [PATCH 32/35] minimal-bootstrap: remove redundant definition --- pkgs/os-specific/linux/minimal-bootstrap/default.nix | 2 -- .../linux/minimal-bootstrap/stage0-posix/default.nix | 2 -- 2 files changed, 4 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 4436cfa3183b5..fd1693e761b61 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -4,8 +4,6 @@ }: lib.makeScope newScope (self: with self; { - callPackage = self.callPackage; - fetchurl = import ../../../build-support/fetchurl/boot.nix { inherit (stdenv.buildPlatform) system; }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 12c106e0a8a46..716b003907849 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -3,8 +3,6 @@ }: lib.makeScope newScope (self: with self; { - callPackage = self.callPackage; - inherit (import ./bootstrap-sources.nix) version hex0-seed src; m2libc = src + "/M2libc"; From 06e21ebba59065969c57876764829d72eeca3534 Mon Sep 17 00:00:00 2001 From: Artturin Date: Tue, 2 May 2023 20:52:13 +0300 Subject: [PATCH 33/35] minimal-bootstrap: dont use top-level newScope to prevent accidentally using top-level attrs Co-authored-by: Emily Trau --- .../linux/minimal-bootstrap/default.nix | 32 +++++++++++-------- .../minimal-bootstrap/stage0-posix/utils.nix | 9 ++---- pkgs/top-level/all-packages.nix | 5 ++- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index fd1693e761b61..d0e1d553d15d7 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -1,20 +1,26 @@ { lib -, newScope -, stdenv +, config +, buildPlatform +, hostPlatform }: -lib.makeScope newScope (self: with self; { - fetchurl = import ../../../build-support/fetchurl/boot.nix { - inherit (stdenv.buildPlatform) system; - }; +lib.makeScope + # Prevent using top-level attrs to protect against introducing dependency on + # non-bootstrap packages by mistake. Any top-level inputs must be explicitly + # declared here. + (extra: lib.callPackageWith ({ inherit lib config buildPlatform hostPlatform; } // extra)) + (self: with self; { + fetchurl = import ../../../build-support/fetchurl/boot.nix { + inherit (buildPlatform) system; + }; - inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; + inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; - mes = callPackage ./mes { }; - inherit (mes) mes-libc; + mes = callPackage ./mes { }; + inherit (mes) mes-libc; - ln-boot = callPackage ./ln-boot { }; + ln-boot = callPackage ./ln-boot { }; - tinycc-bootstrappable = callPackage ./tinycc/bootstrappable.nix { }; - tinycc-mes = callPackage ./tinycc/mes.nix { }; -}) + tinycc-bootstrappable = callPackage ./tinycc/bootstrappable.nix { }; + tinycc-mes = callPackage ./tinycc/mes.nix { }; + }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix index 239d17e4fbc8e..4d44b7447fb97 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix @@ -1,7 +1,6 @@ { lib -, stdenv +, buildPlatform , callPackage -, fetchurl , kaem , kaem-unwrapped , mescc-tools @@ -9,9 +8,7 @@ }: let - checkMeta = callPackage ../../../../stdenv/generic/check-meta.nix { - inherit (stdenv) hostPlatform; - }; + checkMeta = callPackage ../../../../stdenv/generic/check-meta.nix { }; in rec { derivationWithMeta = attrs: @@ -24,7 +21,7 @@ rec { validity.handled ({ inherit meta passthru; } // passthru) (derivation ({ - inherit (stdenv.buildPlatform) system; + inherit (buildPlatform) system; inherit (meta) name; } // (builtins.removeAttrs attrs [ "meta" "passthru" ]))); diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dfdc90afaa85a..1e8b1b9c65775 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -26943,7 +26943,10 @@ with pkgs; metastore = callPackage ../os-specific/linux/metastore { }; - minimal-bootstrap = recurseIntoAttrs (callPackage ../os-specific/linux/minimal-bootstrap { }); + minimal-bootstrap = recurseIntoAttrs (import ../os-specific/linux/minimal-bootstrap { + inherit (stdenv) buildPlatform hostPlatform; + inherit lib config; + }); mingetty = callPackage ../os-specific/linux/mingetty { }; From 1e88aa25949731f5d372ae7a510e56dea84f9e9a Mon Sep 17 00:00:00 2001 From: Emily Trau Date: Wed, 3 May 2023 14:31:40 +1000 Subject: [PATCH 34/35] minimal-bootstrap.mes: generate list of source files --- .../linux/minimal-bootstrap/default.nix | 2 +- .../linux/minimal-bootstrap/mes/default.nix | 143 ++++-------------- .../minimal-bootstrap/mes/gen-sources.sh | 95 ++++++++++++ .../linux/minimal-bootstrap/mes/libc.nix | 28 ++-- .../linux/minimal-bootstrap/mes/sources.nix | 22 +++ .../tinycc/bootstrappable.nix | 4 +- .../linux/minimal-bootstrap/tinycc/common.nix | 4 +- 7 files changed, 163 insertions(+), 135 deletions(-) create mode 100755 pkgs/os-specific/linux/minimal-bootstrap/mes/gen-sources.sh create mode 100644 pkgs/os-specific/linux/minimal-bootstrap/mes/sources.nix diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index d0e1d553d15d7..ada0e7da0e5c2 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -17,7 +17,7 @@ lib.makeScope inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; mes = callPackage ./mes { }; - inherit (mes) mes-libc; + mes-libc = callPackage ./mes/libc.nix { }; ln-boot = callPackage ./ln-boot { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix index c4685918829a0..abf3955eb2d9a 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/default.nix @@ -22,106 +22,11 @@ let #define MES_VERSION "${version}" ''; - # Maintenance note: - # Build steps have been adapted from build-aux/bootstrap.sh.in - # as well as the live-bootstrap project - # https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem + sources = (import ./sources.nix).x86.linux.mescc; + inherit (sources) libc_mini_SOURCES libmescc_SOURCES libc_SOURCES mes_SOURCES; - # Maintenance note: list of source files derived from build-aux/configure-lib.sh - libc_mini_shared_SOURCES = cc: [ - "lib/mes/eputs.c" - "lib/mes/oputs.c" - "lib/mes/globals.c" - "lib/stdlib/exit.c" - "lib/linux/x86-mes-${cc}/_exit.c" - "lib/linux/x86-mes-${cc}/_write.c" - "lib/stdlib/puts.c" - "lib/string/strlen.c" - ]; - libc_mini_SOURCES = cc: libc_mini_shared_SOURCES cc ++ [ - "lib/mes/mini-write.c" - ]; - libmescc_SOURCES = cc: [ - "lib/mes/globals.c" - "lib/linux/x86-mes-${cc}/syscall-internal.c" - ]; - libmes_SOURCES = cc: libc_mini_shared_SOURCES cc ++ lib.splitString " " ( - "lib/ctype/isnumber.c lib/mes/abtol.c lib/mes/cast.c lib/mes/eputc.c lib/mes/fdgetc.c " - + "lib/mes/fdputc.c lib/mes/fdputs.c lib/mes/fdungetc.c lib/mes/itoa.c lib/mes/ltoa.c " - + "lib/mes/ltoab.c lib/mes/mes_open.c lib/mes/ntoab.c lib/mes/oputc.c lib/mes/ultoa.c " - + "lib/mes/utoa.c lib/stub/__raise.c lib/ctype/isdigit.c lib/ctype/isspace.c " - + "lib/ctype/isxdigit.c lib/mes/assert_msg.c lib/posix/write.c lib/stdlib/atoi.c " - + "lib/linux/lseek.c"); - libc_SOURCES = cc: libmes_SOURCES cc ++ lib.splitString " " ( - "lib/mes/__assert_fail.c lib/mes/__buffered_read.c lib/mes/__mes_debug.c " - + "lib/posix/execv.c lib/posix/getcwd.c lib/posix/getenv.c lib/posix/isatty.c " - + "lib/posix/open.c lib/posix/buffered-read.c lib/posix/setenv.c lib/posix/wait.c " - + "lib/stdio/fgetc.c lib/stdio/fputc.c lib/stdio/fputs.c lib/stdio/getc.c " - + "lib/stdio/getchar.c lib/stdio/putc.c lib/stdio/putchar.c lib/stdio/ungetc.c " - + "lib/stdlib/free.c lib/stdlib/realloc.c lib/string/memchr.c lib/string/memcmp.c " - + "lib/string/memcpy.c lib/string/memmove.c lib/string/memset.c lib/string/strcmp.c " - + "lib/string/strcpy.c lib/string/strncmp.c lib/posix/raise.c " - + "lib/linux/access.c lib/linux/brk.c lib/linux/chmod.c lib/linux/clock_gettime.c " - + "lib/linux/dup.c lib/linux/dup2.c lib/linux/execve.c lib/linux/fork.c lib/linux/fsync.c " - + "lib/linux/_getcwd.c lib/linux/gettimeofday.c lib/linux/ioctl3.c lib/linux/_open3.c " - + "lib/linux/malloc.c lib/linux/_read.c lib/linux/time.c lib/linux/unlink.c " - + "lib/linux/waitpid.c lib/linux/x86-mes-${cc}/syscall.c lib/linux/getpid.c " - + "lib/linux/kill.c"); - libc_tcc_SOURCES = cc: lib.splitString " " ( - "lib/ctype/islower.c lib/ctype/isupper.c lib/ctype/tolower.c lib/ctype/toupper.c " - + "lib/mes/abtod.c lib/mes/dtoab.c lib/mes/search-path.c lib/posix/execvp.c " - + "lib/stdio/fclose.c lib/stdio/fdopen.c lib/stdio/ferror.c lib/stdio/fflush.c " - + "lib/stdio/fopen.c lib/stdio/fprintf.c lib/stdio/fread.c lib/stdio/fseek.c " - + "lib/stdio/ftell.c lib/stdio/fwrite.c lib/stdio/printf.c lib/stdio/remove.c " - + "lib/stdio/snprintf.c lib/stdio/sprintf.c lib/stdio/sscanf.c lib/stdio/vfprintf.c " - + "lib/stdio/vprintf.c lib/stdio/vsnprintf.c lib/stdio/vsprintf.c lib/stdio/vsscanf.c " - + "lib/stdlib/calloc.c lib/stdlib/qsort.c lib/stdlib/strtod.c lib/stdlib/strtof.c " - + "lib/stdlib/strtol.c lib/stdlib/strtold.c lib/stdlib/strtoll.c lib/stdlib/strtoul.c " - + "lib/stdlib/strtoull.c lib/string/memmem.c lib/string/strcat.c lib/string/strchr.c " - + "lib/string/strlwr.c lib/string/strncpy.c lib/string/strrchr.c lib/string/strstr.c " - + "lib/string/strupr.c lib/stub/sigaction.c lib/stub/ldexp.c lib/stub/mprotect.c " - + "lib/stub/localtime.c lib/stub/sigemptyset.c lib/x86-mes-${cc}/setjmp.c " - + "lib/linux/close.c lib/linux/rmdir.c lib/linux/stat.c" - ) ++ [ - # add symlink() to libc+tcc so we can use it in ln-boot - "lib/linux/symlink.c" - ]; - libc_gnu_SOURCES = cc: libc_tcc_SOURCES cc ++ lib.splitString " " ( - "lib/ctype/isalnum.c lib/ctype/isalpha.c lib/ctype/isascii.c lib/ctype/iscntrl.c " - + "lib/ctype/isgraph.c lib/ctype/isprint.c lib/ctype/ispunct.c lib/dirent/__getdirentries.c " - + "lib/dirent/closedir.c lib/dirent/opendir.c lib/dirent/readdir.c lib/math/ceil.c " - + "lib/math/fabs.c lib/math/floor.c lib/mes/fdgets.c lib/posix/alarm.c lib/posix/execl.c " - + "lib/posix/execlp.c lib/posix/mktemp.c lib/posix/sbrk.c lib/posix/sleep.c " - + "lib/posix/unsetenv.c lib/stdio/clearerr.c lib/stdio/feof.c lib/stdio/fgets.c " - + "lib/stdio/fileno.c lib/stdio/freopen.c lib/stdio/fscanf.c lib/stdio/perror.c " - + "lib/stdio/vfscanf.c lib/stdlib/__exit.c lib/stdlib/abort.c lib/stdlib/abs.c " - + "lib/stdlib/alloca.c lib/stdlib/atexit.c lib/stdlib/atof.c lib/stdlib/atol.c " - + "lib/stdlib/mbstowcs.c lib/string/bcmp.c lib/string/bcopy.c lib/string/bzero.c " - + "lib/string/index.c lib/string/rindex.c lib/string/strcspn.c lib/string/strdup.c " - + "lib/string/strerror.c lib/string/strncat.c lib/string/strpbrk.c lib/string/strspn.c " - + "lib/stub/__cleanup.c lib/stub/atan2.c lib/stub/bsearch.c lib/stub/chown.c " - + "lib/stub/cos.c lib/stub/ctime.c lib/stub/exp.c lib/stub/fpurge.c lib/stub/freadahead.c " - + "lib/stub/frexp.c lib/stub/getgrgid.c lib/stub/getgrnam.c lib/stub/getlogin.c " - + "lib/stub/getpgid.c lib/stub/getpgrp.c lib/stub/getpwnam.c lib/stub/getpwuid.c " - + "lib/stub/gmtime.c lib/stub/log.c lib/stub/mktime.c lib/stub/modf.c lib/stub/pclose.c " - + "lib/stub/popen.c lib/stub/pow.c lib/stub/rand.c lib/stub/rewind.c lib/stub/setbuf.c " - + "lib/stub/setgrent.c lib/stub/setlocale.c lib/stub/setvbuf.c lib/stub/sigaddset.c " - + "lib/stub/sigblock.c lib/stub/sigdelset.c lib/stub/sigsetmask.c lib/stub/sin.c " - + "lib/stub/sqrt.c lib/stub/strftime.c lib/stub/sys_siglist.c lib/stub/system.c " - + "lib/stub/times.c lib/stub/ttyname.c lib/stub/umask.c lib/stub/utime.c " - + "lib/linux/chdir.c lib/linux/fcntl.c lib/linux/fstat.c lib/linux/getdents.c " - + "lib/linux/getegid.c lib/linux/geteuid.c lib/linux/getgid.c lib/linux/getppid.c " - + "lib/linux/getrusage.c lib/linux/getuid.c lib/linux/ioctl.c lib/linux/link.c " - + "lib/linux/lstat.c lib/linux/mkdir.c lib/linux/mknod.c lib/linux/nanosleep.c " - + "lib/linux/pipe.c lib/linux/readlink.c lib/linux/rename.c lib/linux/setgid.c " - + "lib/linux/settimer.c lib/linux/setuid.c lib/linux/signal.c lib/linux/sigprogmask.c " - # sylink.c already included above in libc_tcc_SOURCES - # + "lib/linux/symlink.c" - ); - mes_SOURCES = cc: lib.splitString " " ( - "src/builtins.c src/cc.c src/core.c src/display.c src/eval-apply.c src/gc.c " - + "src/globals.c src/hash.c src/lib.c src/math.c src/mes.c src/module.c src/posix.c " - + "src/reader.c src/stack.c src/string.c src/struct.c src/symbol.c src/vector.c"); + # add symlink() to libc+tcc so we can use it in ln-boot + libc_tcc_SOURCES = sources.libc_tcc_SOURCES ++ [ "lib/linux/symlink.c" ]; compile = sources: lib.concatMapStringsSep @@ -141,9 +46,7 @@ in runCommand "${pname}-${version}" { inherit pname version; - passthru.mes-libc = callPackage ./libc.nix { - inherit libc_SOURCES libc_gnu_SOURCES; - }; + passthru = { inherit src nyacc; }; meta = with lib; { description = "Scheme interpreter and C compiler for bootstrapping"; @@ -152,7 +55,12 @@ runCommand "${pname}-${version}" { maintainers = with maintainers; [ emilytrau ]; platforms = [ "i686-linux" ]; }; -} '' +} +# Maintenance note: +# Build steps have been adapted from build-aux/bootstrap.sh.in +# as well as the live-bootstrap project +# https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/mes-0.24.2/mes-0.24.2.kaem +'' # Unpack source ungz --file ${src} --output mes.tar mkdir ''${out} ''${out}/bin ''${out}/share @@ -235,35 +143,36 @@ runCommand "${pname}-${version}" { cp crt1.s ''${LIBDIR}/x86-mes # libc-mini.a - ${compile (libc_mini_SOURCES "mescc")} - ${archive "libc-mini.a" (libc_mini_SOURCES "mescc")} - ${sourceArchive "libc-mini.s" (libc_mini_SOURCES "mescc")} + ${compile libc_mini_SOURCES} + ${archive "libc-mini.a" libc_mini_SOURCES} + ${sourceArchive "libc-mini.s" libc_mini_SOURCES} cp libc-mini.a ''${LIBDIR}/x86-mes cp libc-mini.s ''${LIBDIR}/x86-mes # libmescc.a - ${compile (libmescc_SOURCES "mescc")} - ${archive "libmescc.a" (libmescc_SOURCES "mescc")} - ${sourceArchive "libmescc.s" (libmescc_SOURCES "mescc")} + ${compile libmescc_SOURCES} + ${archive "libmescc.a" libmescc_SOURCES} + ${sourceArchive "libmescc.s" libmescc_SOURCES} cp libmescc.a ''${LIBDIR}/x86-mes cp libmescc.s ''${LIBDIR}/x86-mes # libc.a - ${compile (libc_SOURCES "mescc")} - ${archive "libc.a" (libc_SOURCES "mescc")} - ${sourceArchive "libc.s" (libc_SOURCES "mescc")} + ${compile libc_SOURCES} + ${archive "libc.a" libc_SOURCES} + ${sourceArchive "libc.s" libc_SOURCES} cp libc.a ''${LIBDIR}/x86-mes cp libc.s ''${LIBDIR}/x86-mes # libc+tcc.a - ${compile (libc_tcc_SOURCES "mescc")} - ${archive "libc+tcc.a" ([ "libc.a" ] ++ libc_tcc_SOURCES "mescc")} - ${sourceArchive "libc+tcc.s" ([ "libc.s" ] ++ libc_tcc_SOURCES "mescc")} + # optimisation: don't recompile common libc sources + ${compile (lib.subtractLists libc_SOURCES libc_tcc_SOURCES)} + ${archive "libc+tcc.a" libc_tcc_SOURCES} + ${sourceArchive "libc+tcc.s" libc_tcc_SOURCES} cp libc+tcc.a ''${LIBDIR}/x86-mes cp libc+tcc.s ''${LIBDIR}/x86-mes # Build mes itself - ${compile (mes_SOURCES "mescc")} + ${compile mes_SOURCES} ''${out}/bin/mes-m2 -e main ''${out}/bin/mescc.scm -- \ --base-address 0x08048000 \ -L ''${MES_PREFIX}/lib \ @@ -273,7 +182,7 @@ runCommand "${pname}-${version}" { -nostdlib \ -o ''${out}/bin/mes \ crt1.o \ - ${lib.concatMapStringsSep " " (replaceExt ".o") (mes_SOURCES "mescc")} + ${lib.concatMapStringsSep " " (replaceExt ".o") mes_SOURCES} # Check ''${out}/bin/mes --version diff --git a/pkgs/os-specific/linux/minimal-bootstrap/mes/gen-sources.sh b/pkgs/os-specific/linux/minimal-bootstrap/mes/gen-sources.sh new file mode 100755 index 0000000000000..3a734129c1f75 --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/mes/gen-sources.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p bash coreutils gnutar + +# Generate a sources.nix for a version of GNU mes. Creates lists of source files +# from build-aux/configure-lib.sh. +# +# You may point this tool at a manually downloaded tarball, but more ideal is +# using the source tarball from Nixpkgs. For example: +# +# MES_TARBALL="$(nix-build --no-link -A minimal-bootstrap.mes.src ../../../../..)" +# ./gen-sources.sh "$MES_TARBALL" > ./new-sources.nix + +set -eu + +# Supported platforms +ARCHS="x86" +KERNELS="linux" +COMPILERS="mescc gcc" + + +format() { + echo -n "[ " + # Terrible hack to convert a newline-delimited string to space-delimited + echo $* | xargs printf '"%s" ' + echo -n "]" +} + +gen_sources() { + # Configuration variables used by configure-lib.sh + export mes_libc=mes + export mes_cpu=$1 + export mes_kernel=$2 + export compiler=$3 + + # Populate source file lists + source $CONFIGURE_LIB_SH + + cat <&2 + exit 1 +fi +echo "Generating sources.nix from $MES_TARBALL" >&2 + +TMP=$(mktemp -d) +cd $TMP +echo "Workdir: $TMP" >&2 + +echo "Extracting $MES_TARBALL" >&2 +tar --strip-components 1 -xf $MES_TARBALL + +CONFIGURE_LIB_SH="$TMP/build-aux/configure-lib.sh" +if [ ! -f $CONFIGURE_LIB_SH ]; then + echo "Could not find mes's configure-lib.sh script at $CONFIGURE_LIB_SH" >&2 + exit 1 +fi + +# Create dummy config expected by configure-lib.sh +touch config.sh +chmod +x config.sh + + +echo "Configuring with $CONFIGURE_LIB_SH" >&2 + +cat < Date: Wed, 3 May 2023 15:29:31 +1000 Subject: [PATCH 35/35] minimal-bootstrap: move utils out of stage0-posix --- pkgs/os-specific/linux/minimal-bootstrap/default.nix | 6 ++---- .../linux/minimal-bootstrap/stage0-posix/default.nix | 2 -- .../linux/minimal-bootstrap/{stage0-posix => }/utils.nix | 9 ++++++--- 3 files changed, 8 insertions(+), 9 deletions(-) rename pkgs/os-specific/linux/minimal-bootstrap/{stage0-posix => }/utils.nix (90%) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index ada0e7da0e5c2..509b7fe205933 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -10,11 +10,9 @@ lib.makeScope # declared here. (extra: lib.callPackageWith ({ inherit lib config buildPlatform hostPlatform; } // extra)) (self: with self; { - fetchurl = import ../../../build-support/fetchurl/boot.nix { - inherit (buildPlatform) system; - }; + inherit (callPackage ./utils.nix { }) fetchurl derivationWithMeta writeTextFile writeText runCommand; - inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra writeTextFile writeText runCommand; + inherit (callPackage ./stage0-posix { }) kaem m2libc mescc-tools mescc-tools-extra; mes = callPackage ./mes { }; mes-libc = callPackage ./mes/libc.nix { }; diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix index 716b003907849..650644f6ef029 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/default.nix @@ -17,6 +17,4 @@ lib.makeScope newScope (self: with self; { mescc-tools = callPackage ./mescc-tools { }; mescc-tools-extra = callPackage ./mescc-tools-extra { }; - - inherit (callPackage ./utils.nix { }) derivationWithMeta writeTextFile writeText runCommand; }) diff --git a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix b/pkgs/os-specific/linux/minimal-bootstrap/utils.nix similarity index 90% rename from pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix rename to pkgs/os-specific/linux/minimal-bootstrap/utils.nix index 4d44b7447fb97..1cc56654d7b0f 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/stage0-posix/utils.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/utils.nix @@ -2,15 +2,18 @@ , buildPlatform , callPackage , kaem -, kaem-unwrapped , mescc-tools , mescc-tools-extra }: let - checkMeta = callPackage ../../../../stdenv/generic/check-meta.nix { }; + checkMeta = callPackage ../../../stdenv/generic/check-meta.nix { }; in rec { + fetchurl = import ../../../build-support/fetchurl/boot.nix { + inherit (buildPlatform) system; + }; + derivationWithMeta = attrs: let passthru = attrs.passthru or {}; @@ -37,7 +40,7 @@ rec { inherit name text executable allowSubstitutes preferLocalBuild; passAsFile = [ "text" ]; - builder = kaem-unwrapped; + builder = "${kaem}/bin/kaem"; args = [ "--verbose" "--strict"