diff --git a/doc/release-notes/rl-2511.section.md b/doc/release-notes/rl-2511.section.md index 523c43f7386a..f261560026ab 100644 --- a/doc/release-notes/rl-2511.section.md +++ b/doc/release-notes/rl-2511.section.md @@ -20,7 +20,7 @@ - The `offrss` package was removed due to lack of upstream maintenance since 2012. It's recommended for users to migrate to another RSS reader -- GCC 9 has been removed, as it has reached end‐of‐life upstream and is no longer supported. +- GCC 9 and 10 have been removed, as they have reached end‐of‐life upstream and are no longer supported. - `base16-builder` node package has been removed due to lack of upstream maintenance. - `gentium` package now provides `Gentium-*.ttf` files, and not `GentiumPlus-*.ttf` files like before. The font identifiers `Gentium Plus*` are available in the `gentium-plus` package, and if you want to use the more recently updated package `gentium` [by sil](https://software.sil.org/gentium/), you should update your configuration files to use the `Gentium` font identifier. diff --git a/pkgs/by-name/gf/gfortran10/package.nix b/pkgs/by-name/gf/gfortran10/package.nix deleted file mode 100644 index 9cd90cd6f3b8..000000000000 --- a/pkgs/by-name/gf/gfortran10/package.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ wrapCC, gcc10 }: -wrapCC ( - gcc10.cc.override { - name = "gfortran"; - langFortran = true; - langCC = false; - langC = false; - profiledCompiler = false; - } -) diff --git a/pkgs/development/compilers/gcc/common/libgcc.nix b/pkgs/development/compilers/gcc/common/libgcc.nix index 1d921a0bca8d..e0437bc6e6e0 100644 --- a/pkgs/development/compilers/gcc/common/libgcc.nix +++ b/pkgs/development/compilers/gcc/common/libgcc.nix @@ -41,145 +41,138 @@ lib.pipe drv ) ] - ++ + ++ ( + let + targetPlatformSlash = + if lib.systems.equals hostPlatform targetPlatform then "" else "${targetPlatform.config}/"; - # nixpkgs did not add the "libgcc" output until gcc11. In theory - # the following condition can be changed to `true`, but that has not - # been tested. - lib.optionals (lib.versionAtLeast version "11.0") + # If we are building a cross-compiler and the target libc provided + # to us at build time has a libgcc, use that instead of building a + # new one. This avoids having two separate (but identical) libgcc + # outpaths in the closure of most packages, which can be confusing. + useLibgccFromTargetLibc = libcCross != null && libcCross ? passthru.libgcc; + + enableLibGccOutput = + (!stdenv.targetPlatform.isWindows || (lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform)) + && !langJit + && !stdenv.hostPlatform.isDarwin + && enableShared + && !useLibgccFromTargetLibc; + + # For some reason libgcc_s.so has major-version "2" on m68k but + # "1" everywhere else. Might be worth changing this to "*". + libgcc_s-version-major = if targetPlatform.isM68k then "2" else "1"; + + in + [ ( - let - targetPlatformSlash = - if lib.systems.equals hostPlatform targetPlatform then "" else "${targetPlatform.config}/"; - - # If we are building a cross-compiler and the target libc provided - # to us at build time has a libgcc, use that instead of building a - # new one. This avoids having two separate (but identical) libgcc - # outpaths in the closure of most packages, which can be confusing. - useLibgccFromTargetLibc = libcCross != null && libcCross ? passthru.libgcc; - - enableLibGccOutput = - (!stdenv.targetPlatform.isWindows || (lib.systems.equals stdenv.targetPlatform stdenv.hostPlatform)) - && !langJit - && !stdenv.hostPlatform.isDarwin - && enableShared - && !useLibgccFromTargetLibc; - - # For some reason libgcc_s.so has major-version "2" on m68k but - # "1" everywhere else. Might be worth changing this to "*". - libgcc_s-version-major = if targetPlatform.isM68k then "2" else "1"; - - in - [ - - ( - pkg: - pkg.overrideAttrs ( - previousAttrs: - lib.optionalAttrs useLibgccFromTargetLibc { - passthru = (previousAttrs.passthru or { }) // { - inherit (libcCross) libgcc; - }; - } - ) - ) - - ( - pkg: - pkg.overrideAttrs ( - previousAttrs: - lib.optionalAttrs ((!langC) || langJit || enableLibGccOutput) { - outputs = previousAttrs.outputs ++ lib.optionals enableLibGccOutput [ "libgcc" ]; - # This is a separate phase because gcc assembles its phase scripts - # in bash instead of nix (we should fix that). - preFixupPhases = - (previousAttrs.preFixupPhases or [ ]) - ++ lib.optionals ((!langC) || enableLibGccOutput) [ "preFixupLibGccPhase" ]; - preFixupLibGccPhase = - # delete extra/unused builds of libgcc_s in non-langC builds - # (i.e. libgccjit, gnat, etc) to avoid potential confusion - lib.optionalString (!langC) '' - rm -f $out/lib/libgcc_s.so* - '' - - # move `libgcc_s.so` into its own output, `$libgcc` - # We maintain $libgcc/lib/$target/ structure to make sure target - # strip runs over libgcc_s.so and remove debug references to headers: - # https://github.com/NixOS/nixpkgs/issues/316114 - + lib.optionalString enableLibGccOutput ( - '' - # move libgcc from lib to its own output (libgcc) - mkdir -p $libgcc/${targetPlatformSlash}lib - mv $lib/${targetPlatformSlash}lib/libgcc_s.so $libgcc/${targetPlatformSlash}lib/ - mv $lib/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $libgcc/${targetPlatformSlash}lib/ - ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so $lib/${targetPlatformSlash}lib/ - ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $lib/${targetPlatformSlash}lib/ - '' - + lib.optionalString (targetPlatformSlash != "") '' - ln -s ${targetPlatformSlash}lib $libgcc/lib - '' - # - # Nixpkgs ordinarily turns dynamic linking into pseudo-static linking: - # libraries are still loaded dynamically, exactly which copy of each - # library is loaded is permanently fixed at compile time (via RUNPATH). - # For libgcc_s we must revert to the "impure dynamic linking" style found - # in imperative software distributions. We must do this because - # `libgcc_s` calls `malloc()` and therefore has a `DT_NEEDED` for `libc`, - # which creates two problems: - # - # 1. A circular package dependency `glibc`<-`libgcc`<-`glibc` - # - # 2. According to the `-Wl,-rpath` flags added by Nixpkgs' `ld-wrapper`, - # the two versions of `glibc` in the cycle above are actually - # different packages. The later one is compiled by this `gcc`, but - # the earlier one was compiled by the compiler *that compiled* this - # `gcc` (usually the bootstrapFiles). In any event, the `glibc` - # dynamic loader won't honor that specificity without namespaced - # manual loads (`dlmopen()`). Once a `libc` is present in the address - # space of a process, that `libc` will be used to satisfy all - # `DT_NEEDED`s for `libc`, regardless of `RUNPATH`s. - # - # So we wipe the RUNPATH using `patchelf --set-rpath ""`. We can't use - # `patchelf --remove-rpath`, because at least as of patchelf 0.15.0 it - # will leave the old RUNPATH string in the file where the reference - # scanner can still find it: - # - # https://github.com/NixOS/patchelf/issues/453 - # - # Note: we might be using the bootstrapFiles' copy of patchelf, so we have - # to keep doing it this way until both the issue is fixed *and* all the - # bootstrapFiles are regenerated, on every platform. - # - # This patchelfing is *not* effectively equivalent to copying - # `libgcc_s` into `glibc`'s outpath. There is one minor and one - # major difference: - # - # 1. (Minor): multiple builds of `glibc` (say, with different - # overrides or parameters) will all reference a single store - # path: - # - # /nix/store/xxx...xxx-gcc-libgcc/lib/libgcc_s.so.1 - # - # This many-to-one referrer relationship will be visible in the store's - # dependency graph, and will be available to `nix-store -q` queries. - # Copying `libgcc_s` into each of its referrers would lose that - # information. - # - # 2. (Major): by referencing `libgcc_s.so.1`, rather than copying it, we - # are still able to run `nix-store -qd` on it to find out how it got - # built! Most importantly, we can see from that deriver which compiler - # was used to build it (or if it is part of the unpacked - # bootstrap-files). Copying `libgcc_s.so.1` from one outpath to - # another eliminates the ability to make these queries. - # - + '' - patchelf --set-rpath "" $libgcc/lib/libgcc_s.so.${libgcc_s-version-major} - '' - ); - } - ) - ) - ] + pkg: + pkg.overrideAttrs ( + previousAttrs: + lib.optionalAttrs useLibgccFromTargetLibc { + passthru = (previousAttrs.passthru or { }) // { + inherit (libcCross) libgcc; + }; + } + ) ) + + ( + pkg: + pkg.overrideAttrs ( + previousAttrs: + lib.optionalAttrs ((!langC) || langJit || enableLibGccOutput) { + outputs = previousAttrs.outputs ++ lib.optionals enableLibGccOutput [ "libgcc" ]; + # This is a separate phase because gcc assembles its phase scripts + # in bash instead of nix (we should fix that). + preFixupPhases = + (previousAttrs.preFixupPhases or [ ]) + ++ lib.optionals ((!langC) || enableLibGccOutput) [ "preFixupLibGccPhase" ]; + preFixupLibGccPhase = + # delete extra/unused builds of libgcc_s in non-langC builds + # (i.e. libgccjit, gnat, etc) to avoid potential confusion + lib.optionalString (!langC) '' + rm -f $out/lib/libgcc_s.so* + '' + + # move `libgcc_s.so` into its own output, `$libgcc` + # We maintain $libgcc/lib/$target/ structure to make sure target + # strip runs over libgcc_s.so and remove debug references to headers: + # https://github.com/NixOS/nixpkgs/issues/316114 + + lib.optionalString enableLibGccOutput ( + '' + # move libgcc from lib to its own output (libgcc) + mkdir -p $libgcc/${targetPlatformSlash}lib + mv $lib/${targetPlatformSlash}lib/libgcc_s.so $libgcc/${targetPlatformSlash}lib/ + mv $lib/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $libgcc/${targetPlatformSlash}lib/ + ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so $lib/${targetPlatformSlash}lib/ + ln -s $libgcc/${targetPlatformSlash}lib/libgcc_s.so.${libgcc_s-version-major} $lib/${targetPlatformSlash}lib/ + '' + + lib.optionalString (targetPlatformSlash != "") '' + ln -s ${targetPlatformSlash}lib $libgcc/lib + '' + # + # Nixpkgs ordinarily turns dynamic linking into pseudo-static linking: + # libraries are still loaded dynamically, exactly which copy of each + # library is loaded is permanently fixed at compile time (via RUNPATH). + # For libgcc_s we must revert to the "impure dynamic linking" style found + # in imperative software distributions. We must do this because + # `libgcc_s` calls `malloc()` and therefore has a `DT_NEEDED` for `libc`, + # which creates two problems: + # + # 1. A circular package dependency `glibc`<-`libgcc`<-`glibc` + # + # 2. According to the `-Wl,-rpath` flags added by Nixpkgs' `ld-wrapper`, + # the two versions of `glibc` in the cycle above are actually + # different packages. The later one is compiled by this `gcc`, but + # the earlier one was compiled by the compiler *that compiled* this + # `gcc` (usually the bootstrapFiles). In any event, the `glibc` + # dynamic loader won't honor that specificity without namespaced + # manual loads (`dlmopen()`). Once a `libc` is present in the address + # space of a process, that `libc` will be used to satisfy all + # `DT_NEEDED`s for `libc`, regardless of `RUNPATH`s. + # + # So we wipe the RUNPATH using `patchelf --set-rpath ""`. We can't use + # `patchelf --remove-rpath`, because at least as of patchelf 0.15.0 it + # will leave the old RUNPATH string in the file where the reference + # scanner can still find it: + # + # https://github.com/NixOS/patchelf/issues/453 + # + # Note: we might be using the bootstrapFiles' copy of patchelf, so we have + # to keep doing it this way until both the issue is fixed *and* all the + # bootstrapFiles are regenerated, on every platform. + # + # This patchelfing is *not* effectively equivalent to copying + # `libgcc_s` into `glibc`'s outpath. There is one minor and one + # major difference: + # + # 1. (Minor): multiple builds of `glibc` (say, with different + # overrides or parameters) will all reference a single store + # path: + # + # /nix/store/xxx...xxx-gcc-libgcc/lib/libgcc_s.so.1 + # + # This many-to-one referrer relationship will be visible in the store's + # dependency graph, and will be available to `nix-store -q` queries. + # Copying `libgcc_s` into each of its referrers would lose that + # information. + # + # 2. (Major): by referencing `libgcc_s.so.1`, rather than copying it, we + # are still able to run `nix-store -qd` on it to find out how it got + # built! Most importantly, we can see from that deriver which compiler + # was used to build it (or if it is part of the unpacked + # bootstrap-files). Copying `libgcc_s.so.1` from one outpath to + # another eliminates the ability to make these queries. + # + + '' + patchelf --set-rpath "" $libgcc/lib/libgcc_s.so.${libgcc_s-version-major} + '' + ); + } + ) + ) + ] + ) ) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 456c83df7e57..2d87fe210b61 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -82,12 +82,10 @@ let atLeast14 = versionAtLeast version "14"; atLeast13 = versionAtLeast version "13"; atLeast12 = versionAtLeast version "12"; - atLeast11 = versionAtLeast version "11"; is14 = majorVersion == "14"; is13 = majorVersion == "13"; is12 = majorVersion == "12"; is11 = majorVersion == "11"; - is10 = majorVersion == "10"; # releases have a form: MAJOR.MINOR.MICRO, like 14.2.1 # snapshots have a form like MAJOR.MINOR.MICRO.DATE, like 14.2.1.20250322 @@ -101,7 +99,7 @@ let # "14.2.0" -> "14.2.0" baseVersion = lib.concatStringsSep "." (lib.take 3 (lib.splitVersion version)); - disableBootstrap = atLeast11 && !stdenv.hostPlatform.isDarwin && (atLeast12 -> !profiledCompiler); + disableBootstrap = !stdenv.hostPlatform.isDarwin && (atLeast12 -> !profiledCompiler); inherit (stdenv) buildPlatform hostPlatform targetPlatform; targetConfig = @@ -224,7 +222,7 @@ pipe "mirror://gcc/snapshots/${majorVersion}-${snapDate}/gcc-${majorVersion}-${snapDate}.tar.xz" else "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - ${if is10 || is11 || is13 then "hash" else "sha256"} = gccVersions.srcHashForVersion version; + ${if is11 || is13 then "hash" else "sha256"} = gccVersions.srcHashForVersion version; }; inherit patches; @@ -342,21 +340,16 @@ pipe buildFlags = # we do not yet have Nix-driven profiling assert atLeast12 -> (profiledCompiler -> !disableBootstrap); - if atLeast11 then - let - target = - optionalString (profiledCompiler) "profiled" - + optionalString ( - (lib.systems.equals targetPlatform hostPlatform) - && (lib.systems.equals hostPlatform buildPlatform) - && !disableBootstrap - ) "bootstrap"; - in - optional (target != "") target - else - optional ( - (lib.systems.equals targetPlatform hostPlatform) && (lib.systems.equals hostPlatform buildPlatform) - ) (if profiledCompiler then "profiledbootstrap" else "bootstrap"); + let + target = + optionalString (profiledCompiler) "profiled" + + optionalString ( + (lib.systems.equals targetPlatform hostPlatform) + && (lib.systems.equals hostPlatform buildPlatform) + && !disableBootstrap + ) "bootstrap"; + in + optional (target != "") target; inherit (callFile ./common/strip-attributes.nix { }) stripDebugList @@ -421,8 +414,7 @@ pipe ; isGNU = true; hardeningUnsupportedFlags = - optional (!atLeast11) "zerocallusedregs" - ++ optionals (!atLeast12) [ + optionals (!atLeast12) [ "fortify3" "trivialautovarinit" ] @@ -452,36 +444,25 @@ pipe platforms teams ; - } - // optionalAttrs (!atLeast11) { - badPlatforms = [ "aarch64-darwin" ]; - } - // optionalAttrs is10 { - badPlatforms = - if (!lib.systems.equals targetPlatform hostPlatform) then [ "aarch64-darwin" ] else [ ]; }; } // optionalAttrs enableMultilib { dontMoveLib64 = true; } )) - ( - [ - (callPackage ./common/libgcc.nix { - inherit - version - langC - langCC - langJit - targetPlatform - hostPlatform - withoutTargetLibc - enableShared - libcCross - ; - }) - ] - ++ optionals atLeast11 [ - (callPackage ./common/checksum.nix { inherit langC langCC; }) - ] - ) + ([ + (callPackage ./common/libgcc.nix { + inherit + version + langC + langCC + langJit + targetPlatform + hostPlatform + withoutTargetLibc + enableShared + libcCross + ; + }) + (callPackage ./common/checksum.nix { inherit langC langCC; }) + ]) diff --git a/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch deleted file mode 100644 index d9809e828f10..000000000000 --- a/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch +++ /dev/null @@ -1,306 +0,0 @@ -From 86f2f767ddffd9f7c6f1470b987ae7b0d251b988 Mon Sep 17 00:00:00 2001 -From: Liu Hao -Date: Wed, 25 Apr 2018 21:54:19 +0800 -Subject: [PATCH] Added 'mcf' thread model support from mcfgthread. - -Signed-off-by: Liu Hao ---- - config/gthr.m4 | 1 + - gcc/config.gcc | 3 +++ - gcc/config/i386/mingw-mcfgthread.h | 1 + - gcc/config/i386/mingw-w64.h | 2 +- - gcc/config/i386/mingw32.h | 11 ++++++++++- - gcc/configure | 2 +- - gcc/configure.ac | 2 +- - libatomic/configure.tgt | 2 +- - libgcc/config.host | 6 ++++++ - libgcc/config/i386/gthr-mcf.h | 1 + - libgcc/config/i386/t-mingw-mcfgthread | 2 ++ - libgcc/configure | 1 + - libstdc++-v3/configure | 1 + - libstdc++-v3/libsupc++/atexit_thread.cc | 18 ++++++++++++++++++ - libstdc++-v3/libsupc++/guard.cc | 23 +++++++++++++++++++++++ - libstdc++-v3/src/c++11/thread.cc | 9 +++++++++ - 16 files changed, 80 insertions(+), 5 deletions(-) - create mode 100644 gcc/config/i386/mingw-mcfgthread.h - create mode 100644 libgcc/config/i386/gthr-mcf.h - create mode 100644 libgcc/config/i386/t-mingw-mcfgthread - -diff --git a/config/gthr.m4 b/config/gthr.m4 -index 7b29f1f3327..82e21fe1709 100644 ---- a/config/gthr.m4 -+++ b/config/gthr.m4 -@@ -21,6 +21,7 @@ case $1 in - tpf) thread_header=config/s390/gthr-tpf.h ;; - vxworks) thread_header=config/gthr-vxworks.h ;; - win32) thread_header=config/i386/gthr-win32.h ;; -+ mcf) thread_header=config/i386/gthr-mcf.h ;; - esac - AC_SUBST(thread_header) - ]) -diff --git a/gcc/config.gcc b/gcc/config.gcc -index 46a9029acec..112c24e95a3 100644 ---- a/gcc/config.gcc -+++ b/gcc/config.gcc -@@ -1758,6 +1758,9 @@ i[34567]86-*-mingw* | x86_64-*-mingw*) - if test x$enable_threads = xposix ; then - tm_file="${tm_file} i386/mingw-pthread.h" - fi -+ if test x$enable_threads = xmcf ; then -+ tm_file="${tm_file} i386/mingw-mcfgthread.h" -+ fi - tm_file="${tm_file} i386/mingw32.h" - # This makes the logic if mingw's or the w64 feature set has to be used - case ${target} in -diff --git a/gcc/config/i386/mingw-mcfgthread.h b/gcc/config/i386/mingw-mcfgthread.h -new file mode 100644 -index 00000000000..ec381a7798f ---- /dev/null -+++ b/gcc/config/i386/mingw-mcfgthread.h -@@ -0,0 +1 @@ -+#define TARGET_USE_MCFGTHREAD 1 -diff --git a/gcc/config/i386/mingw-w64.h b/gcc/config/i386/mingw-w64.h -index 484dc7a9e9f..a15bbeea500 100644 ---- a/gcc/config/i386/mingw-w64.h -+++ b/gcc/config/i386/mingw-w64.h -@@ -48,7 +48,7 @@ along with GCC; see the file COPYING3. If not see - "%{mwindows:-lgdi32 -lcomdlg32} " \ - "%{fvtable-verify=preinit:-lvtv -lpsapi; \ - fvtable-verify=std:-lvtv -lpsapi} " \ -- "-ladvapi32 -lshell32 -luser32 -lkernel32" -+ LIB_MCFGTHREAD "-ladvapi32 -lshell32 -luser32 -lkernel32" - - #undef SPEC_32 - #undef SPEC_64 -diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h -index 0612b87199a..76cea94f3b7 100644 ---- a/gcc/config/i386/mingw32.h -+++ b/gcc/config/i386/mingw32.h -@@ -32,6 +32,14 @@ along with GCC; see the file COPYING3. If not see - | MASK_STACK_PROBE | MASK_ALIGN_DOUBLE \ - | MASK_MS_BITFIELD_LAYOUT) - -+#ifndef TARGET_USE_MCFGTHREAD -+#define CPP_MCFGTHREAD() ((void)0) -+#define LIB_MCFGTHREAD "" -+#else -+#define CPP_MCFGTHREAD() (builtin_define("__USING_MCFGTHREAD__")) -+#define LIB_MCFGTHREAD " -lmcfgthread " -+#endif -+ - /* See i386/crtdll.h for an alternative definition. _INTEGRAL_MAX_BITS - is for compatibility with native compiler. */ - #define EXTRA_OS_CPP_BUILTINS() \ -@@ -50,6 +58,7 @@ along with GCC; see the file COPYING3. If not see - builtin_define_std ("WIN64"); \ - builtin_define ("_WIN64"); \ - } \ -+ CPP_MCFGTHREAD(); \ - } \ - while (0) - -@@ -93,7 +102,7 @@ along with GCC; see the file COPYING3. If not see - "%{mwindows:-lgdi32 -lcomdlg32} " \ - "%{fvtable-verify=preinit:-lvtv -lpsapi; \ - fvtable-verify=std:-lvtv -lpsapi} " \ -- "-ladvapi32 -lshell32 -luser32 -lkernel32" -+ LIB_MCFGTHREAD "-ladvapi32 -lshell32 -luser32 -lkernel32" - - /* Weak symbols do not get resolved if using a Windows dll import lib. - Make the unwind registration references strong undefs. */ -diff --git a/gcc/configure b/gcc/configure -index 6121e163259..52f0e00efe6 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -11693,7 +11693,7 @@ case ${enable_threads} in - target_thread_file='single' - ;; - aix | dce | lynx | mipssde | posix | rtems | \ -- single | tpf | vxworks | win32) -+ single | tpf | vxworks | win32 | mcf) - target_thread_file=${enable_threads} - ;; - *) -diff --git a/gcc/configure.ac b/gcc/configure.ac -index b066cc609e1..4ecdba88de7 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -1612,7 +1612,7 @@ case ${enable_threads} in - target_thread_file='single' - ;; - aix | dce | lynx | mipssde | posix | rtems | \ -- single | tpf | vxworks | win32) -+ single | tpf | vxworks | win32 | mcf) - target_thread_file=${enable_threads} - ;; - *) -diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt -index ea8c34f8c71..23134ad7363 100644 ---- a/libatomic/configure.tgt -+++ b/libatomic/configure.tgt -@@ -145,7 +145,7 @@ case "${target}" in - *-*-mingw*) - # OS support for atomic primitives. - case ${target_thread_file} in -- win32) -+ win32 | mcf) - config_path="${config_path} mingw" - ;; - posix) -diff --git a/libgcc/config.host b/libgcc/config.host -index 11b4acaff55..9fbd38650bd 100644 ---- a/libgcc/config.host -+++ b/libgcc/config.host -@@ -737,6 +737,9 @@ i[34567]86-*-mingw*) - posix) - tmake_file="i386/t-mingw-pthread $tmake_file" - ;; -+ mcf) -+ tmake_file="i386/t-mingw-mcfgthread $tmake_file" -+ ;; - esac - # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h - if test x$ac_cv_sjlj_exceptions = xyes; then -@@ -761,6 +764,9 @@ x86_64-*-mingw*) - posix) - tmake_file="i386/t-mingw-pthread $tmake_file" - ;; -+ mcf) -+ tmake_file="i386/t-mingw-mcfgthread $tmake_file" -+ ;; - esac - # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h - if test x$ac_cv_sjlj_exceptions = xyes; then -diff --git a/libgcc/config/i386/gthr-mcf.h b/libgcc/config/i386/gthr-mcf.h -new file mode 100644 -index 00000000000..5ea2908361f ---- /dev/null -+++ b/libgcc/config/i386/gthr-mcf.h -@@ -0,0 +1 @@ -+#include -diff --git a/libgcc/config/i386/t-mingw-mcfgthread b/libgcc/config/i386/t-mingw-mcfgthread -new file mode 100644 -index 00000000000..4b9b10e32d6 ---- /dev/null -+++ b/libgcc/config/i386/t-mingw-mcfgthread -@@ -0,0 +1,2 @@ -+SHLIB_PTHREAD_CFLAG = -+SHLIB_PTHREAD_LDFLAG = -lmcfgthread -diff --git a/libgcc/configure b/libgcc/configure -index b2f3f870844..eff889dc3b3 100644 ---- a/libgcc/configure -+++ b/libgcc/configure -@@ -5451,6 +5451,7 @@ case $target_thread_file in - tpf) thread_header=config/s390/gthr-tpf.h ;; - vxworks) thread_header=config/gthr-vxworks.h ;; - win32) thread_header=config/i386/gthr-win32.h ;; -+ mcf) thread_header=config/i386/gthr-mcf.h ;; - esac - - -diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure -index ba094be6f15..979a5ab9ace 100755 ---- a/libstdc++-v3/configure -+++ b/libstdc++-v3/configure -@@ -15187,6 +15187,7 @@ case $target_thread_file in - tpf) thread_header=config/s390/gthr-tpf.h ;; - vxworks) thread_header=config/gthr-vxworks.h ;; - win32) thread_header=config/i386/gthr-win32.h ;; -+ mcf) thread_header=config/i386/gthr-mcf.h ;; - esac - - -diff --git a/libstdc++-v3/libsupc++/atexit_thread.cc b/libstdc++-v3/libsupc++/atexit_thread.cc -index de920d714c6..665fb74bd6b 100644 ---- a/libstdc++-v3/libsupc++/atexit_thread.cc -+++ b/libstdc++-v3/libsupc++/atexit_thread.cc -@@ -25,6 +25,22 @@ - #include - #include - #include "bits/gthr.h" -+ -+#ifdef __USING_MCFGTHREAD__ -+ -+#include -+ -+extern "C" int -+__cxxabiv1::__cxa_thread_atexit (void (*dtor)(void *), -+ void *obj, void *dso_handle) -+ _GLIBCXX_NOTHROW -+{ -+ return ::_MCFCRT_AtThreadExit((void (*)(_MCFCRT_STD intptr_t))dtor, (_MCFCRT_STD intptr_t)obj) ? 0 : -1; -+ (void)dso_handle; -+} -+ -+#else // __USING_MCFGTHREAD__ -+ - #ifdef _GLIBCXX_THREAD_ATEXIT_WIN32 - #define WIN32_LEAN_AND_MEAN - #include -@@ -167,3 +183,5 @@ __cxxabiv1::__cxa_thread_atexit (void (*dtor)(void *), void *obj, void */*dso_ha - } - - #endif /* _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL */ -+ -+#endif // __USING_MCFGTHREAD__ -diff --git a/libstdc++-v3/libsupc++/guard.cc b/libstdc++-v3/libsupc++/guard.cc -index 3a2ec3ad0d6..8b4cc96199b 100644 ---- a/libstdc++-v3/libsupc++/guard.cc -+++ b/libstdc++-v3/libsupc++/guard.cc -@@ -28,6 +28,27 @@ - #include - #include - #include -+ -+#ifdef __USING_MCFGTHREAD__ -+ -+#include -+ -+namespace __cxxabiv1 { -+ -+extern "C" int __cxa_guard_acquire(__guard *g){ -+ return ::_MCFCRT_WaitForOnceFlagForever((::_MCFCRT_OnceFlag *)g) == ::_MCFCRT_kOnceResultInitial; -+} -+extern "C" void __cxa_guard_abort(__guard *g) throw() { -+ ::_MCFCRT_SignalOnceFlagAsAborted((::_MCFCRT_OnceFlag *)g); -+} -+extern "C" void __cxa_guard_release(__guard *g) throw() { -+ ::_MCFCRT_SignalOnceFlagAsFinished((::_MCFCRT_OnceFlag *)g); -+} -+ -+} -+ -+#else // __USING_MCFGTHREAD__ -+ - #include - #include - #include -@@ -425,3 +446,5 @@ namespace __cxxabiv1 - #endif - } - } -+ -+#endif -diff --git a/libstdc++-v3/src/c++11/thread.cc b/libstdc++-v3/src/c++11/thread.cc -index 8238817c2e9..0c6a1f85f6f 100644 ---- a/libstdc++-v3/src/c++11/thread.cc -+++ b/libstdc++-v3/src/c++11/thread.cc -@@ -55,6 +55,15 @@ static inline int get_nprocs() - #elif defined(_GLIBCXX_USE_SC_NPROC_ONLN) - # include - # define _GLIBCXX_NPROCS sysconf(_SC_NPROC_ONLN) -+#elif defined(_WIN32) -+# include -+static inline int get_nprocs() -+{ -+ SYSTEM_INFO sysinfo; -+ GetSystemInfo(&sysinfo); -+ return (int)sysinfo.dwNumberOfProcessors; -+} -+# define _GLIBCXX_NPROCS get_nprocs() - #else - # define _GLIBCXX_NPROCS 0 - #endif --- -2.17.0 - diff --git a/pkgs/development/compilers/gcc/patches/clang-genconditions.patch b/pkgs/development/compilers/gcc/patches/clang-genconditions.patch deleted file mode 100644 index 655afd2abbc2..000000000000 --- a/pkgs/development/compilers/gcc/patches/clang-genconditions.patch +++ /dev/null @@ -1,34 +0,0 @@ -From https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92061#c5 - ---- a/gcc/genconditions.c 2019-01-01 12:37:19.064943662 +0100 -+++ b/gcc/genconditions.c 2019-10-11 10:57:11.464595789 +0200 -@@ -57,8 +57,9 @@ write_header (void) - \n\ - /* It is necessary, but not entirely safe, to include the headers below\n\ - in a generator program. As a defensive measure, don't do so when the\n\ -- table isn't going to have anything in it. */\n\ --#if GCC_VERSION >= 3001\n\ -+ table isn't going to have anything in it.\n\ -+ Clang 9 is buggy and doesn't handle __builtin_constant_p correctly. */\n\ -+#if GCC_VERSION >= 3001 && __clang_major__ < 9\n\ - \n\ - /* Do not allow checking to confuse the issue. */\n\ - #undef CHECKING_P\n\ -@@ -170,7 +171,7 @@ struct c_test\n\ - vary at run time. It works in 3.0.1 and later; 3.0 only when not\n\ - optimizing. */\n\ - \n\ --#if GCC_VERSION >= 3001\n\ -+#if GCC_VERSION >= 3001 && __clang_major__ < 9\n\ - static const struct c_test insn_conditions[] = {\n"); - - traverse_c_tests (write_one_condition, 0); -@@ -191,7 +192,7 @@ write_writer (void) - " unsigned int i;\n" - " const char *p;\n" - " puts (\"(define_conditions [\");\n" -- "#if GCC_VERSION >= 3001\n" -+ "#if GCC_VERSION >= 3001 && __clang_major__ < 9\n" - " for (i = 0; i < ARRAY_SIZE (insn_conditions); i++)\n" - " {\n" - " printf (\" (%d \\\"\", insn_conditions[i].value);\n" diff --git a/pkgs/development/compilers/gcc/patches/default.nix b/pkgs/development/compilers/gcc/patches/default.nix index f0bb8d5b7c75..27f1230f3558 100644 --- a/pkgs/development/compilers/gcc/patches/default.nix +++ b/pkgs/development/compilers/gcc/patches/default.nix @@ -31,13 +31,11 @@ let atLeast14 = lib.versionAtLeast version "14"; atLeast13 = lib.versionAtLeast version "13"; atLeast12 = lib.versionAtLeast version "12"; - atLeast11 = lib.versionAtLeast version "11"; is15 = majorVersion == "15"; is14 = majorVersion == "14"; is13 = majorVersion == "13"; is12 = majorVersion == "12"; is11 = majorVersion == "11"; - is10 = majorVersion == "10"; # We only apply these patches when building a native toolchain for # aarch64-darwin, as it breaks building a foreign one: @@ -96,7 +94,6 @@ in ./12/mangle-NIX_STORE-in-__FILE__.patch ]; "11" = [ ./no-sys-dirs-riscv.patch ]; - "10" = [ ./no-sys-dirs-riscv.patch ]; } ."${majorVersion}" or [ ] ) @@ -266,16 +263,6 @@ in # Needed to build LLVM>18 ./cfi_startproc-reorder-label-2.diff ]; - "10" = [ - (fetchpatch { - # There are no upstream release tags in https://github.com/iains/gcc-10-branch. - # d04fe55 is the commit from https://github.com/gcc-mirror/gcc/releases/tag/releases%2Fgcc-10.5.0 - url = "https://github.com/iains/gcc-10-branch/compare/d04fe5541c53cb16d1ca5c80da044b4c7633dbc6...gcc-10-5Dr0-pre-0.diff"; - hash = "sha256-kVUHZKtYqkWIcqxHG7yAOR2B60w4KWLoxzaiFD/FWYk="; - }) - # Needed to build LLVM>18 - ./cfi_startproc-reorder-label-2.diff - ]; } .${majorVersion} or [ ] ) @@ -306,27 +293,3 @@ in url = "https://github.com/gcc-mirror/gcc/commit/d243f4009d8071b734df16cd70f4c5d09a373769.patch"; sha256 = "sha256-H97GZs2wwzfFGiFOgds/5KaweC+luCsWX3hRFf7+Sm4="; }) - -## gcc 10.0 and older ############################################################################## - -# Probably needed for gnat wrapper https://github.com/NixOS/nixpkgs/pull/62314 -++ optional (langAda && is10) ./gnat-cflags.patch -++ - # Backport native aarch64-darwin compilation fix from gcc12 - # https://github.com/NixOS/nixpkgs/pull/167595 - optional - ( - is10 - && buildPlatform.system == "aarch64-darwin" - && (!lib.systems.equals targetPlatform buildPlatform) - ) - (fetchpatch { - name = "0008-darwin-aarch64-self-host-driver.patch"; - url = "https://github.com/gcc-mirror/gcc/commit/834c8749ced550af3f17ebae4072fb7dfb90d271.diff"; - sha256 = "sha256-XtykrPd5h/tsnjY1wGjzSOJ+AyyNLsfnjuOZ5Ryq9vA="; - }) - -# Fix undefined symbol errors when building older versions with clang -++ optional ( - !atLeast11 && stdenv.cc.isClang && stdenv.hostPlatform.isDarwin -) ./clang-genconditions.patch diff --git a/pkgs/development/compilers/gcc/patches/gnat-cflags.patch b/pkgs/development/compilers/gcc/patches/gnat-cflags.patch deleted file mode 100644 index a16266bbf39c..000000000000 --- a/pkgs/development/compilers/gcc/patches/gnat-cflags.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in -index 4e74252bd74..0d848b5b4e3 100644 ---- a/gcc/ada/gcc-interface/Makefile.in -+++ b/gcc/ada/gcc-interface/Makefile.in -@@ -111,7 +111,7 @@ NO_OMIT_ADAFLAGS = -fno-omit-frame-pointer - NO_SIBLING_ADAFLAGS = -fno-optimize-sibling-calls - NO_REORDER_ADAFLAGS = -fno-toplevel-reorder - GNATLIBFLAGS = -W -Wall -gnatpg -nostdinc --GNATLIBCFLAGS = -g -O2 -+GNATLIBCFLAGS = -g -O2 $(CFLAGS_FOR_TARGET) - # Pretend that _Unwind_GetIPInfo is available for the target by default. This - # should be autodetected during the configuration of libada and passed down to - # here, but we need something for --disable-libada and hope for the best. -@@ -198,7 +198,7 @@ RTSDIR = rts$(subst /,_,$(MULTISUBDIR)) - # Link flags used to build gnat tools. By default we prefer to statically - # link with libgcc to avoid a dependency on shared libgcc (which is tricky - # to deal with as it may conflict with the libgcc provided by the system). --GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc -+GCC_LINK_FLAGS=-static-libstdc++ -static-libgcc $(CFLAGS_FOR_TARGET) - - # End of variables for you to override. - -diff --git a/libada/Makefile.in b/libada/Makefile.in -index 522b9207326..ca866c74471 100644 ---- a/libada/Makefile.in -+++ b/libada/Makefile.in -@@ -59,7 +59,7 @@ LDFLAGS= - CFLAGS=-g - PICFLAG = @PICFLAG@ - GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc --GNATLIBCFLAGS= -g -O2 -+GNATLIBCFLAGS= -g -O2 $(CFLAGS) - GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(CFLAGS_FOR_TARGET) \ - -fexceptions -DIN_RTS @have_getipinfo@ @have_capability@ - diff --git a/pkgs/development/compilers/gcc/versions.nix b/pkgs/development/compilers/gcc/versions.nix index 25e20d6f1cea..5c25ad3bc215 100644 --- a/pkgs/development/compilers/gcc/versions.nix +++ b/pkgs/development/compilers/gcc/versions.nix @@ -5,7 +5,6 @@ let "13" = "13.4.0"; "12" = "12.4.0"; "11" = "11.5.0"; - "10" = "10.5.0"; }; fromMajorMinor = majorMinorVersion: majorMinorToVersionMap."${majorMinorVersion}"; @@ -21,7 +20,6 @@ let "13.4.0" = "sha256-nEzm27BAVo/cVFWIrAPFy8lajb8MeqSQFwhDr7WcqPU="; "12.4.0" = "sha256-cE9lJgTMvMsUvavzR4yVEciXiLEss7v/3tNzQZFqkXU="; "11.5.0" = "sha256-puIYaOrVRc+H8MAfhCduS1KB1nIJhZHByJYkHwk2NHg="; - "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; } ."${version}"; diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 80aea71c2600..a2a06875ae4f 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -950,8 +950,9 @@ mapAliases { gcc8Stdenv = throw "gcc8Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20 gcc9 = throw "gcc9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 gcc9Stdenv = throw "gcc9Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 - gcc10StdenvCompat = - if stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "11" then gcc10Stdenv else stdenv; # Added 2024-03-21 + gcc10 = throw "gcc10 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 + gcc10Stdenv = throw "gcc10Stdenv has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 + gcc10StdenvCompat = throw "gcc10StdenvCompat has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 gcc-arm-embedded-6 = throw "gcc-arm-embedded-6 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12 gcc-arm-embedded-7 = throw "gcc-arm-embedded-7 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12 gcc-arm-embedded-8 = throw "gcc-arm-embedded-8 has been removed from Nixpkgs as it is unmaintained and obsolete"; # Added 2025-04-12 @@ -971,6 +972,7 @@ mapAliases { gfortran7 = throw "gfortran7 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20 gfortran8 = throw "gfortran8 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-11-20 gfortran9 = throw "gfortran9 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 + gfortran10 = throw "gfortran10 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2025-08-08 gg = go-graft; # Added 2025-03-07 ggobi = throw "'ggobi' has been removed from Nixpkgs, as it is unmaintained and broken"; # Added 2025-05-18 ghostwriter = makePlasma5Throw "ghostwriter"; # Added 2023-03-18 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c8cbe66897b4..aae38a0069d5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4861,7 +4861,6 @@ with pkgs; extraBuildInputs = lib.optional stdenv.hostPlatform.isDarwin clang.cc; }; - gcc10Stdenv = overrideCC gccStdenv buildPackages.gcc10; gcc11Stdenv = overrideCC gccStdenv buildPackages.gcc11; gcc12Stdenv = overrideCC gccStdenv buildPackages.gcc12; gcc13Stdenv = overrideCC gccStdenv buildPackages.gcc13; @@ -4965,7 +4964,6 @@ with pkgs; }); inherit (callPackage ../development/compilers/gcc/all.nix { inherit noSysDirs; }) - gcc10 gcc11 gcc12 gcc13