From e7afebbc4ca7048a6f96c360fae5065e3e82297c Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 23:53:43 -0700 Subject: [PATCH] gcc: if atLeast 8, use deduplicated version --- pkgs/development/compilers/gcc/8/default.nix | 279 ------------------ pkgs/development/compilers/gcc/default.nix | 20 +- ...thread-model-support-from-mcfgthread.patch | 0 pkgs/top-level/all-packages.nix | 1 + 4 files changed, 14 insertions(+), 286 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/8/default.nix rename pkgs/development/compilers/gcc/{ => patches}/8/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix deleted file mode 100644 index 274373a4fc8f..000000000000 --- a/pkgs/development/compilers/gcc/8/default.nix +++ /dev/null @@ -1,279 +0,0 @@ -{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs -, langC ? true, langCC ? true, langFortran ? false -, langObjC ? stdenv.targetPlatform.isDarwin -, langObjCpp ? stdenv.targetPlatform.isDarwin -, langGo ? false -, reproducibleBuild ? true -, profiledCompiler ? false -, langJit ? false -, staticCompiler ? false -, enableShared ? stdenv.targetPlatform.hasSharedLibraries -, enableLTO ? stdenv.hostPlatform.hasSharedLibraries -, texinfo ? null -, perl ? null # optional, for texi2pod (then pod2man) -, gmp, mpfr, libmpc, gettext, which, patchelf, binutils -, isl ? null # optional, for the Graphite optimization framework. -, zlib ? null -, enableMultilib ? false -, enablePlugin ? stdenv.hostPlatform == stdenv.buildPlatform # Whether to support user-supplied plug-ins -, name ? "gcc" -, libcCross ? null -, threadsCross ? null # for MinGW -, withoutTargetLibc ? false -, gnused ? null -, cloog ? null # unused; just for compat with gcc4, as we override the parameter on some places -, buildPackages -, callPackage -}: - -# Make sure we get GNU sed. -assert stdenv.buildPlatform.isDarwin -> gnused != null; - -# The go frontend is written in c++ -assert langGo -> langCC; - -# threadsCross is just for MinGW -assert threadsCross != {} -> stdenv.targetPlatform.isWindows; - -# profiledCompiler builds inject non-determinism in one of the compilation stages. -# If turned on, we can't provide reproducible builds anymore -assert reproducibleBuild -> profiledCompiler == false; - -with lib; -with builtins; - -let majorVersion = "8"; - version = "${majorVersion}.5.0"; - - inherit (stdenv) buildPlatform hostPlatform targetPlatform; - - patches = [ - # Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431 - ../fix-bug-80431.patch - ../9/fix-struct-redefinition-on-glibc-2.36.patch - ] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch - ++ optional targetPlatform.isNetBSD ../libstdc++-netbsd-ctypes.patch - ++ optional noSysDirs ../no-sys-dirs.patch - /* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied - url = "https://git.busybox.net/buildroot/plain/package/gcc/${version}/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02"; - sha256 = ""; # TODO: uncomment and check hash when available. - }) */ - ++ optional langFortran ../gfortran-driving.patch - ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch - ++ optional (targetPlatform.libc == "musl") ../libgomp-dont-force-initial-exec.patch - - # Obtain latest patch with ../update-mcfgthread-patches.sh - ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch - ++ [ ../libsanitizer-no-cyclades-9.patch ]; - - /* Cross-gcc settings (build == host != target) */ - crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; - stageNameAddon = if withoutTargetLibc then "stage-static" else "stage-final"; - crossNameAddon = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-${stageNameAddon}-"; - - callFile = lib.callPackageWith { - # lets - inherit - majorVersion - version - buildPlatform - hostPlatform - targetPlatform - patches - crossMingw - stageNameAddon - crossNameAddon - ; - # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc8.cc.override)" | jq '.[]' --raw-output' - inherit - binutils - buildPackages - cloog - withoutTargetLibc - enableLTO - enableMultilib - enablePlugin - enableShared - fetchpatch - fetchurl - gettext - gmp - gnused - isl - langC - langCC - langFortran - langGo - langJit - langObjC - langObjCpp - lib - libcCross - libmpc - mpfr - name - noSysDirs - patchelf - perl - profiledCompiler - reproducibleBuild - staticCompiler - stdenv - targetPackages - texinfo - threadsCross - which - zip - zlib - ; - }; - -in - -lib.pipe ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - src = fetchurl { - url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - sha256 = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; - }; - - inherit patches; - - outputs = [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib"; - setOutputFlags = false; - NIX_NO_SELF_RPATH = true; - - libc_dev = stdenv.cc.libc_dev; - - hardeningDisable = [ "format" "pie" ]; - - postPatch = '' - configureScripts=$(find . -name configure) - for configureScript in $configureScripts; do - patchShebangs $configureScript - done - '' - # This should kill all the stdinc frameworks that gcc and friends like to - # insert into default search paths. - + lib.optionalString hostPlatform.isDarwin '' - substituteInPlace gcc/config/darwin-c.c \ - --replace 'if (stdinc)' 'if (0)' - - substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name ''${!outputLib}/lib/\$(SHLIB_INSTALL_NAME)" - - substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname" - '' - + ( - lib.optionalString (targetPlatform != hostPlatform || stdenv.cc.libc != null) - # On NixOS, use the right path to the dynamic linker instead of - # `/lib/ld*.so'. - (let - libc = if libcCross != null then libcCross else stdenv.cc.libc; - in - ( - '' echo "fixing the \`GLIBC_DYNAMIC_LINKER', \`UCLIBC_DYNAMIC_LINKER', and \`MUSL_DYNAMIC_LINKER' macros..." - for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h - do - grep -q _DYNAMIC_LINKER "$header" || continue - echo " fixing \`$header'..." - sed -i "$header" \ - -e 's|define[[:blank:]]*\([UCG]\+\)LIBC_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define \1LIBC_DYNAMIC_LINKER\2 "${libc.out}\3"|g' \ - -e 's|define[[:blank:]]*MUSL_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define MUSL_DYNAMIC_LINKER\1 "${libc.out}\2"|g' - done - '' - + lib.optionalString (targetPlatform.libc == "musl") - '' - sed -i gcc/config/linux.h -e '1i#undef LOCAL_INCLUDE_DIR' - '' - )) - ) - + lib.optionalString targetPlatform.isAvr '' - makeFlagsArray+=( - 'LIMITS_H_TEST=false' - ) - ''; - - inherit noSysDirs staticCompiler withoutTargetLibc - libcCross crossMingw; - - inherit (callFile ../common/dependencies.nix { }) - depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget; - - NIX_LDFLAGS = lib.optionalString hostPlatform.isSunOS "-lm"; - - preConfigure = callFile ../common/pre-configure.nix { }; - - dontDisableStatic = true; - - configurePlatforms = [ "build" "host" "target" ]; - - configureFlags = callFile ../common/configure-flags.nix { }; - - targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; - - buildFlags = optional - (targetPlatform == hostPlatform && hostPlatform == buildPlatform) - (if profiledCompiler then "profiledbootstrap" else "bootstrap"); - - # https://gcc.gnu.org/PR109898 - enableParallelInstalling = false; - - inherit (callFile ../common/strip-attributes.nix { }) - stripDebugList - stripDebugListTarget - preFixup; - - # https://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 - ${if hostPlatform.system == "x86_64-solaris" then "CC" else null} = "gcc -m64"; - - # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the - # library headers and binaries, regarless of the language being compiled. - # - # Likewise, the LTO code doesn't find zlib. - # - # Cross-compiling, we need gcc not to read ./specs in order to build the g++ - # compiler (after the specs for the cross-gcc are created). Having - # LIBRARY_PATH= makes gcc read the specs from ., and the build breaks. - - CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([] - ++ optional (zlib != null) zlib - )); - - LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath (optional (zlib != null) zlib)); - - inherit (callFile ../common/extra-target-flags.nix { }) - EXTRA_FLAGS_FOR_TARGET - EXTRA_LDFLAGS_FOR_TARGET - ; - - passthru = { - inherit langC langCC langObjC langObjCpp langFortran langGo version; - isGNU = true; - hardeningUnsupportedFlags = [ "fortify3" ]; - }; - - enableParallelBuilding = true; - inherit enableShared enableMultilib; - - meta = { - inherit (callFile ../common/meta.nix { }) - homepage - license - description - longDescription - platforms - maintainers - ; - badPlatforms = [ "aarch64-darwin" ]; - }; -} - -// optionalAttrs (enableMultilib) { dontMoveLib64 = true; } -)) -[ - (callPackage ../common/libgcc.nix { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; }) -] diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index adfadd2e3915..94d077791f3a 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -40,17 +40,18 @@ let atLeast11 = lib.versionAtLeast version "11"; atLeast10 = lib.versionAtLeast version "10"; atLeast9 = lib.versionAtLeast version "9"; + atLeast8 = lib.versionAtLeast version "8"; in -# only gcc>=9 is currently supported -assert atLeast9; +# only gcc>=8 is currently supported +assert atLeast8; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; # The go frontend is written in c++ assert langGo -> langCC; -assert langAda -> gnat-bootstrap != null; +assert atLeast9 -> (langAda -> gnat-bootstrap != null); # TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes). # error: GDC is required to build d @@ -73,18 +74,19 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = - optional (!atLeast10) ./9/fix-struct-redefinition-on-glibc-2.36.patch + optional (majorVersion == "9") ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (!atLeast12) ./fix-bug-80431.patch + ++ optional (!atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch ++ optional (!atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch ++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch - ++ optional (noSysDirs && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch + ++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch ++ optionals (langAda || atLeast12) [ ./gnat-cflags-11.patch - ] ++ optionals (langAda && !atLeast11) [ + ] ++ optionals (langAda && atLeast9 && !atLeast11) [ ./gnat-cflags.patch ] ++ optionals atLeast12 [ ./gcc-12-gfortran-driving.patch @@ -107,11 +109,12 @@ let majorVersion = lib.versions.major version; sha256 = "sha256-naL5ZNiurqfDBiPSU8PTbTmLqj25B+vjjiqc4fAFgYs="; }) ]; }."${majorVersion}" or []) - ++ optional langD ./libphobos.patch + ++ optional (atLeast9 && langD) ./libphobos.patch ++ optional langFortran ../gfortran-driving.patch # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optional (!atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch + ++ optional (!atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optionals (atLeast11 && !atLeast12 && stdenv.isDarwin) [ (fetchpatch { @@ -172,6 +175,8 @@ let majorVersion = lib.versions.major version; ++ optional (!atLeast13 && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch + ++ optional (!atLeast9) ./libsanitizer-no-cyclades-9.patch + # openjdk build fails without this on -march=opteron; is upstream in gcc12 ++ optionals (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] @@ -264,6 +269,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk="; "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; "9.5.0" = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7"; + "8.5.0" = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; }."${version}"; }; diff --git a/pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aef17d927716..aa90223e16a2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15806,6 +15806,7 @@ with pkgs; "11" = "11.4.0"; "10" = "10.4.0"; "9" = "9.5.0"; + "8" = "8.5.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated