diff options
author | Emily Trau <emily@downunderctf.com> | 2023-06-25 15:01:41 +1000 |
---|---|---|
committer | Emily Trau <emily@downunderctf.com> | 2023-06-25 15:01:41 +1000 |
commit | bd99e56908c5a1645d550ee432b1c584e4bdceda (patch) | |
tree | a818cce4a9cd675f2ba4b28e1576fde5029684b2 /pkgs/os-specific/linux/minimal-bootstrap | |
parent | 0b6f86e46a0884fd4f5e849c441a0b06c6809ac7 (diff) | |
download | nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.tar nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.tar.gz nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.tar.bz2 nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.tar.lz nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.tar.xz nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.tar.zst nixlib-bd99e56908c5a1645d550ee432b1c584e4bdceda.zip |
minimal-bootstrap.gcc2-mes: init at 2.95.3
Diffstat (limited to 'pkgs/os-specific/linux/minimal-bootstrap')
-rw-r--r-- | pkgs/os-specific/linux/minimal-bootstrap/default.nix | 15 | ||||
-rw-r--r-- | pkgs/os-specific/linux/minimal-bootstrap/gcc/2.nix | 140 |
2 files changed, 155 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/minimal-bootstrap/default.nix b/pkgs/os-specific/linux/minimal-bootstrap/default.nix index 1a8dd34bd481..4ae9bbb74067 100644 --- a/pkgs/os-specific/linux/minimal-bootstrap/default.nix +++ b/pkgs/os-specific/linux/minimal-bootstrap/default.nix @@ -41,6 +41,19 @@ lib.makeScope tinycc = tinycc-mes; }; + gcc2 = callPackage ./gcc/2.nix { + bash = bash_2_05; + gcc = gcc2-mes; + binutils = binutils-mes; + glibc = glibc22; + }; + gcc2-mes = callPackage ./gcc/2.nix { + bash = bash_2_05; + tinycc = tinycc-mes; + binutils = binutils-mes; + mesBootstrap = true; + }; + gnugrep = callPackage ./gnugrep { bash = bash_2_05; tinycc = tinycc-mes; @@ -100,6 +113,8 @@ lib.makeScope echo ${binutils-mes.tests.get-version} echo ${bzip2.tests.get-version} echo ${gawk.tests.get-version} + echo ${gcc2.tests.get-version} + echo ${gcc2-mes.tests.get-version} echo ${gnugrep.tests.get-version} echo ${gnused.tests.get-version} echo ${gnutar.tests.get-version} diff --git a/pkgs/os-specific/linux/minimal-bootstrap/gcc/2.nix b/pkgs/os-specific/linux/minimal-bootstrap/gcc/2.nix new file mode 100644 index 000000000000..0a79c97e75af --- /dev/null +++ b/pkgs/os-specific/linux/minimal-bootstrap/gcc/2.nix @@ -0,0 +1,140 @@ +{ lib +, buildPlatform +, hostPlatform +, fetchurl +, bash +, gnumake +, gnupatch +, gnugrep +, gnutar +, gzip +, heirloom +, binutils +, mesBootstrap ? false, tinycc ? null, mes-libc +, gcc ? null, glibc ? null, linux-headers +}: +assert mesBootstrap -> tinycc != null; +assert !mesBootstrap -> gcc != null && glibc != null; +let + # Gcc-2.95.3 is the most recent GCC that is supported by what the Mes C + # Library v0.16 offers. Gcc-3.x (and 4.x) place higher demands on a C + # library, such as dir.h/struct DIR/readdir, locales, signals... Also, + # with gcc-2.95.3, binutils (2.14.0, 2.20.1a) and glibc-2.2.5 we found a + # GNU toolchain triplet "that works". + # - from guix/gnu/packages/commencement.scm + pname = "gcc" + lib.optionalString mesBootstrap "-mes"; + version = "2.95.3"; + + src = fetchurl { + url = "mirror://gnu/gcc/gcc-${version}/gcc-core-${version}.tar.gz"; + sha256 = "1xvfy4pqhrd5v2cv8lzf63iqg92k09g6z9n2ah6ndd4h17k1x0an"; + }; + + patches = [ + # This patch enables building gcc-2.95.3 using TCC and Mes C Library. + # * Disable building DOC + # * Avoid running `fixproto'. + # * Force running `fixinc'. + # * Replace Makefile trickery of creating an libgcc1.a archive, then + # extracting the .o files later to create a new libgcc2.a archive. + # Instead, keep temporary .o files. + (fetchurl { + url = "https://git.savannah.gnu.org/cgit/guix.git/plain/gnu/packages/patches/gcc-boot-2.95.3.patch?id=50249cab3a98839ade2433456fe618acc6f804a5"; + sha256 = "03l3jaxch6d76mx4zkn6ky64paj58jk0biddck01qd4bnw9z8hiw"; + }) + ]; + + makeFlags = [ + "LANGUAGES=c" + ] ++ lib.optionals mesBootstrap [ + "LIBGCC2_INCLUDES=\"-I ${mes-libc}/include\"" + "BOOT_LDFLAGS=\" -B ${tinycc.libs}/lib\"" + ] ++ lib.optionals (!mesBootstrap) [ + "LIBGCC2_INCLUDES=\"-I ${glibc}/include -I ${linux-headers}/include\"" + ]; +in +bash.runCommand "${pname}-${version}" { + inherit pname version; + + nativeBuildInputs = [ + (if mesBootstrap then tinycc.compiler else gcc) + gnumake + gnupatch + gnugrep + gnutar + gzip + heirloom.sed + binutils + ]; + + passthru.tests.get-version = result: + bash.runCommand "${pname}-get-version-${version}" {} '' + ${result}/bin/gcc --version + mkdir $out + ''; + + meta = with lib; { + description = "GNU Compiler Collection, version ${version}"; + homepage = "https://gcc.gnu.org"; + license = licenses.gpl3Plus; + maintainers = teams.minimal-bootstrap.members; + platforms = platforms.unix; + }; +} '' + # Unpack + tar xzf ${src} + cd gcc-${version} + + # Patch + ${lib.concatMapStringsSep "\n" (f: "patch -Np1 -i ${f}") patches} + # /build/glibc-2.2.5/intl/loadmsgcat.c:334: multiple definition of `_nl_load_domain' + # ../intl/libintl.a(loadmsgcat.o):/build/gcc-2.95.3/texinfo/intl/loadmsgcat.c:66: first defined here + rm -R texinfo + mkdir -p texinfo + echo 'all:'>texinfo/Makefile.in + echo 'install:'>>texinfo/Makefile.in + + # Configure + ${if mesBootstrap then '' + export CC="tcc -B ${tinycc.libs}/lib -D __GLIBC_MINOR__=6" + export CPP="tcc -E" + export ac_cv_func_setlocale=no + '' else '' + export CC="gcc -I${glibc}/include -I${linux-headers}/include -I${gcc}/lib/gcc-lib/${hostPlatform.config}/${version}/include" + export CPP="gcc -E -I${glibc}/include -I${linux-headers}/include -I${gcc}/lib/gcc-lib/${hostPlatform.config}/${version}/include" + export LIBRARY_PATH="${glibc}/lib" + export LIBS="-lc -lnss_files -lnss_dns -lresolv" + ''} + export OLDCC="$CC" + export CC_FOR_BUILD="$CC" + export AR=ar + export RANLIB=ranlib + export ac_cv_c_float_format='IEEE (little-endian)' + bash ./configure \ + --build=${buildPlatform.config} \ + --host=${hostPlatform.config} \ + --enable-static \ + --disable-shared \ + --disable-werror \ + --prefix=$out + # no info at this stage + touch gcc/cpp.info gcc/gcc.info + + # Build + make ${lib.concatStringsSep " " makeFlags} + + # Install + make install + mkdir tmp + cd tmp + ar x ../gcc/libgcc2.a + ${lib.optionalString mesBootstrap "ar x ${tinycc.libs}/lib/libtcc1.a"} + ar r $out/lib/gcc-lib/${hostPlatform.config}/${version}/libgcc.a *.o + cd .. + ${lib.optionalString mesBootstrap '' + cp gcc/libgcc2.a $out/lib/libgcc2.a + ar x ${tinycc.libs}/lib/libtcc1.a + ar x ${tinycc.libs}/lib/libc.a + ar r $out/lib/gcc-lib/${hostPlatform.config}/${version}/libc.a libc.o libtcc1.o + ''} +'' |