about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers')
-rw-r--r--nixpkgs/pkgs/development/compilers/acme/default.nix2
-rw-r--r--nixpkgs/pkgs/development/compilers/august/default.nix30
-rw-r--r--nixpkgs/pkgs/development/compilers/bigloo/default.nix10
-rw-r--r--nixpkgs/pkgs/development/compilers/circt/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh28
-rw-r--r--nixpkgs/pkgs/development/compilers/elm/default.nix9
-rw-r--r--nixpkgs/pkgs/development/compilers/elm/packages/elm-test.nix32
-rw-r--r--nixpkgs/pkgs/development/compilers/erg/default.nix6
-rw-r--r--nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/default.nix45
-rw-r--r--nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/flutter/wrapper.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/fstar/default.nix8
-rw-r--r--nixpkgs/pkgs/development/compilers/gambit/build.nix13
-rw-r--r--nixpkgs/pkgs/development/compilers/gambit/gambit-support.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/gambit/unstable.nix12
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/10/default.nix299
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/11/default.nix313
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/11/fix-struct-redefinition-on-glibc-2.36.patch41
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/12/default.nix359
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/13/default.nix353
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/4.8/default.nix327
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix354
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/6/default.nix372
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/7/default.nix306
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/8/default.nix281
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/9/default.nix296
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/builder.sh290
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/common/builder.nix284
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/common/libgcc-buildstuff.nix37
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/common/libgcc.nix14
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/common/pre-configure.nix49
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/default.nix457
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/11/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/11/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/11/avr-gcc-11.3-darwin.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/11/avr-gcc-11.3-darwin.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/11/gcc-issue-103910.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/11/gcc-issue-103910.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/12/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/12/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/12/lambda-ICE-PR109241.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/12/lambda-ICE-PR109241.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/13/no-sys-dirs-riscv.patch13
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/4.9/libsanitizer.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/4.9/libsanitizer.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/4.9/parallel-strsignal.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/4.9/parallel-strsignal.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/6/0001-Fix-build-for-glibc-2.31.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/6/0001-Fix-build-for-glibc-2.31.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/6/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/6/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/6/fix-objdump-check.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/6/fix-objdump-check.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/6/gnat-glibc234.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/6/gnat-glibc234.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/6/gogcc-workaround-glibc-2.36.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/6/gogcc-workaround-glibc-2.36.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/7/0001-Fix-build-for-glibc-2.31.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/7/0001-Fix-build-for-glibc-2.31.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/7/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/7/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/7/gcc8-asan-glibc-2.34.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/7/riscv-no-relax.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/7/riscv-no-relax.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/7/riscv-pthread-reentrant.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/7/riscv-pthread-reentrant.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/9/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/9/Added-mcf-thread-model-support-from-mcfgthread.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/9/avoid-cycling-subreg-reloads.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/9/avoid-cycling-subreg-reloads.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/9/fix-struct-redefinition-on-glibc-2.36.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/9/fix-struct-redefinition-on-glibc-2.36.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/9/gcc9-asan-glibc-2.34.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/ada-cctools-as-detection-configure.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/ada-cctools-as-detection-configure.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/default.nix245
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/fix-bug-80431.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/fix-bug-80431.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gcc-12-gfortran-driving.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gcc-12-gfortran-driving.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gcc-12-no-sys-dirs.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gcc-12-no-sys-dirs.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gfortran-darwin-NXConstStr.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gfortran-darwin-NXConstStr.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gfortran-driving.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gfortran-driving.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gnat-cflags-11.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gnat-cflags-11.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gnat-cflags.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gnat-cflags.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/gnat-darwin-dylib-install-name.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/gnat-darwin-dylib-install-name.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/libgomp-dont-force-initial-exec.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/libgomp-dont-force-initial-exec.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/libphobos.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/libphobos.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades-9.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/libsanitizer-no-cyclades-9.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/libsanitizer-no-cyclades.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/libstdc++-netbsd-ctypes.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/libstdc++-netbsd-ctypes.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/libstdc++-target.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/libstdc++-target.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv-gcc9.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs-riscv-gcc9.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs-riscv.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/parallel-bconfig.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/parallel-bconfig.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/ppc-musl.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/ppc-musl.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/res_state-not-declared.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/res_state-not-declared.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/sigsegv-not-declared.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/sigsegv-not-declared.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/struct-sigaltstack-4.9.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/struct-sigaltstack-4.9.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/struct-sigaltstack.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/struct-sigaltstack.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-4.5.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-4.5.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-4.8.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-4.8.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-libjava.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-libjava.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/struct-ucontext.patch)0
-rwxr-xr-xnixpkgs/pkgs/development/compilers/gcc/patches/update-mcfgthread-patches.sh (renamed from nixpkgs/pkgs/development/compilers/gcc/update-mcfgthread-patches.sh)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcc/patches/use-source-date-epoch.patch (renamed from nixpkgs/pkgs/development/compilers/gcc/use-source-date-epoch.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/gcl/2.6.13-pre.nix2
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/build.nix6
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/ftw.nix27
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-crypto.nix31
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-ethereum.nix55
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-libp2p.nix34
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-persist.nix34
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-poo.nix35
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-support.nix162
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/gerbil-utils.nix29
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/glow-lang.nix55
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/smug-gerbil.nix35
-rw-r--r--nixpkgs/pkgs/development/compilers/gerbil/unstable.nix8
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix1
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/8.10.7.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/8.8.4.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.0.2.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.2.4-binary.nix1
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.2.4.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.2.5.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.2.6.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.2.7.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.2.8.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.4.2.nix20
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.4.3.nix20
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.4.4.nix11
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.4.5.nix11
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.4.6-bytestring-posix-source.patch15
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/9.4.6.nix392
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch (renamed from nixpkgs/pkgs/development/compilers/ghc/Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/ghc/common-hadrian.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/go/1.18.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/go/1.19.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/go/1.20.nix7
-rw-r--r--nixpkgs/pkgs/development/compilers/go/1.21.nix183
-rw-r--r--nixpkgs/pkgs/development/compilers/go/go_no_vendor_checks-1.21.patch23
-rw-r--r--nixpkgs/pkgs/development/compilers/jasmin-compiler/default.nix10
-rw-r--r--nixpkgs/pkgs/development/compilers/jetbrains-jdk/jcef.nix16
-rw-r--r--nixpkgs/pkgs/development/compilers/ligo/2706.diff58
-rw-r--r--nixpkgs/pkgs/development/compilers/ligo/default.nix8
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/10/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/11/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/12/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/13/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/14/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/5/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/6/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/8/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/9/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/git/clang/default.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/mercury/default.nix11
-rw-r--r--nixpkgs/pkgs/development/compilers/nextpnr/default.nix44
-rw-r--r--nixpkgs/pkgs/development/compilers/nim/default.nix332
-rw-r--r--nixpkgs/pkgs/development/compilers/nim/nim2.cfg.patch41
-rw-r--r--nixpkgs/pkgs/development/compilers/odin/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/11.nix24
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/16.nix24
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/17.nix37
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/18.nix37
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/19.nix37
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/20.nix37
-rw-r--r--nixpkgs/pkgs/development/compilers/openjdk/darwin/8.nix24
-rw-r--r--nixpkgs/pkgs/development/compilers/rust/1_71.nix (renamed from nixpkgs/pkgs/development/compilers/rust/1_70.nix)32
-rw-r--r--nixpkgs/pkgs/development/compilers/rust/binary.nix2
-rw-r--r--nixpkgs/pkgs/development/compilers/rust/cargo-auditable.nix6
-rw-r--r--nixpkgs/pkgs/development/compilers/rust/default.nix2
-rw-r--r--nixpkgs/pkgs/development/compilers/rust/rustc.nix5
-rw-r--r--nixpkgs/pkgs/development/compilers/swift/compiler/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/tinygo/default.nix22
-rw-r--r--nixpkgs/pkgs/development/compilers/tvm/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/unison/default.nix9
-rw-r--r--nixpkgs/pkgs/development/compilers/yosys/default.nix4
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/0.10.nix3
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/0.11.nix1
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/0.9.nix (renamed from nixpkgs/pkgs/development/compilers/zig/0.9.1.nix)6
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/000-0.9-read-dynstr-at-rpath-offset.patch (renamed from nixpkgs/pkgs/development/compilers/zig/rpath.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/001-0.9-bump-macos-supported-version.patch (renamed from nixpkgs/pkgs/development/compilers/zig/ventura.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/002-0.10-macho-fixes.patch (renamed from nixpkgs/pkgs/development/compilers/zig/zig_14559.patch)0
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/generic.nix9
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/hook.nix8
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/setup-hook.sh2
-rw-r--r--nixpkgs/pkgs/development/compilers/zig/shell-completions.nix39
171 files changed, 2783 insertions, 4301 deletions
diff --git a/nixpkgs/pkgs/development/compilers/acme/default.nix b/nixpkgs/pkgs/development/compilers/acme/default.nix
index 9aadbd2459bf..3f8110b5b5a4 100644
--- a/nixpkgs/pkgs/development/compilers/acme/default.nix
+++ b/nixpkgs/pkgs/development/compilers/acme/default.nix
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "1dzvip90yf1wg0fhfghn96dwrhg289d06b624px9a2wwy3vp5ryg";
   };
 
-  sourceRoot = "code-0-r${src.rev}/src";
+  sourceRoot = "${src.name}/src";
 
   postPatch = ''
     substituteInPlace Makefile \
diff --git a/nixpkgs/pkgs/development/compilers/august/default.nix b/nixpkgs/pkgs/development/compilers/august/default.nix
new file mode 100644
index 000000000000..4dcb9038f078
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/august/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "august";
+  version = "unstable-2023-08-13";
+
+  src = fetchFromGitHub {
+    owner = "yoav-lavi";
+    repo = "august";
+    rev = "42b8a1bf5ca079aca1769d92315f70b193a9cd4a";
+    hash = "sha256-58DZMoRH9PBbM4sok/XbUcwSXBeqUAmFZpffdMKQ+dE=";
+  };
+
+  cargoHash = "sha256-/GvBbsSL0dZ0xTystIpb8sk1nNg5hmP4yceCHlh7EQE=";
+
+  postInstall = ''
+    mv $out/bin/{august-cli,ag}
+  '';
+
+  meta = with lib; {
+    description = "An Emmet-like language that produces JSON, TOML, or YAML";
+    homepage = "https://github.com/yoav-lavi/august";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ag";
+  };
+}
diff --git a/nixpkgs/pkgs/development/compilers/bigloo/default.nix b/nixpkgs/pkgs/development/compilers/bigloo/default.nix
index 759a8aaeaa60..9bf22ba6dcf2 100644
--- a/nixpkgs/pkgs/development/compilers/bigloo/default.nix
+++ b/nixpkgs/pkgs/development/compilers/bigloo/default.nix
@@ -45,8 +45,14 @@ stdenv.mkDerivation rec {
 
   checkTarget = "test";
 
-  # Hack to avoid TMPDIR in RPATHs.
-  preFixup = ''rm -rf "$(pwd)" '';
+  # remove forbidden references to $TMPDIR
+  preFixup = lib.optionalString stdenv.isLinux ''
+    for f in "$out"/bin/*; do
+      if isELF "$f"; then
+        patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$f"
+      fi
+    done
+  '';
 
   meta = {
     description = "Efficient Scheme compiler";
diff --git a/nixpkgs/pkgs/development/compilers/circt/default.nix b/nixpkgs/pkgs/development/compilers/circt/default.nix
index e53de0e4ee12..19765f97a174 100644
--- a/nixpkgs/pkgs/development/compilers/circt/default.nix
+++ b/nixpkgs/pkgs/development/compilers/circt/default.nix
@@ -13,12 +13,12 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "circt";
-  version = "1.49.0";
+  version = "1.51.0";
   src = fetchFromGitHub {
     owner = "llvm";
     repo = "circt";
     rev = "firtool-${version}";
-    sha256 = "sha256-pHMysxnczKilfjJafobU18/gaWnfrHMpPUd6RQ+CXSg=";
+    sha256 = "sha256-IEMIFbMBLEKgntDiRfVH6qgj9a5RLWQnKrMnl5A3AYQ=";
     fetchSubmodules = true;
   };
 
diff --git a/nixpkgs/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh b/nixpkgs/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh
index 0b0da336514a..395229ca79b7 100644
--- a/nixpkgs/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh
+++ b/nixpkgs/pkgs/development/compilers/cudatoolkit/auto-add-opengl-runpath-hook.sh
@@ -1,14 +1,24 @@
-# Run autoOpenGLRunpath on all files
+# shellcheck shell=bash
+# Run addOpenGLRunpath on all dynamically linked, ELF files
 echo "Sourcing auto-add-opengl-runpath-hook"
 
-autoAddOpenGLRunpathPhase  () {
-    # TODO: support multiple outputs
-    for file in $(find ${out,lib,bin} -type f); do
-        addOpenGLRunpath $file
-    done
-}
+autoAddOpenGLRunpathPhase() (
+  local outputPaths
+  mapfile -t outputPaths < <(for o in $(getAllOutputNames); do echo "${!o}"; done)
+  find "${outputPaths[@]}" -type f -executable -print0  | while IFS= read -rd "" f; do
+    if isELF "$f"; then
+      # patchelf returns an error on statically linked ELF files
+      if patchelf --print-interpreter "$f" >/dev/null 2>&1; then
+        echo "autoAddOpenGLRunpathHook: patching $f"
+        addOpenGLRunpath "$f"
+      elif [ -n "${DEBUG-}" ]; then
+        echo "autoAddOpenGLRunpathHook: skipping ELF file $f"
+      fi
+    fi
+  done
+)
 
 if [ -z "${dontUseAutoAddOpenGLRunpath-}" ]; then
-    echo "Using autoAddOpenGLRunpathPhase"
-    postFixupHooks+=(autoAddOpenGLRunpathPhase)
+  echo "Using autoAddOpenGLRunpathPhase"
+  postFixupHooks+=(autoAddOpenGLRunpathPhase)
 fi
diff --git a/nixpkgs/pkgs/development/compilers/elm/default.nix b/nixpkgs/pkgs/development/compilers/elm/default.nix
index 55b55b931aab..b96bd24deddb 100644
--- a/nixpkgs/pkgs/development/compilers/elm/default.nix
+++ b/nixpkgs/pkgs/development/compilers/elm/default.nix
@@ -142,14 +142,7 @@ in lib.makeScope pkgs.newScope (self: with self; {
 
   elm-test-rs = callPackage ./packages/elm-test-rs.nix { };
 
-  elm-test = nodePkgs.elm-test // {
-    meta = with lib; nodePkgs.elm-test.meta // {
-      description = "Runs elm-test suites from Node.js";
-      homepage = "https://github.com/rtfeldman/node-test-runner";
-      license = licenses.bsd3;
-      maintainers = [ maintainers.turbomack ];
-    };
-  };
+  elm-test = callPackage ./packages/elm-test.nix { };
 } // (hs810Pkgs self).elmPkgs // (hs92Pkgs self).elmPkgs // (with elmLib; with (hs810Pkgs self).elmPkgs; {
   elm-verify-examples = let
     patched = patchBinwrap [elmi-to-json] nodePkgs.elm-verify-examples // {
diff --git a/nixpkgs/pkgs/development/compilers/elm/packages/elm-test.nix b/nixpkgs/pkgs/development/compilers/elm/packages/elm-test.nix
new file mode 100644
index 000000000000..fc943a80a3fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/elm/packages/elm-test.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "elm-test";
+  version = "0.19.1-revision12";
+
+  src = fetchFromGitHub {
+    owner = "rtfeldman";
+    repo = "node-test-runner";
+    rev = version;
+    hash = "sha256-cnxAOFcPTJjtHi4VYCO9oltb5iOeDnLvRgnuJnNzjsY=";
+  };
+
+  npmDepsHash = "sha256-QljHVrmF6uBem9sW67CYduCro3BqF34EPGn1BtKqom0=";
+
+  postPatch = ''
+    sed -i '/elm-tooling install/d' package.json
+  '';
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/rtfeldman/node-test-runner/blob/${src.rev}/CHANGELOG.md";
+    description = "Runs elm-test suites from Node.js";
+    homepage = "https://github.com/rtfeldman/node-test-runner";
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ turbomack ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/compilers/erg/default.nix b/nixpkgs/pkgs/development/compilers/erg/default.nix
index 8706c05febcd..a3ed2397c8eb 100644
--- a/nixpkgs/pkgs/development/compilers/erg/default.nix
+++ b/nixpkgs/pkgs/development/compilers/erg/default.nix
@@ -9,16 +9,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "erg";
-  version = "0.6.17";
+  version = "0.6.18";
 
   src = fetchFromGitHub {
     owner = "erg-lang";
     repo = "erg";
     rev = "v${version}";
-    hash = "sha256-KHfKV0i3jYwzD/PQ0TSOlxjUnc08pk0yKrLQlg5eQvg=";
+    hash = "sha256-bpKzC7xHP4vfl2WcyMEsFK1aAbkP3dtlpyNvXUWHWKg=";
   };
 
-  cargoHash = "sha256-PD1C3IsupjyQndD971zbfHYxizOQd/t770u48o/aGmk=";
+  cargoHash = "sha256-wIp+zQpHLmZNwgbSXQKV45YwO5qpZqdcUE6gnF/Wzhk=";
 
   nativeBuildInputs = [
     makeWrapper
diff --git a/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/default.nix b/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/default.nix
index 249e9217325b..603b1456018d 100644
--- a/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/default.nix
+++ b/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/default.nix
@@ -6,13 +6,47 @@
 , fetchzip
 , autoPatchelfHook
 , gtk3
+, flutterVersion
 , unzip
+, stdenvNoCC
 }:
 
 let
   hashes = (import ./hashes.nix).${engineVersion} or
     (throw "There are no known artifact hashes for Flutter engine version ${engineVersion}.");
+  noticeText = stdenvNoCC.mkDerivation (finalAttrs: {
+    pname = "flutter-notice";
+    version = engineVersion;
+    dontUnpack = true;
+    src = fetchurl {
+      pname = "flutter-sky_engine-LICENSE";
+      version = engineVersion;
+      url = "https://raw.githubusercontent.com/flutter/engine/${engineVersion}/sky/packages/sky_engine/LICENSE";
+      sha256 = hashes.skyNotice;
+    };
+    flutterNotice = fetchurl {
+      pname = "flutter-LICENSE";
+      version = engineVersion;
+      url = "https://raw.githubusercontent.com/flutter/flutter/${flutterVersion}/LICENSE";
+      sha256 = hashes.flutterNotice;
+    };
+    installPhase =
+      ''
+        SRC_TEXT="$(cat $src)"
+        FLUTTER_NOTICE_TEXT="$(cat $flutterNotice)"
+        cat << EOF > $out
+        This artifact is from the Flutter SDK's engine.
+        This file carries third-party notices for its dependencies.
+        See also other files, that have LICENSE in the name, in the artifact directory.
+
+        Appendix 1/2: merged sky_engine LICENSE file (also found at ${finalAttrs.src.url})
+        $SRC_TEXT
 
+        Appendix 2/2: Flutter license (also found at ${finalAttrs.flutterNotice.url})
+        $FLUTTER_NOTICE_TEXT
+        EOF
+      '';
+  });
   artifacts =
     {
       common = {
@@ -165,6 +199,17 @@ let
           destination = "$out/${if subdirectory == true then archiveBasename else if subdirectory != null then subdirectory else "."}";
         in
         ''
+          # ship the notice near all artifacts. if the artifact directory is / multiple directories are nested in $src, link it there. If there isn't a directory, link it in root
+          # this *isn't the same as the subdirectory variable above*
+          DIR_CNT="$(echo */ | wc -w)"
+          if [[ "$DIR_CNT" == 0 ]]; then
+            ln -s ${noticeText} LICENSE.README
+          else
+            for dir in */
+            do
+              ln -s ${noticeText} "$dir/LICENSE.README"
+            done
+          fi
           mkdir -p "${destination}"
           cp -r . "${destination}"
         '';
diff --git a/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix b/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
index fb5134739f76..1c8a5dc4059f 100644
--- a/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
+++ b/nixpkgs/pkgs/development/compilers/flutter/engine-artifacts/hashes.nix
@@ -1,5 +1,7 @@
 {
   "1a65d409c7a1438a34d21b60bf30a6fd5db59314" = {
+    skyNotice = "sha256-+EitMZAAvJ1mIlfm5ZTfY+pk8tfyu33XM7P8qOdj+J8=";
+    flutterNotice = "sha256-pZjblLYpD/vhC17PkRBXtqlDNRxyf92p5fKJHWhwCiA=";
     android-arm = {
       "artifacts.zip" = "sha256-KDMiI6SQoZHfFV5LJJZ7VOGyEKC4UxzRc777j4BbXgM=";
     };
@@ -113,6 +115,8 @@
     };
   };
   "45f6e009110df4f34ec2cf99f63cf73b71b7a420" = {
+    skyNotice = "sha256-n9B26rLlfUqdR6s+2+PNK4H/fN95UE0T7/Vic19W6yo=";
+    flutterNotice = "sha256-pZjblLYpD/vhC17PkRBXtqlDNRxyf92p5fKJHWhwCiA=";
     android-arm = {
       "artifacts.zip" = "sha256-NOpUM+iFSPVzr99Dz0DBdDUQnMC0ad1eZnVhtqu9HnU=";
     };
diff --git a/nixpkgs/pkgs/development/compilers/flutter/wrapper.nix b/nixpkgs/pkgs/development/compilers/flutter/wrapper.nix
index 5685ddebd781..a650b1853fd4 100644
--- a/nixpkgs/pkgs/development/compilers/flutter/wrapper.nix
+++ b/nixpkgs/pkgs/development/compilers/flutter/wrapper.nix
@@ -56,7 +56,10 @@
 }:
 
 let
-  engineArtifacts = callPackage ./engine-artifacts { inherit (flutter) engineVersion; };
+  engineArtifacts = callPackage ./engine-artifacts {
+    inherit (flutter) engineVersion;
+    flutterVersion = flutter.version;
+  };
   mkCommonArtifactLinkCommand = { artifact }:
     ''
       mkdir -p $out/artifacts/engine/common
diff --git a/nixpkgs/pkgs/development/compilers/fstar/default.nix b/nixpkgs/pkgs/development/compilers/fstar/default.nix
index a21aa31ef407..ee45e1e9ab1e 100644
--- a/nixpkgs/pkgs/development/compilers/fstar/default.nix
+++ b/nixpkgs/pkgs/development/compilers/fstar/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "fstar";
-  version = "2023.02.01";
+  version = "2023.04.25";
 
   src = fetchFromGitHub {
     owner = "FStarLang";
     repo = "FStar";
     rev = "v${version}";
-    hash = "sha256-sLhbIGF7j1tH8zKsPq1qOSwHvYDrVCyfln9UbE3IYv0=";
+    hash = "sha256-LF8eXi/es337QJ2fs5u9pLqegJkh1kDLjK8p4CcSGGc=";
   };
 
   strictDeps = true;
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
     removeReferencesTo
   ] ++ (with ocamlPackages; [
     ocaml
+    dune_3
     findlib
     ocamlbuild
     menhir
@@ -45,8 +46,7 @@ stdenv.mkDerivation rec {
   enableParallelBuilding = true;
 
   postPatch = ''
-    patchShebangs ulib/gen_mllib.sh
-    substituteInPlace src/ocaml-output/Makefile --replace '$(COMMIT)' 'v${version}'
+    patchShebangs ulib/install-ulib.sh
   '';
 
   preInstall = ''
diff --git a/nixpkgs/pkgs/development/compilers/gambit/build.nix b/nixpkgs/pkgs/development/compilers/gambit/build.nix
index 9481078fd941..33391c156969 100644
--- a/nixpkgs/pkgs/development/compilers/gambit/build.nix
+++ b/nixpkgs/pkgs/development/compilers/gambit/build.nix
@@ -1,6 +1,11 @@
-{ gccStdenv, lib, git, openssl, autoconf, pkgs, makeStaticLibraries, gcc, coreutils, gnused, gnugrep,
-  src, version, git-version, stampYmd ? 0, stampHms ? 0,
-  gambit-support, optimizationSetting ? "-O1", gambit-params ? pkgs.gambit-support.stable-params }:
+{ gccStdenv, lib, pkgs,
+  git, openssl, autoconf, gcc, coreutils, gnused, gnugrep,
+  makeStaticLibraries,
+  src, version, git-version,
+  stampYmd ? 0, stampHms ? 0,
+  gambit-support,
+  optimizationSetting ? "-O1",
+  gambit-params ? pkgs.gambit-support.stable-params }:
 
 # Note that according to a benchmark run by Marc Feeley on May 2018,
 # clang is 10x (with default settings) to 15% (with -O2) slower than GCC at compiling
@@ -45,6 +50,7 @@ gccStdenv.mkDerivation rec {
     "--enable-shared"
     "--enable-absolute-shared-libs" # Yes, NixOS will want an absolute path, and fix it.
     "--enable-openssl"
+    "--enable-dynamic-clib"
     #"--enable-default-compile-options='(compactness 9)'" # Make life easier on the JS backend
     "--enable-default-runtime-options=${gambit-params.defaultRuntimeOptions}"
     # "--enable-rtlib-debug" # used by Geiser, but only on recent-enough gambit, and messes js runtime
@@ -62,6 +68,7 @@ gccStdenv.mkDerivation rec {
     # "--enable-coverage"
     # "--enable-inline-jumps"
     # "--enable-char-size=1" # default is 4
+    # "--enable-march=native" # Nope, makes it not work on machines older than the builder
   ] ++ gambit-params.extraOptions
     # Do not enable poll on darwin due to https://github.com/gambit/gambit/issues/498
     ++ lib.optional (!gccStdenv.isDarwin) "--enable-poll";
diff --git a/nixpkgs/pkgs/development/compilers/gambit/gambit-support.nix b/nixpkgs/pkgs/development/compilers/gambit/gambit-support.nix
index f78c99a50700..6e42b9252f24 100644
--- a/nixpkgs/pkgs/development/compilers/gambit/gambit-support.nix
+++ b/nixpkgs/pkgs/development/compilers/gambit/gambit-support.nix
@@ -16,12 +16,13 @@ rec {
         --replace "echo > stamp.h;" "(echo '#define ___STAMP_VERSION \"${git-version}\"'; echo '#define ___STAMP_YMD ${toString stampYmd}'; echo '#define ___STAMP_HMS ${toString stampHms}';) > stamp.h;";
     '';
     modules = true;
-    extraOptions = [];
+    #extraOptions = [];
+    extraOptions = ["--enable-trust-c-tco" "CFLAGS=-foptimize-sibling-calls"];
   };
 
   unstable-params = stable-params // {
     stable = false;
-    extraOptions = ["--enable-trust-c-tco"];
+    extraOptions = ["--enable-trust-c-tco"]; # "CFLAGS=-foptimize-sibling-calls" not necessary in latest unstable
   };
 
   export-gambopt = params : "export GAMBOPT=${params.buildRuntimeOptions} ;";
diff --git a/nixpkgs/pkgs/development/compilers/gambit/unstable.nix b/nixpkgs/pkgs/development/compilers/gambit/unstable.nix
index 26761d67d35d..092cbdb72483 100644
--- a/nixpkgs/pkgs/development/compilers/gambit/unstable.nix
+++ b/nixpkgs/pkgs/development/compilers/gambit/unstable.nix
@@ -1,15 +1,15 @@
 { callPackage, fetchFromGitHub, gambit-support }:
 
 callPackage ./build.nix {
-  version = "unstable-2023-07-30";
-  git-version = "4.9.5-3-ge059fffd";
-  stampYmd = 20230730;
-  stampHms = 151945;
+  version = "unstable-2023-08-06";
+  git-version = "4.9.5-5-gf1fbe9aa";
+  stampYmd = 20230806;
+  stampHms = 195822;
   src = fetchFromGitHub {
     owner = "gambit";
     repo = "gambit";
-    rev = "e059fffdfbd91e27c350ff2ebd671adefadd5212";
-    sha256 = "0q7hdfchl6lw53xawmmjvhyjdmqxjdsnzjqv9vpkl2qa4vyir5fs";
+    rev = "f1fbe9aa0f461e89f2a91bc050c1373ee6d66482";
+    sha256 = "0b0gd6cwj8zxwcqglpsnmanysiq4mvma2mrgdfr6qy99avhbhzxm";
   };
   gambit-params = gambit-support.unstable-params;
 }
diff --git a/nixpkgs/pkgs/development/compilers/gcc/10/default.nix b/nixpkgs/pkgs/development/compilers/gcc/10/default.nix
deleted file mode 100644
index c61093c67c03..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/10/default.nix
+++ /dev/null
@@ -1,299 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langAda ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langD ? false
-, 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
-, gnat-bootstrap ? 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
-, libxcrypt
-, callPackage
-}:
-
-# 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;
-
-# 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 = "10";
-    version = "${majorVersion}.4.0";
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches = [
-      # Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
-      ../fix-bug-80431.patch
-      ../11/fix-struct-redefinition-on-glibc-2.36.patch
-    ] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../no-sys-dirs.patch
-      ++ optional (noSysDirs && hostPlatform.isRiscV) ../no-sys-dirs-riscv.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 langAda ../gnat-cflags.patch
-      ++ optional langD ../libphobos.patch
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch
-
-      # Obtain latest patch with ../update-mcfgthread-patches.sh
-      ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch
-
-      ++ optional (buildPlatform.system == "aarch64-darwin" && targetPlatform != buildPlatform) (fetchpatch {
-        url = "https://raw.githubusercontent.com/richard-vd/musl-cross-make/5e9e87f06fc3220e102c29d3413fbbffa456fcd6/patches/gcc-${version}/0008-darwin-aarch64-self-host-driver.patch";
-        sha256 = "sha256-XtykrPd5h/tsnjY1wGjzSOJ+AyyNLsfnjuOZ5Ryq9vA=";
-      });
-
-    /* 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 gcc10.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        buildPackages
-        cloog
-        withoutTargetLibc
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnat-bootstrap
-        gnused
-        isl
-        langAda
-        langC
-        langCC
-        langD
-        langFortran
-        langGo
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libcCross
-        libmpc
-        libxcrypt
-        mpfr
-        name
-        noSysDirs
-        patchelf
-        perl
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        threadsCross
-        which
-        zip
-        zlib
-      ;
-    };
-
-in
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
-    sha256 = "1wg4xdizkksmwi66mvv2v4pk3ja8x64m7v9gzhykzd3wrmdpsaf9";
-  };
-
-  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+=(
-               '-s' # workaround for hitting hydra log limit
-               '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 { }) + ''
-    ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h
-  '';
-
-  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 langAda langFortran langGo langD version;
-    isGNU = true;
-    hardeningUnsupportedFlags = [ "fortify3" ];
-  };
-
-  enableParallelBuilding = true;
-  inherit enableMultilib enableShared;
-
-  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/nixpkgs/pkgs/development/compilers/gcc/11/default.nix b/nixpkgs/pkgs/development/compilers/gcc/11/default.nix
deleted file mode 100644
index 92abdebe49b3..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/11/default.nix
+++ /dev/null
@@ -1,313 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langAda ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langD ? false
-, 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
-, gnat-bootstrap ? 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 # unused; just for compat with gcc4, as we override the parameter on some places
-, buildPackages
-, libxcrypt
-, disableGdbPlugin ? !enablePlugin
-, nukeReferences
-, callPackage
-}:
-
-# 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;
-
-# 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 = "11";
-    version = "${majorVersion}.4.0";
-    disableBootstrap = !stdenv.hostPlatform.isDarwin;
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches = [
-      # Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
-      ../fix-bug-80431.patch
-    ] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../no-sys-dirs.patch
-      ++ optional (noSysDirs && hostPlatform.isRiscV) ../no-sys-dirs-riscv.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 langAda ../gnat-cflags-11.patch
-      ++ optional langD ../libphobos.patch
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch
-
-      ++ optionals stdenv.isDarwin [
-        (fetchpatch {
-          # There are no upstream release tags in https://github.com/iains/gcc-11-branch.
-          # ff4bf32 is the commit from https://github.com/gcc-mirror/gcc/releases/tag/releases%2Fgcc-11.4.0
-          url = "https://github.com/iains/gcc-11-branch/compare/ff4bf326d03e750a8d4905ea49425fe7d15a04b8..gcc-11.4-darwin-r0.diff";
-          hash = "sha256-6prPgR2eGVJs7vKd6iM1eZsEPCD1ShzLns2Z+29vlt4=";
-        })
-      ]
-      # https://github.com/osx-cross/homebrew-avr/issues/280#issuecomment-1272381808
-      ++ optional (stdenv.isDarwin && targetPlatform.isAvr) ./avr-gcc-11.3-darwin.patch
-
-      # Obtain latest patch with ../update-mcfgthread-patches.sh
-      ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch
-
-      # openjdk build fails without this on -march=opteron; is upstream in gcc12
-      ++ [ ./gcc-issue-103910.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 gcc11.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        buildPackages
-        cloog
-        withoutTargetLibc
-        enableLTO
-        enableMultilib
-        enablePlugin
-        disableGdbPlugin
-        enableShared
-        disableBootstrap
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnat-bootstrap
-        gnused
-        isl
-        langAda
-        langC
-        langCC
-        langD
-        langFortran
-        langGo
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libcCross
-        libmpc
-        libxcrypt
-        mpfr
-        name
-        noSysDirs
-        patchelf
-        perl
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        threadsCross
-        which
-        zip
-        zlib
-      ;
-    };
-
-in
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
-    hash = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk=";
-  };
-
-  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" ]
-    ++ optional langAda "fortify3";
-
-  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+=(
-               '-s' # workaround for hitting hydra log limit
-               '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 { }) + ''
-    ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h
-  '';
-
-  dontDisableStatic = true;
-
-  configurePlatforms = [ "build" "host" "target" ];
-
-  configureFlags = callFile ../common/configure-flags.nix { };
-
-  targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
-
-  buildFlags =
-    let target = lib.optionalString (profiledCompiler) "profiled"
-      + lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap";
-    in lib.optional (target != "") target;
-
-  # 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 langAda langFortran langGo langD version;
-    isGNU = true;
-    hardeningUnsupportedFlags = [ "fortify3" ];
-  };
-
-  enableParallelBuilding = true;
-  inherit enableShared enableMultilib;
-
-  meta = {
-    inherit (callFile ../common/meta.nix { })
-      homepage
-      license
-      description
-      longDescription
-      platforms
-      maintainers
-    ;
-  };
-}
-
-// optionalAttrs (enableMultilib) { dontMoveLib64 = true; }
-))
-[
-  (callPackage ../common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
-  (callPackage ../common/checksum.nix { inherit langC langCC; })
-]
diff --git a/nixpkgs/pkgs/development/compilers/gcc/11/fix-struct-redefinition-on-glibc-2.36.patch b/nixpkgs/pkgs/development/compilers/gcc/11/fix-struct-redefinition-on-glibc-2.36.patch
deleted file mode 100644
index 3f5f64a3d074..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/11/fix-struct-redefinition-on-glibc-2.36.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From d2356ebb0084a0d80dbfe33040c9afe938c15d19 Mon Sep 17 00:00:00 2001
-From: Martin Liska <mliska@suse.cz>
-Date: Mon, 11 Jul 2022 22:03:14 +0200
-Subject: [PATCH] libsanitizer: cherry-pick 9cf13067cb5088626ba7 from upstream
-
-9cf13067cb5088626ba7ee1ec4c42ec59c7995a0 [sanitizer] Remove #include <linux/fs.h> to resolve fsconfig_command/mount_attr conflict with glibc 2.36
-
-(cherry picked from commit 2701442d0cf6292f6624443c15813d6d1a3562fe)
----
- .../sanitizer_platform_limits_posix.cpp                | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-index 025e575b5bc7..5743516c0460 100644
---- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
-@@ -72,7 +72,9 @@
- #include <sys/vt.h>
- #include <linux/cdrom.h>
- #include <linux/fd.h>
-+#if SANITIZER_ANDROID
- #include <linux/fs.h>
-+#endif
- #include <linux/hdreg.h>
- #include <linux/input.h>
- #include <linux/ioctl.h>
-@@ -828,10 +830,10 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
-   unsigned IOCTL_EVIOCGPROP = IOCTL_NOT_PRESENT;
-   unsigned IOCTL_EVIOCSKEYCODE_V2 = IOCTL_NOT_PRESENT;
- #endif
--  unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS;
--  unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION;
--  unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS;
--  unsigned IOCTL_FS_IOC_SETVERSION = FS_IOC_SETVERSION;
-+  unsigned IOCTL_FS_IOC_GETFLAGS = _IOR('f', 1, long);
-+  unsigned IOCTL_FS_IOC_GETVERSION = _IOR('v', 1, long);
-+  unsigned IOCTL_FS_IOC_SETFLAGS = _IOW('f', 2, long);
-+  unsigned IOCTL_FS_IOC_SETVERSION = _IOW('v', 2, long);
-   unsigned IOCTL_GIO_CMAP = GIO_CMAP;
-   unsigned IOCTL_GIO_FONT = GIO_FONT;
-   unsigned IOCTL_GIO_UNIMAP = GIO_UNIMAP;
diff --git a/nixpkgs/pkgs/development/compilers/gcc/12/default.nix b/nixpkgs/pkgs/development/compilers/gcc/12/default.nix
deleted file mode 100644
index 9665c2a9fe85..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/12/default.nix
+++ /dev/null
@@ -1,359 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langAda ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langD ? false
-, 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
-, libucontext ? null
-, gnat-bootstrap ? 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 # unused; just for compat with gcc4, as we override the parameter on some places
-, buildPackages
-, libxcrypt
-, disableGdbPlugin ? !enablePlugin
-, nukeReferences
-, callPackage
-}:
-
-# 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;
-
-# TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes).
-#   error: GDC is required to build d
-assert !langD;
-
-# 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 = "12";
-    version = "${majorVersion}.3.0";
-    disableBootstrap = !stdenv.hostPlatform.isDarwin && !profiledCompiler;
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches =
-         optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../gcc-12-no-sys-dirs.patch
-      ++ optional noSysDirs ../no-sys-dirs-riscv.patch
-      ++ [
-        ../gnat-cflags-11.patch
-        ../gcc-12-gfortran-driving.patch
-        ../ppc-musl.patch
-
-        # backport ICE fix on ccache code
-        ./lambda-ICE-PR109241.patch
-      ]
-      # We only apply this patch when building a native toolchain for aarch64-darwin, as it breaks building
-      # a foreign one: https://github.com/iains/gcc-12-branch/issues/18
-      ++ optionals (stdenv.isDarwin && stdenv.isAarch64 && buildPlatform == hostPlatform && hostPlatform == targetPlatform) [
-        (fetchurl {
-          name = "gcc-12-darwin-aarch64-support.patch";
-          url = "https://raw.githubusercontent.com/Homebrew/formula-patches/f1188b90d610e2ed170b22512ff7435ba5c891e2/gcc/gcc-12.3.0.diff";
-          sha256 = "sha256-naL5ZNiurqfDBiPSU8PTbTmLqj25B+vjjiqc4fAFgYs=";
-        })
-      ] ++ optional langD ../libphobos.patch
-
-      # backport fixes to build gccgo with musl libc
-      ++ optionals (langGo && stdenv.hostPlatform.isMusl) [
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/cf79b1117bd177d3d4c6ed24b6fa243c3628ac2d.diff";
-          hash = "sha256-mS5ZiYi5D8CpGXrWg3tXlbhp4o86ew1imCTwaHLfl+I=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/7f195a2270910a6ed08bd76e3a16b0a6503f9faf.diff";
-          hash = "sha256-Ze/cFM0dQofKH00PWPDoklXUlwWhwA1nyTuiDAZ6FKo=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/762fd5e5547e464e25b4bee435db6df4eda0de90.diff";
-          hash = "sha256-o28upwTcHAnHG2Iq0OewzwSBEhHs+XpBGdIfZdT81pk=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/e73d9fcafbd07bc3714fbaf8a82db71d50015c92.diff";
-          hash = "sha256-1SjYCVHLEUihdON2TOC3Z2ufM+jf2vH0LvYtZL+c1Fo=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/b6c6a3d64f2e4e9347733290aca3c75898c44b2e.diff";
-          hash = "sha256-RycJ3YCHd3MXtYFjxP0zY2Wuw7/C4bWoBAQtTKJZPOQ=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/2b1a604a9b28fbf4f382060bebd04adb83acc2f9.diff";
-          hash = "sha256-WiBQG0Xbk75rHk+AMDvsbrm+dc7lDH0EONJXSdEeMGE=";
-        })
-        (fetchpatch {
-          url = "https://github.com/gcc-mirror/gcc/commit/c86b726c048eddc1be320c0bf64a897658bee13d.diff";
-          hash = "sha256-QSIlqDB6JRQhbj/c3ejlmbfWz9l9FurdSWxpwDebnlI=";
-        })
-      ]
-
-      # Fix detection of bootstrap compiler Ada support (cctools as) on Nix Darwin
-      ++ optional (stdenv.isDarwin && langAda) ../ada-cctools-as-detection-configure.patch
-
-      # Use absolute path in GNAT dylib install names on Darwin
-      ++ optional (stdenv.isDarwin && langAda) ../gnat-darwin-dylib-install-name.patch
-
-      # Obtain latest patch with ../update-mcfgthread-patches.sh
-      ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.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 gcc12.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        buildPackages
-        cloog
-        withoutTargetLibc
-        disableBootstrap
-        disableGdbPlugin
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnat-bootstrap
-        gnused
-        isl
-        langAda
-        langC
-        langCC
-        langD
-        langFortran
-        langGo
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libcCross
-        libmpc
-        libucontext
-        libxcrypt
-        mpfr
-        name
-        noSysDirs
-        nukeReferences
-        patchelf
-        perl
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        threadsCross
-        which
-        zip
-        zlib
-      ;
-    };
-
-in
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
-    sha256 = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs=";
-  };
-
-  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.cc \
-      --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+=(
-               '-s' # workaround for hitting hydra log limit
-               '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 { }) + ''
-    ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h
-  '';
-
-  dontDisableStatic = true;
-
-  configurePlatforms = [ "build" "host" "target" ];
-
-  configureFlags = callFile ../common/configure-flags.nix { };
-
-  targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
-
-  buildFlags =
-    # we do not yet have Nix-driven profiling
-    assert profiledCompiler -> !disableBootstrap;
-    let target =
-          lib.optionalString (profiledCompiler) "profiled" +
-          lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap";
-    in lib.optional (target != "") target;
-
-  # 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 langAda langFortran langGo langD version;
-    isGNU = true;
-  };
-
-  enableParallelBuilding = true;
-  inherit enableShared enableMultilib;
-
-  meta = {
-    inherit (callFile ../common/meta.nix { })
-      homepage
-      license
-      description
-      longDescription
-      platforms
-      maintainers
-    ;
-  };
-}
-
-// optionalAttrs (enableMultilib) { dontMoveLib64 = true; }
-))
-[
-  (callPackage ../common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
-  (callPackage ../common/checksum.nix { inherit langC langCC; })
-]
-
diff --git a/nixpkgs/pkgs/development/compilers/gcc/13/default.nix b/nixpkgs/pkgs/development/compilers/gcc/13/default.nix
deleted file mode 100644
index 1b73c251ce6f..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/13/default.nix
+++ /dev/null
@@ -1,353 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langAda ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langD ? false
-, 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
-, libucontext ? null
-, gnat-bootstrap ? 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 # unused; just for compat with gcc4, as we override the parameter on some places
-, buildPackages
-, libxcrypt
-, disableGdbPlugin ? !enablePlugin
-, nukeReferences
-, callPackage
-}:
-
-# 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;
-
-# TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes).
-#   error: GDC is required to build d
-assert !langD;
-
-# 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 = "13";
-    version = "${majorVersion}.1.0";
-    disableBootstrap = !stdenv.hostPlatform.isDarwin && !profiledCompiler;
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches =
-         optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../gcc-12-no-sys-dirs.patch
-      ++ optional noSysDirs ../no-sys-dirs-riscv.patch
-      ++ [
-        ../gnat-cflags-11.patch
-        ../gcc-12-gfortran-driving.patch
-        ../ppc-musl.patch
-      ]
-      # We only apply this patch when building a native toolchain for aarch64-darwin, as it breaks building
-      # a foreign one: https://github.com/iains/gcc-12-branch/issues/18
-      ++ optional (stdenv.isDarwin && stdenv.isAarch64 && buildPlatform == hostPlatform && hostPlatform == targetPlatform) (fetchpatch {
-        name = "gcc-13-darwin-aarch64-support.patch";
-        url = "https://github.com/Homebrew/formula-patches/raw/5c206c47e2a08d522ec9795bb314346fff5fc4c5/gcc/gcc-13.1.0.diff";
-        sha256 = "sha256-sMgA7nwE2ULa54t5g6VE6eJQYa69XvQrefi9U9f2t4g=";
-      })
-      ++ optional langD ../libphobos.patch
-
-      # backport fixes to build gccgo with musl libc
-      ++ optionals (langGo && stdenv.hostPlatform.isMusl) [
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/cf79b1117bd177d3d4c6ed24b6fa243c3628ac2d.diff";
-          hash = "sha256-mS5ZiYi5D8CpGXrWg3tXlbhp4o86ew1imCTwaHLfl+I=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/7f195a2270910a6ed08bd76e3a16b0a6503f9faf.diff";
-          hash = "sha256-Ze/cFM0dQofKH00PWPDoklXUlwWhwA1nyTuiDAZ6FKo=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/762fd5e5547e464e25b4bee435db6df4eda0de90.diff";
-          hash = "sha256-o28upwTcHAnHG2Iq0OewzwSBEhHs+XpBGdIfZdT81pk=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/e73d9fcafbd07bc3714fbaf8a82db71d50015c92.diff";
-          hash = "sha256-1SjYCVHLEUihdON2TOC3Z2ufM+jf2vH0LvYtZL+c1Fo=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/b6c6a3d64f2e4e9347733290aca3c75898c44b2e.diff";
-          hash = "sha256-RycJ3YCHd3MXtYFjxP0zY2Wuw7/C4bWoBAQtTKJZPOQ=";
-        })
-        (fetchpatch {
-          excludes = [ "gcc/go/gofrontend/MERGE" ];
-          url = "https://github.com/gcc-mirror/gcc/commit/2b1a604a9b28fbf4f382060bebd04adb83acc2f9.diff";
-          hash = "sha256-WiBQG0Xbk75rHk+AMDvsbrm+dc7lDH0EONJXSdEeMGE=";
-        })
-        (fetchpatch {
-          url = "https://github.com/gcc-mirror/gcc/commit/c86b726c048eddc1be320c0bf64a897658bee13d.diff";
-          hash = "sha256-QSIlqDB6JRQhbj/c3ejlmbfWz9l9FurdSWxpwDebnlI=";
-        })
-      ]
-
-      # Fix detection of bootstrap compiler Ada support (cctools as) on Nix Darwin
-      ++ optional (stdenv.isDarwin && langAda) ../ada-cctools-as-detection-configure.patch
-
-      # Use absolute path in GNAT dylib install names on Darwin
-      ++ optional (stdenv.isDarwin && langAda) ../gnat-darwin-dylib-install-name.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 gcc13.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        buildPackages
-        cloog
-        withoutTargetLibc
-        disableBootstrap
-        disableGdbPlugin
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnat-bootstrap
-        gnused
-        isl
-        langAda
-        langC
-        langCC
-        langD
-        langFortran
-        langGo
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libcCross
-        libmpc
-        libucontext
-        libxcrypt
-        mpfr
-        name
-        noSysDirs
-        nukeReferences
-        patchelf
-        perl
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        threadsCross
-        which
-        zip
-        zlib
-      ;
-    };
-
-in
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
-    sha256 = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY=";
-  };
-
-  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.cc \
-      --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+=(
-               '-s' # workaround for hitting hydra log limit
-               '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 { }) + ''
-    ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h
-  '';
-
-  dontDisableStatic = true;
-
-  configurePlatforms = [ "build" "host" "target" ];
-
-  configureFlags = callFile ../common/configure-flags.nix { };
-
-  targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
-
-  buildFlags =
-    # we do not yet have Nix-driven profiling
-    assert profiledCompiler -> !disableBootstrap;
-    let target =
-          lib.optionalString (profiledCompiler) "profiled" +
-          lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap";
-    in lib.optional (target != "") target;
-
-  inherit (callFile ../common/strip-attributes.nix { })
-    stripDebugList
-    stripDebugListTarget
-    preFixup;
-
-  # https://gcc.gnu.org/PR109898
-  enableParallelInstalling = false;
-
-  # 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 langAda langFortran langGo langD version;
-    isGNU = true;
-  };
-
-  enableParallelBuilding = true;
-  inherit enableShared enableMultilib;
-
-  meta = {
-    inherit (callFile ../common/meta.nix { })
-      homepage
-      license
-      description
-      longDescription
-      platforms
-      maintainers
-    ;
-  };
-}
-
-// optionalAttrs (enableMultilib) { dontMoveLib64 = true; }
-))
-[
-  (callPackage ../common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
-  (callPackage ../common/checksum.nix { inherit langC langCC; })
-]
-
diff --git a/nixpkgs/pkgs/development/compilers/gcc/4.8/default.nix b/nixpkgs/pkgs/development/compilers/gcc/4.8/default.nix
deleted file mode 100644
index fa856eff96e5..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/4.8/default.nix
+++ /dev/null
@@ -1,327 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langJava ? false
-, 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); required for Java
-, gmp, mpfr, libmpc, gettext, which, patchelf, binutils
-, cloog ? null, isl ? null # optional, for the Graphite optimization framework.
-, zlib ? null, boehmgc ? null
-, zip ? null, unzip ? null, pkg-config ? null
-, gtk2 ? null, libart_lgpl ? null
-, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null
-, libXrender ? null, xorgproto ? null
-, libXrandr ? null, libXi ? null
-, x11Support ? langJava
-, 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
-, buildPackages
-, callPackage
-}:
-
-assert langJava     -> zip != null && unzip != null
-                       && zlib != null && boehmgc != null
-                       && perl != null;  # for `--enable-java-home'
-
-# We enable the isl cloog backend.
-assert cloog != null -> isl != null;
-
-# 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 = "4";
-    version = "${majorVersion}.8.5";
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches = [ ../parallel-bconfig.patch ]
-      ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../no-sys-dirs.patch
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ optional hostPlatform.isDarwin ../gfortran-darwin-NXConstStr.patch
-      ++ [(fetchpatch {
-          name = "libc_name_p.diff"; # needed to build with gcc6
-          url = "https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=ec1cc0263f1";
-          sha256 = "01jd7pdarh54ki498g6sz64ijl9a1l5f9v8q2696aaxalvh2vwzl";
-          excludes = [ "gcc/cp/ChangeLog" ];
-        })]
-      ++ [ # glibc-2.26
-        ../struct-ucontext-4.8.patch
-        ../sigsegv-not-declared.patch
-        ../res_state-not-declared.patch
-        # gcc-11 compatibility
-        (fetchpatch {
-          name = "gcc4-char-reload.patch";
-          url = "https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=d57c99458933a21fdf94f508191f145ad8d5ec58";
-          includes = [ "gcc/reload.h" ];
-          sha256 = "sha256-66AMP7/ajunGKAN5WJz/yPn42URZ2KN51yPrFdsxEuM=";
-        })
-      ];
-
-    javaEcj = fetchurl {
-      # The `$(top_srcdir)/ecj.jar' file is automatically picked up at
-      # `configure' time.
-
-      # XXX: Eventually we might want to take it from upstream.
-      url = "ftp://sourceware.org/pub/java/ecj-4.3.jar";
-      sha256 = "0jz7hvc0s6iydmhgh5h2m15yza7p2rlss2vkif30vm9y77m97qcx";
-    };
-
-    # Antlr (optional) allows the Java `gjdoc' tool to be built.  We want a
-    # binary distribution here to allow the whole chain to be bootstrapped.
-    javaAntlr = fetchurl {
-      url = "https://www.antlr.org/download/antlr-4.4-complete.jar";
-      sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz";
-    };
-
-    xlibs = [
-      libX11 libXt libSM libICE libXtst libXrender libXrandr libXi
-      xorgproto
-    ];
-
-    javaAwtGtk = langJava && x11Support;
-
-    /* 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
-        javaEcj
-        javaAntlr
-        xlibs
-        javaAwtGtk
-        crossMingw
-        stageNameAddon
-        crossNameAddon
-      ;
-      # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc48.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        boehmgc
-        buildPackages
-        cloog
-        withoutTargetLibc
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnused
-        gtk2
-        isl
-        langC
-        langCC
-        langFortran
-        langGo
-        langJava
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libICE
-        libSM
-        libX11
-        libXi
-        libXrandr
-        libXrender
-        libXt
-        libXtst
-        libart_lgpl
-        libcCross threadsCross
-        libmpc
-        mpfr
-        name
-        noSysDirs
-        patchelf
-        perl
-        pkg-config
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        unzip
-        which
-        x11Support
-        xorgproto
-        zip
-        zlib
-      ;
-    };
-
-in
-
-# We need all these X libraries when building AWT with GTK.
-assert x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == [];
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2";
-    sha256 = "08yggr18v373a1ihj0rg2vd6psnic42b518xcgp3r9k81xz1xyr2";
-  };
-
-  inherit patches;
-
-  hardeningDisable = [ "format" "pie" ];
-
-  outputs = [ "out" "lib" "man" "info" ];
-  setOutputFlags = false;
-  NIX_NO_SELF_RPATH = true;
-
-  libc_dev = stdenv.cc.libc_dev;
-
-  postPatch =
-    if targetPlatform != hostPlatform || stdenv.cc.libc != null then
-      # 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' and \`UCLIBC_DYNAMIC_LINKER' macros..."
-           for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h
-           do
-             grep -q LIBC_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'
-           done
-        ''
-    else null;
-
-  inherit noSysDirs staticCompiler langJava withoutTargetLibc
-    libcCross crossMingw;
-
-  inherit (callFile ../common/dependencies.nix { })
-    depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget;
-
-  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");
-
-  inherit (callFile ../common/strip-attributes.nix { })
-    stripDebugList
-    stripDebugListTarget
-    preFixup;
-
-  # https://gcc.gnu.org/PR109898
-  enableParallelInstalling = false;
-
-  doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv
-
-  # 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.
-  #
-  # Note: When building the Java AWT GTK peer, the build system doesn't honor
-  # `--with-gmp' et al., e.g., when building
-  # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
-  # them to $CPATH and $LIBRARY_PATH in this case.
-  #
-  # 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
-    ++ optional langJava boehmgc
-    ++ optionals javaAwtGtk xlibs
-    ++ optionals javaAwtGtk [ gmp mpfr ]
-  ));
-
-  LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
-    ++ optional (zlib != null) zlib
-    ++ optional langJava boehmgc
-    ++ optionals javaAwtGtk xlibs
-    ++ optionals javaAwtGtk [ gmp mpfr ]
-  ));
-
-  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 = [ "stackprotector" "fortify3" ];
-  };
-
-  enableParallelBuilding = true;
-  inherit enableShared enableMultilib;
-
-  meta = {
-    inherit (callFile ../common/meta.nix { })
-      homepage
-      license
-      description
-      longDescription
-      platforms
-      maintainers
-    ;
-    badPlatforms = lib.platforms.darwin;
-  };
-}
-
-// optionalAttrs (enableMultilib) { dontMoveLib64 = true; }
-))
-[
-  (callPackage ../common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
-]
diff --git a/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix b/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix
deleted file mode 100644
index bab79f968db3..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/4.9/default.nix
+++ /dev/null
@@ -1,354 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langJava ? false
-, 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); required for Java
-, gmp, mpfr, libmpc, gettext, which, patchelf, binutils
-, cloog ? null, isl ? null # optional, for the Graphite optimization framework.
-, zlib ? null, boehmgc ? null
-, zip ? null, unzip ? null, pkg-config ? null
-, gtk2 ? null, libart_lgpl ? null
-, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null
-, libXrender ? null, xorgproto ? null
-, libXrandr ? null, libXi ? null
-, x11Support ? langJava
-, 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
-, buildPackages
-, callPackage
-}:
-
-assert langJava     -> zip != null && unzip != null
-                       && zlib != null && boehmgc != null
-                       && perl != null;  # for `--enable-java-home'
-
-# We enable the isl cloog backend.
-assert cloog != null -> isl != null;
-
-# 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 = "4";
-    version = "${majorVersion}.9.4";
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches =
-      [ ../9/fix-struct-redefinition-on-glibc-2.36.patch ../use-source-date-epoch.patch
-        ../parallel-bconfig.patch ./parallel-strsignal.patch
-        ./libsanitizer.patch
-        (fetchpatch {
-          name = "avoid-ustat-glibc-2.28.patch";
-          url = "https://gitweb.gentoo.org/proj/gcc-patches.git/plain/4.9.4/gentoo/100_all_avoid-ustat-glibc-2.28.patch?id=55fcb515620a8f7d3bb77eba938aa0fcf0d67c96";
-          sha256 = "0b32sb4psv5lq0ij9fwhi1b4pjbwdjnv24nqprsk14dsc6xmi1g0";
-        })
-      ]
-      ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../no-sys-dirs.patch
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ [ ../struct-ucontext.patch ../struct-sigaltstack-4.9.patch ] # glibc-2.26
-      # Retpoline patches pulled from the branch hjl/indirect/gcc-4_9-branch (by H.J. Lu, the author of GCC upstream retpoline commits)
-      ++ builtins.map ({commit, sha256}: fetchpatch {url = "https://github.com/hjl-tools/gcc/commit/${commit}.patch"; inherit sha256;})
-         [{ commit = "e623d21608e96ecd6b65f0d06312117d20488a38"; sha256 = "1ix8i4d2r3ygbv7npmsdj790rhxqrnfwcqzv48b090r9c3ij8ay3"; }
-          { commit = "2015a09e332309f12de1dadfe179afa6a29368b8"; sha256 = "0xcfs0cbb63llj2gbcdrvxim79ax4k4aswn0a3yjavxsj71s1n91"; }
-          { commit = "6b11591f4494f705e8746e7d58b7f423191f4e92"; sha256 = "0aydyhsm2ig0khgbp27am7vq7liyqrq6kfhfi2ki0ij0ab1hfbga"; }
-          { commit = "203c7d9c3e9cb0f88816b481ef8e7e87b3ecc373"; sha256 = "0wqn16y7wy5kg8ngfcni5qdwfphl01axczibbk49bxclwnzvldqa"; }
-          { commit = "f039c6f284b2c9ce97c8353d6034978795c4872e"; sha256 = "13fkgdb17lpyxfksz1zanxhgpsm0jrss9w61nbl7an4im22hz7ci"; }
-          { commit = "ed42606bdab1c5d9e5ad828cd6fe1a0557f193b7"; sha256 = "0gdnn8v3p03imj3qga2mzdhpgbmjcklkxdl97jvz5xia2ikzknxm"; }
-          { commit = "5278e062ef292fd2fbf987d25389785f4c5c0f99"; sha256 = "0j81x758wf8v7j4rx5wc1cy7yhkvhlhv3wmnarwakxiwsspq0vrs"; }
-          { commit = "76f1ffbbb6cd9f6ecde6c82cd16e20a27242e890"; sha256 = "1py56y6gp7fjf4f8bbsfwh5bs1gnmlqda1ycsmnwlzfm0cshdp0c"; }
-          { commit = "4ca48b2b688b135c0390f54ea9077ef10aedd52c"; sha256 = "15r019pzr3k0lpgyvdc92c8fayw8b5lrzncna4bqmamcsdz7vsaw"; }
-          { commit = "98c7bf9ddc80db965d69d61521b1c7a1cec32d9a"; sha256 = "1d7pfdv1q23nf0wadw7jbp6d6r7pnzjpbyxgbdfv7j1vr9l1bp60"; }
-          { commit = "3dc76b53ad896494ca62550a7a752fecbca3f7a2"; sha256 = "0jvdzfpvfdmklfcjwqblwq1i22iqis7ljpvm7adra5d7zf2xk7xz"; }
-          { commit = "1e961ed49b18e176c7457f53df2433421387c23b"; sha256 = "04dnqqs4qsvz4g8cq6db5id41kzys7hzhcaycwmc9rpqygs2ajwz"; }
-          { commit = "e137c72d099f9b3b47f4cc718aa11eab14df1a9c"; sha256 = "1ms0dmz74yf6kwgjfs4d2fhj8y6mcp2n184r3jk44wx2xc24vgb2"; }]
-
-      ++ [
-        ../libsanitizer-no-cyclades-9.patch
-        # gcc-11 compatibility
-        (fetchpatch {
-          name = "gcc4-char-reload.patch";
-          url = "https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=d57c99458933a21fdf94f508191f145ad8d5ec58";
-          includes = [ "gcc/reload.h" ];
-          sha256 = "sha256-66AMP7/ajunGKAN5WJz/yPn42URZ2KN51yPrFdsxEuM=";
-        })
-      ];
-
-    javaEcj = fetchurl {
-      # The `$(top_srcdir)/ecj.jar' file is automatically picked up at
-      # `configure' time.
-
-      # XXX: Eventually we might want to take it from upstream.
-      url = "ftp://sourceware.org/pub/java/ecj-4.3.jar";
-      sha256 = "0jz7hvc0s6iydmhgh5h2m15yza7p2rlss2vkif30vm9y77m97qcx";
-    };
-
-    # Antlr (optional) allows the Java `gjdoc' tool to be built.  We want a
-    # binary distribution here to allow the whole chain to be bootstrapped.
-    javaAntlr = fetchurl {
-      url = "https://www.antlr.org/download/antlr-4.4-complete.jar";
-      sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz";
-    };
-
-    xlibs = [
-      libX11 libXt libSM libICE libXtst libXrender libXrandr libXi
-      xorgproto
-    ];
-
-    javaAwtGtk = langJava && x11Support;
-
-    /* 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
-        javaEcj
-        javaAntlr
-        xlibs
-        javaAwtGtk
-        crossMingw
-        stageNameAddon
-        crossNameAddon
-      ;
-      # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc49.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        boehmgc
-        buildPackages
-        cloog
-        withoutTargetLibc
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnused
-        gtk2
-        isl
-        langC
-        langCC
-        langFortran
-        langGo
-        langJava
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libICE
-        libSM
-        libX11
-        libXi
-        libXrandr
-        libXrender
-        libXt
-        libXtst
-        libart_lgpl
-        libcCross threadsCross
-        libmpc
-        mpfr
-        name
-        noSysDirs
-        patchelf
-        perl
-        pkg-config
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        unzip
-        which
-        x11Support
-        xorgproto
-        zip
-        zlib
-      ;
-    };
-
-in
-
-# We need all these X libraries when building AWT with GTK.
-assert x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == [];
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2";
-    sha256 = "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc";
-  };
-
-  inherit patches;
-
-  hardeningDisable = [ "format" "pie" ];
-
-  # When targeting darwin, libgcc_ext.10.{4,5}.dylib are created as
-  # MH_DYLIB_STUB files, which install_name_tool can't change, so we
-  # get a cycle between $out and $lib.
-  outputs = if langJava || langGo || targetPlatform.isDarwin then ["out" "man" "info"]
-    else [ "out" "lib" "man" "info" ];
-  setOutputFlags = false;
-  NIX_NO_SELF_RPATH = true;
-
-  libc_dev = stdenv.cc.libc_dev;
-
-  postPatch =
-    if targetPlatform != hostPlatform || stdenv.cc.libc != null then
-      # 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' and \`UCLIBC_DYNAMIC_LINKER' macros..."
-           for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h
-           do
-             grep -q LIBC_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'
-           done
-        ''
-    else null;
-
-  inherit noSysDirs staticCompiler langJava withoutTargetLibc
-    libcCross crossMingw;
-
-  inherit (callFile ../common/dependencies.nix { })
-    depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget;
-
-  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;
-
-  doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv
-
-  # 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.
-  #
-  # Note: When building the Java AWT GTK peer, the build system doesn't honor
-  # `--with-gmp' et al., e.g., when building
-  # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
-  # them to $CPATH and $LIBRARY_PATH in this case.
-  #
-  # 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
-    ++ optional langJava boehmgc
-    ++ optionals javaAwtGtk xlibs
-    ++ optionals javaAwtGtk [ gmp mpfr ]
-  ));
-
-  LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
-    ++ optional (zlib != null) zlib
-    ++ optional langJava boehmgc
-    ++ optionals javaAwtGtk xlibs
-    ++ optionals javaAwtGtk [ gmp mpfr ]
-  ));
-
-  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; }
-
-// optionalAttrs (langJava) {
-     postFixup = ''
-       target="$(echo "$out/libexec/gcc"/*/*/ecj*)"
-       patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target"
-     '';}
-))
-[
-  (callPackage ../common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
-]
diff --git a/nixpkgs/pkgs/development/compilers/gcc/6/default.nix b/nixpkgs/pkgs/development/compilers/gcc/6/default.nix
deleted file mode 100644
index f443babb4b70..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/6/default.nix
+++ /dev/null
@@ -1,372 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, fetchFromGitHub, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langAda ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langJava ? false
-, langGo ? false
-, reproducibleBuild ? true
-, profiledCompiler ? false
-, langJit ? false
-, staticCompiler ? false
-, enableShared ? stdenv.targetPlatform.hasSharedLibraries
-, enableLTO ? stdenv.hostPlatform.hasSharedLibraries
-, texinfo ? null
-, flex
-, perl ? null # optional, for texi2pod (then pod2man); required for Java
-, gmp, mpfr, libmpc, gettext, which, patchelf, binutils
-, isl ? null # optional, for the Graphite optimization framework.
-, zlib ? null, boehmgc ? null
-, gnat-bootstrap ? null
-, zip ? null, unzip ? null, pkg-config ? null
-, gtk2 ? null, libart_lgpl ? null
-, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null
-, libXrender ? null, xorgproto ? null
-, libXrandr ? null, libXi ? null
-, x11Support ? langJava
-, 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
-}:
-
-assert langJava     -> zip != null && unzip != null
-                       && zlib != null && boehmgc != null
-                       && perl != null;  # for `--enable-java-home'
-
-# 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;
-
-# 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 = "6";
-    version = "${majorVersion}.5.0";
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches = [ ../9/fix-struct-redefinition-on-glibc-2.36.patch ]
-    ++ optionals (!stdenv.targetPlatform.isRedox) [
-      ../use-source-date-epoch.patch ./0001-Fix-build-for-glibc-2.31.patch
-
-      # Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
-      ../fix-bug-80431.patch
-    ] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional noSysDirs ../no-sys-dirs.patch
-      ++ optional langAda ../gnat-cflags.patch
-      ++ optional langAda ./gnat-glibc234.patch
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ optional (targetPlatform.libc == "musl") ../libgomp-dont-force-initial-exec.patch
-      ++ optional langGo ./gogcc-workaround-glibc-2.36.patch
-
-      # Obtain latest patch with ../update-mcfgthread-patches.sh
-      ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch
-      ++ optional (targetPlatform.libc == "musl" && targetPlatform.isx86_32) (fetchpatch {
-        url = "https://git.alpinelinux.org/aports/plain/main/gcc/gcc-6.1-musl-libssp.patch?id=5e4b96e23871ee28ef593b439f8c07ca7c7eb5bb";
-        sha256 = "1jf1ciz4gr49lwyh8knfhw6l5gvfkwzjy90m7qiwkcbsf4a3fqn2";
-      })
-
-      ++ [ ../libsanitizer-no-cyclades-9.patch ];
-
-    javaEcj = fetchurl {
-      # The `$(top_srcdir)/ecj.jar' file is automatically picked up at
-      # `configure' time.
-
-      # XXX: Eventually we might want to take it from upstream.
-      url = "ftp://sourceware.org/pub/java/ecj-4.3.jar";
-      sha256 = "0jz7hvc0s6iydmhgh5h2m15yza7p2rlss2vkif30vm9y77m97qcx";
-    };
-
-    # Antlr (optional) allows the Java `gjdoc' tool to be built.  We want a
-    # binary distribution here to allow the whole chain to be bootstrapped.
-    javaAntlr = fetchurl {
-      url = "https://www.antlr.org/download/antlr-4.4-complete.jar";
-      sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz";
-    };
-
-    xlibs = [
-      libX11 libXt libSM libICE libXtst libXrender libXrandr libXi
-      xorgproto
-    ];
-
-    javaAwtGtk = langJava && x11Support;
-
-    /* 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
-        javaEcj
-        javaAntlr
-        xlibs
-        javaAwtGtk
-        crossMingw
-        stageNameAddon
-        crossNameAddon
-      ;
-      # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc6.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        boehmgc
-        buildPackages
-        cloog
-        withoutTargetLibc
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchFromGitHub
-        fetchpatch
-        fetchurl
-        flex
-        gettext
-        gmp
-        gnat-bootstrap
-        gnused
-        gtk2
-        isl
-        langAda
-        langC
-        langCC
-        langFortran
-        langGo
-        langJava
-        langJit
-        langObjC
-        langObjCpp
-        lib
-        libICE
-        libSM
-        libX11
-        libXi
-        libXrandr
-        libXrender
-        libXt
-        libXtst
-        libart_lgpl
-        libcCross
-        libmpc
-        mpfr
-        name
-        noSysDirs
-        patchelf
-        perl
-        pkg-config
-        profiledCompiler
-        reproducibleBuild
-        staticCompiler
-        stdenv
-        targetPackages
-        texinfo
-        threadsCross
-        unzip
-        which
-        x11Support
-        xorgproto
-        zip
-        zlib
-      ;
-    };
-in
-
-# We need all these X libraries when building AWT with GTK.
-assert x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == [];
-
-lib.pipe (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = if stdenv.targetPlatform.isVc4 then fetchFromGitHub {
-    owner = "itszor";
-    repo = "gcc-vc4";
-    rev = "e90ff43f9671c760cf0d1dd62f569a0fb9bf8918";
-    sha256 = "0gxf66hwqk26h8f853sybphqa5ca0cva2kmrw5jsiv6139g0qnp8";
-  } else if stdenv.targetPlatform.isRedox then fetchFromGitHub {
-    owner = "redox-os";
-    repo = "gcc";
-    rev = "f360ac095028d286fc6dde4d02daed48f59813fa"; # `redox` branch
-    sha256 = "1an96h8l58pppyh3qqv90g8hgcfd9hj7igvh2gigmkxbrx94khfl";
-  } else fetchurl {
-    url = "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.xz";
-    sha256 = "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby";
-  };
-
-  inherit patches;
-
-  outputs = if langJava || langGo || langJit then ["out" "man" "info"]
-    else [ "out" "lib" "man" "info" ];
-  setOutputFlags = false;
-  NIX_NO_SELF_RPATH = true;
-
-  libc_dev = stdenv.cc.libc_dev;
-
-  hardeningDisable = [ "format" "pie" ];
-
-  postPatch =
-    # 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'
-        ''
-        ))
-    );
-
-  inherit noSysDirs staticCompiler langJava 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;
-
-  doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv
-
-  # 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.
-  #
-  # Note: When building the Java AWT GTK peer, the build system doesn't honor
-  # `--with-gmp' et al., e.g., when building
-  # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
-  # them to $CPATH and $LIBRARY_PATH in this case.
-  #
-  # 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
-    ++ optional langJava boehmgc
-    ++ optionals javaAwtGtk xlibs
-    ++ optionals javaAwtGtk [ gmp mpfr ]
-  ));
-
-  LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath ([]
-    ++ optional (zlib != null) zlib
-    ++ optional langJava boehmgc
-    ++ optionals javaAwtGtk xlibs
-    ++ optionals javaAwtGtk [ gmp mpfr ]
-  ));
-
-  inherit (callFile ../common/extra-target-flags.nix { })
-    EXTRA_FLAGS_FOR_TARGET
-    EXTRA_LDFLAGS_FOR_TARGET
-    ;
-
-  passthru = {
-    inherit langC langCC langObjC langObjCpp langFortran langAda 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; }
-
-// optionalAttrs (langJava && !stdenv.hostPlatform.isDarwin) {
-     postFixup = ''
-       target="$(echo "$out/libexec/gcc"/*/*/ecj*)"
-       patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target"
-     '';}
-))
-[
-  (callPackage ../common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
-]
diff --git a/nixpkgs/pkgs/development/compilers/gcc/7/default.nix b/nixpkgs/pkgs/development/compilers/gcc/7/default.nix
deleted file mode 100644
index 5b6ea7ead50a..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/7/default.nix
+++ /dev/null
@@ -1,306 +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 = "7";
-    version = "${majorVersion}.5.0";
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches =
-      [ # https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00633.html
-        ./riscv-pthread-reentrant.patch
-        # https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00297.html
-        ./riscv-no-relax.patch
-        # Fix for asan w/glibc-2.34. Although there's no upstream backport to v7,
-        # the patch from gcc 8 seems to work perfectly fine.
-        ./gcc8-asan-glibc-2.34.patch
-
-        ./0001-Fix-build-for-glibc-2.31.patch
-
-        # 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
-      ++ optionals 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/7.1.0/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02";
-        sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs";
-      })
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch
-      ++ optional (targetPlatform.libc == "musl" && targetPlatform.isx86_32) (fetchpatch {
-        url = "https://git.alpinelinux.org/aports/plain/main/gcc/gcc-6.1-musl-libssp.patch?id=5e4b96e23871ee28ef593b439f8c07ca7c7eb5bb";
-        sha256 = "1jf1ciz4gr49lwyh8knfhw6l5gvfkwzjy90m7qiwkcbsf4a3fqn2";
-      })
-      ++ 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 gcc7.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 (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
-    sha256 = "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq";
-  };
-
-  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;
-
-  env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument";
-  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 { })
-    ++ optional (targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419"
-    ++ optional targetPlatform.isNetBSD "--disable-libcilkrts"
-  ;
-
-  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;
-
-  doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv
-
-  # 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/nixpkgs/pkgs/development/compilers/gcc/8/default.nix b/nixpkgs/pkgs/development/compilers/gcc/8/default.nix
deleted file mode 100644
index f903e264b0af..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/8/default.nix
+++ /dev/null
@@ -1,281 +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 (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  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/nixpkgs/pkgs/development/compilers/gcc/9/default.nix b/nixpkgs/pkgs/development/compilers/gcc/9/default.nix
deleted file mode 100644
index 289212a13635..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/9/default.nix
+++ /dev/null
@@ -1,296 +0,0 @@
-{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
-, langC ? true, langCC ? true, langFortran ? false
-, langAda ? false
-, langObjC ? stdenv.targetPlatform.isDarwin
-, langObjCpp ? stdenv.targetPlatform.isDarwin
-, langD ? false
-, 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
-, gnat-bootstrap ? 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 # unused; just for compat with gcc4, as we override the parameter on some places
-, buildPackages
-, callPackage
-}:
-
-# Note: this package is used for bootstrapping fetchurl, and thus
-# cannot use fetchpatch! All mutable patches (generated by GitHub or
-# cgit) that are needed here should be included directly in Nixpkgs as
-# files.
-
-# 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;
-
-# 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 = "9";
-    version = "${majorVersion}.5.0";
-
-    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
-
-    patches = [
-      ./fix-struct-redefinition-on-glibc-2.36.patch
-      # Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
-      ../fix-bug-80431.patch
-    ] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch
-      ++ optional targetPlatform.isNetBSD ../libstdc++-netbsd-ctypes.patch
-      ++ optional noSysDirs ../no-sys-dirs.patch
-      ++ optional (noSysDirs && hostPlatform.isRiscV) ../no-sys-dirs-riscv-gcc9.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 langAda ../gnat-cflags.patch
-      ++ optional langD ../libphobos.patch
-      ++ optional langFortran ../gfortran-driving.patch
-      ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch
-
-      # Obtain latest patch with ../update-mcfgthread-patches.sh
-      ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.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 gcc9.cc.override)" | jq '.[]' --raw-output'
-      inherit
-        binutils
-        buildPackages
-        cloog
-        withoutTargetLibc
-        enableLTO
-        enableMultilib
-        enablePlugin
-        enableShared
-        fetchpatch
-        fetchurl
-        gettext
-        gmp
-        gnat-bootstrap
-        gnused
-        isl
-        langAda
-        langC
-        langCC
-        langD
-        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 (stdenv.mkDerivation ({
-  pname = "${crossNameAddon}${name}";
-  inherit version;
-
-  builder = ../builder.sh;
-
-  src = fetchurl {
-    url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
-    sha256 = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7";
-  };
-
-  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 langAda langFortran langGo langD 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/nixpkgs/pkgs/development/compilers/gcc/builder.sh b/nixpkgs/pkgs/development/compilers/gcc/builder.sh
deleted file mode 100644
index d9016c45e579..000000000000
--- a/nixpkgs/pkgs/development/compilers/gcc/builder.sh
+++ /dev/null
@@ -1,290 +0,0 @@
-if [ -e .attrs.sh ]; then source .attrs.sh; fi
-source $stdenv/setup
-
-
-oldOpts="$(shopt -po nounset)" || true
-set -euo pipefail
-
-
-export NIX_FIXINC_DUMMY="$NIX_BUILD_TOP/dummy"
-mkdir "$NIX_FIXINC_DUMMY"
-
-
-if test "$staticCompiler" = "1"; then
-    EXTRA_LDFLAGS="-static"
-else
-    EXTRA_LDFLAGS="-Wl,-rpath,${!outputLib}/lib"
-fi
-
-
-# GCC interprets empty paths as ".", which we don't want.
-if test -z "${CPATH-}"; then unset CPATH; fi
-if test -z "${LIBRARY_PATH-}"; then unset LIBRARY_PATH; fi
-echo "\$CPATH is \`${CPATH-}'"
-echo "\$LIBRARY_PATH is \`${LIBRARY_PATH-}'"
-
-if test "$noSysDirs" = "1"; then
-
-    declare \
-        EXTRA_FLAGS_FOR_BUILD EXTRA_FLAGS EXTRA_FLAGS_FOR_TARGET \
-        EXTRA_LDFLAGS_FOR_BUILD EXTRA_LDFLAGS_FOR_TARGET
-
-    # Extract flags from Bintools Wrappers
-    for post in '_FOR_BUILD' ''; do
-        curBintools="NIX_BINTOOLS${post}"
-
-        declare -a extraLDFlags=()
-        if [[ -e "${!curBintools}/nix-support/orig-libc" ]]; then
-            # Figure out what extra flags when linking to pass to the gcc
-            # compilers being generated to make sure that they use our libc.
-            extraLDFlags=($(< "${!curBintools}/nix-support/libc-ldflags") $(< "${!curBintools}/nix-support/libc-ldflags-before" || true))
-            if [ -e ${!curBintools}/nix-support/ld-set-dynamic-linker ]; then
-                extraLDFlags=-dynamic-linker=$(< ${!curBintools}/nix-support/dynamic-linker)
-            fi
-
-            # The path to the Libc binaries such as `crti.o'.
-            libc_libdir="$(< "${!curBintools}/nix-support/orig-libc")/lib"
-        else
-            # Hack: support impure environments.
-            extraLDFlags=("-L/usr/lib64" "-L/usr/lib")
-            libc_libdir="/usr/lib"
-        fi
-        extraLDFlags=("-L$libc_libdir" "-rpath" "$libc_libdir"
-                      "${extraLDFlags[@]}")
-        for i in "${extraLDFlags[@]}"; do
-            declare EXTRA_LDFLAGS${post}+=" -Wl,$i"
-        done
-    done
-
-    # Extract flags from CC Wrappers
-    for post in '_FOR_BUILD' ''; do
-        curCC="NIX_CC${post}"
-        curFIXINC="NIX_FIXINC_DUMMY${post}"
-
-        declare -a extraFlags=()
-        if [[ -e "${!curCC}/nix-support/orig-libc" ]]; then
-            # Figure out what extra compiling flags to pass to the gcc compilers
-            # being generated to make sure that they use our libc.
-            extraFlags=($(< "${!curCC}/nix-support/libc-crt1-cflags") $(< "${!curCC}/nix-support/libc-cflags"))
-
-            # The path to the Libc headers
-            libc_devdir="$(< "${!curCC}/nix-support/orig-libc-dev")"
-
-            # Use *real* header files, otherwise a limits.h is generated that
-            # does not include Libc's limits.h (notably missing SSIZE_MAX,
-            # which breaks the build).
-            declare NIX_FIXINC_DUMMY${post}="$libc_devdir/include"
-        else
-            # Hack: support impure environments.
-            extraFlags=("-isystem" "/usr/include")
-            declare NIX_FIXINC_DUMMY${post}=/usr/include
-        fi
-
-        extraFlags=("-I${!curFIXINC}" "${extraFlags[@]}")
-
-        # BOOT_CFLAGS defaults to `-g -O2'; since we override it below, make
-        # sure to explictly add them so that files compiled with the bootstrap
-        # compiler are optimized and (optionally) contain debugging information
-        # (info "(gccinstall) Building").
-        if test -n "${dontStrip-}"; then
-            extraFlags=("-O2" "-g" "${extraFlags[@]}")
-        else
-            # Don't pass `-g' at all; this saves space while building.
-            extraFlags=("-O2" "${extraFlags[@]}")
-        fi
-
-        declare EXTRA_FLAGS${post}="${extraFlags[*]}"
-    done
-
-    if test -z "${targetConfig-}"; then
-        # host = target, so the flags are the same
-        EXTRA_FLAGS_FOR_TARGET="$EXTRA_FLAGS"
-        EXTRA_LDFLAGS_FOR_TARGET="$EXTRA_LDFLAGS"
-    fi
-
-    # CFLAGS_FOR_TARGET are needed for the libstdc++ configure script to find
-    # the startfiles.
-    # FLAGS_FOR_TARGET are needed for the target libraries to receive the -Bxxx
-    # for the startfiles.
-    makeFlagsArray+=(
-        "BUILD_SYSTEM_HEADER_DIR=$NIX_FIXINC_DUMMY_FOR_BUILD"
-        "SYSTEM_HEADER_DIR=$NIX_FIXINC_DUMMY_FOR_BUILD"
-        "NATIVE_SYSTEM_HEADER_DIR=$NIX_FIXINC_DUMMY"
-
-        "LDFLAGS_FOR_BUILD=$EXTRA_LDFLAGS_FOR_BUILD"
-        #"LDFLAGS=$EXTRA_LDFLAGS"
-        "LDFLAGS_FOR_TARGET=$EXTRA_LDFLAGS_FOR_TARGET"
-
-        "CFLAGS_FOR_BUILD=$EXTRA_FLAGS_FOR_BUILD $EXTRA_LDFLAGS_FOR_BUILD"
-        "CXXFLAGS_FOR_BUILD=$EXTRA_FLAGS_FOR_BUILD $EXTRA_LDFLAGS_FOR_BUILD"
-        "FLAGS_FOR_BUILD=$EXTRA_FLAGS_FOR_BUILD $EXTRA_LDFLAGS_FOR_BUILD"
-
-        # It seems there is a bug in GCC 5
-        #"CFLAGS=$EXTRA_FLAGS $EXTRA_LDFLAGS"
-        #"CXXFLAGS=$EXTRA_FLAGS $EXTRA_LDFLAGS"
-
-        "CFLAGS_FOR_TARGET=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
-        "CXXFLAGS_FOR_TARGET=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
-        "FLAGS_FOR_TARGET=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
-    )
-
-    if test -z "${targetConfig-}"; then
-        makeFlagsArray+=(
-            "BOOT_CFLAGS=$EXTRA_FLAGS $EXTRA_LDFLAGS"
-            "BOOT_LDFLAGS=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
-        )
-    fi
-
-    if test "$withoutTargetLibc" == 1; then
-        # We don't want the gcc build to assume there will be a libc providing
-        # limits.h in this stage
-        makeFlagsArray+=(
-            'LIMITS_H_TEST=false'
-        )
-    else
-        makeFlagsArray+=(
-            'LIMITS_H_TEST=true'
-        )
-    fi
-fi
-
-eval "$oldOpts"
-
-providedPreConfigure="$preConfigure";
-preConfigure() {
-    if test -n "$newlibSrc"; then
-        tar xvf "$newlibSrc" -C ..
-        ln -s ../newlib-*/newlib newlib
-        # Patch to get armvt5el working:
-        sed -i -e 's/ arm)/ arm*)/' newlib/configure.host
-    fi
-
-    # Bug - they packaged zlib
-    if test -d "zlib"; then
-        # This breaks the build without-headers, which should build only
-        # the target libgcc as target libraries.
-        # See 'configure:5370'
-        rm -Rf zlib
-    fi
-
-    if test -n "$crossMingw" -a -n "$withoutTargetLibc"; then
-        mkdir -p ../mingw
-        # --with-build-sysroot expects that:
-        cp -R $libcCross/include ../mingw
-        configureFlags="$configureFlags --with-build-sysroot=`pwd`/.."
-    fi
-
-    # Eval the preConfigure script from nix expression.
-    eval "$providedPreConfigure"
-
-    # Perform the build in a different directory.
-    mkdir ../build
-    cd ../build
-    configureScript=../$sourceRoot/configure
-}
-
-
-postConfigure() {
-    # Avoid store paths when embedding ./configure flags into gcc.
-    # Mangled arguments are still useful when reporting bugs upstream.
-    sed -e "/TOPLEVEL_CONFIGURE_ARGUMENTS=/ s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" -i Makefile
-}
-
-
-preInstall() {
-    mkdir -p "$out/${targetConfig}/lib"
-    mkdir -p "${!outputLib}/${targetConfig}/lib"
-    # Make ‘lib64’ symlinks to ‘lib’.
-    if [ -n "$linkLib64toLib" ]; then
-        ln -s lib "$out/${targetConfig}/lib64"
-        ln -s lib "${!outputLib}/${targetConfig}/lib64"
-    fi
-    # Make ‘lib32’ symlinks to ‘lib’.
-    if [ -n "$linkLib32toLib" ]; then
-        ln -s lib "$out/${targetConfig}/lib32"
-        ln -s lib "${!outputLib}/${targetConfig}/lib32"
-    fi
-}
-
-
-postInstall() {
-    # Move runtime libraries to lib output.
-    moveToOutput "${targetConfig+$targetConfig/}lib/lib*.so*" "${!outputLib}"
-    moveToOutput "${targetConfig+$targetConfig/}lib/lib*.la"  "${!outputLib}"
-    moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dylib" "${!outputLib}"
-    moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dll.a" "${!outputLib}"
-    moveToOutput "share/gcc-*/python" "${!outputLib}"
-
-    if [ -z "$enableShared" ]; then
-        moveToOutput "${targetConfig+$targetConfig/}lib/lib*.a" "${!outputLib}"
-    fi
-
-    for i in "${!outputLib}/${targetConfig}"/lib/*.{la,py}; do
-        substituteInPlace "$i" --replace "$out" "${!outputLib}"
-    done
-
-    if [ -n "$enableMultilib" ]; then
-        moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.so*" "${!outputLib}"
-        moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.la"  "${!outputLib}"
-        moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.dylib" "${!outputLib}"
-
-        for i in "${!outputLib}/${targetConfig}"/lib64/*.{la,py}; do
-            substituteInPlace "$i" --replace "$out" "${!outputLib}"
-        done
-    fi
-
-    # Remove `fixincl' to prevent a retained dependency on the
-    # previous gcc.
-    rm -rf $out/libexec/gcc/*/*/install-tools
-    rm -rf $out/lib/gcc/*/*/install-tools
-
-    # More dependencies with the previous gcc or some libs (gccbug stores the build command line)
-    rm -rf $out/bin/gccbug
-
-    if type "install_name_tool"; then
-        for i in "${!outputLib}"/lib/*.*.dylib "${!outputLib}"/lib/*.so.[0-9]; do
-            install_name_tool -id "$i" "$i" || true
-            for old_path in $(otool -L "$i" | grep "$out" | awk '{print $1}'); do
-              new_path=`echo "$old_path" | sed "s,$out,${!outputLib},"`
-              install_name_tool -change "$old_path" "$new_path" "$i" || true
-            done
-        done
-    fi
-
-    # Cross-compiler specific:
-    # --with-headers=$dir option triggers gcc to make a private copy
-    # of $dir headers and use it later as `-isysroot`. This prevents
-    # cc-wrapper from overriding libc headers with `-idirafter`.
-    # It should be safe to drop it and rely solely on the cc-wrapper.
-    local sysinc_dir=$out/${targetConfig+$targetConfig/}sys-include
-    if [ -d "$sysinc_dir" ]; then
-        chmod -R u+w "$out/${targetConfig+$targetConfig/}sys-include"
-        rm -rfv "$out/${targetConfig+$targetConfig/}sys-include"
-    fi
-
-    # Get rid of some "fixed" header files
-    rm -rfv $out/lib/gcc/*/*/include-fixed/{root,linux,sys/mount.h,bits/statx.h}
-
-    # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks.
-    for i in $out/bin/*-gcc*; do
-        if cmp -s $out/bin/gcc $i; then
-            ln -sfn gcc $i
-        fi
-    done
-
-    for i in $out/bin/c++ $out/bin/*-c++* $out/bin/*-g++*; do
-        if cmp -s $out/bin/g++ $i; then
-            ln -sfn g++ $i
-        fi
-    done
-
-    # Two identical man pages are shipped (moving and compressing is done later)
-    for i in "$out"/share/man/man1/*g++.1; do
-        if test -e "$i"; then
-            man_prefix=`echo "$i" | sed "s,.*/\(.*\)g++.1,\1,"`
-            ln -sf "$man_prefix"gcc.1 "$i"
-        fi
-    done
-}
-
-genericBuild
diff --git a/nixpkgs/pkgs/development/compilers/gcc/common/builder.nix b/nixpkgs/pkgs/development/compilers/gcc/common/builder.nix
new file mode 100644
index 000000000000..6df4e32ddb76
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gcc/common/builder.nix
@@ -0,0 +1,284 @@
+{ lib
+, stdenv
+, enableMultilib
+}:
+
+let
+  forceLibgccToBuildCrtStuff =
+    import ./libgcc-buildstuff.nix { inherit lib stdenv; };
+in
+
+originalAttrs: (stdenv.mkDerivation (finalAttrs: originalAttrs // {
+  passthru = (originalAttrs.passthru or {}) // { inherit forceLibgccToBuildCrtStuff; };
+  preUnpack = ''
+    oldOpts="$(shopt -po nounset)" || true
+    set -euo pipefail
+
+    export NIX_FIXINC_DUMMY="$NIX_BUILD_TOP/dummy"
+    mkdir "$NIX_FIXINC_DUMMY"
+
+    if test "$staticCompiler" = "1"; then
+        EXTRA_LDFLAGS="-static"
+    else
+        EXTRA_LDFLAGS="-Wl,-rpath,''${!outputLib}/lib"
+    fi
+
+    # GCC interprets empty paths as ".", which we don't want.
+    if test -z "''${CPATH-}"; then unset CPATH; fi
+    if test -z "''${LIBRARY_PATH-}"; then unset LIBRARY_PATH; fi
+    echo "\$CPATH is \`''${CPATH-}'"
+    echo "\$LIBRARY_PATH is \`''${LIBRARY_PATH-}'"
+
+    if test "$noSysDirs" = "1"; then
+
+        declare -g \
+            EXTRA_FLAGS_FOR_BUILD EXTRA_FLAGS EXTRA_FLAGS_FOR_TARGET \
+            EXTRA_LDFLAGS_FOR_BUILD EXTRA_LDFLAGS_FOR_TARGET
+
+        # Extract flags from Bintools Wrappers
+        for post in '_FOR_BUILD' ""; do
+            curBintools="NIX_BINTOOLS''${post}"
+
+            declare -a extraLDFlags=()
+            if [[ -e "''${!curBintools}/nix-support/orig-libc" ]]; then
+                # Figure out what extra flags when linking to pass to the gcc
+                # compilers being generated to make sure that they use our libc.
+                extraLDFlags=($(< "''${!curBintools}/nix-support/libc-ldflags") $(< "''${!curBintools}/nix-support/libc-ldflags-before" || true))
+                if [ -e ''${!curBintools}/nix-support/ld-set-dynamic-linker ]; then
+                    extraLDFlags=-dynamic-linker=$(< ''${!curBintools}/nix-support/dynamic-linker)
+                fi
+
+                # The path to the Libc binaries such as `crti.o'.
+                libc_libdir="$(< "''${!curBintools}/nix-support/orig-libc")/lib"
+            else
+                # Hack: support impure environments.
+                extraLDFlags=("-L/usr/lib64" "-L/usr/lib")
+                libc_libdir="/usr/lib"
+            fi
+            extraLDFlags=("-L$libc_libdir" "-rpath" "$libc_libdir"
+                          "''${extraLDFlags[@]}")
+            for i in "''${extraLDFlags[@]}"; do
+                declare -g EXTRA_LDFLAGS''${post}+=" -Wl,$i"
+            done
+        done
+
+        # Extract flags from CC Wrappers
+        for post in '_FOR_BUILD' ""; do
+            curCC="NIX_CC''${post}"
+            curFIXINC="NIX_FIXINC_DUMMY''${post}"
+
+            declare -a extraFlags=()
+            if [[ -e "''${!curCC}/nix-support/orig-libc" ]]; then
+                # Figure out what extra compiling flags to pass to the gcc compilers
+                # being generated to make sure that they use our libc.
+                extraFlags=($(< "''${!curCC}/nix-support/libc-crt1-cflags") $(< "''${!curCC}/nix-support/libc-cflags"))
+
+                # The path to the Libc headers
+                libc_devdir="$(< "''${!curCC}/nix-support/orig-libc-dev")"
+
+                # Use *real* header files, otherwise a limits.h is generated that
+                # does not include Libc's limits.h (notably missing SSIZE_MAX,
+                # which breaks the build).
+                declare -g NIX_FIXINC_DUMMY''${post}="$libc_devdir/include"
+            else
+                # Hack: support impure environments.
+                extraFlags=("-isystem" "/usr/include")
+                declare -g NIX_FIXINC_DUMMY''${post}=/usr/include
+            fi
+
+            extraFlags=("-I''${!curFIXINC}" "''${extraFlags[@]}")
+
+            # BOOT_CFLAGS defaults to `-g -O2'; since we override it below, make
+            # sure to explictly add them so that files compiled with the bootstrap
+            # compiler are optimized and (optionally) contain debugging information
+            # (info "(gccinstall) Building").
+            if test -n "''${dontStrip-}"; then
+                extraFlags=("-O2" "-g" "''${extraFlags[@]}")
+            else
+                # Don't pass `-g' at all; this saves space while building.
+                extraFlags=("-O2" "''${extraFlags[@]}")
+            fi
+
+            declare -g EXTRA_FLAGS''${post}="''${extraFlags[*]}"
+        done
+
+        if test -z "''${targetConfig-}"; then
+            # host = target, so the flags are the same
+            EXTRA_FLAGS_FOR_TARGET="$EXTRA_FLAGS"
+            EXTRA_LDFLAGS_FOR_TARGET="$EXTRA_LDFLAGS"
+        fi
+
+        # CFLAGS_FOR_TARGET are needed for the libstdc++ configure script to find
+        # the startfiles.
+        # FLAGS_FOR_TARGET are needed for the target libraries to receive the -Bxxx
+        # for the startfiles.
+        makeFlagsArray+=(
+            "BUILD_SYSTEM_HEADER_DIR=$NIX_FIXINC_DUMMY_FOR_BUILD"
+            "SYSTEM_HEADER_DIR=$NIX_FIXINC_DUMMY_FOR_BUILD"
+            "NATIVE_SYSTEM_HEADER_DIR=$NIX_FIXINC_DUMMY"
+
+            "LDFLAGS_FOR_BUILD=$EXTRA_LDFLAGS_FOR_BUILD"
+            #"LDFLAGS=$EXTRA_LDFLAGS"
+            "LDFLAGS_FOR_TARGET=$EXTRA_LDFLAGS_FOR_TARGET"
+
+            "CFLAGS_FOR_BUILD=$EXTRA_FLAGS_FOR_BUILD $EXTRA_LDFLAGS_FOR_BUILD"
+            "CXXFLAGS_FOR_BUILD=$EXTRA_FLAGS_FOR_BUILD $EXTRA_LDFLAGS_FOR_BUILD"
+            "FLAGS_FOR_BUILD=$EXTRA_FLAGS_FOR_BUILD $EXTRA_LDFLAGS_FOR_BUILD"
+
+            # It seems there is a bug in GCC 5
+            #"CFLAGS=$EXTRA_FLAGS $EXTRA_LDFLAGS"
+            #"CXXFLAGS=$EXTRA_FLAGS $EXTRA_LDFLAGS"
+
+            "CFLAGS_FOR_TARGET=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
+            "CXXFLAGS_FOR_TARGET=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
+            "FLAGS_FOR_TARGET=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
+        )
+
+        if test -z "''${targetConfig-}"; then
+            makeFlagsArray+=(
+                "BOOT_CFLAGS=$EXTRA_FLAGS $EXTRA_LDFLAGS"
+                "BOOT_LDFLAGS=$EXTRA_FLAGS_FOR_TARGET $EXTRA_LDFLAGS_FOR_TARGET"
+            )
+        fi
+
+        if test "$withoutTargetLibc" == 1; then
+            # We don't want the gcc build to assume there will be a libc providing
+            # limits.h in this stage
+            makeFlagsArray+=(
+                'LIMITS_H_TEST=false'
+            )
+        else
+            makeFlagsArray+=(
+                'LIMITS_H_TEST=true'
+            )
+        fi
+    fi
+
+    eval "$oldOpts"
+  '';
+
+  preConfigure = (originalAttrs.preConfigure or "") + ''
+    if test -n "$newlibSrc"; then
+        tar xvf "$newlibSrc" -C ..
+        ln -s ../newlib-*/newlib newlib
+        # Patch to get armvt5el working:
+        sed -i -e 's/ arm)/ arm*)/' newlib/configure.host
+    fi
+
+    # Bug - they packaged zlib
+    if test -d "zlib"; then
+        # This breaks the build without-headers, which should build only
+        # the target libgcc as target libraries.
+        # See 'configure:5370'
+        rm -Rf zlib
+    fi
+
+    if test -n "$crossMingw" -a -n "$withoutTargetLibc"; then
+        mkdir -p ../mingw
+        # --with-build-sysroot expects that:
+        cp -R $libcCross/include ../mingw
+        configureFlags="$configureFlags --with-build-sysroot=`pwd`/.."
+    fi
+
+    # Perform the build in a different directory.
+    mkdir ../build
+    cd ../build
+    configureScript=../$sourceRoot/configure
+  '';
+
+  postConfigure = ''
+    # Avoid store paths when embedding ./configure flags into gcc.
+    # Mangled arguments are still useful when reporting bugs upstream.
+    sed -e "/TOPLEVEL_CONFIGURE_ARGUMENTS=/ s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" -i Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/''${targetConfig}/lib"
+    mkdir -p "''${!outputLib}/''${targetConfig}/lib"
+  '' +
+  # Make `lib64` symlinks to `lib`.
+  lib.optionalString (!enableMultilib && stdenv.hostPlatform.is64bit && !stdenv.hostPlatform.isMips64n32) ''
+    ln -s lib "$out/''${targetConfig}/lib64"
+    ln -s lib "''${!outputLib}/''${targetConfig}/lib64"
+  '' +
+  # On mips platforms, gcc follows the IRIX naming convention:
+  #
+  #  $PREFIX/lib   = mips32
+  #  $PREFIX/lib32 = mips64n32
+  #  $PREFIX/lib64 = mips64
+  #
+  # Make `lib32` symlinks to `lib`.
+  lib.optionalString (!enableMultilib && stdenv.targetPlatform.isMips64n32) ''
+    ln -s lib "$out/''${targetConfig}/lib32"
+    ln -s lib "''${!outputLib}/''${targetConfig}/lib32"
+  '';
+
+  postInstall = ''
+    # Move runtime libraries to lib output.
+    moveToOutput "''${targetConfig+$targetConfig/}lib/lib*.so*" "''${!outputLib}"
+    moveToOutput "''${targetConfig+$targetConfig/}lib/lib*.la"  "''${!outputLib}"
+    moveToOutput "''${targetConfig+$targetConfig/}lib/lib*.dylib" "''${!outputLib}"
+    moveToOutput "''${targetConfig+$targetConfig/}lib/lib*.dll.a" "''${!outputLib}"
+    moveToOutput "share/gcc-*/python" "''${!outputLib}"
+
+    if [ -z "$enableShared" ]; then
+        moveToOutput "''${targetConfig+$targetConfig/}lib/lib*.a" "''${!outputLib}"
+    fi
+
+    for i in "''${!outputLib}/''${targetConfig}"/lib/*.{la,py}; do
+        substituteInPlace "$i" --replace "$out" "''${!outputLib}"
+    done
+
+    if [ -n "$enableMultilib" ]; then
+        moveToOutput "''${targetConfig+$targetConfig/}lib64/lib*.so*" "''${!outputLib}"
+        moveToOutput "''${targetConfig+$targetConfig/}lib64/lib*.la"  "''${!outputLib}"
+        moveToOutput "''${targetConfig+$targetConfig/}lib64/lib*.dylib" "''${!outputLib}"
+
+        for i in "''${!outputLib}/''${targetConfig}"/lib64/*.{la,py}; do
+            substituteInPlace "$i" --replace "$out" "''${!outputLib}"
+        done
+    fi
+
+    # Remove `fixincl' to prevent a retained dependency on the
+    # previous gcc.
+    rm -rf $out/libexec/gcc/*/*/install-tools
+    rm -rf $out/lib/gcc/*/*/install-tools
+
+    # More dependencies with the previous gcc or some libs (gccbug stores the build command line)
+    rm -rf $out/bin/gccbug
+
+    if type "install_name_tool"; then
+        for i in "''${!outputLib}"/lib/*.*.dylib "''${!outputLib}"/lib/*.so.[0-9]; do
+            install_name_tool -id "$i" "$i" || true
+            for old_path in $(otool -L "$i" | grep "$out" | awk '{print $1}'); do
+              new_path=`echo "$old_path" | sed "s,$out,''${!outputLib},"`
+              install_name_tool -change "$old_path" "$new_path" "$i" || true
+            done
+        done
+    fi
+
+    # Get rid of some "fixed" header files
+    rm -rfv $out/lib/gcc/*/*/include-fixed/{root,linux,sys/mount.h,bits/statx.h}
+
+    # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks.
+    for i in $out/bin/*-gcc*; do
+        if cmp -s $out/bin/gcc $i; then
+            ln -sfn gcc $i
+        fi
+    done
+
+    for i in $out/bin/c++ $out/bin/*-c++* $out/bin/*-g++*; do
+        if cmp -s $out/bin/g++ $i; then
+            ln -sfn g++ $i
+        fi
+    done
+
+    # Two identical man pages are shipped (moving and compressing is done later)
+    for i in "$out"/share/man/man1/*g++.1; do
+        if test -e "$i"; then
+            man_prefix=`echo "$i" | sed "s,.*/\(.*\)g++.1,\1,"`
+            ln -sf "$man_prefix"gcc.1 "$i"
+        fi
+    done
+  '';
+}))
diff --git a/nixpkgs/pkgs/development/compilers/gcc/common/libgcc-buildstuff.nix b/nixpkgs/pkgs/development/compilers/gcc/common/libgcc-buildstuff.nix
new file mode 100644
index 000000000000..e7dc570a560c
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gcc/common/libgcc-buildstuff.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+}:
+
+# Trick to build a gcc that is capable of emitting shared libraries *without* having the
+# targetPlatform libc available beforehand.  Taken from:
+#   https://web.archive.org/web/20170222224855/http://frank.harvard.edu/~coldwell/toolchain/
+#   https://web.archive.org/web/20170224235700/http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff
+let
+  # crt{i,n}.o are the first and last (respectively) object file
+  # linked when producing an executable.  Traditionally these
+  # files are delivered as part of the C library, but on GNU
+  # systems they are in fact built by GCC.  Since libgcc needs to
+  # build before glibc, we can't wait for them to be copied by
+  # glibc.  At this early pre-glibc stage these files sometimes
+  # have different names.
+  crtstuff-ofiles =
+    if stdenv.targetPlatform.isPower
+    then "ecrti.o ecrtn.o ncrti.o ncrtn.o"
+    else "crti.o crtn.o";
+
+  # Normally, `SHLIB_LC` is set to `-lc`, which means that
+  # `libgcc_s.so` cannot be built until `libc.so` is available.
+  # The assignment below clobbers this variable, removing the
+  # `-lc`.
+  #
+  # On PowerPC we add `-mnewlib`, which means "libc has not been
+  # built yet".  This causes libgcc's Makefile to use the
+  # gcc-built `{e,n}crt{n,i}.o` instead of failing to find the
+  # versions which have been repackaged in libc as `crt{n,i}.o`
+  #
+  SHLIB_LC = lib.optionalString stdenv.targetPlatform.isPower "-mnewlib";
+
+in ''
+    echo 'libgcc.a: ${crtstuff-ofiles}' >> libgcc/Makefile.in
+    echo 'SHLIB_LC=${SHLIB_LC}' >> libgcc/Makefile.in
+  ''
diff --git a/nixpkgs/pkgs/development/compilers/gcc/common/libgcc.nix b/nixpkgs/pkgs/development/compilers/gcc/common/libgcc.nix
index b14d111e361f..4ab6eb2b3b44 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/common/libgcc.nix
+++ b/nixpkgs/pkgs/development/compilers/gcc/common/libgcc.nix
@@ -44,14 +44,14 @@ lib.optional (lib.versionAtLeast version "11.0")
     !langJit &&
     !stdenv.hostPlatform.isDarwin &&
     enableShared
-    ;
+  ;
 
-    # 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";
+  # 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 ((!langC) || langJit || enableLibGccOutput) {
diff --git a/nixpkgs/pkgs/development/compilers/gcc/common/pre-configure.nix b/nixpkgs/pkgs/development/compilers/gcc/common/pre-configure.nix
index e386693b22c7..5cb2f186fd1d 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/common/pre-configure.nix
+++ b/nixpkgs/pkgs/development/compilers/gcc/common/pre-configure.nix
@@ -112,52 +112,5 @@ in lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) ''
   export inhibit_libc=true
 ''
 
-# Trick to build a gcc that is capable of emitting shared libraries *without* having the
-# targetPlatform libc available beforehand.  Taken from:
-#   https://web.archive.org/web/20170222224855/http://frank.harvard.edu/~coldwell/toolchain/
-#   https://web.archive.org/web/20170224235700/http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff
 + lib.optionalString (targetPlatform != hostPlatform && withoutTargetLibc && enableShared)
-  (let
-
-    # crt{i,n}.o are the first and last (respectively) object file
-    # linked when producing an executable.  Traditionally these
-    # files are delivered as part of the C library, but on GNU
-    # systems they are in fact built by GCC.  Since libgcc needs to
-    # build before glibc, we can't wait for them to be copied by
-    # glibc.  At this early pre-glibc stage these files sometimes
-    # have different names.
-    crtstuff-ofiles =
-      if targetPlatform.isPower
-      then "ecrti.o ecrtn.o ncrti.o ncrtn.o"
-      else "crti.o crtn.o";
-
-    # Normally, `SHLIB_LC` is set to `-lc`, which means that
-    # `libgcc_s.so` cannot be built until `libc.so` is available.
-    # The assignment below clobbers this variable, removing the
-    # `-lc`.
-    #
-    # On PowerPC we add `-mnewlib`, which means "libc has not been
-    # built yet".  This causes libgcc's Makefile to use the
-    # gcc-built `{e,n}crt{n,i}.o` instead of failing to find the
-    # versions which have been repackaged in libc as `crt{n,i}.o`
-    #
-    SHLIB_LC = lib.optionalString targetPlatform.isPower "-mnewlib";
-
-  in ''
-    echo 'libgcc.a: ${crtstuff-ofiles}' >> libgcc/Makefile.in
-    echo 'SHLIB_LC=${SHLIB_LC}' >> libgcc/Makefile.in
-  '')
-
-+ lib.optionalString (!enableMultilib && hostPlatform.is64bit && !hostPlatform.isMips64n32) ''
-  export linkLib64toLib=1
-''
-
-# On mips platforms, gcc follows the IRIX naming convention:
-#
-#  $PREFIX/lib   = mips32
-#  $PREFIX/lib32 = mips64n32
-#  $PREFIX/lib64 = mips64
-#
-+ lib.optionalString (!enableMultilib && targetPlatform.isMips64n32) ''
-  export linkLib32toLib=1
-''
+  (import ./libgcc-buildstuff.nix { inherit lib stdenv; })
diff --git a/nixpkgs/pkgs/development/compilers/gcc/default.nix b/nixpkgs/pkgs/development/compilers/gcc/default.nix
new file mode 100644
index 000000000000..f467aa32f7d1
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gcc/default.nix
@@ -0,0 +1,457 @@
+{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
+, langC ? true, langCC ? true, langFortran ? false
+, langAda ? false
+, langObjC ? stdenv.targetPlatform.isDarwin
+, langObjCpp ? stdenv.targetPlatform.isDarwin
+, langD ? false
+, 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
+, libucontext ? null
+, gnat-bootstrap ? 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 # unused; just for compat with gcc4, as we override the parameter on some places
+, buildPackages
+, libxcrypt
+, disableGdbPlugin ? !enablePlugin
+, nukeReferences
+, callPackage
+, majorMinorVersion
+
+# only for gcc<=6.x
+, langJava ? false
+, flex
+, boehmgc ? null
+, zip ? null, unzip ? null, pkg-config ? null
+, gtk2 ? null, libart_lgpl ? null
+, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null
+, libXrender ? null, xorgproto ? null
+, libXrandr ? null, libXi ? null
+, x11Support ? langJava
+}:
+
+let
+  version = {
+    "13" = "13.2.0";
+    "12" = "12.3.0";
+    "11" = "11.4.0";
+    "10" = "10.5.0";
+    "9"  =  "9.5.0";
+    "8"  =  "8.5.0";
+    "7"  =  "7.5.0";
+    "6"  =  "6.5.0";
+    "4.9"=  "4.9.4";
+    "4.8"=  "4.8.5";
+  }."${majorMinorVersion}";
+
+  majorVersion = lib.versions.major version;
+  atLeast13 = lib.versionAtLeast version "13";
+  atLeast12 = lib.versionAtLeast version "12";
+  atLeast11 = lib.versionAtLeast version "11";
+  atLeast10 = lib.versionAtLeast version "10";
+  atLeast9  = lib.versionAtLeast version  "9";
+  atLeast8  = lib.versionAtLeast version  "8";
+  atLeast7  = lib.versionAtLeast version  "7";
+  atLeast6  = lib.versionAtLeast version  "6";
+  atLeast49 = lib.versionAtLeast version  "4.9";
+  is13 = majorVersion == "13";
+  is12 = majorVersion == "12";
+  is11 = majorVersion == "11";
+  is10 = majorVersion == "10";
+  is9  = majorVersion == "9";
+  is8  = majorVersion == "8";
+  is7  = majorVersion == "7";
+  is6  = majorVersion == "6";
+  is49 = majorVersion == "4" && lib.versions.minor version == "9";
+  is48 = majorVersion == "4" && lib.versions.minor version == "8";
+in
+
+# We enable the isl cloog backend.
+assert !atLeast6 -> (cloog != null -> isl != null);
+
+assert langJava -> !atLeast7 && zip != null && unzip != null && zlib != null && boehmgc != null && perl != null;  # for `--enable-java-home'
+
+# Make sure we get GNU sed.
+assert stdenv.buildPlatform.isDarwin -> gnused != null;
+
+# The go frontend is written in c++
+assert langGo -> langCC;
+assert (atLeast6 && !is7 && !is8) -> (langAda -> gnat-bootstrap != null);
+
+# TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes).
+#   error: GDC is required to build d
+assert atLeast12 -> !langD;
+
+# 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 inherit version;
+    disableBootstrap = atLeast11 && !stdenv.hostPlatform.isDarwin && (atLeast12 -> !profiledCompiler);
+
+    inherit (stdenv) buildPlatform hostPlatform targetPlatform;
+
+    patches = callFile ./patches {};
+
+    /* 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}-";
+
+    javaAwtGtk = langJava && x11Support;
+    xlibs = [
+      libX11 libXt libSM libICE libXtst libXrender libXrandr libXi
+      xorgproto
+    ];
+    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 gcc${majorVersion}.cc.override)" | jq '.[]' --raw-output'
+      inherit
+        binutils
+        buildPackages
+        cloog
+        withoutTargetLibc
+        disableBootstrap
+        disableGdbPlugin
+        enableLTO
+        enableMultilib
+        enablePlugin
+        enableShared
+        fetchpatch
+        fetchurl
+        gettext
+        gmp
+        gnat-bootstrap
+        gnused
+        isl
+        langAda
+        langC
+        langCC
+        langD
+        langFortran
+        langGo
+        langJit
+        langObjC
+        langObjCpp
+        lib
+        libcCross
+        libmpc
+        libucontext
+        libxcrypt
+        mpfr
+        name
+        noSysDirs
+        nukeReferences
+        patchelf
+        perl
+        profiledCompiler
+        reproducibleBuild
+        staticCompiler
+        stdenv
+        targetPackages
+        texinfo
+        threadsCross
+        which
+        zip
+        zlib
+      ;
+    } // lib.optionalAttrs (!atLeast7) {
+      inherit
+        boehmgc
+        flex
+        gnat-bootstrap
+        gtk2
+        langAda
+        langJava
+        libICE
+        libSM
+        libX11
+        libXi
+        libXrandr
+        libXrender
+        libXt
+        libXtst
+        libart_lgpl
+        pkg-config
+        unzip
+        x11Support
+        xorgproto
+        javaAwtGtk
+        xlibs
+      ;
+      javaEcj = fetchurl {
+        # The `$(top_srcdir)/ecj.jar' file is automatically picked up at
+        # `configure' time.
+
+        # XXX: Eventually we might want to take it from upstream.
+        url = "ftp://sourceware.org/pub/java/ecj-4.3.jar";
+        sha256 = "0jz7hvc0s6iydmhgh5h2m15yza7p2rlss2vkif30vm9y77m97qcx";
+      };
+
+      # Antlr (optional) allows the Java `gjdoc' tool to be built.  We want a
+      # binary distribution here to allow the whole chain to be bootstrapped.
+      javaAntlr = fetchurl {
+        url = "https://www.antlr.org/download/antlr-4.4-complete.jar";
+        sha256 = "02lda2imivsvsis8rnzmbrbp8rh1kb8vmq4i67pqhkwz7lf8y6dz";
+      };
+    });
+
+in
+
+# We need all these X libraries when building AWT with GTK.
+assert !atLeast7 -> (x11Support -> (filter (x: x == null) ([ gtk2 libart_lgpl ] ++ xlibs)) == []);
+
+lib.pipe ((callFile ./common/builder.nix {}) ({
+  pname = "${crossNameAddon}${name}";
+  inherit version;
+
+  src = if is6 && stdenv.targetPlatform.isVc4 then fetchFromGitHub {
+    owner = "itszor";
+    repo = "gcc-vc4";
+    rev = "e90ff43f9671c760cf0d1dd62f569a0fb9bf8918";
+    sha256 = "0gxf66hwqk26h8f853sybphqa5ca0cva2kmrw5jsiv6139g0qnp8";
+  } else if is6 && stdenv.targetPlatform.isRedox then fetchFromGitHub {
+    owner = "redox-os";
+    repo = "gcc";
+    rev = "f360ac095028d286fc6dde4d02daed48f59813fa"; # `redox` branch
+    sha256 = "1an96h8l58pppyh3qqv90g8hgcfd9hj7igvh2gigmkxbrx94khfl";
+  } else fetchurl {
+    url = if atLeast7
+          then "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"
+          else if atLeast6
+          then "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.xz"
+          else "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2";
+    ${if is10 || is11 || is13 then "hash" else "sha256"} = {
+      "13.2.0" = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o=";
+      "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs=";
+      "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk=";
+      "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E=";
+      "9.5.0"  = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7";
+      "8.5.0"  = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k";
+      "7.5.0"  = "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq";
+      "6.5.0"  = "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby";
+      "4.9.4"  = "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc";
+      "4.8.5"  = "08yggr18v373a1ihj0rg2vd6psnic42b518xcgp3r9k81xz1xyr2";
+    }."${version}";
+  };
+
+  inherit patches;
+
+  outputs =
+    if atLeast7
+    then [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib"
+    else if atLeast49 && (langJava || langGo || (if atLeast6 then langJit else targetPlatform.isDarwin)) then ["out" "man" "info"]
+    else [ "out" "lib" "man" "info" ];
+
+  setOutputFlags = false;
+  NIX_NO_SELF_RPATH = true;
+
+  libc_dev = stdenv.cc.libc_dev;
+
+  hardeningDisable = [ "format" "pie" ]
+  ++ lib.optionals (is11 && langAda) [ "fortify3" ];
+
+  postPatch = lib.optionalString atLeast7 ''
+    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 (atLeast6 && hostPlatform.isDarwin) ''
+    substituteInPlace gcc/config/darwin-c.c${lib.optionalString atLeast12 "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'${lib.optionalString atLeast6 ", \\`UCLIBC_DYNAMIC_LINKER',"} and \`${if atLeast6 then "MUSL" else "UCLIBC"}_DYNAMIC_LINKER' macros..."
+           for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h
+           do
+             grep -q ${lib.optionalString (!atLeast6) "LIBC"}_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'${lib.optionalString atLeast6 " \\"}
+        '' + lib.optionalString atLeast6 ''
+${""}                -e 's|define[[:blank:]]*MUSL_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define MUSL_DYNAMIC_LINKER\1 "${libc.out}\2"|g'
+        '' + ''
+${""}          done
+        '' + lib.optionalString (atLeast6 && targetPlatform.libc == "musl") ''
+           sed -i gcc/config/linux.h -e '1i#undef LOCAL_INCLUDE_DIR'
+        ''
+        )
+    ))
+      + lib.optionalString (atLeast7 && targetPlatform.isAvr) (''
+            makeFlagsArray+=(
+          '' + (lib.optionalString atLeast10 ''
+               '-s' # workaround for hitting hydra log limit
+          '') + ''
+               'LIMITS_H_TEST=false'
+            )
+          '');
+
+  inherit noSysDirs staticCompiler withoutTargetLibc
+    libcCross crossMingw;
+
+  inherit (callFile ./common/dependencies.nix { }) depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget;
+
+  preConfigure = (callFile ./common/pre-configure.nix { }) + lib.optionalString atLeast10 ''
+    ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h
+  '';
+
+  dontDisableStatic = true;
+
+  configurePlatforms = [ "build" "host" "target" ];
+
+  configureFlags = (callFile ./common/configure-flags.nix { })
+    ++ optional (is7 && targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419"
+    ++ optional (is7 && targetPlatform.isNetBSD) "--disable-libcilkrts";
+
+  targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null;
+
+  buildFlags =
+    # we do not yet have Nix-driven profiling
+    assert atLeast12 -> (profiledCompiler -> !disableBootstrap);
+    if atLeast11
+    then let target =
+               lib.optionalString (profiledCompiler) "profiled" +
+               lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap";
+         in lib.optional (target != "") target
+    else
+      optional
+        (targetPlatform == hostPlatform && hostPlatform == buildPlatform)
+        (if profiledCompiler then "profiledbootstrap" else "bootstrap");
+
+  inherit (callFile ./common/strip-attributes.nix { })
+    stripDebugList
+    stripDebugListTarget
+    preFixup;
+
+  # https://gcc.gnu.org/PR109898
+  enableParallelInstalling = false;
+
+  # 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.
+  #
+  # Note: When building the Java AWT GTK peer, the build system doesn't honor
+  # `--with-gmp' et al., e.g., when building
+  # `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just add
+  # them to $CPATH and $LIBRARY_PATH in this case.
+  #
+  # 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
+    ++ optional langJava boehmgc
+    ++ optionals javaAwtGtk xlibs
+    ++ optionals javaAwtGtk [ gmp mpfr ]
+  ));
+
+  LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath (
+    optional (zlib != null) zlib
+    ++ optional langJava boehmgc
+    ++ optionals javaAwtGtk xlibs
+    ++ optionals javaAwtGtk [ gmp mpfr ]
+  ));
+
+  inherit (callFile ./common/extra-target-flags.nix { })
+    EXTRA_FLAGS_FOR_TARGET
+    EXTRA_LDFLAGS_FOR_TARGET
+    ;
+
+  passthru = {
+    inherit langC langCC langObjC langObjCpp langAda langFortran langGo langD version;
+    isGNU = true;
+  } // lib.optionalAttrs (!atLeast12) {
+    hardeningUnsupportedFlags = lib.optionals is48 [ "stackprotector" ] ++ [ "fortify3" ];
+  };
+
+  enableParallelBuilding = true;
+  inherit enableShared enableMultilib;
+
+  meta = {
+    inherit (callFile ./common/meta.nix { })
+      homepage
+      license
+      description
+      longDescription
+      platforms
+      maintainers
+    ;
+  } // lib.optionalAttrs (!atLeast11) {
+    badPlatforms = if !is49 then [ "aarch64-darwin" ] else lib.platforms.darwin;
+  };
+} // optionalAttrs is7 {
+  env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument";
+} // optionalAttrs (!atLeast7) {
+  env.langJava = langJava;
+} // optionalAttrs atLeast6 {
+  NIX_LDFLAGS = lib.optionalString  hostPlatform.isSunOS "-lm";
+} // optionalAttrs (!atLeast8) {
+  doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv
+} // optionalAttrs enableMultilib {
+  dontMoveLib64 = true;
+} // optionalAttrs (((is49 && !stdenv.hostPlatform.isDarwin) || is6) && langJava) {
+  postFixup = ''
+    target="$(echo "$out/libexec/gcc"/*/*/ecj*)"
+    patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target"
+  '';
+}
+))
+([
+  (callPackage ./common/libgcc.nix   { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; })
+] ++ optionals atLeast11 [
+  (callPackage ./common/checksum.nix { inherit langC langCC; })
+])
+
diff --git a/nixpkgs/pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch
index d9809e828f10..d9809e828f10 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/11/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/11/Added-mcf-thread-model-support-from-mcfgthread.patch
index 77202438e47d..77202438e47d 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/11/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/11/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/11/avr-gcc-11.3-darwin.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/11/avr-gcc-11.3-darwin.patch
index 787862fbcffa..787862fbcffa 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/11/avr-gcc-11.3-darwin.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/11/avr-gcc-11.3-darwin.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/11/gcc-issue-103910.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/11/gcc-issue-103910.patch
index c3edd960f097..c3edd960f097 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/11/gcc-issue-103910.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/11/gcc-issue-103910.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/12/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/12/Added-mcf-thread-model-support-from-mcfgthread.patch
index 77202438e47d..77202438e47d 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/12/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/12/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/12/lambda-ICE-PR109241.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/12/lambda-ICE-PR109241.patch
index a27a8a08d9d5..a27a8a08d9d5 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/12/lambda-ICE-PR109241.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/12/lambda-ICE-PR109241.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/patches/13/no-sys-dirs-riscv.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/13/no-sys-dirs-riscv.patch
new file mode 100644
index 000000000000..add4d59b41ae
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/13/no-sys-dirs-riscv.patch
@@ -0,0 +1,13 @@
+--- a/gcc/config/riscv/linux.h
++++ b/gcc/config/riscv/linux.h
+@@ -69,9 +69,5 @@
+ 
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+ 
+-#define STARTFILE_PREFIX_SPEC 			\
+-   "/lib" XLEN_SPEC "/" ABI_SPEC "/ "		\
+-   "/usr/lib" XLEN_SPEC "/" ABI_SPEC "/ "	\
+-   "/lib/ "					\
+-   "/usr/lib/ "
++#define STARTFILE_PREFIX_SPEC ""
+ 
diff --git a/nixpkgs/pkgs/development/compilers/gcc/4.9/libsanitizer.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/4.9/libsanitizer.patch
index f1a438a4e5f0..f1a438a4e5f0 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/4.9/libsanitizer.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/4.9/libsanitizer.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/4.9/parallel-strsignal.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/4.9/parallel-strsignal.patch
index 4c98ca273a54..4c98ca273a54 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/4.9/parallel-strsignal.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/4.9/parallel-strsignal.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/6/0001-Fix-build-for-glibc-2.31.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/6/0001-Fix-build-for-glibc-2.31.patch
index 0cd04e218caf..0cd04e218caf 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/6/0001-Fix-build-for-glibc-2.31.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/6/0001-Fix-build-for-glibc-2.31.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/6/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/6/Added-mcf-thread-model-support-from-mcfgthread.patch
index 25e3a902cbf2..25e3a902cbf2 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/6/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/6/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/6/fix-objdump-check.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/6/fix-objdump-check.patch
index f9adbe9eb1ca..f9adbe9eb1ca 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/6/fix-objdump-check.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/6/fix-objdump-check.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/6/gnat-glibc234.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/6/gnat-glibc234.patch
index 2d29cd7fa77f..2d29cd7fa77f 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/6/gnat-glibc234.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/6/gnat-glibc234.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/6/gogcc-workaround-glibc-2.36.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/6/gogcc-workaround-glibc-2.36.patch
index bc11f990e5e9..bc11f990e5e9 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/6/gogcc-workaround-glibc-2.36.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/6/gogcc-workaround-glibc-2.36.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/7/0001-Fix-build-for-glibc-2.31.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/7/0001-Fix-build-for-glibc-2.31.patch
index d8aad14942bf..d8aad14942bf 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/7/0001-Fix-build-for-glibc-2.31.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/7/0001-Fix-build-for-glibc-2.31.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/7/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/7/Added-mcf-thread-model-support-from-mcfgthread.patch
index 0c5d0ee9e460..0c5d0ee9e460 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/7/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/7/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/7/gcc8-asan-glibc-2.34.patch
index 5645b97c1d89..5645b97c1d89 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/7/gcc8-asan-glibc-2.34.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/7/riscv-no-relax.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/7/riscv-no-relax.patch
index 93d9cd1d60f5..93d9cd1d60f5 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/7/riscv-no-relax.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/7/riscv-no-relax.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/7/riscv-pthread-reentrant.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/7/riscv-pthread-reentrant.patch
index c7527ffb2b16..c7527ffb2b16 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/7/riscv-pthread-reentrant.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/7/riscv-pthread-reentrant.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch
index d9809e828f10..d9809e828f10 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/9/Added-mcf-thread-model-support-from-mcfgthread.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/9/Added-mcf-thread-model-support-from-mcfgthread.patch
index d9809e828f10..d9809e828f10 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/9/Added-mcf-thread-model-support-from-mcfgthread.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/9/Added-mcf-thread-model-support-from-mcfgthread.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/9/avoid-cycling-subreg-reloads.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/9/avoid-cycling-subreg-reloads.patch
index 17a4e0a2447b..17a4e0a2447b 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/9/avoid-cycling-subreg-reloads.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/9/avoid-cycling-subreg-reloads.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/9/fix-struct-redefinition-on-glibc-2.36.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/9/fix-struct-redefinition-on-glibc-2.36.patch
index 5b4abfd02e0b..5b4abfd02e0b 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/9/fix-struct-redefinition-on-glibc-2.36.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/9/fix-struct-redefinition-on-glibc-2.36.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/9/gcc9-asan-glibc-2.34.patch
index 1aea1f9b18a1..1aea1f9b18a1 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/9/gcc9-asan-glibc-2.34.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/ada-cctools-as-detection-configure.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/ada-cctools-as-detection-configure.patch
index e6b5b3653322..e6b5b3653322 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/ada-cctools-as-detection-configure.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/ada-cctools-as-detection-configure.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/patches/default.nix b/nixpkgs/pkgs/development/compilers/gcc/patches/default.nix
new file mode 100644
index 000000000000..79dbad30a0a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/default.nix
@@ -0,0 +1,245 @@
+{ lib, stdenv
+, langC
+, langAda
+, langObjC
+, langObjCpp
+, langD
+, langFortran
+, langGo
+, reproducibleBuild
+, profiledCompiler
+, langJit
+, staticCompiler
+, enableShared
+, enableLTO
+, version
+, fetchpatch
+, majorVersion
+, targetPlatform
+, hostPlatform
+, noSysDirs
+, buildPlatform
+, fetchurl
+, withoutTargetLibc
+, threadsCross
+}:
+
+let
+  atLeast13 = lib.versionAtLeast version "13";
+  atLeast12 = lib.versionAtLeast version "12";
+  atLeast11 = lib.versionAtLeast version "11";
+  atLeast10 = lib.versionAtLeast version "10";
+  atLeast9  = lib.versionAtLeast version  "9";
+  atLeast8  = lib.versionAtLeast version  "8";
+  atLeast7  = lib.versionAtLeast version  "7";
+  atLeast6  = lib.versionAtLeast version  "6";
+  atLeast49 = lib.versionAtLeast version  "4.9";
+  is13 = majorVersion == "13";
+  is12 = majorVersion == "12";
+  is11 = majorVersion == "11";
+  is10 = majorVersion == "10";
+  is9  = majorVersion == "9";
+  is8  = majorVersion == "8";
+  is7  = majorVersion == "7";
+  is6  = majorVersion == "6";
+  is49 = majorVersion == "4" && lib.versions.minor version == "9";
+  is48 = majorVersion == "4" && lib.versions.minor version == "8";
+  inherit (lib) optionals optional;
+in
+
+optionals (is49 || is6) [
+  ./9/fix-struct-redefinition-on-glibc-2.36.patch
+] ++ optionals (is49 || (is6 && !stdenv.targetPlatform.isRedox)) [
+  ./use-source-date-epoch.patch
+] ++ optionals (is6 && !stdenv.targetPlatform.isRedox) [
+  ./6/0001-Fix-build-for-glibc-2.31.patch
+] ++ optionals (!atLeast6) [
+  ./parallel-bconfig.patch
+] ++ optionals (is49) [
+  (./. + "/${lib.versions.major version}.${lib.versions.minor version}/parallel-strsignal.patch")
+  (./. + "/${lib.versions.major version}.${lib.versions.minor version}/libsanitizer.patch")
+  (fetchpatch {
+    name = "avoid-ustat-glibc-2.28.patch";
+    url = "https://gitweb.gentoo.org/proj/gcc-patches.git/plain/4.9.4/gentoo/100_all_avoid-ustat-glibc-2.28.patch?id=55fcb515620a8f7d3bb77eba938aa0fcf0d67c96";
+    sha256 = "0b32sb4psv5lq0ij9fwhi1b4pjbwdjnv24nqprsk14dsc6xmi1g0";
+  })
+] ++ optionals (is7) [
+  # https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00633.html
+  (./. + "/${majorVersion}/riscv-pthread-reentrant.patch")
+  # https://gcc.gnu.org/ml/gcc-patches/2018-03/msg00297.html
+  (./. + "/${majorVersion}/riscv-no-relax.patch")
+  # Fix for asan w/glibc-2.34. Although there's no upstream backport to v7,
+  # the patch from gcc 8 seems to work perfectly fine.
+  (./. + "/${majorVersion}/gcc8-asan-glibc-2.34.patch")
+  (./. + "/${majorVersion}/0001-Fix-build-for-glibc-2.31.patch")
+] ++ optional (majorVersion == "9") ./9/fix-struct-redefinition-on-glibc-2.36.patch
+++ optional (atLeast6 && !atLeast12) ./fix-bug-80431.patch
+++ optional (is7 || is8) ./9/fix-struct-redefinition-on-glibc-2.36.patch
+++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch
+++ optional (atLeast7 && !atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch
+++ optional (noSysDirs) (if atLeast12 then ./gcc-12-no-sys-dirs.patch else ./no-sys-dirs.patch)
+++ optionals (is6 && langAda) [
+  ./gnat-cflags.patch
+  ./6/gnat-glibc234.patch
+] ++ optional (noSysDirs && atLeast10 && !atLeast13 && (is10 || (!atLeast12 -> hostPlatform.isRiscV))) ./no-sys-dirs-riscv.patch
+++ optional (noSysDirs && is13) ./13/no-sys-dirs-riscv.patch
+++ optional (noSysDirs && is9 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch
+++ optionals (langAda || atLeast12) [
+  ./gnat-cflags-11.patch
+] ++ optionals (langAda && (is9 || is10)) [
+  ./gnat-cflags.patch
+] ++ optionals atLeast12 [
+  ./gcc-12-gfortran-driving.patch
+  ./ppc-musl.patch
+] ++ optionals is12 [
+  # backport ICE fix on ccache code
+  ./12/lambda-ICE-PR109241.patch
+]
+# We only apply this patch when building a native toolchain for aarch64-darwin, as it breaks building
+# a foreign one: https://github.com/iains/gcc-12-branch/issues/18
+++ optionals (stdenv.isDarwin && stdenv.isAarch64 && buildPlatform == hostPlatform && hostPlatform == targetPlatform) ({
+  "13" = [ (fetchpatch {
+    name = "gcc-13-darwin-aarch64-support.patch";
+    url = "https://raw.githubusercontent.com/Homebrew/formula-patches/3c5cbc8e9cf444a1967786af48e430588e1eb481/gcc/gcc-13.2.0.diff";
+    sha256 = "sha256-Y5r3U3dwAFG6+b0TNCFd18PNxYu2+W/5zDbZ5cHvv+U=";
+  }) ];
+  "12" = [ (fetchurl {
+    name = "gcc-12-darwin-aarch64-support.patch";
+    url = "https://raw.githubusercontent.com/Homebrew/formula-patches/f1188b90d610e2ed170b22512ff7435ba5c891e2/gcc/gcc-12.3.0.diff";
+    sha256 = "sha256-naL5ZNiurqfDBiPSU8PTbTmLqj25B+vjjiqc4fAFgYs=";
+  }) ];
+}."${majorVersion}" or [])
+++ optional (atLeast9 && langD) ./libphobos.patch
+++ optional (is7 && hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied
+  url = "https://git.busybox.net/buildroot/plain/package/gcc/7.1.0/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02";
+  sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs";
+})
+++ optional (!atLeast12 && langFortran) ./gfortran-driving.patch
+++ optional (!atLeast49 && hostPlatform.isDarwin) ./gfortran-darwin-NXConstStr.patch
+++ optionals (is49) [
+  # glibc-2.26
+  ./struct-ucontext.patch
+  ./struct-sigaltstack-4.9.patch
+]
+# TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering
+++ optional (atLeast7 && !atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch
+++ optional ((is6 || is7) && targetPlatform.libc == "musl" && targetPlatform.isx86_32) (fetchpatch {
+  url = "https://git.alpinelinux.org/aports/plain/main/gcc/gcc-6.1-musl-libssp.patch?id=5e4b96e23871ee28ef593b439f8c07ca7c7eb5bb";
+  sha256 = "1jf1ciz4gr49lwyh8knfhw6l5gvfkwzjy90m7qiwkcbsf4a3fqn2";
+})
+++ optional ((is6 || is7 || is8) && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch
+++ optional (is6 && langGo) ./gogcc-workaround-glibc-2.36.patch
+# TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering
+++ optionals (is11 && stdenv.isDarwin) [
+  (fetchpatch {
+    # There are no upstream release tags in https://github.com/iains/gcc-11-branch.
+    # ff4bf32 is the commit from https://github.com/gcc-mirror/gcc/releases/tag/releases%2Fgcc-11.4.0
+    url = "https://github.com/iains/gcc-11-branch/compare/ff4bf326d03e750a8d4905ea49425fe7d15a04b8..gcc-11.4-darwin-r0.diff";
+    hash = "sha256-6prPgR2eGVJs7vKd6iM1eZsEPCD1ShzLns2Z+29vlt4=";
+  })
+]
+# https://github.com/osx-cross/homebrew-avr/issues/280#issuecomment-1272381808
+++ optional (is11 && stdenv.isDarwin && targetPlatform.isAvr) ./avr-gcc-11.3-darwin.patch
+
+# backport fixes to build gccgo with musl libc
+++ optionals (atLeast12 && langGo && stdenv.hostPlatform.isMusl) [
+  (fetchpatch {
+    excludes = [ "gcc/go/gofrontend/MERGE" ];
+    url = "https://github.com/gcc-mirror/gcc/commit/cf79b1117bd177d3d4c6ed24b6fa243c3628ac2d.diff";
+    hash = "sha256-mS5ZiYi5D8CpGXrWg3tXlbhp4o86ew1imCTwaHLfl+I=";
+  })
+  (fetchpatch {
+    excludes = [ "gcc/go/gofrontend/MERGE" ];
+    url = "https://github.com/gcc-mirror/gcc/commit/7f195a2270910a6ed08bd76e3a16b0a6503f9faf.diff";
+    hash = "sha256-Ze/cFM0dQofKH00PWPDoklXUlwWhwA1nyTuiDAZ6FKo=";
+  })
+  (fetchpatch {
+    excludes = [ "gcc/go/gofrontend/MERGE" ];
+    url = "https://github.com/gcc-mirror/gcc/commit/762fd5e5547e464e25b4bee435db6df4eda0de90.diff";
+    hash = "sha256-o28upwTcHAnHG2Iq0OewzwSBEhHs+XpBGdIfZdT81pk=";
+  })
+  (fetchpatch {
+    excludes = [ "gcc/go/gofrontend/MERGE" ];
+    url = "https://github.com/gcc-mirror/gcc/commit/e73d9fcafbd07bc3714fbaf8a82db71d50015c92.diff";
+    hash = "sha256-1SjYCVHLEUihdON2TOC3Z2ufM+jf2vH0LvYtZL+c1Fo=";
+  })
+  (fetchpatch {
+    excludes = [ "gcc/go/gofrontend/MERGE" ];
+    url = "https://github.com/gcc-mirror/gcc/commit/b6c6a3d64f2e4e9347733290aca3c75898c44b2e.diff";
+    hash = "sha256-RycJ3YCHd3MXtYFjxP0zY2Wuw7/C4bWoBAQtTKJZPOQ=";
+  })
+  (fetchpatch {
+    excludes = [ "gcc/go/gofrontend/MERGE" ];
+    url = "https://github.com/gcc-mirror/gcc/commit/2b1a604a9b28fbf4f382060bebd04adb83acc2f9.diff";
+    hash = "sha256-WiBQG0Xbk75rHk+AMDvsbrm+dc7lDH0EONJXSdEeMGE=";
+  })
+  (fetchpatch {
+    url = "https://github.com/gcc-mirror/gcc/commit/c86b726c048eddc1be320c0bf64a897658bee13d.diff";
+    hash = "sha256-QSIlqDB6JRQhbj/c3ejlmbfWz9l9FurdSWxpwDebnlI=";
+  })
+]
+
+# Fix detection of bootstrap compiler Ada support (cctools as) on Nix Darwin
+++ optional (atLeast12 && stdenv.isDarwin && langAda) ./ada-cctools-as-detection-configure.patch
+
+# Use absolute path in GNAT dylib install names on Darwin
+++ optional (atLeast12 && stdenv.isDarwin && langAda) ./gnat-darwin-dylib-install-name.patch
+
+# Obtain latest patch with ../update-mcfgthread-patches.sh
+++ optional (atLeast6 && !atLeast13 && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf")
+  (./. + "/${majorVersion}/Added-mcf-thread-model-support-from-mcfgthread.patch")
+
+# Retpoline patches pulled from the branch hjl/indirect/gcc-4_9-branch (by H.J. Lu, the author of GCC upstream retpoline commits)
+++ optionals is49
+  (builtins.map ({commit, sha256}: fetchpatch {url = "https://github.com/hjl-tools/gcc/commit/${commit}.patch"; inherit sha256;})
+  [{ commit = "e623d21608e96ecd6b65f0d06312117d20488a38"; sha256 = "1ix8i4d2r3ygbv7npmsdj790rhxqrnfwcqzv48b090r9c3ij8ay3"; }
+   { commit = "2015a09e332309f12de1dadfe179afa6a29368b8"; sha256 = "0xcfs0cbb63llj2gbcdrvxim79ax4k4aswn0a3yjavxsj71s1n91"; }
+   { commit = "6b11591f4494f705e8746e7d58b7f423191f4e92"; sha256 = "0aydyhsm2ig0khgbp27am7vq7liyqrq6kfhfi2ki0ij0ab1hfbga"; }
+   { commit = "203c7d9c3e9cb0f88816b481ef8e7e87b3ecc373"; sha256 = "0wqn16y7wy5kg8ngfcni5qdwfphl01axczibbk49bxclwnzvldqa"; }
+   { commit = "f039c6f284b2c9ce97c8353d6034978795c4872e"; sha256 = "13fkgdb17lpyxfksz1zanxhgpsm0jrss9w61nbl7an4im22hz7ci"; }
+   { commit = "ed42606bdab1c5d9e5ad828cd6fe1a0557f193b7"; sha256 = "0gdnn8v3p03imj3qga2mzdhpgbmjcklkxdl97jvz5xia2ikzknxm"; }
+   { commit = "5278e062ef292fd2fbf987d25389785f4c5c0f99"; sha256 = "0j81x758wf8v7j4rx5wc1cy7yhkvhlhv3wmnarwakxiwsspq0vrs"; }
+   { commit = "76f1ffbbb6cd9f6ecde6c82cd16e20a27242e890"; sha256 = "1py56y6gp7fjf4f8bbsfwh5bs1gnmlqda1ycsmnwlzfm0cshdp0c"; }
+   { commit = "4ca48b2b688b135c0390f54ea9077ef10aedd52c"; sha256 = "15r019pzr3k0lpgyvdc92c8fayw8b5lrzncna4bqmamcsdz7vsaw"; }
+   { commit = "98c7bf9ddc80db965d69d61521b1c7a1cec32d9a"; sha256 = "1d7pfdv1q23nf0wadw7jbp6d6r7pnzjpbyxgbdfv7j1vr9l1bp60"; }
+   { commit = "3dc76b53ad896494ca62550a7a752fecbca3f7a2"; sha256 = "0jvdzfpvfdmklfcjwqblwq1i22iqis7ljpvm7adra5d7zf2xk7xz"; }
+   { commit = "1e961ed49b18e176c7457f53df2433421387c23b"; sha256 = "04dnqqs4qsvz4g8cq6db5id41kzys7hzhcaycwmc9rpqygs2ajwz"; }
+   { commit = "e137c72d099f9b3b47f4cc718aa11eab14df1a9c"; sha256 = "1ms0dmz74yf6kwgjfs4d2fhj8y6mcp2n184r3jk44wx2xc24vgb2"; }])
+
+++ optional (atLeast49 && !atLeast9) ./libsanitizer-no-cyclades-9.patch
+++ optional (is49 && !atLeast6) [
+  # gcc-11 compatibility
+  (fetchpatch {
+    name = "gcc4-char-reload.patch";
+    url = "https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=d57c99458933a21fdf94f508191f145ad8d5ec58";
+    includes = [ "gcc/reload.h" ];
+    sha256 = "sha256-66AMP7/ajunGKAN5WJz/yPn42URZ2KN51yPrFdsxEuM=";
+  })
+]
+
+# openjdk build fails without this on -march=opteron; is upstream in gcc12
+++ optionals (is11) [ ./11/gcc-issue-103910.patch ]
+
+++ optional (is10 && buildPlatform.system == "aarch64-darwin" && targetPlatform != buildPlatform) (fetchpatch {
+  url = "https://raw.githubusercontent.com/richard-vd/musl-cross-make/5e9e87f06fc3220e102c29d3413fbbffa456fcd6/patches/gcc-${version}/0008-darwin-aarch64-self-host-driver.patch";
+  sha256 = "sha256-XtykrPd5h/tsnjY1wGjzSOJ+AyyNLsfnjuOZ5Ryq9vA=";
+})
+++ lib.optionals is48 [
+  (fetchpatch {
+    name = "libc_name_p.diff"; # needed to build with gcc6
+    url = "https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=ec1cc0263f1";
+    sha256 = "01jd7pdarh54ki498g6sz64ijl9a1l5f9v8q2696aaxalvh2vwzl";
+    excludes = [ "gcc/cp/ChangeLog" ];
+  })
+  # glibc-2.26
+  ./struct-ucontext-4.8.patch
+  ./sigsegv-not-declared.patch
+  ./res_state-not-declared.patch
+  # gcc-11 compatibility
+  (fetchpatch {
+    name = "gcc4-char-reload.patch";
+    url = "https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=d57c99458933a21fdf94f508191f145ad8d5ec58";
+    includes = [ "gcc/reload.h" ];
+    sha256 = "sha256-66AMP7/ajunGKAN5WJz/yPn42URZ2KN51yPrFdsxEuM=";
+  })
+]
diff --git a/nixpkgs/pkgs/development/compilers/gcc/fix-bug-80431.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/fix-bug-80431.patch
index 2d688b8c7997..2d688b8c7997 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/fix-bug-80431.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/fix-bug-80431.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gcc-12-gfortran-driving.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gcc-12-gfortran-driving.patch
index 0ad1f256063f..0ad1f256063f 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gcc-12-gfortran-driving.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gcc-12-gfortran-driving.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gcc-12-no-sys-dirs.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gcc-12-no-sys-dirs.patch
index 67a94298440f..67a94298440f 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gcc-12-no-sys-dirs.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gcc-12-no-sys-dirs.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gfortran-darwin-NXConstStr.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gfortran-darwin-NXConstStr.patch
index a7e158ca364b..a7e158ca364b 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gfortran-darwin-NXConstStr.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gfortran-darwin-NXConstStr.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gfortran-driving.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gfortran-driving.patch
index 70708886b405..70708886b405 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gfortran-driving.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gfortran-driving.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gnat-cflags-11.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gnat-cflags-11.patch
index 03ef28664524..03ef28664524 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gnat-cflags-11.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gnat-cflags-11.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gnat-cflags.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gnat-cflags.patch
index a16266bbf39c..a16266bbf39c 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gnat-cflags.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gnat-cflags.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/gnat-darwin-dylib-install-name.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/gnat-darwin-dylib-install-name.patch
index 01e5de86a438..01e5de86a438 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/gnat-darwin-dylib-install-name.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/gnat-darwin-dylib-install-name.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/libgomp-dont-force-initial-exec.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/libgomp-dont-force-initial-exec.patch
index afd1f7456d32..afd1f7456d32 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/libgomp-dont-force-initial-exec.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/libgomp-dont-force-initial-exec.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/libphobos.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/libphobos.patch
index a16ea5416ffb..a16ea5416ffb 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/libphobos.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/libphobos.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/libsanitizer-no-cyclades-9.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades-9.patch
index 072403d1495f..072403d1495f 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/libsanitizer-no-cyclades-9.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades-9.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/libsanitizer-no-cyclades.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades.patch
index e2155cd0c982..e2155cd0c982 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/libsanitizer-no-cyclades.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/libstdc++-netbsd-ctypes.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/libstdc++-netbsd-ctypes.patch
index 28fff80b786d..28fff80b786d 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/libstdc++-netbsd-ctypes.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/libstdc++-netbsd-ctypes.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/libstdc++-target.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/libstdc++-target.patch
index fb622b395806..fb622b395806 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/libstdc++-target.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/libstdc++-target.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs-riscv-gcc9.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv-gcc9.patch
index afe3f26360e4..afe3f26360e4 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs-riscv-gcc9.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv-gcc9.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs-riscv.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv.patch
index 00e2838af6fd..00e2838af6fd 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs-riscv.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs.patch
index 36df51904acf..36df51904acf 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/no-sys-dirs.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/no-sys-dirs.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/parallel-bconfig.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/parallel-bconfig.patch
index bc56ac698f5a..bc56ac698f5a 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/parallel-bconfig.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/parallel-bconfig.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/ppc-musl.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/ppc-musl.patch
index bc90888a3797..bc90888a3797 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/ppc-musl.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/ppc-musl.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/res_state-not-declared.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/res_state-not-declared.patch
index e970487786d0..e970487786d0 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/res_state-not-declared.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/res_state-not-declared.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/sigsegv-not-declared.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/sigsegv-not-declared.patch
index f9cfaec82026..f9cfaec82026 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/sigsegv-not-declared.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/sigsegv-not-declared.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/struct-sigaltstack-4.9.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-sigaltstack-4.9.patch
index fc126b4813d6..fc126b4813d6 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/struct-sigaltstack-4.9.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-sigaltstack-4.9.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/struct-sigaltstack.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-sigaltstack.patch
index 6e1ddb252c24..6e1ddb252c24 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/struct-sigaltstack.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-sigaltstack.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-4.5.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-4.5.patch
index a84e9ffe2681..a84e9ffe2681 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-4.5.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-4.5.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-4.8.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-4.8.patch
index 630ef6586e45..630ef6586e45 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-4.8.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-4.8.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-libjava.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-libjava.patch
index 3892a56954e0..3892a56954e0 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext-libjava.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext-libjava.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext.patch
index c7fb6d1f71cf..c7fb6d1f71cf 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/struct-ucontext.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/struct-ucontext.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcc/update-mcfgthread-patches.sh b/nixpkgs/pkgs/development/compilers/gcc/patches/update-mcfgthread-patches.sh
index c4fd79b26c34..c4fd79b26c34 100755
--- a/nixpkgs/pkgs/development/compilers/gcc/update-mcfgthread-patches.sh
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/update-mcfgthread-patches.sh
diff --git a/nixpkgs/pkgs/development/compilers/gcc/use-source-date-epoch.patch b/nixpkgs/pkgs/development/compilers/gcc/patches/use-source-date-epoch.patch
index 65a5ab028c1c..65a5ab028c1c 100644
--- a/nixpkgs/pkgs/development/compilers/gcc/use-source-date-epoch.patch
+++ b/nixpkgs/pkgs/development/compilers/gcc/patches/use-source-date-epoch.patch
diff --git a/nixpkgs/pkgs/development/compilers/gcl/2.6.13-pre.nix b/nixpkgs/pkgs/development/compilers/gcl/2.6.13-pre.nix
index 3e11738b462b..a4d01cba729f 100644
--- a/nixpkgs/pkgs/development/compilers/gcl/2.6.13-pre.nix
+++ b/nixpkgs/pkgs/development/compilers/gcl/2.6.13-pre.nix
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     sed -e 's/<= obj-date/<= (if (= 0 obj-date) 1 obj-date)/' -i lsp/make.lisp
   '';
 
-  sourceRoot = "gcl/gcl";
+  sourceRoot = "${src.name}/gcl";
 
   # breaks when compiling in parallel
   enableParallelBuilding = false;
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/build.nix b/nixpkgs/pkgs/development/compilers/gerbil/build.nix
index 110378244fd0..227f11b7c584 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/build.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/build.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     grep -Fl '#!/usr/bin/env' `find . -type f -executable` | while read f ; do
       substituteInPlace "$f" --replace '#!/usr/bin/env' '#!${coreutils}/bin/env' ;
     done ;
-'';
+  '';
 
 ## TODO: make static compilation work.
 ## For that, get all the packages below to somehow expose static libraries,
@@ -92,8 +92,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Gerbil Scheme";
     homepage    = "https://github.com/vyzo/gerbil";
-    license     = lib.licenses.lgpl21; # also asl20, like Gambit
-    # NB regarding platforms: regularly tested on Linux, only occasionally on macOS.
+    license     = lib.licenses.lgpl21Only; # dual, also asl20, like Gambit
+    # NB regarding platforms: regularly tested on Linux and on macOS.
     # Please report success and/or failure to fare.
     platforms   = lib.platforms.unix;
     maintainers = with lib.maintainers; [ fare ];
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/default.nix b/nixpkgs/pkgs/development/compilers/gerbil/default.nix
index 3367ae581b2e..eeafde520de9 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/default.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/default.nix
@@ -1,12 +1,12 @@
 { callPackage, fetchFromGitHub }:
 
 callPackage ./build.nix rec {
-  version = "0.16";
+  version = "0.17";
   git-version = version;
   src = fetchFromGitHub {
     owner = "vyzo";
     repo = "gerbil";
     rev = "v${version}";
-    sha256 = "0vng0kxpnwsg8jbjdpyn4sdww36jz7zfpfbzayg9sdpz6bjxjy0f";
+    sha256 = "0xzi9mhrmzcajhlz5qcnz4yjlljvbkbm9426iifgjn47ac0965zw";
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/ftw.nix b/nixpkgs/pkgs/development/compilers/gerbil/ftw.nix
new file mode 100644
index 000000000000..2f2c9956826d
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gerbil/ftw.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, gerbilPackages, ... }:
+
+{
+  pname = "ftw";
+  version = "unstable-2022-01-14";
+  git-version = "8ba16b3";
+  softwareName = "FTW: For The Web!";
+  gerbil-package = "drewc/ftw";
+
+  gerbilInputs = with gerbilPackages; [ gerbil-utils ];
+
+  pre-src = {
+    fun = fetchFromGitHub;
+    owner = "drewc";
+    repo = "ftw";
+    rev = "8ba16b3c1cdc2150df5af8ef3c92040ef8b563b9";
+    sha256 = "153i6whm5jfcj9s1qpxz03sq67969lq11brssyjc3yv3wyb1b07h";
+  };
+
+  meta = with lib; {
+    description = "Simple web handlers for Gerbil Scheme";
+    homepage    = "https://github.com/drewc/ftw";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-crypto.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-crypto.nix
index 38943471a376..3d53c4da879e 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-crypto.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-crypto.nix
@@ -1,28 +1,29 @@
-{ pkgs, lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
+{ pkgs, lib, fetchFromGitHub, gerbilPackages, ... }:
 
-gerbil-support.gerbilPackage {
+{
   pname = "gerbil-crypto";
-  version = "unstable-2020-08-01";
-  git-version = "0.0-6-ga228862";
+  version = "unstable-2023-03-27";
+  git-version = "0.0-18-ge57f887";
   gerbil-package = "clan/crypto";
-  gerbil = gerbil-unstable;
-  gerbilInputs = [gerbil-support.gerbilPackages-unstable.gerbil-utils];
+  gerbilInputs = with gerbilPackages; [ gerbil-utils gerbil-poo ];
   nativeBuildInputs = [ pkgs.pkg-config ];
-  buildInputs = [pkgs.secp256k1 ];
-  gambit-params = gambit-support.unstable-params;
+  buildInputs = [ pkgs.secp256k1 ];
   version-path = "version";
   softwareName = "Gerbil-crypto";
-  src = fetchFromGitHub {
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "fare";
     repo = "gerbil-crypto";
-    rev = "a22886260849ec92c3a34bfeedc1574e41e49e33";
-    sha256 = "0qbanw2vnw2ymmr4pr1jap29cyc3icbhyq0apibpfnj2znns7w47";
+    rev = "e57f88742d9b41640b4a7d9bd3e86c688d4a83f9";
+    sha256 = "08hrk3s82hbigvza75vgx9kc7qf64yhhn3xm5calc859sy6ai4ka";
   };
-  meta = {
+
+  meta = with lib; {
     description = "Gerbil Crypto: Extra Cryptographic Primitives for Gerbil";
     homepage    = "https://github.com/fare/gerbil-crypto";
-    license     = lib.licenses.asl20;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-ethereum.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-ethereum.nix
index e498818d2e61..d2d95284f09d 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-ethereum.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-ethereum.nix
@@ -1,28 +1,49 @@
-{ pkgs, lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
+{ lib, fetchFromGitHub, gerbilPackages, gerbil-support, gerbil, ... }:
 
-gerbil-support.gerbilPackage {
+rec {
   pname = "gerbil-ethereum";
-  version = "unstable-2020-10-18";
-  git-version = "0.0-26-gf27ada8";
+  version = "unstable-2023-05-30";
+  git-version = "0.0-375-g989a5ca";
+  softwareName = "Gerbil-ethereum";
   gerbil-package = "mukn/ethereum";
-  gerbil = gerbil-unstable;
-  gerbilInputs = with gerbil-support.gerbilPackages-unstable;
-    [gerbil-utils gerbil-crypto gerbil-poo gerbil-persist];
-  buildInputs = [];
-  gambit-params = gambit-support.unstable-params;
   version-path = "version";
-  softwareName = "Gerbil-ethereum";
-  src = fetchFromGitHub {
+
+  gerbilInputs = with gerbilPackages; [ gerbil-utils gerbil-crypto gerbil-poo gerbil-persist ];
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "fare";
     repo = "gerbil-ethereum";
-    rev = "f27ada8e7f4de4f8fbdfede9fe055914b254d8e7";
-    sha256 = "1lykjqim6a44whj1r8kkpiz68wghkfqx5vjlrc2ldxlmgd4r9gvd";
+    rev = "989a5ca78958e42c4a1ec242786ade89f1887e48";
+    sha256 = "0bs2knhx3hy3k72yidgaplwjd48y86arqscdik8hgxwmhm9z8kwp";
   };
-  meta = {
+
+  postInstall = ''
+    cp scripts/{croesus.prv,genesis.json,logback.xml,yolo-evm.conf,yolo-kevm.conf,run-ethereum-test-net.ss} $out/gerbil/lib/mukn/ethereum/scripts/
+    mkdir -p $out/bin
+    cat > $out/bin/run-ethereum-test-net <<EOF
+    #!/bin/sh
+    #|
+    ORIG_GERBIL_LOADPATH="\$GERBIL_LOADPATH"
+    ORIG_GERBIL_PATH="\$GERBIL_PATH"
+    ORIG_GERBIL_HOME="\$GERBIL_HOME"
+    unset GERBIL_HOME
+    GERBIL_LOADPATH="${gerbil-support.gerbilLoadPath (["$out"] ++ gerbilInputs)}"
+    GERBIL_PATH="\$HOME/.cache/gerbil-ethereum/gerbil"
+    export GERBIL_PATH GERBIL_LOADPATH GLOW_SOURCE ORIG_GERBIL_PATH ORIG_GERBIL_LOADPATH
+    exec ${gerbil}/bin/gxi "\$0" "\$@"
+    |#
+    (import :mukn/ethereum/scripts/run-ethereum-test-net :clan/multicall)
+    (apply call-entry-point (cdr (command-line)))
+    EOF
+    chmod a+x $out/bin/run-ethereum-test-net
+    '';
+
+  meta = with lib; {
     description = "Gerbil Ethereum: a Scheme alternative to web3.js";
     homepage    = "https://github.com/fare/gerbil-ethereum";
-    license     = lib.licenses.asl20;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-libp2p.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-libp2p.nix
index 336f5af89c3b..17fab159c6d5 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-libp2p.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-libp2p.nix
@@ -1,27 +1,27 @@
-{ pkgs, lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
+{ lib, fetchFromGitHub, ... }:
 
-gerbil-support.gerbilPackage {
+{
   pname = "gerbil-libp2p";
-  version = "unstable-2018-12-27";
-  git-version = "2376b3f";
-  gerbil-package = "vyzo";
-  gerbil = gerbil-unstable;
-  gerbilInputs = [];
-  buildInputs = []; # Note: at *runtime*, depends on go-libp2p-daemon
-  gambit-params = gambit-support.unstable-params;
-  version-path = "version";
+  version = "unstable-2022-02-03";
+  git-version = "15b3246";
   softwareName = "Gerbil-libp2p";
-  src = fetchFromGitHub {
+  gerbil-package = "vyzo";
+
+  buildInputs = []; # Note: at *runtime*, this depends on go-libp2p-daemon running
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "vyzo";
     repo = "gerbil-libp2p";
-    rev = "2376b3f39cee04dd4ec455c8ea4e5faa93c2bf88";
-    sha256 = "0jcy7hfg953078msigyfwp2g4ii44pi6q7vcpmq01cbbvxpxz6zw";
+    rev = "15b32462e683d89ffce0ff15ad373d293ea0ee5d";
+    sha256 = "059lydp7d6pjgrd4pdnqq2zffzlba62ch102f01rgzf9aps3c8lz";
   };
-  meta = {
+
+  meta = with lib; {
     description = "Gerbil libp2p: use libp2p from Gerbil";
     homepage    = "https://github.com/vyzo/gerbil-libp2p";
-    license     = lib.licenses.mit;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-persist.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-persist.nix
index 74485c19c2d0..3912d2e8f7f5 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-persist.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-persist.nix
@@ -1,27 +1,27 @@
-{ pkgs, lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
-
-gerbil-support.gerbilPackage {
+{ lib, fetchFromGitHub, gerbilPackages, ... }:
+{
   pname = "gerbil-persist";
-  version = "unstable-2020-08-31";
-  git-version = "0.0-8-gd211390";
+  version = "unstable-2023-03-02";
+  git-version = "0.1.0-24-ge2305f5";
+  softwareName = "Gerbil-persist";
   gerbil-package = "clan/persist";
-  gerbil = gerbil-unstable;
-  gerbilInputs = with gerbil-support.gerbilPackages-unstable; [gerbil-utils gerbil-crypto gerbil-poo];
-  buildInputs = [];
-  gambit-params = gambit-support.unstable-params;
   version-path = "version";
-  softwareName = "Gerbil-persist";
-  src = fetchFromGitHub {
+
+  gerbilInputs = with gerbilPackages; [ gerbil-utils gerbil-crypto gerbil-poo ];
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "fare";
     repo = "gerbil-persist";
-    rev = "d211390c8a199cf2b8c7400cd98977524e960015";
-    sha256 = "13s6ws8ziwalfp23nalss41qnz667z2712lr3y123sypm5n5axk7";
+    rev = "e2305f53571e55292179286ca2d88e046ec6638b";
+    sha256 = "1vsi4rfzpqg4hhn53d2r26iw715vzwz0hiai9r34z4diwzqixfgn";
   };
-  meta = {
+
+  meta = with lib; {
     description = "Gerbil Persist: Persistent data and activities";
     homepage    = "https://github.com/fare/gerbil-persist";
-    license     = lib.licenses.asl20;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-poo.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-poo.nix
index c6580ea0c77a..20c790c7ba87 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-poo.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-poo.nix
@@ -1,27 +1,28 @@
-{ pkgs, lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
+{ lib, fetchFromGitHub, gerbilPackages, ... }:
 
-gerbil-support.gerbilPackage {
-  pname = "gerbil-ethereum";
-  version = "unstable-2020-10-17";
-  git-version = "0.0-35-g44d490d";
+{
+  pname = "gerbil-poo";
+  version = "unstable-2023-04-28";
+  git-version = "0.0-106-g418b582";
+  softwareName = "Gerbil-POO";
   gerbil-package = "clan/poo";
-  gerbil = gerbil-unstable;
-  gerbilInputs = with gerbil-support.gerbilPackages-unstable; [gerbil-utils gerbil-crypto];
-  buildInputs = [];
-  gambit-params = gambit-support.unstable-params;
   version-path = "version";
-  softwareName = "Gerbil-POO";
-  src = fetchFromGitHub {
+
+  gerbilInputs = with gerbilPackages; [ gerbil-utils ];
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "fare";
     repo = "gerbil-poo";
-    rev = "44d490d95b9d1b5d54eaedf2602419af8e086837";
-    sha256 = "082ndpy281saybcnp3bdidcibkk2ih6glrkbb5fdj1524ban4d0k";
+    rev = "418b582ae72e1494cf3a5f334d31d4f6503578f5";
+    sha256 = "0qdzs7l6hp45dji5bc3879k4c8k9x6cj4qxz68cskjhn8wrc5lr8";
   };
-  meta = {
+
+  meta = with lib; {
     description = "Gerbil POO: Prototype Object Orientation for Gerbil Scheme";
     homepage    = "https://github.com/fare/gerbil-poo";
-    license     = lib.licenses.asl20;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-support.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-support.nix
index f51076fd5d4d..3d57e2a73c52 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-support.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-support.nix
@@ -1,54 +1,112 @@
-{ pkgs, lib, gccStdenv, callPackage, fetchFromGitHub }:
-# See ../gambit/build.nix regarding gccStdenv
-
-rec {
-  # Gerbil libraries
-  gerbilPackages-unstable = {
-    gerbil-libp2p = callPackage ./gerbil-libp2p.nix { };
-    gerbil-utils = callPackage ./gerbil-utils.nix { };
-    gerbil-crypto = callPackage ./gerbil-crypto.nix { };
-    gerbil-poo = callPackage ./gerbil-poo.nix { };
-    gerbil-persist = callPackage ./gerbil-persist.nix { };
-    gerbil-ethereum = callPackage ./gerbil-ethereum.nix { };
-    smug-gerbil = callPackage ./smug-gerbil.nix { };
+{ pkgs, lib, callPackage, ... }:
+
+  with pkgs.gerbil-support; {
+
+  prePackages-unstable =
+    let pks = [ ./gerbil-libp2p.nix ./smug-gerbil.nix ./ftw.nix
+                ./gerbil-utils.nix ./gerbil-crypto.nix ./gerbil-poo.nix
+                ./gerbil-persist.nix ./gerbil-ethereum.nix ./glow-lang.nix ];
+        call = pkg: callPackage pkg prePackage-defaults;
+        pkgName = pkg: lib.removeSuffix ".nix" (baseNameOf pkg);
+        f = pkg: { name = pkgName pkg; value = call pkg; }; in
+    builtins.listToAttrs (map f pks);
+
+  prePackage-defaults = {
+    gerbil = pkgs.gerbil-unstable;
+    gambit-params = pkgs.gambit-support.unstable-params;
+    gerbilPackages = gerbilPackages-unstable;
+    git-version = "";
+    version-path = "";
+    gerbilInputs = [];
+    nativeBuildInputs = [];
+    buildInputs = [];
+    buildScript = "./build.ss";
+    postInstall = "";
+    softwareName = "";
   };
 
+  gerbilPackages-unstable =
+    builtins.mapAttrs (_: gerbilPackage) prePackages-unstable;
+
+  resolve-pre-src = pre-src: pre-src.fun (removeAttrs pre-src ["fun"]);
+
+  gerbilVersionFromGit = pkg:
+    let version-path = "${pkg.passthru.pre-pkg.version-path}.ss"; in
+    if builtins.pathExists version-path then
+      let m =
+        builtins.match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n"
+          (builtins.readFile version-path); in
+          { version = builtins.elemAt m 2; git-version = builtins.elemAt m 1; }
+     else { version = "0.0";
+            git-version = let gitpath = "${toString pkg.src}/.git"; in
+              if builtins.pathExists gitpath then lib.commitIdFromGitRepo gitpath else "0"; };
+
+  gerbilSkippableFiles = [".git" ".build" ".build_outputs" "run" "result" "dep" "BLAH"
+                          "version.ss" "tmp.nix"];
+
+  gerbilSourceFilter = path: type:
+    let baseName = baseNameOf path; in
+      ! (builtins.elem baseName gerbilSkippableFiles || lib.hasSuffix "~" baseName);
+
+  gerbilFilterSource = builtins.filterSource gerbilSourceFilter;
+
   # Use this function in any package that uses Gerbil libraries, to define the GERBIL_LOADPATH.
   gerbilLoadPath =
-    gerbilInputs : builtins.concatStringsSep ":" (map (x : x + "/gerbil/lib") gerbilInputs);
+    gerbilInputs: builtins.concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs);
+
+  path-src = path: { fun = _: path; };
+
+  view = lib.debug.traceSeqN 4;
+
+  sha256-of-pre-src = pre-src: if pre-src ? sha256 then pre-src.sha256 else "none";
+
+  overrideSrcIfShaDiff = name: new-pre-src: super:
+    let old-sha256 = sha256-of-pre-src super.${name}.pre-src;
+        new-sha256 = sha256-of-pre-src new-pre-src; in
+    if old-sha256 == new-sha256 then {} else
+    view "Overriding ${name} old-sha256: ${old-sha256} new-sha256: ${new-sha256}"
+    { ${name} = super.${name} // {
+        pre-src = new-pre-src;
+        version = "override";
+        git-version = if new-pre-src ? rev then lib.substring 0 7 new-pre-src.rev else "unknown";};};
+
+  pkgsOverrideGerbilPackageSrc = name: pre-src: pkgs: super: {
+    gerbil-support = (super-support:
+      { prePackages-unstable =
+          (super-ppu: super-ppu // (overrideSrcIfShaDiff name pre-src super-ppu))
+          super-support.prePackages-unstable;}) super.gerbil-support;};
 
   # Use this function to create a Gerbil library. See gerbil-utils as an example.
-  gerbilPackage = {
-    pname, version, src, meta, gerbil-package,
-    git-version ? "", version-path ? "",
-    gerbil ? pkgs.gerbil-unstable,
-    gambit-params ? pkgs.gambit-support.stable-params,
-    gerbilInputs ? [],
-    nativeBuildInputs ? [],
-    buildInputs ? [],
-    buildScript ? "./build.ss",
-    softwareName ? ""} :
-    let buildInputs_ = buildInputs; in
-    gccStdenv.mkDerivation rec {
-      inherit src meta pname version nativeBuildInputs;
-      passthru = { inherit gerbil-package version-path ;};
+  gerbilPackage = prePackage:
+    let pre-pkg = prePackage-defaults // prePackage;
+        inherit (pre-pkg) pname version pre-src git-version meta
+          softwareName gerbil-package version-path gerbil gambit-params
+          gerbilInputs nativeBuildInputs buildInputs buildScript postInstall;
+        buildInputs_ = buildInputs; in
+    pkgs.gccStdenv.mkDerivation rec { # See ../gambit/build.nix regarding why we use gccStdenv
+      inherit meta pname version nativeBuildInputs postInstall;
+      passthru = {
+        inherit pre-pkg;
+      };
+      src = resolve-pre-src pre-src;
       buildInputs = [ gerbil ] ++ gerbilInputs ++ buildInputs_;
+
       postPatch = ''
         set -e ;
-        if [ -n "${version-path}.ss" ] ; then
-          echo -e '(import :clan/versioning${builtins.concatStringsSep ""
-                     (map (x : lib.optionalString (x.passthru.version-path != "")
-                               " :${x.passthru.gerbil-package}/${x.passthru.version-path}")
+        ${lib.optionalString (version-path != "")
+          ''echo -e '(import :clan/versioning${builtins.concatStringsSep ""
+                     (map (x: let px = x.passthru.pre-pkg; in
+                              lib.optionalString (px.version-path != "")
+                                " :${px.gerbil-package}/${px.version-path}")
                           gerbilInputs)
-                     })\n(register-software "${softwareName}" "v${git-version}")\n' > "${passthru.version-path}.ss"
-        fi
+                     })\n(register-software "${softwareName}" "v${git-version}")\n' > "${version-path}.ss"''}
         patchShebangs . ;
       '';
 
       postConfigure = ''
         export GERBIL_BUILD_CORES=$NIX_BUILD_CORES
         export GERBIL_PATH=$PWD/.build
-        export GERBIL_LOADPATH=${gerbilLoadPath gerbilInputs}
+        export GERBIL_LOADPATH=${gerbilLoadPath (["$out"] ++ gerbilInputs)}
         ${pkgs.gambit-support.export-gambopt gambit-params}
       '';
 
@@ -60,18 +118,36 @@ rec {
 
       installPhase = ''
         runHook preInstall
-        mkdir -p $out/gerbil/lib
-        cp -fa .build/lib $out/gerbil/
-        bins=(.build/bin/*)
-        if [ 0 -lt ''${#bins} ] ; then
-          cp -fa .build/bin $out/gerbil/
-          mkdir $out/bin
-          cd $out/bin
-          ln -s ../gerbil/bin/* .
+        mkdir -p $out/gerbil
+        cp -fa .build/* $out/gerbil/
+        if [[ -d $out/gerbil/bin ]] ; then
+          ( cd $out/gerbil
+            bins=$(find ../gerbil/bin -type f)
+            if [[ -n $bins ]] ; then
+              ( mkdir -p ../bin
+                cd ..
+                ln -s $bins bin
+              )
+            fi
+          )
         fi
         runHook postInstall
       '';
 
       dontFixup = true;
+
+      checkPhase = ''
+        runHook preCheck
+        if [[ -f unit-tests.ss ]] ; then
+          export GERBIL_APPLICATION_HOME=$PWD
+          ./unit-tests.ss version
+          ./unit-tests.ss
+        else
+          echo "No gerbil-utils style unit-tests.ss detected for ${pname} ${version}.";
+        fi
+        runHook postCheck
+      '';
+
+      doCheck = true;
     };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-utils.nix b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-utils.nix
index 6d89e1181f2d..4e7042fe4f3c 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/gerbil-utils.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/gerbil-utils.nix
@@ -1,25 +1,26 @@
-{ lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
+{ lib, fetchFromGitHub, ... }:
 
-gerbil-support.gerbilPackage {
+{
   pname = "gerbil-utils";
-  version = "unstable-2020-10-18";
-  git-version = "0.2-36-g8b481b7";
+  version = "unstable-2023-07-22";
+  git-version = "0.2-198-g2fb01ce";
+  softwareName = "Gerbil-utils";
   gerbil-package = "clan";
-  gerbil = gerbil-unstable;
-  gambit-params = gambit-support.unstable-params;
   version-path = "version";
-  softwareName = "Gerbil-utils";
-  src = fetchFromGitHub {
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "fare";
     repo = "gerbil-utils";
-    rev = "8b481b787e13e07e14d0718d670aab016131a090";
-    sha256 = "0br8k5b2wcv4wcp65r2bfhji3af2qgqjspf41syqslq9awx47f3m";
+    rev = "2fb01ce0b302f232f5c4daf4987457b6357d609d";
+    sha256 = "127q98gk1x6y1nlkkpnbnkz989ybpszy7aiy43hzai2q6xn4nv72";
   };
-  meta = {
+
+  meta = with lib; {
     description = "Gerbil Clan: Community curated Collection of Common Utilities";
     homepage    = "https://github.com/fare/gerbil-utils";
-    license     = lib.licenses.lgpl21;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.lgpl21;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/glow-lang.nix b/nixpkgs/pkgs/development/compilers/gerbil/glow-lang.nix
new file mode 100644
index 000000000000..c6e5aa10fa3a
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/gerbil/glow-lang.nix
@@ -0,0 +1,55 @@
+{ lib, fetchFromGitHub, gerbil-support, gerbilPackages, gerbil, ... }:
+
+rec {
+  pname = "glow-lang";
+  version = "unstable-2023-04-26";
+  git-version = "0.3.2-222-gb19cd980";
+  softwareName = "Glow";
+  gerbil-package = "mukn/glow";
+  version-path = "version";
+
+  gerbilInputs = with gerbilPackages;
+    [ gerbil-utils gerbil-crypto gerbil-poo gerbil-persist gerbil-ethereum
+      gerbil-libp2p smug-gerbil ftw ];
+
+  pre-src = {
+    fun = fetchFromGitHub;
+    owner = "Glow-Lang";
+    repo = "glow";
+    rev = "b19cd98082dfc5156d1b4fc83cde161572d6a211";
+    sha256 = "0k3qy5826pxqr9ylnnpq4iikxf4j50987vhpa5qiv99j0p643xr3";
+    };
+
+  postPatch = ''
+    substituteInPlace "runtime/glow-path.ss" --replace \
+      '(def glow-install-path (source-path "dapps"))' \
+      '(def glow-install-path "$out")'
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin $out/gerbil/lib/mukn/glow $out/share/glow/dapps
+    cp main.ss $out/gerbil/lib/mukn/glow/
+    cp dapps/{buy_sig,coin_flip,rps_simple}.glow $out/share/glow/dapps/
+    cat > $out/bin/glow <<EOF
+    #!/bin/sh
+    ORIG_GERBIL_LOADPATH="\$GERBIL_LOADPATH"
+    ORIG_GERBIL_PATH="\$GERBIL_PATH"
+    ORIG_GERBIL_HOME="\$GERBIL_HOME"
+    unset GERBIL_HOME
+    GERBIL_LOADPATH="${gerbil-support.gerbilLoadPath (["$out"] ++ gerbilInputs)}"
+    GLOW_SOURCE="\''${GLOW_SOURCE:-$out/share/glow}"
+    GERBIL_PATH="\$HOME/.cache/glow/gerbil"
+    export GERBIL_PATH GERBIL_LOADPATH GLOW_SOURCE ORIG_GERBIL_PATH ORIG_GERBIL_LOADPATH ORIG_GERBIL_HOME
+    exec ${gerbil}/bin/gxi $out/gerbil/lib/mukn/glow/main.ss "\$@"
+    EOF
+    chmod a+x $out/bin/glow
+    '';
+
+  meta = with lib; {
+    description = "Glow: language for safe Decentralized Applications (DApps)";
+    homepage    = "https://glow-lang.org";
+    license     = licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/smug-gerbil.nix b/nixpkgs/pkgs/development/compilers/gerbil/smug-gerbil.nix
index 732cdb500b9b..518ec0238f6b 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/smug-gerbil.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/smug-gerbil.nix
@@ -1,30 +1,25 @@
-{ pkgs, lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }:
+{ lib, fetchFromGitHub, ... }:
 
-gerbil-support.gerbilPackage {
+{
   pname = "smug-gerbil";
-  version = "unstable-2019-12-24";
-  git-version = "95d60d4";
-  gerbil-package = "drewc/smug";
-  gerbil = gerbil-unstable;
-  gerbilInputs = [];
-  buildInputs = [];
-  gambit-params = gambit-support.unstable-params;
-  version-path = ""; #"version";
+  version = "unstable-2020-12-12";
+  git-version = "0.4.20";
   softwareName = "Smug-Gerbil";
-  src = fetchFromGitHub {
+  gerbil-package = "drewc/smug";
+
+  pre-src = {
+    fun = fetchFromGitHub;
     owner = "drewc";
     repo = "smug-gerbil";
-    rev = "95d60d486c1603743c6d3c525e6d5f5761b984e5";
-    sha256 = "0ys07z78gq60z833si2j7xa1scqvbljlx1zb32vdf32f1b27c04j";
+    rev = "cf23a47d0891aa9e697719309d04dd25dd1d840b";
+    sha256 = "13fdijd71m3fzp9fw9xp6ddgr38q1ly6wnr53salp725w6i4wqid";
   };
-  meta = {
+
+  meta = with lib; {
     description = "Super Monadic Ãœber Go-into : Parsers and Gerbil Scheme";
     homepage    = "https://github.com/drewc/smug-gerbil";
-    license     = lib.licenses.mit;
-    platforms   = lib.platforms.unix;
-    maintainers = with lib.maintainers; [ fare ];
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ fare ];
   };
-  buildScript = ''
-    for i in primitive simple tokens smug ; do gxc -O $i.ss ; done
-  '';
 }
diff --git a/nixpkgs/pkgs/development/compilers/gerbil/unstable.nix b/nixpkgs/pkgs/development/compilers/gerbil/unstable.nix
index d4ff3ca7a98a..4da9fcd16aaf 100644
--- a/nixpkgs/pkgs/development/compilers/gerbil/unstable.nix
+++ b/nixpkgs/pkgs/development/compilers/gerbil/unstable.nix
@@ -1,13 +1,13 @@
 { callPackage, fetchFromGitHub, gambit-unstable, gambit-support }:
 
 callPackage ./build.nix rec {
-  version = "unstable-2020-11-05";
-  git-version = "0.16-152-g808929ae";
+  version = "unstable-2023-08-07";
+  git-version = "0.17.0-187-gba545b77";
   src = fetchFromGitHub {
     owner = "vyzo";
     repo = "gerbil";
-    rev = "808929aeb8823959191f35df53bc0c0150911b4b";
-    sha256 = "0d9k2gkrs9qvlnk7xa3gjzs3gln3ydds7yd2313pvbw4q2lcz8iw";
+    rev = "ba545b77e8e85118089232e3cd263856e414b24b";
+    sha256 = "1f4v1qawx2i8333kshj4pbj5r21z0868pwrr3r710n6ng3pd9gqn";
   };
   inherit gambit-support;
   gambit = gambit-unstable;
diff --git a/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix b/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix
index 368bc76bf0e2..ccd5d50aa75d 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/8.10.2-binary.nix
@@ -447,7 +447,6 @@ stdenv.mkDerivation rec {
     # long as the evaluator runs on a platform that supports
     # `pkgsMusl`.
     platforms = builtins.attrNames ghcBinDists.${distSetName};
-    hydraPlatforms = builtins.filter (p: minimal || p != "aarch64-linux") platforms;
     maintainers = with lib.maintainers; [
       guibou
     ] ++ lib.teams.haskell.members;
diff --git a/nixpkgs/pkgs/development/compilers/ghc/8.10.7.nix b/nixpkgs/pkgs/development/compilers/ghc/8.10.7.nix
index a7fdf026f152..6eedcb6374be 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/8.10.7.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/8.10.7.nix
@@ -28,8 +28,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
diff --git a/nixpkgs/pkgs/development/compilers/ghc/8.8.4.nix b/nixpkgs/pkgs/development/compilers/ghc/8.8.4.nix
index d6a8d9adde34..b00b6183121d 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/8.8.4.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/8.8.4.nix
@@ -27,8 +27,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.0.2.nix b/nixpkgs/pkgs/development/compilers/ghc/9.0.2.nix
index 2404363b8b5b..f5f0c9317147 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.0.2.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.0.2.nix
@@ -30,8 +30,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.2.4-binary.nix b/nixpkgs/pkgs/development/compilers/ghc/9.2.4-binary.nix
index 93380fd14519..d3a57b6c9f0f 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.2.4-binary.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.2.4-binary.nix
@@ -429,7 +429,6 @@ stdenv.mkDerivation rec {
     # long as the evaluator runs on a platform that supports
     # `pkgsMusl`.
     platforms = builtins.attrNames ghcBinDists.${distSetName};
-    hydraPlatforms = builtins.filter (p: minimal || p != "aarch64-linux") platforms;
     maintainers = lib.teams.haskell.members;
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.2.4.nix b/nixpkgs/pkgs/development/compilers/ghc/9.2.4.nix
index 75265f8edff0..e34f33e9ca33 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.2.4.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.2.4.nix
@@ -30,8 +30,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -217,7 +216,7 @@ stdenv.mkDerivation (rec {
     # These cause problems as they're not eliminated by GHC's dead code
     # elimination on aarch64-darwin. (see
     # https://github.com/NixOS/nixpkgs/issues/140774 for details).
-    ./Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.2.5.nix b/nixpkgs/pkgs/development/compilers/ghc/9.2.5.nix
index a157705bde9a..abbb42b631fe 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.2.5.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.2.5.nix
@@ -30,8 +30,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -217,7 +216,7 @@ stdenv.mkDerivation (rec {
     # These cause problems as they're not eliminated by GHC's dead code
     # elimination on aarch64-darwin. (see
     # https://github.com/NixOS/nixpkgs/issues/140774 for details).
-    ./Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.2.6.nix b/nixpkgs/pkgs/development/compilers/ghc/9.2.6.nix
index ad6352425bcc..53ee00f7b373 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.2.6.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.2.6.nix
@@ -30,8 +30,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -217,7 +216,7 @@ stdenv.mkDerivation (rec {
     # These cause problems as they're not eliminated by GHC's dead code
     # elimination on aarch64-darwin. (see
     # https://github.com/NixOS/nixpkgs/issues/140774 for details).
-    ./Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.2.7.nix b/nixpkgs/pkgs/development/compilers/ghc/9.2.7.nix
index e7957e3fe34e..dcde1b65a568 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.2.7.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.2.7.nix
@@ -30,8 +30,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -217,7 +216,7 @@ stdenv.mkDerivation (rec {
     # These cause problems as they're not eliminated by GHC's dead code
     # elimination on aarch64-darwin. (see
     # https://github.com/NixOS/nixpkgs/issues/140774 for details).
-    ./Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.2.8.nix b/nixpkgs/pkgs/development/compilers/ghc/9.2.8.nix
index 13e787df8e4a..443526a0b719 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.2.8.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.2.8.nix
@@ -30,8 +30,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -217,7 +216,7 @@ stdenv.mkDerivation (rec {
     # These cause problems as they're not eliminated by GHC's dead code
     # elimination on aarch64-darwin. (see
     # https://github.com/NixOS/nixpkgs/issues/140774 for details).
-    ./Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.4.2.nix b/nixpkgs/pkgs/development/compilers/ghc/9.4.2.nix
index eef9f06a0a8d..afe78cbb87c0 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.4.2.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.4.2.nix
@@ -32,8 +32,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -190,6 +189,15 @@ stdenv.mkDerivation (rec {
   outputs = [ "out" "doc" ];
 
   patches = [
+    # Don't generate code that doesn't compile when --enable-relocatable is passed to Setup.hs
+    # Can be removed if the Cabal library included with ghc backports the linked fix
+    (fetchpatch {
+      url = "https://github.com/haskell/cabal/commit/6c796218c92f93c95e94d5ec2d077f6956f68e98.patch";
+      stripLen = 1;
+      extraPrefix = "libraries/Cabal/";
+      sha256 = "sha256-yRQ6YmMiwBwiYseC5BsrEtDgFbWvst+maGgDtdD0vAY=";
+    })
+
     # Fix docs build with sphinx >= 6.0
     # https://gitlab.haskell.org/ghc/ghc/-/issues/22766
     (fetchpatch {
@@ -197,6 +205,14 @@ stdenv.mkDerivation (rec {
       url = "https://gitlab.haskell.org/ghc/ghc/-/commit/10e94a556b4f90769b7fd718b9790d58ae566600.patch";
       sha256 = "0kmhfamr16w8gch0lgln2912r8aryjky1hfcda3jkcwa5cdzgjdv";
     })
+  ] ++ lib.optionals (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) [
+    # Prevent the paths module from emitting symbols that we don't use
+    # when building with separate outputs.
+    #
+    # These cause problems as they're not eliminated by GHC's dead code
+    # elimination on aarch64-darwin. (see
+    # https://github.com/NixOS/nixpkgs/issues/140774 for details).
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.4.3.nix b/nixpkgs/pkgs/development/compilers/ghc/9.4.3.nix
index 9d6bfed13e0c..a2ae0cf400c7 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.4.3.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.4.3.nix
@@ -32,8 +32,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -190,6 +189,15 @@ stdenv.mkDerivation (rec {
   outputs = [ "out" "doc" ];
 
   patches = [
+    # Don't generate code that doesn't compile when --enable-relocatable is passed to Setup.hs
+    # Can be removed if the Cabal library included with ghc backports the linked fix
+    (fetchpatch {
+      url = "https://github.com/haskell/cabal/commit/6c796218c92f93c95e94d5ec2d077f6956f68e98.patch";
+      stripLen = 1;
+      extraPrefix = "libraries/Cabal/";
+      sha256 = "sha256-yRQ6YmMiwBwiYseC5BsrEtDgFbWvst+maGgDtdD0vAY=";
+    })
+
     # Fix docs build with sphinx >= 6.0
     # https://gitlab.haskell.org/ghc/ghc/-/issues/22766
     (fetchpatch {
@@ -197,6 +205,14 @@ stdenv.mkDerivation (rec {
       url = "https://gitlab.haskell.org/ghc/ghc/-/commit/10e94a556b4f90769b7fd718b9790d58ae566600.patch";
       sha256 = "0kmhfamr16w8gch0lgln2912r8aryjky1hfcda3jkcwa5cdzgjdv";
     })
+  ] ++ lib.optionals (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) [
+    # Prevent the paths module from emitting symbols that we don't use
+    # when building with separate outputs.
+    #
+    # These cause problems as they're not eliminated by GHC's dead code
+    # elimination on aarch64-darwin. (see
+    # https://github.com/NixOS/nixpkgs/issues/140774 for details).
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.4.4.nix b/nixpkgs/pkgs/development/compilers/ghc/9.4.4.nix
index 1c63c1c23080..13d01a342637 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.4.4.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.4.4.nix
@@ -32,8 +32,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -206,6 +205,14 @@ stdenv.mkDerivation (rec {
       url = "https://gitlab.haskell.org/ghc/ghc/-/commit/10e94a556b4f90769b7fd718b9790d58ae566600.patch";
       sha256 = "0kmhfamr16w8gch0lgln2912r8aryjky1hfcda3jkcwa5cdzgjdv";
     })
+  ] ++ lib.optionals (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) [
+    # Prevent the paths module from emitting symbols that we don't use
+    # when building with separate outputs.
+    #
+    # These cause problems as they're not eliminated by GHC's dead code
+    # elimination on aarch64-darwin. (see
+    # https://github.com/NixOS/nixpkgs/issues/140774 for details).
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.4.5.nix b/nixpkgs/pkgs/development/compilers/ghc/9.4.5.nix
index 19af148c9c88..da333a613800 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/9.4.5.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.4.5.nix
@@ -32,8 +32,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -206,6 +205,14 @@ stdenv.mkDerivation (rec {
       url = "https://gitlab.haskell.org/ghc/ghc/-/commit/10e94a556b4f90769b7fd718b9790d58ae566600.patch";
       sha256 = "0kmhfamr16w8gch0lgln2912r8aryjky1hfcda3jkcwa5cdzgjdv";
     })
+  ] ++ lib.optionals (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) [
+    # Prevent the paths module from emitting symbols that we don't use
+    # when building with separate outputs.
+    #
+    # These cause problems as they're not eliminated by GHC's dead code
+    # elimination on aarch64-darwin. (see
+    # https://github.com/NixOS/nixpkgs/issues/140774 for details).
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
   ];
 
   postPatch = "patchShebangs .";
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.4.6-bytestring-posix-source.patch b/nixpkgs/pkgs/development/compilers/ghc/9.4.6-bytestring-posix-source.patch
new file mode 100644
index 000000000000..644ab295191f
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.4.6-bytestring-posix-source.patch
@@ -0,0 +1,15 @@
+Make sure that the appropriate feature flags are set when
+Rts.h is included, so that clockid_t is defined.
+
+diff --git a/cbits/is-valid-utf8.c b/cbits/is-valid-utf8.c
+index 01b3b41..c69596a 100644
+--- a/libraries/bytestring/cbits/is-valid-utf8.c
++++ b/libraries/bytestring/cbits/is-valid-utf8.c
+@@ -29,6 +29,7 @@ SUCH DAMAGE.
+ */
+ #pragma GCC push_options
+ #pragma GCC optimize("-O2")
++#include "rts/PosixSource.h"
+ #include <stdbool.h>
+ #include <stddef.h>
+ #include <stdint.h>
diff --git a/nixpkgs/pkgs/development/compilers/ghc/9.4.6.nix b/nixpkgs/pkgs/development/compilers/ghc/9.4.6.nix
new file mode 100644
index 000000000000..95cb31a411ff
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/ghc/9.4.6.nix
@@ -0,0 +1,392 @@
+# DO NOT port this expression to hadrian. It is not possible to build a GHC
+# cross compiler with 9.4.* and hadrian.
+{ lib, stdenv, pkgsBuildTarget, pkgsHostTarget, targetPackages
+
+# build-tools
+, bootPkgs
+, autoconf, automake, coreutils, fetchpatch, fetchurl, perl, python3, m4, sphinx
+, xattr, autoSignDarwinBinariesHook
+, bash
+
+, libiconv ? null, ncurses
+, glibcLocales ? null
+
+, # GHC can be built with system libffi or a bundled one.
+  libffi ? null
+
+, useLLVM ? !(stdenv.targetPlatform.isx86
+              || stdenv.targetPlatform.isPower
+              || stdenv.targetPlatform.isSparc
+              || (stdenv.targetPlatform.isAarch64 && stdenv.targetPlatform.isDarwin))
+, # LLVM is conceptually a run-time-only dependency, but for
+  # non-x86, we need LLVM to bootstrap later stages, so it becomes a
+  # build-time dependency too.
+  buildTargetLlvmPackages, llvmPackages
+
+, # If enabled, GHC will be built with the GPL-free but slightly slower native
+  # bignum backend instead of the faster but GPLed gmp backend.
+  enableNativeBignum ? !(lib.meta.availableOn stdenv.hostPlatform gmp
+                         && lib.meta.availableOn stdenv.targetPlatform gmp)
+, gmp
+
+, # If enabled, use -fPIC when compiling static libs.
+  enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
+
+, enableProfiledLibs ? true
+
+, # Whether to build dynamic libs for the standard library (on the target
+  # platform). Static libs are always built.
+  enableShared ? with stdenv.targetPlatform; !isWindows && !useiOSPrebuilt && !isStatic
+
+, # Whether to build terminfo.
+  enableTerminfo ? !stdenv.targetPlatform.isWindows
+
+, # What flavour to build. An empty string indicates no
+  # specific flavour and falls back to ghc default values.
+  ghcFlavour ? lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
+    (if useLLVM then "perf-cross" else "perf-cross-ncg")
+
+, #  Whether to build sphinx documentation.
+  enableDocs ? (
+    # Docs disabled for musl and cross because it's a large task to keep
+    # all `sphinx` dependencies building in those environments.
+    # `sphinx` pulls in among others:
+    # Ruby, Python, Perl, Rust, OpenGL, Xorg, gtk, LLVM.
+    (stdenv.targetPlatform == stdenv.hostPlatform)
+    && !stdenv.hostPlatform.isMusl
+  )
+
+, enableHaddockProgram ?
+    # Disabled for cross; see note [HADDOCK_DOCS].
+    (stdenv.targetPlatform == stdenv.hostPlatform)
+
+, # Whether to disable the large address space allocator
+  # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
+  disableLargeAddressSpace ? stdenv.targetPlatform.isiOS
+}:
+
+assert !enableNativeBignum -> gmp != null;
+
+# Cross cannot currently build the `haddock` program for silly reasons,
+# see note [HADDOCK_DOCS].
+assert (stdenv.targetPlatform != stdenv.hostPlatform) -> !enableHaddockProgram;
+
+let
+  inherit (stdenv) buildPlatform hostPlatform targetPlatform;
+
+  inherit (bootPkgs) ghc;
+
+  # TODO(@Ericson2314) Make unconditional
+  targetPrefix = lib.optionalString
+    (targetPlatform != hostPlatform)
+    "${targetPlatform.config}-";
+
+  buildMK = ''
+    BuildFlavour = ${ghcFlavour}
+    ifneq \"\$(BuildFlavour)\" \"\"
+    include mk/flavours/\$(BuildFlavour).mk
+    endif
+    BUILD_SPHINX_HTML = ${if enableDocs then "YES" else "NO"}
+    BUILD_SPHINX_PDF = NO
+  '' +
+  # Note [HADDOCK_DOCS]:
+  # Unfortunately currently `HADDOCK_DOCS` controls both whether the `haddock`
+  # program is built (which we generally always want to have a complete GHC install)
+  # and whether it is run on the GHC sources to generate hyperlinked source code
+  # (which is impossible for cross-compilation); see:
+  # https://gitlab.haskell.org/ghc/ghc/-/issues/20077
+  # This implies that currently a cross-compiled GHC will never have a `haddock`
+  # program, so it can never generate haddocks for any packages.
+  # If this is solved in the future, we'd like to unconditionally
+  # build the haddock program (removing the `enableHaddockProgram` option).
+  ''
+    HADDOCK_DOCS = ${if enableHaddockProgram then "YES" else "NO"}
+    # Build haddocks for boot packages with hyperlinking
+    EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump
+
+    DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
+    BIGNUM_BACKEND = ${if enableNativeBignum then "native" else "gmp"}
+  '' + lib.optionalString (targetPlatform != hostPlatform) ''
+    Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
+    CrossCompilePrefix = ${targetPrefix}
+  '' + lib.optionalString (!enableProfiledLibs) ''
+    GhcLibWays = "v dyn"
+  '' +
+  # -fexternal-dynamic-refs apparently (because it's not clear from the documentation)
+  # makes the GHC RTS able to load static libraries, which may be needed for TemplateHaskell.
+  # This solution was described in https://www.tweag.io/blog/2020-09-30-bazel-static-haskell
+  lib.optionalString enableRelocatedStaticLibs ''
+    GhcLibHcOpts += -fPIC -fexternal-dynamic-refs
+    GhcRtsHcOpts += -fPIC -fexternal-dynamic-refs
+  '' + lib.optionalString targetPlatform.useAndroidPrebuilt ''
+    EXTRA_CC_OPTS += -std=gnu99
+  '';
+
+  # Splicer will pull out correct variations
+  libDeps = platform: lib.optional enableTerminfo ncurses
+    ++ [libffi]
+    ++ lib.optional (!enableNativeBignum) gmp
+    ++ lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv;
+
+  # TODO(@sternenseemann): is buildTarget LLVM unnecessary?
+  # GHC doesn't seem to have {LLC,OPT}_HOST
+  toolsForTarget = [
+    pkgsBuildTarget.targetPackages.stdenv.cc
+  ] ++ lib.optional useLLVM buildTargetLlvmPackages.llvm;
+
+  targetCC = builtins.head toolsForTarget;
+
+  # Sometimes we have to dispatch between the bintools wrapper and the unwrapped
+  # derivation for certain tools depending on the platform.
+  bintoolsFor = {
+    # GHC needs install_name_tool on all darwin platforms. On aarch64-darwin it is
+    # part of the bintools wrapper (due to codesigning requirements), but not on
+    # x86_64-darwin.
+    install_name_tool =
+      if stdenv.targetPlatform.isAarch64
+      then targetCC.bintools
+      else targetCC.bintools.bintools;
+    # Same goes for strip.
+    strip =
+      # TODO(@sternenseemann): also use wrapper if linker == "bfd" or "gold"
+      if stdenv.targetPlatform.isAarch64 && stdenv.targetPlatform.isDarwin
+      then targetCC.bintools
+      else targetCC.bintools.bintools;
+  };
+
+  # Use gold either following the default, or to avoid the BFD linker due to some bugs / perf issues.
+  # But we cannot avoid BFD when using musl libc due to https://sourceware.org/bugzilla/show_bug.cgi?id=23856
+  # see #84670 and #49071 for more background.
+  useLdGold = targetPlatform.linker == "gold" ||
+    (targetPlatform.linker == "bfd" && (targetCC.bintools.bintools.hasGold or false) && !targetPlatform.isMusl);
+
+  # Makes debugging easier to see which variant is at play in `nix-store -q --tree`.
+  variantSuffix = lib.concatStrings [
+    (lib.optionalString stdenv.hostPlatform.isMusl "-musl")
+    (lib.optionalString enableNativeBignum "-native-bignum")
+  ];
+
+in
+
+# C compiler, bintools and LLVM are used at build time, but will also leak into
+# the resulting GHC's settings file and used at runtime. This means that we are
+# currently only able to build GHC if hostPlatform == buildPlatform.
+assert targetCC == pkgsHostTarget.targetPackages.stdenv.cc;
+assert buildTargetLlvmPackages.llvm == llvmPackages.llvm;
+assert stdenv.targetPlatform.isDarwin -> buildTargetLlvmPackages.clang == llvmPackages.clang;
+
+stdenv.mkDerivation (rec {
+  version = "9.4.6";
+  pname = "${targetPrefix}ghc${variantSuffix}";
+
+  src = fetchurl {
+    url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-src.tar.xz";
+    sha256 = "1b705cf52692f9d4d6707cdf8e761590f5f56ec8ea6a65e36610db392d3d24b9";
+  };
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "doc" ];
+
+  patches = [
+    # Don't generate code that doesn't compile when --enable-relocatable is passed to Setup.hs
+    # Can be removed if the Cabal library included with ghc backports the linked fix
+    (fetchpatch {
+      url = "https://github.com/haskell/cabal/commit/6c796218c92f93c95e94d5ec2d077f6956f68e98.patch";
+      stripLen = 1;
+      extraPrefix = "libraries/Cabal/";
+      sha256 = "sha256-yRQ6YmMiwBwiYseC5BsrEtDgFbWvst+maGgDtdD0vAY=";
+    })
+
+    # Work around a type not being defined when including Rts.h in bytestring's cbits
+    # due to missing feature macros. See https://gitlab.haskell.org/ghc/ghc/-/issues/23810.
+    ./9.4.6-bytestring-posix-source.patch
+  ] ++ lib.optionals (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) [
+    # Prevent the paths module from emitting symbols that we don't use
+    # when building with separate outputs.
+    #
+    # These cause problems as they're not eliminated by GHC's dead code
+    # elimination on aarch64-darwin. (see
+    # https://github.com/NixOS/nixpkgs/issues/140774 for details).
+    ./Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
+  ];
+
+  postPatch = "patchShebangs .";
+
+  # GHC needs the locale configured during the Haddock phase.
+  LANG = "en_US.UTF-8";
+
+  # GHC is a bit confused on its cross terminology.
+  # TODO(@sternenseemann): investigate coreutils dependencies and pass absolute paths
+  preConfigure = ''
+    for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
+      export "''${env#TARGET_}=''${!env}"
+    done
+    # GHC is a bit confused on its cross terminology, as these would normally be
+    # the *host* tools.
+    export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
+    export CXX="${targetCC}/bin/${targetCC.targetPrefix}c++"
+    # Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
+    export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${lib.optionalString useLdGold ".gold"}"
+    export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
+    export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
+    export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
+    export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib"
+    export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf"
+    export STRIP="${bintoolsFor.strip}/bin/${bintoolsFor.strip.targetPrefix}strip"
+  '' + lib.optionalString (stdenv.targetPlatform.linker == "cctools") ''
+    export OTOOL="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}otool"
+    export INSTALL_NAME_TOOL="${bintoolsFor.install_name_tool}/bin/${bintoolsFor.install_name_tool.targetPrefix}install_name_tool"
+  '' + lib.optionalString useLLVM ''
+    export LLC="${lib.getBin buildTargetLlvmPackages.llvm}/bin/llc"
+    export OPT="${lib.getBin buildTargetLlvmPackages.llvm}/bin/opt"
+  '' + lib.optionalString (useLLVM && stdenv.targetPlatform.isDarwin) ''
+    # LLVM backend on Darwin needs clang: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/codegens.html#llvm-code-generator-fllvm
+    export CLANG="${buildTargetLlvmPackages.clang}/bin/${buildTargetLlvmPackages.clang.targetPrefix}clang"
+  '' + ''
+
+    echo -n "${buildMK}" > mk/build.mk
+
+    sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
+  '' + lib.optionalString (stdenv.isLinux && hostPlatform.libc == "glibc") ''
+    export LOCALE_ARCHIVE="${glibcLocales}/lib/locale/locale-archive"
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
+  '' + lib.optionalString stdenv.isDarwin ''
+    export NIX_LDFLAGS+=" -no_dtrace_dof"
+
+    # GHC tries the host xattr /usr/bin/xattr by default which fails since it expects python to be 2.7
+    export XATTR=${lib.getBin xattr}/bin/xattr
+  '' + lib.optionalString targetPlatform.useAndroidPrebuilt ''
+    sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets
+  '' + lib.optionalString targetPlatform.isMusl ''
+      echo "patching llvm-targets for musl targets..."
+      echo "Cloning these existing '*-linux-gnu*' targets:"
+      grep linux-gnu llvm-targets | sed 's/^/  /'
+      echo "(go go gadget sed)"
+      sed -i 's,\(^.*linux-\)gnu\(.*\)$,\0\n\1musl\2,' llvm-targets
+      echo "llvm-targets now contains these '*-linux-musl*' targets:"
+      grep linux-musl llvm-targets | sed 's/^/  /'
+
+      echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
+      # (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
+      for x in configure aclocal.m4; do
+        substituteInPlace $x \
+          --replace '*-android*|*-gnueabi*)' \
+                    '*-android*|*-gnueabi*|*-musleabi*)'
+      done
+  ''
+  # HACK: allow bootstrapping with GHC 8.10 which works fine, as we don't have
+  # binary 9.0 packaged. Bootstrapping with 9.2 is broken without hadrian.
+  + ''
+    substituteInPlace configure --replace \
+      'MinBootGhcVersion="9.0"' \
+      'MinBootGhcVersion="8.10"'
+  '';
+
+  # TODO(@Ericson2314): Always pass "--target" and always prefix.
+  configurePlatforms = [ "build" "host" ]
+    ++ lib.optional (targetPlatform != hostPlatform) "target";
+
+  # `--with` flags for libraries needed for RTS linker
+  configureFlags = [
+    "--datadir=$doc/share/doc/ghc"
+    "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
+  ] ++ lib.optionals (libffi != null) [
+    "--with-system-libffi"
+    "--with-ffi-includes=${targetPackages.libffi.dev}/include"
+    "--with-ffi-libraries=${targetPackages.libffi.out}/lib"
+  ] ++ lib.optionals (targetPlatform == hostPlatform && !enableNativeBignum) [
+    "--with-gmp-includes=${targetPackages.gmp.dev}/include"
+    "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
+  ] ++ lib.optionals (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
+    "--with-iconv-includes=${libiconv}/include"
+    "--with-iconv-libraries=${libiconv}/lib"
+  ] ++ lib.optionals (targetPlatform != hostPlatform) [
+    "--enable-bootstrap-with-devel-snapshot"
+  ] ++ lib.optionals useLdGold [
+    "CFLAGS=-fuse-ld=gold"
+    "CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
+    "CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
+  ] ++ lib.optionals (disableLargeAddressSpace) [
+    "--disable-large-address-space"
+  ];
+
+  # Make sure we never relax`$PATH` and hooks support for compatibility.
+  strictDeps = true;
+
+  # Don’t add -liconv to LDFLAGS automatically so that GHC will add it itself.
+  dontAddExtraLibs = true;
+
+  nativeBuildInputs = [
+    perl autoconf automake m4 python3
+    ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [
+    autoSignDarwinBinariesHook
+  ] ++ lib.optionals enableDocs [
+    sphinx
+  ];
+
+  # For building runtime libs
+  depsBuildTarget = toolsForTarget;
+
+  buildInputs = [ perl bash ] ++ (libDeps hostPlatform);
+
+  depsTargetTarget = map lib.getDev (libDeps targetPlatform);
+  depsTargetTargetPropagated = map (lib.getOutput "out") (libDeps targetPlatform);
+
+  # required, because otherwise all symbols from HSffi.o are stripped, and
+  # that in turn causes GHCi to abort
+  stripDebugFlags = [ "-S" ] ++ lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
+
+  checkTarget = "test";
+
+  hardeningDisable =
+    [ "format" ]
+    # In nixpkgs, musl based builds currently enable `pie` hardening by default
+    # (see `defaultHardeningFlags` in `make-derivation.nix`).
+    # But GHC cannot currently produce outputs that are ready for `-pie` linking.
+    # Thus, disable `pie` hardening, otherwise `recompile with -fPIE` errors appear.
+    # See:
+    # * https://github.com/NixOS/nixpkgs/issues/129247
+    # * https://gitlab.haskell.org/ghc/ghc/-/issues/19580
+    ++ lib.optional stdenv.targetPlatform.isMusl "pie";
+
+  # big-parallel allows us to build with more than 2 cores on
+  # Hydra which already warrants a significant speedup
+  requiredSystemFeatures = [ "big-parallel" ];
+
+  postInstall = ''
+    # Install the bash completion file.
+    install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc
+  '';
+
+  passthru = {
+    inherit bootPkgs targetPrefix;
+
+    inherit llvmPackages;
+    inherit enableShared;
+
+    # This is used by the haskell builder to query
+    # the presence of the haddock program.
+    hasHaddock = enableHaddockProgram;
+
+    # Our Cabal compiler name
+    haskellCompilerName = "ghc-${version}";
+  };
+
+  meta = {
+    homepage = "http://haskell.org/ghc";
+    description = "The Glasgow Haskell Compiler";
+    maintainers = with lib.maintainers; [
+      guibou
+    ] ++ lib.teams.haskell.members;
+    timeout = 24 * 3600;
+    inherit (ghc.meta) license platforms;
+  };
+
+} // lib.optionalAttrs targetPlatform.useAndroidPrebuilt {
+  dontStrip = true;
+  dontPatchELF = true;
+  noAuditTmpdir = true;
+})
diff --git a/nixpkgs/pkgs/development/compilers/ghc/Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch b/nixpkgs/pkgs/development/compilers/ghc/Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
index 1f7a79cc6885..1f7a79cc6885 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/Cabal-3.6-paths-fix-cycle-aarch64-darwin.patch
+++ b/nixpkgs/pkgs/development/compilers/ghc/Cabal-3.6-3.8-paths-fix-cycle-aarch64-darwin.patch
diff --git a/nixpkgs/pkgs/development/compilers/ghc/common-hadrian.nix b/nixpkgs/pkgs/development/compilers/ghc/common-hadrian.nix
index 099a7fd2568f..94755f1beec8 100644
--- a/nixpkgs/pkgs/development/compilers/ghc/common-hadrian.nix
+++ b/nixpkgs/pkgs/development/compilers/ghc/common-hadrian.nix
@@ -57,8 +57,7 @@
 , # If enabled, use -fPIC when compiling static libs.
   enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
 
-  # aarch64 outputs otherwise exceed 2GB limit
-, enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
+, enableProfiledLibs ? true
 
 , # Whether to build dynamic libs for the standard library (on the target
   # platform). Static libs are always built.
@@ -155,6 +154,8 @@
     ghcSrc = ghcSrc;
     ghcVersion = version;
     userSettings = hadrianUserSettings;
+    # Disable haddock generating pretty source listings to stay under 3GB on aarch64-linux
+    enableHyperlinkedSource = !(stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux);
   }
 
 , #  Whether to build sphinx documentation.
diff --git a/nixpkgs/pkgs/development/compilers/go/1.18.nix b/nixpkgs/pkgs/development/compilers/go/1.18.nix
index de74e99d9bb4..5490bc1fc598 100644
--- a/nixpkgs/pkgs/development/compilers/go/1.18.nix
+++ b/nixpkgs/pkgs/development/compilers/go/1.18.nix
@@ -166,7 +166,8 @@ stdenv.mkDerivation rec {
     runHook preInstall
     mkdir -p $GOROOT_FINAL
     cp -a bin pkg src lib misc api doc $GOROOT_FINAL
-    ln -s $GOROOT_FINAL/bin $out/bin
+    mkdir -p $out/bin
+    ln -s $GOROOT_FINAL/bin/* $out/bin
     runHook postInstall
   '';
 
diff --git a/nixpkgs/pkgs/development/compilers/go/1.19.nix b/nixpkgs/pkgs/development/compilers/go/1.19.nix
index 0ce8fcc659a8..d123c69319ee 100644
--- a/nixpkgs/pkgs/development/compilers/go/1.19.nix
+++ b/nixpkgs/pkgs/development/compilers/go/1.19.nix
@@ -166,7 +166,8 @@ stdenv.mkDerivation rec {
     runHook preInstall
     mkdir -p $GOROOT_FINAL
     cp -a bin pkg src lib misc api doc $GOROOT_FINAL
-    ln -s $GOROOT_FINAL/bin $out/bin
+    mkdir -p $out/bin
+    ln -s $GOROOT_FINAL/bin/* $out/bin
     runHook postInstall
   '';
 
diff --git a/nixpkgs/pkgs/development/compilers/go/1.20.nix b/nixpkgs/pkgs/development/compilers/go/1.20.nix
index 18fa8db98792..3364ea354019 100644
--- a/nixpkgs/pkgs/development/compilers/go/1.20.nix
+++ b/nixpkgs/pkgs/development/compilers/go/1.20.nix
@@ -46,11 +46,11 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "go";
-  version = "1.20.6";
+  version = "1.20.7";
 
   src = fetchurl {
     url = "https://go.dev/dl/go${version}.src.tar.gz";
-    hash = "sha256-Yu5bxvtVuLro9wXgy434bWRTYmtOz5MnnihnCS4Lf3A=";
+    hash = "sha256-LF7pyeweczsNu8K9/tP2IwblHYFyvzj09OVCsnUg9Zc=";
   };
 
   strictDeps = true;
@@ -158,7 +158,8 @@ stdenv.mkDerivation rec {
     runHook preInstall
     mkdir -p $GOROOT_FINAL
     cp -a bin pkg src lib misc api doc $GOROOT_FINAL
-    ln -s $GOROOT_FINAL/bin $out/bin
+    mkdir -p $out/bin
+    ln -s $GOROOT_FINAL/bin/* $out/bin
     runHook postInstall
   '';
 
diff --git a/nixpkgs/pkgs/development/compilers/go/1.21.nix b/nixpkgs/pkgs/development/compilers/go/1.21.nix
new file mode 100644
index 000000000000..c95211c6d9e3
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/go/1.21.nix
@@ -0,0 +1,183 @@
+{ lib
+, stdenv
+, fetchurl
+, tzdata
+, substituteAll
+, iana-etc
+, Security
+, Foundation
+, xcbuild
+, mailcap
+, buildPackages
+, pkgsBuildTarget
+, threadsCross
+, testers
+, skopeo
+, buildGo121Module
+}:
+
+let
+  useGccGoBootstrap = stdenv.buildPlatform.isMusl || stdenv.buildPlatform.isRiscV;
+  goBootstrap = if useGccGoBootstrap then buildPackages.gccgo12 else buildPackages.callPackage ./bootstrap117.nix { };
+
+  skopeoTest = skopeo.override { buildGoModule = buildGo121Module; };
+
+  goarch = platform: {
+    "aarch64" = "arm64";
+    "arm" = "arm";
+    "armv5tel" = "arm";
+    "armv6l" = "arm";
+    "armv7l" = "arm";
+    "i686" = "386";
+    "mips" = "mips";
+    "mips64el" = "mips64le";
+    "mipsel" = "mipsle";
+    "powerpc64le" = "ppc64le";
+    "riscv64" = "riscv64";
+    "s390x" = "s390x";
+    "x86_64" = "amd64";
+  }.${platform.parsed.cpu.name} or (throw "Unsupported system: ${platform.parsed.cpu.name}");
+
+  # We need a target compiler which is still runnable at build time,
+  # to handle the cross-building case where build != host == target
+  targetCC = pkgsBuildTarget.targetPackages.stdenv.cc;
+
+  isCross = stdenv.buildPlatform != stdenv.targetPlatform;
+in
+stdenv.mkDerivation rec {
+  pname = "go";
+  version = "1.21.0";
+
+  src = fetchurl {
+    url = "https://go.dev/dl/go${version}.src.tar.gz";
+    hash = "sha256-gY1G7ehWgt1VGtN47zek0kcAbxLsWbW3VWAdLOEUNpo=";
+  };
+
+  strictDeps = true;
+  buildInputs = [ ]
+    ++ lib.optionals stdenv.isLinux [ stdenv.cc.libc.out ]
+    ++ lib.optionals (stdenv.hostPlatform.libc == "glibc") [ stdenv.cc.libc.static ];
+
+  depsTargetTargetPropagated = lib.optionals stdenv.targetPlatform.isDarwin [ Foundation Security xcbuild ];
+
+  depsBuildTarget = lib.optional isCross targetCC;
+
+  depsTargetTarget = lib.optional stdenv.targetPlatform.isWindows threadsCross.package;
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  patches = [
+    (substituteAll {
+      src = ./iana-etc-1.17.patch;
+      iana = iana-etc;
+    })
+    # Patch the mimetype database location which is missing on NixOS.
+    # but also allow static binaries built with NixOS to run outside nix
+    (substituteAll {
+      src = ./mailcap-1.17.patch;
+      inherit mailcap;
+    })
+    # prepend the nix path to the zoneinfo files but also leave the original value for static binaries
+    # that run outside a nix server
+    (substituteAll {
+      src = ./tzdata-1.19.patch;
+      inherit tzdata;
+    })
+    ./remove-tools-1.11.patch
+    ./go_no_vendor_checks-1.21.patch
+  ];
+
+  GOOS = stdenv.targetPlatform.parsed.kernel.name;
+  GOARCH = goarch stdenv.targetPlatform;
+  # GOHOSTOS/GOHOSTARCH must match the building system, not the host system.
+  # Go will nevertheless build a for host system that we will copy over in
+  # the install phase.
+  GOHOSTOS = stdenv.buildPlatform.parsed.kernel.name;
+  GOHOSTARCH = goarch stdenv.buildPlatform;
+
+  # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those
+  # to be different from CC/CXX
+  CC_FOR_TARGET =
+    if isCross then
+      "${targetCC}/bin/${targetCC.targetPrefix}cc"
+    else
+      null;
+  CXX_FOR_TARGET =
+    if isCross then
+      "${targetCC}/bin/${targetCC.targetPrefix}c++"
+    else
+      null;
+
+  GOARM = toString (lib.intersectLists [ (stdenv.hostPlatform.parsed.cpu.version or "") ] [ "5" "6" "7" ]);
+  GO386 = "softfloat"; # from Arch: don't assume sse2 on i686
+  CGO_ENABLED = 1;
+
+  GOROOT_BOOTSTRAP = if useGccGoBootstrap then goBootstrap else "${goBootstrap}/share/go";
+
+  buildPhase = ''
+    runHook preBuild
+    export GOCACHE=$TMPDIR/go-cache
+    # this is compiled into the binary
+    export GOROOT_FINAL=$out/share/go
+
+    export PATH=$(pwd)/bin:$PATH
+
+    ${lib.optionalString isCross ''
+    # Independent from host/target, CC should produce code for the building system.
+    # We only set it when cross-compiling.
+    export CC=${buildPackages.stdenv.cc}/bin/cc
+    ''}
+    ulimit -a
+
+    pushd src
+    ./make.bash
+    popd
+    runHook postBuild
+  '';
+
+  preInstall = ''
+    # Contains the wrong perl shebang when cross compiling,
+    # since it is not used for anything we can deleted as well.
+    rm src/regexp/syntax/make_perl_groups.pl
+  '' + (if (stdenv.buildPlatform.system != stdenv.hostPlatform.system) then ''
+    mv bin/*_*/* bin
+    rmdir bin/*_*
+    ${lib.optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
+      rm -rf pkg/${GOHOSTOS}_${GOHOSTARCH} pkg/tool/${GOHOSTOS}_${GOHOSTARCH}
+    ''}
+  '' else lib.optionalString (stdenv.hostPlatform.system != stdenv.targetPlatform.system) ''
+    rm -rf bin/*_*
+    ${lib.optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
+      rm -rf pkg/${GOOS}_${GOARCH} pkg/tool/${GOOS}_${GOARCH}
+    ''}
+  '');
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $GOROOT_FINAL
+    cp -a bin pkg src lib misc api doc go.env $GOROOT_FINAL
+    mkdir -p $out/bin
+    ln -s $GOROOT_FINAL/bin/* $out/bin
+    runHook postInstall
+  '';
+
+  disallowedReferences = [ goBootstrap ];
+
+  passthru = {
+    inherit goBootstrap skopeoTest;
+    tests = {
+      skopeo = testers.testVersion { package = skopeoTest; };
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://go.dev/doc/devel/release#go${lib.versions.majorMinor version}";
+    description = "The Go Programming language";
+    homepage = "https://go.dev/";
+    license = licenses.bsd3;
+    maintainers = teams.golang.members;
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/compilers/go/go_no_vendor_checks-1.21.patch b/nixpkgs/pkgs/development/compilers/go/go_no_vendor_checks-1.21.patch
new file mode 100644
index 000000000000..1adbf46398c5
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/go/go_no_vendor_checks-1.21.patch
@@ -0,0 +1,23 @@
+Starting from go1.14, go verifes that vendor/modules.txt matches the requirements
+and replacements listed in the main module go.mod file, and it is a hard failure if
+vendor/modules.txt is missing.
+
+Relax module consistency checks and switch back to pre go1.14 behaviour if
+vendor/modules.txt is missing regardless of go version requirement in go.mod.
+
+This has been ported from FreeBSD: https://reviews.freebsd.org/D24122
+See https://github.com/golang/go/issues/37948 for discussion.
+
+diff --git a/src/cmd/go/internal/modload/vendor.go b/src/cmd/go/internal/modload/vendor.go
+index ffc79bb93f..2d0311975d 100644
+--- a/src/cmd/go/internal/modload/vendor.go
++++ b/src/cmd/go/internal/modload/vendor.go
+@@ -144,7 +144,7 @@ func checkVendorConsistency(index *modFileIndex, modFile *modfile.File) {
+ 	readVendorList(MainModules.mustGetSingleMainModule())
+
+ 	pre114 := false
+-	if gover.Compare(index.goVersion, "1.14") < 0 {
++	if gover.Compare(index.goVersion, "1.14") < 0 || (os.Getenv("GO_NO_VENDOR_CHECKS") == "1" && len(vendorMeta) == 0) {
+ 		// Go versions before 1.14 did not include enough information in
+ 		// vendor/modules.txt to check for consistency.
+ 		// If we know that we're on an earlier version, relax the consistency check.
diff --git a/nixpkgs/pkgs/development/compilers/jasmin-compiler/default.nix b/nixpkgs/pkgs/development/compilers/jasmin-compiler/default.nix
index 9f539f698182..7bb0d3742a97 100644
--- a/nixpkgs/pkgs/development/compilers/jasmin-compiler/default.nix
+++ b/nixpkgs/pkgs/development/compilers/jasmin-compiler/default.nix
@@ -2,21 +2,15 @@
 
 stdenv.mkDerivation rec {
   pname = "jasmin-compiler";
-  version = "2023.06.0";
+  version = "2023.06.1";
 
   src = fetchurl {
     url = "https://github.com/jasmin-lang/jasmin/releases/download/v${version}/jasmin-compiler-v${version}.tar.bz2";
-    hash = "sha256-yQBQGDNZQhNATs62nqWsgl/HzQCH24EHPp87B3I0Dxo=";
+    hash = "sha256-3+eIR8wkBlcUQVDsugHo/rHNHbE2vpE9gutp55kRY4Y=";
   };
 
   sourceRoot = "jasmin-compiler-v${version}/compiler";
 
-  # Released tarball contains extraneous `dune` files
-  # See https://github.com/jasmin-lang/jasmin/pull/495
-  preBuild = ''
-    rm -rf tests
-  '';
-
   nativeBuildInputs = with ocamlPackages; [ ocaml findlib dune_3 menhir camlidl cmdliner ];
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/development/compilers/jetbrains-jdk/jcef.nix b/nixpkgs/pkgs/development/compilers/jetbrains-jdk/jcef.nix
index d3785703da33..165c9bea58ee 100644
--- a/nixpkgs/pkgs/development/compilers/jetbrains-jdk/jcef.nix
+++ b/nixpkgs/pkgs/development/compilers/jetbrains-jdk/jcef.nix
@@ -76,11 +76,11 @@ buildType = if debugBuild then "Debug" else "Release";
 
 in stdenv.mkDerivation rec {
   pname = "jcef-jetbrains";
-  rev = "3dfde2a70f1f914c6a84ba967123a0e38f51053f";
+  rev = "1ac1c682c497f2b864f86050796461f22935ea64";
   # This is the commit number
-  # Currently from the 231 branch: https://github.com/JetBrains/jcef/tree/231
+  # Currently from the branch: https://github.com/JetBrains/jcef/tree/232
   # Run `git rev-list --count HEAD`
-  version = "654";
+  version = "672";
 
   nativeBuildInputs = [ cmake python3 jdk17 git rsync ant ninja ];
   buildInputs = [ libX11 libXdamage nss nspr ];
@@ -89,19 +89,19 @@ in stdenv.mkDerivation rec {
     owner = "jetbrains";
     repo = "jcef";
     inherit rev;
-    hash = "sha256-g8jWzRI2uYzu8O7JHENn0u9yY08fvY6g0Uym02oYUMI=";
+    hash = "sha256-3HuW8upR/bZoK8euVti2KpCZh9xxfqgyHmgoG1NjxOI=";
   };
   cef-bin = let
-    fileName = "cef_binary_104.4.26+g4180781+chromium-104.0.5112.102_linux64_minimal";
+    fileName = "cef_binary_111.2.1+g870da30+chromium-111.0.5563.64_linux64_minimal";
     urlName = builtins.replaceStrings ["+"] ["%2B"] fileName;
   in fetchzip rec {
     name = fileName;
     url = "https://cef-builds.spotifycdn.com/${urlName}.tar.bz2";
-    hash = "sha256-0PAWWBR+9TO8hhejydWz8R6Df3d9A/Mb0VL8stlPz5Q=";
+    hash = "sha256-r+zXTmDN5s/bYLvbCnHufYdXIqQmCDlbWgs5pdOpLTw=";
   };
   clang-fmt = fetchurl {
-    url = "https://storage.googleapis.com/chromium-clang-format/942fc8b1789144b8071d3fc03ff0fcbe1cf81ac8";
-    hash = "sha256-5iAU49tQmLS7zkS+6iGT+6SEdERRo1RkyRpiRvc9nVY=";
+    url = "https://storage.googleapis.com/chromium-clang-format/dd736afb28430c9782750fc0fd5f0ed497399263";
+    hash = "sha256-4H6FVO9jdZtxH40CSfS+4VESAHgYgYxfCBFSMHdT0hE=";
   };
 
   configurePhase = ''
diff --git a/nixpkgs/pkgs/development/compilers/ligo/2706.diff b/nixpkgs/pkgs/development/compilers/ligo/2706.diff
deleted file mode 100644
index 8eab82e1461e..000000000000
--- a/nixpkgs/pkgs/development/compilers/ligo/2706.diff
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/src/passes/02-parsing/cameligo/dune
-+++ b/src/passes/02-parsing/cameligo/dune
-@@ -20,7 +20,9 @@
-  (action
-   (with-stdout-to
-    %{targets}
--   (run menhir-recover --external-tokens Lexing_cameligo.Token Parser.cmly))))
-+   (run menhir-recover
-+      --external-tokens Lexing_cameligo.Token.MenhirInterpreter
-+      Parser.cmly))))
- 
- ;; Build of the CameLIGO parser as a library
- 
-diff --git a/src/passes/02-parsing/jsligo/dune b/src/passes/02-parsing/jsligo/dune
-index d691ab0af0fe6ae87119405c19e49e2b5c2d1a23..3b13a06e69737037df0df12aa087506f402d8430 100644
---- a/src/passes/02-parsing/jsligo/dune
-+++ b/src/passes/02-parsing/jsligo/dune
-@@ -20,7 +20,9 @@
-  (action
-   (with-stdout-to
-    %{targets}
--   (run menhir-recover --external-tokens Lexing_jsligo.Token Parser.cmly))))
-+   (run menhir-recover
-+      --external-tokens Lexing_jsligo.Token.MenhirInterpreter
-+      Parser.cmly))))
- 
- ;; Build of the JsLIGO parser as a library
- 
-diff --git a/src/passes/02-parsing/pascaligo/dune b/src/passes/02-parsing/pascaligo/dune
-index 0516a8b790d2eb3ebdb833051bd66241ca44832c..e650decc7ba9907551e1016fee1a53b806fb593e 100644
---- a/src/passes/02-parsing/pascaligo/dune
-+++ b/src/passes/02-parsing/pascaligo/dune
-@@ -20,7 +20,9 @@
-  (action
-   (with-stdout-to
-    %{targets}
--   (run menhir-recover --external-tokens Lexing_pascaligo.Token Parser.cmly))))
-+   (run menhir-recover
-+      --external-tokens Lexing_pascaligo.Token.MenhirInterpreter
-+      Parser.cmly))))
- 
- ;; Build of the PascaLIGO parser as a library
- 
-diff --git a/src/passes/02-parsing/pyligo/dune b/src/passes/02-parsing/pyligo/dune
-index abb0165f6f185d21ea4a52a152cef188ae9dde4b..5930d86ab721e9dd683e5c4f2873b196ac5859b4 100644
---- a/src/passes/02-parsing/pyligo/dune
-+++ b/src/passes/02-parsing/pyligo/dune
-@@ -20,7 +20,9 @@
-  (action
-   (with-stdout-to
-    %{targets}
--   (run menhir-recover --external-tokens Lexing_pyligo.Token Parser.cmly))))
-+   (run menhir-recover
-+      --external-tokens Lexing_pyligo.Token.MenhirInterpreter
-+      Parser.cmly))))
- 
- ;; Build of the PyLIGO parser as a library
- 
diff --git a/nixpkgs/pkgs/development/compilers/ligo/default.nix b/nixpkgs/pkgs/development/compilers/ligo/default.nix
index 05fea9caddbb..8257eab56aa2 100644
--- a/nixpkgs/pkgs/development/compilers/ligo/default.nix
+++ b/nixpkgs/pkgs/development/compilers/ligo/default.nix
@@ -15,18 +15,15 @@
 
 ocamlPackages.buildDunePackage rec {
   pname = "ligo";
-  version = "0.69.0";
+  version = "0.72.0";
   src = fetchFromGitLab {
     owner = "ligolang";
     repo = "ligo";
     rev = version;
-    sha256 = "sha256-Swt4uihsAtHVMkc0DxATwB8FvgxwtSJTN3E5cBtyXf8=";
+    sha256 = "sha256-DQ3TxxLxi8/W1+uBX7NEBIsVXBKnJBa6YNRBFleNrEA=";
     fetchSubmodules = true;
   };
 
-  # https://gitlab.com/ligolang/ligo/-/merge_requests/2706.diff
-  patches = [ ./2706.diff ];
-
   postPatch = ''
     substituteInPlace "vendors/tezos-ligo/src/lib_hacl/hacl.ml" \
       --replace \
@@ -78,6 +75,7 @@ ocamlPackages.buildDunePackage rec {
     decompress
     ppx_deriving
     ppx_deriving_yojson
+    ppx_yojson_conv
     ppx_expect
     ppx_import
     terminal_size
diff --git a/nixpkgs/pkgs/development/compilers/llvm/10/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/10/clang/default.nix
index 3d503c9b9139..ad4e91304158 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/10/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/10/clang/default.nix
@@ -73,12 +73,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/11/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/11/clang/default.nix
index a721c243b46a..f0d41a3ab734 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/11/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/11/clang/default.nix
@@ -78,12 +78,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/12/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/12/clang/default.nix
index acccb55c2f89..7ecd4efc0837 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/12/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/12/clang/default.nix
@@ -72,12 +72,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/13/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/13/clang/default.nix
index 5e06e85c02a9..a070e64c7ddd 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/13/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/13/clang/default.nix
@@ -66,12 +66,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/14/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/14/clang/default.nix
index 901e41a58fa7..976ff7580ac3 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/14/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/14/clang/default.nix
@@ -69,12 +69,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/5/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/5/clang/default.nix
index 0428e3a170cb..6e968a6bd2a6 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/5/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/5/clang/default.nix
@@ -67,12 +67,13 @@ let
       substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/6/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/6/clang/default.nix
index 3efb3c02c79e..baf601ffbfc2 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/6/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/6/clang/default.nix
@@ -67,12 +67,13 @@ let
       substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix
index b044e1662426..c3f2bcb73ffe 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix
@@ -79,12 +79,13 @@ let
       substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/8/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/8/clang/default.nix
index d03178d6897a..0d0af5ab6aa6 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/8/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/8/clang/default.nix
@@ -85,12 +85,13 @@ let
       substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/9/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/9/clang/default.nix
index 4a48cb94c4ae..75814fc11c48 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/9/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/9/clang/default.nix
@@ -80,12 +80,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/llvm/git/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/git/clang/default.nix
index 894db1a4975f..733f5462d320 100644
--- a/nixpkgs/pkgs/development/compilers/llvm/git/clang/default.nix
+++ b/nixpkgs/pkgs/development/compilers/llvm/git/clang/default.nix
@@ -81,12 +81,13 @@ let
           --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
           --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
 
-      mkdir -p $python/bin $python/share/clang/
+      mkdir -p $python/bin $python/share/{clang,scan-view}
       mv $out/bin/{git-clang-format,scan-view} $python/bin
       if [ -e $out/bin/set-xcode-analyzer ]; then
         mv $out/bin/set-xcode-analyzer $python/bin
       fi
       mv $out/share/clang/*.py $python/share/clang
+      mv $out/share/scan-view/*.py $python/share/scan-view
       rm $out/bin/c-index-test
       patchShebangs $python/bin
 
diff --git a/nixpkgs/pkgs/development/compilers/mercury/default.nix b/nixpkgs/pkgs/development/compilers/mercury/default.nix
index 134c9e114370..573c18cd9284 100644
--- a/nixpkgs/pkgs/development/compilers/mercury/default.nix
+++ b/nixpkgs/pkgs/development/compilers/mercury/default.nix
@@ -3,11 +3,11 @@
 
 stdenv.mkDerivation rec {
   pname = "mercury";
-  version = "22.01.6";
+  version = "22.01.7";
 
   src = fetchurl {
     url    = "https://dl.mercurylang.org/release/mercury-srcdist-${version}.tar.gz";
-    sha256 = "sha256-dpRW+DRGJZPIvUv6/y1TLAFjrPOldKBtpwn87nOgIt8=";
+    sha256 = "sha256-PctyVKlV2cnHoBSAXjMTSPvWY7op9D6kIMypYDRgvGw=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -54,9 +54,10 @@ stdenv.mkDerivation rec {
       allowing modularity, separate compilation, and numerous optimization/time
       trade-offs.
     '';
-    homepage    = "http://mercurylang.org";
-    license     = lib.licenses.gpl2;
-    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    homepage    = "https://mercurylang.org/";
+    changelog   = "https://dl.mercurylang.org/release/release-notes-${version}.html";
+    license     = lib.licenses.gpl2Only;
+    platforms   = lib.platforms.all;
     maintainers = [ ];
   };
 }
diff --git a/nixpkgs/pkgs/development/compilers/nextpnr/default.nix b/nixpkgs/pkgs/development/compilers/nextpnr/default.nix
index 2f6e4c86ac9e..d56f7e716301 100644
--- a/nixpkgs/pkgs/development/compilers/nextpnr/default.nix
+++ b/nixpkgs/pkgs/development/compilers/nextpnr/default.nix
@@ -11,29 +11,33 @@
 
 let
   boostPython = boost.override { python = python3; enablePython = true; };
-in
-stdenv.mkDerivation rec {
+
   pname = "nextpnr";
   version = "0.6";
 
-  srcs = [
-    (fetchFromGitHub {
-      owner = "YosysHQ";
-      repo  = "nextpnr";
-      rev   = "${pname}-${version}";
-      hash  = "sha256-S6qvTzvkS2tBMvuTpmuCx6h0OcKP5NBbmgRgOpAVtnA=";
-      name  = "nextpnr";
-    })
-    (fetchFromGitHub {
-      owner  = "YosysHQ";
-      repo   = "nextpnr-tests";
-      rev    = "00c55a9eb9ea2e062b51fe0d64741412b185d95d";
-      sha256 = "sha256-83suMftMtnaRFq3T2/I7Uahb11WZlXhwYt6Q/rqi2Yo=";
-      name   = "nextpnr-tests";
-    })
-  ];
+  main_src = fetchFromGitHub {
+    owner = "YosysHQ";
+    repo  = "nextpnr";
+    rev   = "${pname}-${version}";
+    hash  = "sha256-S6qvTzvkS2tBMvuTpmuCx6h0OcKP5NBbmgRgOpAVtnA=";
+    name  = "nextpnr";
+  };
+
+  test_src = fetchFromGitHub {
+    owner  = "YosysHQ";
+    repo   = "nextpnr-tests";
+    rev    = "00c55a9eb9ea2e062b51fe0d64741412b185d95d";
+    sha256 = "sha256-83suMftMtnaRFq3T2/I7Uahb11WZlXhwYt6Q/rqi2Yo=";
+    name   = "nextpnr-tests";
+  };
+in
+
+stdenv.mkDerivation rec {
+  inherit pname version;
+
+  srcs = [ main_src test_src ];
 
-  sourceRoot = "nextpnr";
+  sourceRoot = main_src.name;
 
   nativeBuildInputs
      = [ cmake ]
@@ -66,7 +70,7 @@ stdenv.mkDerivation rec {
   '';
 
   preBuild = ''
-    ln -s ../nextpnr-tests tests
+    ln -s ../${test_src.name} tests
   '';
 
   doCheck = true;
diff --git a/nixpkgs/pkgs/development/compilers/nim/default.nix b/nixpkgs/pkgs/development/compilers/nim/default.nix
index 131a27b6f544..f18671242130 100644
--- a/nixpkgs/pkgs/development/compilers/nim/default.nix
+++ b/nixpkgs/pkgs/development/compilers/nim/default.nix
@@ -2,8 +2,8 @@
 # https://nim-lang.org/docs/nimc.html
 
 { lib, callPackage, buildPackages, stdenv, fetchurl, fetchgit, fetchFromGitHub
-, makeWrapper, openssl, pcre, readline, boehmgc, sqlite, nim-unwrapped
-, nimble-unwrapped, Security }:
+, makeWrapper, openssl, pcre, readline, boehmgc, sqlite, Security, nim-unwrapped
+, nim-unwrapped-2, nimble-unwrapped, nim }:
 
 let
   parseCpu = platform:
@@ -72,25 +72,15 @@ let
   nimHost = parsePlatform stdenv.hostPlatform;
   nimTarget = parsePlatform stdenv.targetPlatform;
 
-  bootstrapCompiler = stdenv.mkDerivation {
-    pname = "nim-bootstrap";
-    inherit (nim-unwrapped) version src preBuild;
-    enableParallelBuilding = true;
-    installPhase = ''
-      runHook preInstall
-      install -Dt $out/bin bin/nim
-      runHook postInstall
-    '';
-  };
 in {
 
-  nim-unwrapped = stdenv.mkDerivation rec {
+  nim-unwrapped = stdenv.mkDerivation (finalAttrs: {
     pname = "nim-unwrapped";
     version = "1.6.14";
     strictDeps = true;
 
     src = fetchurl {
-      url = "https://nim-lang.org/download/nim-${version}.tar.xz";
+      url = "https://nim-lang.org/download/nim-${finalAttrs.version}.tar.xz";
       hash = "sha256-0HDS8oriQA33/kpJ7OufRc1TmQaxB0gYVqCveo+oLck=";
     };
 
@@ -108,7 +98,18 @@ in {
       # Mangle store paths of modules to prevent runtime dependence.
     ] ++ lib.optional (!stdenv.hostPlatform.isWindows) ./toLocation.patch;
 
-    configurePhase = ''
+    configurePhase = let
+      bootstrapCompiler = stdenv.mkDerivation {
+        pname = "nim-bootstrap";
+        inherit (finalAttrs) version src preBuild;
+        enableParallelBuilding = true;
+        installPhase = ''
+          runHook preInstall
+          install -Dt $out/bin bin/nim
+          runHook postInstall
+        '';
+      };
+    in ''
       runHook preConfigure
       cp ${bootstrapCompiler}/bin/nim bin/
       echo 'define:nixbuild' >> config/nim.cfg
@@ -154,7 +155,25 @@ in {
       mainProgram = "nim";
       maintainers = with maintainers; [ ehmry ];
     };
-  };
+  });
+
+  nim-unwrapped-2 = nim-unwrapped.overrideAttrs (finalAttrs: rec {
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://nim-lang.org/download/nim-${version}.tar.xz";
+      hash = "sha256-vWEB2EADb7eOk6ad9s8/n9DCHNdUtpX/hKO0rdjtCvc=";
+    };
+    patches = [
+      ./NIM_CONFIG_DIR.patch
+      # Override compiler configuration via an environmental variable
+
+      ./nixbuild.patch
+      # Load libraries at runtime by absolute path
+
+      ./extra-mangling.patch
+      # Mangle store paths of modules to prevent runtime dependence.
+    ];
+  });
 
   nimble-unwrapped = stdenv.mkDerivation rec {
     pname = "nimble-unwrapped";
@@ -169,8 +188,7 @@ in {
     };
 
     depsBuildBuild = [ nim-unwrapped ];
-    buildInputs = [ openssl ]
-      ++ lib.optional stdenv.isDarwin Security;
+    buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security;
 
     nimFlags = [ "--cpu:${nimHost.cpu}" "--os:${nimHost.os}" "-d:release" ];
 
@@ -194,147 +212,157 @@ in {
       mainProgram = "nimble";
     };
   };
-
-  nim = let
-    nim' = buildPackages.nim-unwrapped;
-    nimble' = buildPackages.nimble-unwrapped;
-    inherit (stdenv) targetPlatform;
-    self = stdenv.mkDerivation {
-      name = "${targetPlatform.config}-nim-wrapper-${nim'.version}";
-      inherit (nim') version;
-      preferLocalBuild = true;
-      strictDeps = true;
-
-      nativeBuildInputs = [ makeWrapper ];
-
-      # Needed for any nim package that uses the standard library's
-      # 'std/sysrand' module.
-      depsTargetTargetPropagated = lib.optional stdenv.isDarwin Security;
-
-      patches = [
-        ./nim.cfg.patch
-        # Remove configurations that clash with ours
-      ];
-
-      unpackPhase = ''
-        runHook preUnpack
-        tar xf ${nim'.src} nim-$version/config
-        cd nim-$version
-        runHook postUnpack
-      '';
-
-      dontConfigure = true;
-
-      buildPhase =
-        # Configure the Nim compiler to use $CC and $CXX as backends
-        # The compiler is configured by two configuration files, each with
-        # a different DSL. The order of evaluation matters and that order
-        # is not documented, so duplicate the configuration across both files.
-        ''
-          runHook preBuild
-          cat >> config/config.nims << WTF
-
-          switch("os", "${nimTarget.os}")
-          switch("cpu", "${nimTarget.cpu}")
-          switch("define", "nixbuild")
-
-          # Configure the compiler using the $CC set by Nix at build time
-          import strutils
-          let cc = getEnv"CC"
-          if cc.contains("gcc"):
-            switch("cc", "gcc")
-          elif cc.contains("clang"):
-            switch("cc", "clang")
-          WTF
-
-          mv config/nim.cfg config/nim.cfg.old
-          cat > config/nim.cfg << WTF
-          os = "${nimTarget.os}"
-          cpu =  "${nimTarget.cpu}"
-          define:"nixbuild"
-          WTF
-
-          cat >> config/nim.cfg < config/nim.cfg.old
-          rm config/nim.cfg.old
-
-          cat >> config/nim.cfg << WTF
-
-          clang.cpp.exe %= "\$CXX"
-          clang.cpp.linkerexe %= "\$CXX"
-          clang.exe %= "\$CC"
-          clang.linkerexe %= "\$CC"
-          gcc.cpp.exe %= "\$CXX"
-          gcc.cpp.linkerexe %= "\$CXX"
-          gcc.exe %= "\$CC"
-          gcc.linkerexe %= "\$CC"
-          WTF
-
-          runHook postBuild
+} // (let
+  wrapNim = { nim', nimble', patches }:
+    let
+      targetPlatformConfig = stdenv.targetPlatform.config;
+      self = stdenv.mkDerivation (finalAttrs: {
+        name = "${targetPlatformConfig}-nim-wrapper-${nim'.version}";
+        inherit (nim') version;
+        preferLocalBuild = true;
+        strictDeps = true;
+
+        nativeBuildInputs = [ makeWrapper ];
+
+        # Needed for any nim package that uses the standard library's
+        # 'std/sysrand' module.
+        depsTargetTargetPropagated = lib.optional stdenv.isDarwin Security;
+
+        inherit patches;
+
+        unpackPhase = ''
+          runHook preUnpack
+          tar xf ${nim'.src} nim-$version/config
+          cd nim-$version
+          runHook postUnpack
         '';
 
-      wrapperArgs = lib.optionals (!(stdenv.isDarwin && stdenv.isAarch64)) [
-        "--prefix PATH : ${lib.makeBinPath [ buildPackages.gdb ]}:${
-          placeholder "out"
-        }/bin"
-        # Used by nim-gdb
-
-        "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl pcre ]}"
-        # These libraries may be referred to by the standard library.
-        # This is broken for cross-compilation because the package
-        # set will be shifted back by nativeBuildInputs.
-
-        "--set NIM_CONFIG_PATH ${placeholder "out"}/etc/nim"
-        # Use the custom configuration
-      ];
+        dontConfigure = true;
+
+        buildPhase =
+          # Configure the Nim compiler to use $CC and $CXX as backends
+          # The compiler is configured by two configuration files, each with
+          # a different DSL. The order of evaluation matters and that order
+          # is not documented, so duplicate the configuration across both files.
+          ''
+            runHook preBuild
+            cat >> config/config.nims << WTF
+
+            switch("os", "${nimTarget.os}")
+            switch("cpu", "${nimTarget.cpu}")
+            switch("define", "nixbuild")
+
+            # Configure the compiler using the $CC set by Nix at build time
+            import strutils
+            let cc = getEnv"CC"
+            if cc.contains("gcc"):
+              switch("cc", "gcc")
+            elif cc.contains("clang"):
+              switch("cc", "clang")
+            WTF
+
+            mv config/nim.cfg config/nim.cfg.old
+            cat > config/nim.cfg << WTF
+            os = "${nimTarget.os}"
+            cpu =  "${nimTarget.cpu}"
+            define:"nixbuild"
+            WTF
+
+            cat >> config/nim.cfg < config/nim.cfg.old
+            rm config/nim.cfg.old
+
+            cat >> config/nim.cfg << WTF
+
+            clang.cpp.exe %= "\$CXX"
+            clang.cpp.linkerexe %= "\$CXX"
+            clang.exe %= "\$CC"
+            clang.linkerexe %= "\$CC"
+            gcc.cpp.exe %= "\$CXX"
+            gcc.cpp.linkerexe %= "\$CXX"
+            gcc.exe %= "\$CC"
+            gcc.linkerexe %= "\$CC"
+            WTF
+
+            runHook postBuild
+          '';
+
+        wrapperArgs = lib.optionals (!(stdenv.isDarwin && stdenv.isAarch64)) [
+          "--prefix PATH : ${lib.makeBinPath [ buildPackages.gdb ]}:${
+            placeholder "out"
+          }/bin"
+          # Used by nim-gdb
+
+          "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl pcre ]}"
+          # These libraries may be referred to by the standard library.
+          # This is broken for cross-compilation because the package
+          # set will be shifted back by nativeBuildInputs.
+
+          "--set NIM_CONFIG_PATH ${placeholder "out"}/etc/nim"
+          # Use the custom configuration
+        ];
+
+        installPhase = ''
+          runHook preInstall
+
+          mkdir -p $out/bin $out/etc
+
+          cp -r config $out/etc/nim
+
+          for binpath in ${nim'}/bin/nim?*; do
+            local binname=`basename $binpath`
+            makeWrapper \
+              $binpath $out/bin/${targetPlatformConfig}-$binname \
+              $wrapperArgs
+            ln -s $out/bin/${targetPlatformConfig}-$binname $out/bin/$binname
+          done
 
-      installPhase = ''
-        runHook preInstall
-
-        mkdir -p $out/bin $out/etc
-
-        cp -r config $out/etc/nim
+          makeWrapper \
+            ${nim'}/nim/bin/nim $out/bin/${targetPlatformConfig}-nim \
+            --set-default CC $(command -v $CC) \
+            --set-default CXX $(command -v $CXX) \
+            $wrapperArgs
+          ln -s $out/bin/${targetPlatformConfig}-nim $out/bin/nim
 
-        for binpath in ${nim'}/bin/nim?*; do
-          local binname=`basename $binpath`
           makeWrapper \
-            $binpath $out/bin/${targetPlatform.config}-$binname \
+            ${nim'}/bin/testament $out/bin/${targetPlatformConfig}-testament \
             $wrapperArgs
-          ln -s $out/bin/${targetPlatform.config}-$binname $out/bin/$binname
-        done
-
-        makeWrapper \
-          ${nim'}/nim/bin/nim $out/bin/${targetPlatform.config}-nim \
-          --set-default CC $(command -v $CC) \
-          --set-default CXX $(command -v $CXX) \
-          $wrapperArgs
-        ln -s $out/bin/${targetPlatform.config}-nim $out/bin/nim
-
-        makeWrapper \
-          ${nim'}/bin/testament $out/bin/${targetPlatform.config}-testament \
-          $wrapperArgs
-        ln -s $out/bin/${targetPlatform.config}-testament $out/bin/testament
-
-        makeWrapper \
-          ${nimble'}/bin/nimble $out/bin/${targetPlatform.config}-nimble \
-          --suffix PATH : $out/bin
-        ln -s $out/bin/${targetPlatform.config}-nimble $out/bin/nimble
-
-        runHook postInstall
-      '';
-
-      passthru = {
-        nim = nim';
-        nimble = nimble';
-      };
+          ln -s $out/bin/${targetPlatformConfig}-testament $out/bin/testament
 
-      meta = nim'.meta // {
-        description = nim'.meta.description
-          + " (${targetPlatform.config} wrapper)";
-        platforms = with lib.platforms; unix ++ genode;
-      };
+        '' + lib.strings.optionalString (nimble' != null) ''
+          makeWrapper \
+            ${nimble'}/bin/nimble $out/bin/${targetPlatformConfig}-nimble \
+            --suffix PATH : $out/bin
+          ln -s $out/bin/${targetPlatformConfig}-nimble $out/bin/nimble
+
+        '' + ''
+          runHook postInstall
+        '';
+
+        passthru = {
+          nim = nim';
+          nimble = nimble';
+        };
+
+        meta = nim'.meta // {
+          description = nim'.meta.description
+            + " (${targetPlatformConfig} wrapper)";
+          platforms = with lib.platforms; unix ++ genode;
+        };
+      });
+    in self // {
+      pkgs = callPackage ../../../top-level/nim-packages.nix { nim = self; };
     };
-  in self // {
-    pkgs = callPackage ../../../top-level/nim-packages.nix { nim = self; };
+in {
+
+  nim = wrapNim {
+    nim' = buildPackages.nim-unwrapped;
+    nimble' = buildPackages.nimble-unwrapped;
+    patches = [ ./nim.cfg.patch ];
   };
 
-}
+  nim2 = wrapNim {
+    nim' = buildPackages.nim-unwrapped-2;
+    nimble' = null;
+    patches = [ ./nim2.cfg.patch ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/compilers/nim/nim2.cfg.patch b/nixpkgs/pkgs/development/compilers/nim/nim2.cfg.patch
new file mode 100644
index 000000000000..ef23d3a84623
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/nim/nim2.cfg.patch
@@ -0,0 +1,41 @@
+diff --git a/config/nim.cfg b/config/nim.cfg
+index 1470de780..8a12f741a 100644
+--- a/config/nim.cfg
++++ b/config/nim.cfg
+@@ -9,8 +9,6 @@
+ # Environment variables can be accessed like so:
+ #  gcc.path %= "$CC_PATH"
+
+-cc = gcc
+-
+ # additional options always passed to the compiler:
+ --parallel_build: "0" # 0 to auto-detect number of processors
+
+@@ -22,27 +20,6 @@ cc = gcc
+
+ threads:on
+
+-# Examples of how to setup a cross-compiler:
+-# Nim can target architectures and OSes different than the local host
+-# Syntax: <arch>.<os>.gcc.exe = "<compiler executable>"
+-#         <arch>.<os>.gcc.linkerexe = "<linker executable>"
+-
+-# ARM e.g. Raspberry Pi 2: gcc-arm-linux-gnueabihf package on Debian/Ubuntu
+-arm.linux.gcc.exe = "arm-linux-gnueabihf-gcc"
+-arm.linux.gcc.linkerexe = "arm-linux-gnueabihf-gcc"
+-# ARM64/aarch64 e.g. Raspberry Pi 3: gcc-aarch64-linux-gnu package on Debian/Ubuntu
+-arm64.linux.gcc.exe = "aarch64-linux-gnu-gcc"
+-arm64.linux.gcc.linkerexe = "aarch64-linux-gnu-gcc"
+-# RISC-V: gcc-riscv64-linux-gnu package on Debian/Ubuntu
+-riscv32.linux.gcc.exe = "riscv64-linux-gnu-gcc"
+-riscv32.linux.gcc.linkerexe = "riscv64-linux-gnu-gcc"
+-riscv64.linux.gcc.exe = "riscv64-linux-gnu-gcc"
+-riscv64.linux.gcc.linkerexe = "riscv64-linux-gnu-gcc"
+-
+-# For OpenWRT, you will also need to adjust PATH to point to your toolchain.
+-mips.linux.gcc.exe = "mips-openwrt-linux-gcc"
+-mips.linux.gcc.linkerexe = "mips-openwrt-linux-gcc"
+-
+
+ path="$lib/deprecated/core"
+ path="$lib/deprecated/pure"
diff --git a/nixpkgs/pkgs/development/compilers/odin/default.nix b/nixpkgs/pkgs/development/compilers/odin/default.nix
index 340c56284f88..81a7faf73905 100644
--- a/nixpkgs/pkgs/development/compilers/odin/default.nix
+++ b/nixpkgs/pkgs/development/compilers/odin/default.nix
@@ -12,13 +12,13 @@ let
   inherit (llvmPackages) stdenv;
 in stdenv.mkDerivation rec {
   pname = "odin";
-  version = "dev-2023-07";
+  version = "dev-2023-08";
 
   src = fetchFromGitHub {
     owner = "odin-lang";
     repo = "Odin";
     rev = version;
-    hash = "sha256-ksCK1Qmjbg5ZgFoq0I4cjrWaCxd+UW7f1NLcSjCPMwE=";
+    hash = "sha256-pmgrauhB5/JWBkwrAm7tCml9IYQhXyGXsNVDKTntA0M=";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/11.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/11.nix
index 1ca2901b048d..48de37679385 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/11.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/11.nix
@@ -11,26 +11,26 @@ let
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "11.48.21";
-      jdkVersion = "11.0.11";
-      sha256 =
-        if enableJavaFX then "18bd9cd66d6abc6f8c627bc70278dc8fd4860e138e1dc9e170eddb89727ccc7b"
-        else "0v0n7h7i04pvna41wpdq2k9qiy70sbbqzqzvazfdvgm3gb22asw6";
+      zuluVersion = "11.66.15";
+      jdkVersion = "11.0.20";
+      hash =
+        if enableJavaFX then "sha256-pVgCJkgYTlFeL7nkkMWLeJ/J8ELhgvWb7gzf3erZP7Y="
+        else "sha256-vKqxHP5Yb651g8bZ0xHGQ4Q1T7JjjrmgEuykw/Gh2f0=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "11.48.21";
-      jdkVersion = "11.0.11";
-      sha256 =
-        if enableJavaFX then "ef0de2705c6c2d586812f7f3736b70e22b069545b38034816016f9f264ad43f9"
-        else "066whglrxx81c95grv2kxdbvyh32728ixhml2v44ildh549n4lhc";
+      zuluVersion = "11.66.15";
+      jdkVersion = "11.0.20";
+      hash =
+        if enableJavaFX then "sha256-VoZo34SCUU+HHnTl6iLe0QBC+4VDkPP14N98oqSg9EQ="
+        else "sha256-djK8Kfikt9SSuT87x1p7YWMIlNuF0TZFYDWrKiTTiIU=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
     url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
   javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
@@ -41,7 +41,7 @@ let
 
     src = fetchurl {
       url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/16.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/16.nix
index b8f6b2d62ad4..657b3eeafeab 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/16.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/16.nix
@@ -11,26 +11,26 @@ let
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "16.30.15";
-      jdkVersion = "16.0.1";
-      sha256 =
-        if enableJavaFX then "cbb3b96d80a0675893f21dc51ba3f532049c501bd7dc4c8d1ee930e63032c745"
-        else "1jihn125dmxr9y5h9jq89zywm3z6rbwv5q7msfzsf2wzrr13jh0z";
+      zuluVersion = "16.32.15";
+      jdkVersion = "16.0.2";
+      hash =
+        if enableJavaFX then "sha256-6URaSBNHQWLauO//kCuKXb4Z7AqyshWnoeJEyVRKgaY="
+        else "sha256-NXgBj/KixTknaCYbo3B+rOo11NImH5CDUIU0LhTCtMo=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "16.30.19";
-      jdkVersion = "16.0.1";
-      sha256 =
-        if enableJavaFX then "a49b23abfd83784d2ac935fc24e25ab7cb09b8ffc8e47c32ed446e05b8a21396"
-        else "1i0bcjx3acb5dhslf6cabdcnd6mrz9728vxw9hb4al5y3f5fll4w";
+      zuluVersion = "16.32.15";
+      jdkVersion = "16.0.2";
+      hash =
+        if enableJavaFX then "sha256-QuyhIAxUY3Vv1adGihW+LIsXtpDX2taCmFsMFj9o5vs="
+        else "sha256-3bUfDcLLyahLeURFAgLAVapBZHvqtam8GHbWTA6MQog=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
     url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
   javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
@@ -41,7 +41,7 @@ let
 
     src = fetchurl {
       url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/17.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/17.nix
index 51f12864de82..3034e164e640 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/17.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/17.nix
@@ -1,36 +1,47 @@
-{ lib, stdenv, fetchurl, unzip, setJavaClassPath }:
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, setJavaClassPath
+, enableJavaFX ? false
+}:
 let
   # Details from https://www.azul.com/downloads/?version=java-17-lts&os=macos&package=jdk
   # Note that the latest build may differ by platform
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "17.34.19";
-      jdkVersion = "17.0.3";
-      sha256 = "sha256-qImyxVC2y2QhxuVZwamKPyo46+n+7ytIFXpYI0e6w2c=";
+      zuluVersion = "17.44.15";
+      jdkVersion = "17.0.8";
+      hash =
+        if enableJavaFX then "sha256-gmDku/AkWzO+eDRitezM9wCtTYDrUMtXyMulxqi9tNI="
+        else "sha256-Ci18gBkAv/UUIQw9KlnfibcQMXwQRGx6K7L/NBB7b7Q=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "17.34.19";
-      jdkVersion = "17.0.3";
-      sha256 = "sha256-eaRX8Qa/Mqr9JhpHSEcf0Q9c4qmqLMgWqRhkEEwAjf8=";
+      zuluVersion = "17.44.15";
+      jdkVersion = "17.0.8";
+      hash =
+        if enableJavaFX then "sha256-mvyfqpnAoA05HJB9EBewW2MDuhQBOvp6svzyayV1irI="
+        else "sha256-8b81QY6DGXVOsTKM8QDzJnYjXV0ipCbYWaaz6oF2A6k=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
-    # Ugh, unversioned URLs... I hope this doesn't change often enough to cause pain before we move to a Darwin source build of OpenJDK!
-    url = "http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
+  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
+
   jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-ca-jdk";
+    pname = "zulu${dist.zuluVersion}-${javaPackage}";
     version = dist.jdkVersion;
 
     src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-ca-jdk${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/18.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/18.nix
index 4744407e5fd2..30a61b4b1faa 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/18.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/18.nix
@@ -1,36 +1,47 @@
-{ lib, stdenv, fetchurl, unzip, setJavaClassPath }:
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, setJavaClassPath
+, enableJavaFX ? false
+}:
 let
   # Details from https://www.azul.com/downloads/?version=java-18-sts&os=macos&package=jdk
   # Note that the latest build may differ by platform
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "18.28.13";
-      jdkVersion = "18.0.0";
-      sha256 = "0hc5m3d4q3n7sighq3pxkdg93vsrgj1kzla1py9nfnm9pnj9l2kq";
+      zuluVersion = "18.32.13";
+      jdkVersion = "18.0.2.1";
+      hash =
+        if enableJavaFX then "sha256-ZVZ1gbpJwxTduq2PPOCKqbSl+shq2NTFgqG++OXvFcg="
+        else "sha256-uHPcyOgxUdTgzmIVRp/awtwve9zSt+1TZNef7DUuoRg=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "18.28.13";
-      jdkVersion = "18.0.0";
-      sha256 = "0ch4jp2d4pjvxbmbswvjwf7w2flajrvjg5f16ggiy80y8l0y15cm";
+      zuluVersion = "18.32.13";
+      jdkVersion = "18.0.2.1";
+      hash =
+        if enableJavaFX then "sha256-tNx0a1u9iamcN9VFOJ3eqDEA6C204dtIBJZvuAH2Vjk="
+        else "sha256-jAZDgxtWMq/74yKAxA69oOU0C9nXvKG5MjmZLsK04iM=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
-    # Ugh, unversioned URLs... I hope this doesn't change often enough to cause pain before we move to a Darwin source build of OpenJDK!
-    url = "http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
+  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
+
   jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-ca-jdk";
+    pname = "zulu${dist.zuluVersion}-${javaPackage}";
     version = dist.jdkVersion;
 
     src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-ca-jdk${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/19.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/19.nix
index e582c4016a54..a087de1b5727 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/19.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/19.nix
@@ -1,36 +1,47 @@
-{ lib, stdenv, fetchurl, unzip, setJavaClassPath }:
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, setJavaClassPath
+, enableJavaFX ? false
+}:
 let
   # Details from https://www.azul.com/downloads/?version=java-19-sts&os=macos&package=jdk
   # Note that the latest build may differ by platform
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "19.30.11";
-      jdkVersion = "19.0.1";
-      sha256 = "1h0qj0xgpxjy506ikbgdn74pi4860lsnh5n3q3bayfmn0pxc5ksn";
+      zuluVersion = if enableJavaFX then "19.32.15" else "19.32.13";
+      jdkVersion = "19.0.2";
+      hash =
+        if enableJavaFX then "sha256-AwLcIId0gH5D6DUU8CgJ3qnKVQm28LXYirBeXBHwPYE="
+        else "sha256-KARXWumsY+OcqpEOV2EL9SsPni1nGSipjRji/Mn2KsE=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "19.30.11";
-      jdkVersion = "19.0.1";
-      sha256 = "0g8i371h5fv686xhiff0431sgvdk80lbp2lkz86jpfdv9lgg0qnk";
+      zuluVersion = if enableJavaFX then "19.32.15" else "19.32.13";
+      jdkVersion = "19.0.2";
+      hash =
+        if enableJavaFX then "sha256-/R2rrcBr64qPGEtvhruXBhPwnvurt/hiR1ICzZAdYxE="
+        else "sha256-F30FjZaLL756X/Xs6xjNwW9jds4pEATxoxOeeLL7Y5E=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
-    # Ugh, unversioned URLs... I hope this doesn't change often enough to cause pain before we move to a Darwin source build of OpenJDK!
-    url = "http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
+  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
+
   jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-ca-jdk";
+    pname = "zulu${dist.zuluVersion}-${javaPackage}";
     version = dist.jdkVersion;
 
     src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-ca-jdk${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/20.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/20.nix
index e26592462e50..b0c62aafd78d 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/20.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/20.nix
@@ -1,36 +1,47 @@
-{ lib, stdenv, fetchurl, unzip, setJavaClassPath }:
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, setJavaClassPath
+, enableJavaFX ? false
+}:
 let
   # Details from https://www.azul.com/downloads/?version=java-19-sts&os=macos&package=jdk
   # Note that the latest build may differ by platform
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "20.30.11";
-      jdkVersion = "20.0.1";
-      sha256 = "0hg2n2mdbpxsgpw3c58w8y1f3im6schvfqahji352p9ljbdykzmy";
+      zuluVersion = "20.32.11";
+      jdkVersion = "20.0.2";
+      hash =
+        if enableJavaFX then "sha256-hyxQAivZAXtqMebe30L+EYa7p+TdSdKNYj7Rl/ZwRNQ="
+        else "sha256-Ev9KG6DvuBnsZrOguLsO1KQzudHCBcJNwKh45Inpnfo=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "20.30.11";
-      jdkVersion = "20.0.1";
-      sha256 = "0bc9h1y0b2azyfl3f5sqj19sh02xs995d1kdn55m4lfhc00rzr81";
+      zuluVersion = "20.32.11";
+      jdkVersion = "20.0.2";
+      hash =
+        if enableJavaFX then "sha256-iPQzZS4CwaoqT8cSzg4kWCT1OyGBSJLq+NETcbucLo4="
+        else "sha256-15uNZ6uMfSASV3QU2q2oA/jBk2PCHOfSjn1GY7/7qIY=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
-    # Ugh, unversioned URLs... I hope this doesn't change often enough to cause pain before we move to a Darwin source build of OpenJDK!
-    url = "http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
+  javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
+
   jdk = stdenv.mkDerivation rec {
-    pname = "zulu${dist.zuluVersion}-ca-jdk";
+    pname = "zulu${dist.zuluVersion}-${javaPackage}";
     version = dist.jdkVersion;
 
     src = fetchurl {
-      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-ca-jdk${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/openjdk/darwin/8.nix b/nixpkgs/pkgs/development/compilers/openjdk/darwin/8.nix
index 3048c53f10f2..9bfd9a8db1a3 100644
--- a/nixpkgs/pkgs/development/compilers/openjdk/darwin/8.nix
+++ b/nixpkgs/pkgs/development/compilers/openjdk/darwin/8.nix
@@ -11,26 +11,26 @@ let
   dist = {
     x86_64-darwin = {
       arch = "x64";
-      zuluVersion = "8.54.0.21";
-      jdkVersion = "8.0.292";
-      sha256 =
-        if enableJavaFX then "e671f8990229b1ca2a76faabb21ba2f1a9e1f7211392e0f657225559be9b05c8"
-        else "1pgl0bir4r5v349gkxk54k6v62w241q7vw4gjxhv2g6pfq6hv7in";
+      zuluVersion = "8.72.0.17";
+      jdkVersion = "8.0.382";
+      hash =
+        if enableJavaFX then "sha256-/x8FqygivzddXsOwIV8aj/u+LPXMmokgu97vLAVEv80="
+        else "sha256-3dTPIPGUeT6nb3gncNvEa4VTRyQIBJpp8oZadrT2ToE=";
     };
 
     aarch64-darwin = {
       arch = "aarch64";
-      zuluVersion = "8.54.0.21";
-      jdkVersion = "8.0.292";
-      sha256 =
-        if enableJavaFX then "8e901075cde2c31f531a34e8321ea4201970936abf54240a232e9389952afe84"
-        else "05w89wfjlfbpqfjnv6wisxmaf13qb28b2223f9264jyx30qszw1c";
+      zuluVersion = "8.72.0.17";
+      jdkVersion = "8.0.382";
+      hash =
+        if enableJavaFX then "sha256-FkQ+0MzSZWUzc/HmiDVZEHGOrdKAVCdK5pm9wXXzzaU="
+        else "sha256-rN5AI4xAWppE4kJlzMod0JmGyHdHjTXYtx8/wOW6CFk=";
     };
   }."${stdenv.hostPlatform.system}";
 
   jce-policies = fetchurl {
     url = "https://web.archive.org/web/20211126120343/http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
-    sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
+    hash = "sha256-gCGii4ysQbRPFCH9IQoKCCL8r4jWLS5wo1sv9iioZ1o=";
   };
 
   javaPackage = if enableJavaFX then "ca-fx-jdk" else "ca-jdk";
@@ -44,7 +44,7 @@ let
 
     src = fetchurl {
       url = "https://cdn.azul.com/zulu/bin/zulu${dist.zuluVersion}-${javaPackage}${dist.jdkVersion}-macosx_${dist.arch}.tar.gz";
-      inherit (dist) sha256;
+      inherit (dist) hash;
       curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/";
     };
 
diff --git a/nixpkgs/pkgs/development/compilers/rust/1_70.nix b/nixpkgs/pkgs/development/compilers/rust/1_71.nix
index 2a22c4643e55..75780b55af81 100644
--- a/nixpkgs/pkgs/development/compilers/rust/1_70.nix
+++ b/nixpkgs/pkgs/development/compilers/rust/1_71.nix
@@ -19,8 +19,8 @@
 } @ args:
 
 import ./default.nix {
-  rustcVersion = "1.70.0";
-  rustcSha256 = "sha256-sr+uAAt6UEDk7Eu8UKCfIVSBkMt1cLDtdzWDaEE70nw=";
+  rustcVersion = "1.71.1";
+  rustcSha256 = "sha256-b6kNUNHVKadfbMNJeE3lfX7AuiQZsJvefTNcJb1ORy4=";
 
   llvmSharedForBuild = pkgsBuildBuild.llvmPackages_16.libllvm.override { enableSharedLibraries = true; };
   llvmSharedForHost = pkgsBuildHost.llvmPackages_16.libllvm.override { enableSharedLibraries = true; };
@@ -34,25 +34,25 @@ import ./default.nix {
 
   # Note: the version MUST be one version prior to the version we're
   # building
-  bootstrapVersion = "1.69.0";
+  bootstrapVersion = "1.70.0";
 
   # fetch hashes by running `print-hashes.sh ${bootstrapVersion}`
   bootstrapHashes = {
-    i686-unknown-linux-gnu = "08b2b4f58c0861f40ae159c39cc12f6d41b6858e04a43c6c0aeb36707e2971d0";
-    x86_64-unknown-linux-gnu = "2ca4a306047c0b8b4029c382910fcbc895badc29680e0332c9df990fd1c70d4f";
-    x86_64-unknown-linux-musl = "071cb04819b15d8801584a1395b28d0472ce99c0e716296e3c0bb4e6318cf171";
-    arm-unknown-linux-gnueabihf = "64c82735b4e5606af61be0d01317da436a9590b969e503cdbd19e24636e15845";
-    armv7-unknown-linux-gnueabihf = "a509f02d910041c97847e2ccc4ee908c761b7dc5b3c4715922d2b1c573a09675";
-    aarch64-unknown-linux-gnu = "88af5aa7a40c8f1b40416a1f27de8ffbe09c155d933f69d3e109c0ccee92353b";
-    aarch64-unknown-linux-musl = "76aaf3e4fd7b552feb2d70752c43896a960a2a7c940002f58a5c3f03d2b3c862";
-    x86_64-apple-darwin = "9818dab2c3726d63dfbfde12c9273e62e484ef6d6f6e05a6431a3e089c335454";
-    aarch64-apple-darwin = "36228cac303298243fb84235db87a5ecf2af49db28585a82af091caefd598677";
-    powerpc64le-unknown-linux-gnu = "8ef68b77971c079dbe23b54a2cfb52da012873d96399c424bc223635306e9a58";
-    riscv64gc-unknown-linux-gnu = "e1976bf7d0edb7e7789a1ad7ff8086fdb5306a932650fa8182a5d009883fa6c5";
-    mips64el-unknown-linux-gnuabi64 = "c4bf3043451d6122a3845db825cbe35b5ca61a44659a00004f6cca1299ad9d72";
+    i686-unknown-linux-gnu = "119dfd4ee3da6c8fc36444dd15a12187e1f9b34ee6792fb75a6a25d09ea7e865";
+    x86_64-unknown-linux-gnu = "8499c0b034dd881cd9a880c44021632422a28dc23d7a81ca0a97b04652245982";
+    x86_64-unknown-linux-musl = "d97c2ac1d9f17e754fa6b7d48c28531d16278547e3fa47050a01da037ddb6de3";
+    arm-unknown-linux-gnueabihf = "ac98b513c31789d0c3201dfe2bbcc81b9437f7e1a15695d09402efec7934c20e";
+    armv7-unknown-linux-gnueabihf = "23e6029c2a7363b307af539f0c81f4bb9f0ade12b588658343c8a8cfa41526ae";
+    aarch64-unknown-linux-gnu = "3aa012fc4d9d5f17ca30af41f87e1c2aacdac46b51adc5213e7614797c6fd24c";
+    aarch64-unknown-linux-musl = "6381de0b55f1741ac322bf1b56701d8aab4e509ff5302043941170f8df34228e";
+    x86_64-apple-darwin = "e5819fdbfc7f1a4d5d82cb4c3b7662250748450b45a585433bfb75648bc45547";
+    aarch64-apple-darwin = "75cbc356a06c9b2daf6b9249febda0f0c46df2a427f7cc8467c7edbd44636e53";
+    powerpc64le-unknown-linux-gnu = "ba8cb5e3078b1bc7c6b27ab53cfa3af14001728db9a047d0bdf29b8f05a4db34";
+    riscv64gc-unknown-linux-gnu = "5964f78e5fb30506101a929162a42be6260b887660b71592c5f38466753440c3";
+    mips64el-unknown-linux-gnuabi64 = "de5fd0b249fbb95b9b67928ba08d7ec49f18f0ae25cbe1b0ede3c02390d7b93a";
   };
 
-  selectRustPackage = pkgs: pkgs.rust_1_70;
+  selectRustPackage = pkgs: pkgs.rust_1_71;
 
   rustcPatches = [ ];
 }
diff --git a/nixpkgs/pkgs/development/compilers/rust/binary.nix b/nixpkgs/pkgs/development/compilers/rust/binary.nix
index 1de90cdddacf..bf03077f4aa8 100644
--- a/nixpkgs/pkgs/development/compilers/rust/binary.nix
+++ b/nixpkgs/pkgs/development/compilers/rust/binary.nix
@@ -56,7 +56,7 @@ rec {
     # binaries. The lib.rmeta object inside the ar archive should contain an
     # .rmeta section, but it is removed. Luckily, this doesn't appear to be an
     # issue for Rust builds produced by Nix.
-    dontStrip = stdenv.isDarwin;
+    dontStrip = true;
 
     setupHooks = ./setup-hook.sh;
   };
diff --git a/nixpkgs/pkgs/development/compilers/rust/cargo-auditable.nix b/nixpkgs/pkgs/development/compilers/rust/cargo-auditable.nix
index dbbfff4dc6b6..b86ed5d7d4e1 100644
--- a/nixpkgs/pkgs/development/compilers/rust/cargo-auditable.nix
+++ b/nixpkgs/pkgs/development/compilers/rust/cargo-auditable.nix
@@ -1,4 +1,4 @@
-{ lib, fetchFromGitHub, makeRustPlatform, rustc, cargo, installShellFiles, stdenv }:
+{ lib, buildPackages, fetchFromGitHub, makeRustPlatform, installShellFiles, stdenv }:
 
 let
   args = rec {
@@ -30,8 +30,8 @@ let
   };
 
   rustPlatform = makeRustPlatform {
-    inherit rustc;
-    cargo = cargo.override {
+    inherit (buildPackages) rustc;
+    cargo = buildPackages.cargo.override {
       auditable = false;
     };
   };
diff --git a/nixpkgs/pkgs/development/compilers/rust/default.nix b/nixpkgs/pkgs/development/compilers/rust/default.nix
index 35f5ab79c106..77c8b3d592fa 100644
--- a/nixpkgs/pkgs/development/compilers/rust/default.nix
+++ b/nixpkgs/pkgs/development/compilers/rust/default.nix
@@ -48,7 +48,7 @@ in
       # Like `buildRustPackages`, but may also contain prebuilt binaries to
       # break cycle. Just like `bootstrapTools` for nixpkgs as a whole,
       # nothing in the final package set should refer to this.
-      bootstrapRustPackages = self.buildRustPackages.overrideScope' (_: _:
+      bootstrapRustPackages = self.buildRustPackages.overrideScope (_: _:
         lib.optionalAttrs (stdenv.buildPlatform == stdenv.hostPlatform)
           (selectRustPackage buildPackages).packages.prebuilt);
       bootRustPlatform = makeRustPlatform bootstrapRustPackages;
diff --git a/nixpkgs/pkgs/development/compilers/rust/rustc.nix b/nixpkgs/pkgs/development/compilers/rust/rustc.nix
index 7b924b9f8d4f..53f7257ecfc5 100644
--- a/nixpkgs/pkgs/development/compilers/rust/rustc.nix
+++ b/nixpkgs/pkgs/development/compilers/rust/rustc.nix
@@ -75,6 +75,7 @@ in stdenv.mkDerivation rec {
     "--release-channel=stable"
     "--set=build.rustc=${rustc}/bin/rustc"
     "--set=build.cargo=${cargo}/bin/cargo"
+    "--tools=rustc,rust-analyzer-proc-macro-srv"
     "--enable-rpath"
     "--enable-vendor"
     "--build=${rust.toRustTargetSpec stdenv.buildPlatform}"
@@ -149,10 +150,6 @@ in stdenv.mkDerivation rec {
 
     ${optionalString (!withBundledLLVM) "rm -rf src/llvm"}
 
-    # Fix the configure script to not require curl as we won't use it
-    sed -i configure \
-      -e '/probe_need CFG_CURL curl/d'
-
     # Useful debugging parameter
     # export VERBOSE=1
   '' + lib.optionalString (stdenv.targetPlatform.isMusl && !stdenv.targetPlatform.isStatic) ''
diff --git a/nixpkgs/pkgs/development/compilers/swift/compiler/default.nix b/nixpkgs/pkgs/development/compilers/swift/compiler/default.nix
index 821d61229d8d..30fb18db8fd2 100644
--- a/nixpkgs/pkgs/development/compilers/swift/compiler/default.nix
+++ b/nixpkgs/pkgs/development/compilers/swift/compiler/default.nix
@@ -2,6 +2,7 @@
 , stdenv
 , callPackage
 , cmake
+, bash
 , coreutils
 , gnugrep
 , perl
@@ -133,7 +134,8 @@ let
     sed < '${clang}/bin/clang' > "$targetFile" \
       -e 's|^\s*exec|exec -a "$0"|g' \
       -e 's|^\[\[ "${clang.cc}/bin/clang" = \*++ ]]|[[ "$0" = *++ ]]|' \
-      -e "s|${clang.cc}/bin/clang|$unwrappedClang|g"
+      -e "s|${clang.cc}/bin/clang|$unwrappedClang|g" \
+      -e "s|^\(\s*\)\($unwrappedClang\) \"@\\\$responseFile\"|\1argv0=\$0\n\1${bash}/bin/bash -c \"exec -a '\$argv0' \2 '@\$responseFile'\"|"
     chmod a+x "$targetFile"
   '';
 
diff --git a/nixpkgs/pkgs/development/compilers/tinygo/default.nix b/nixpkgs/pkgs/development/compilers/tinygo/default.nix
index 0d2541a5a1ab..24fa6a984738 100644
--- a/nixpkgs/pkgs/development/compilers/tinygo/default.nix
+++ b/nixpkgs/pkgs/development/compilers/tinygo/default.nix
@@ -18,12 +18,23 @@
 , avrdude
 , gdb
 , openocd
+, runCommand
 , tinygoTests ? [ "smoketest" ]
 }:
 
 let
   llvmMajor = lib.versions.major llvm.version;
   inherit (llvmPackages) llvm clang compiler-rt lld;
+
+  # only doing this because only on darwin placing clang.cc in nativeBuildInputs
+  # doesn't build
+  bootstrapTools = runCommand "tinygo-bootstap-tools" { } ''
+    mkdir -p $out
+    ln -s ${lib.getBin clang.cc}/bin/clang $out/clang-${llvmMajor}
+    ln -s ${lib.getBin lld}/bin/ld.lld $out/ld.lld-${llvmMajor}
+    ln -s ${lib.getBin lld}/bin/wasm-ld $out/wasm-ld-${llvmMajor}
+    ln -s ${gdb}/bin/gdb $out/gdb-multiarch
+  '';
 in
 
 buildGoModule rec {
@@ -100,20 +111,13 @@ buildGoModule rec {
     # Disable windows and darwin cross-compile tests
     sed -i "/GOOS=windows/d" Makefile
     sed -i "/GOOS=darwin/d" Makefile
-
-    # tinygo needs versioned binaries
-    mkdir -p $out/libexec/tinygo
-    ln -s ${lib.getBin clang.cc}/bin/clang $out/libexec/tinygo/clang-${llvmMajor}
-    ln -s ${lib.getBin lld}/bin/ld.lld $out/libexec/tinygo/ld.lld-${llvmMajor}
-    ln -s ${lib.getBin lld}/bin/wasm-ld $out/libexec/tinygo/wasm-ld-${llvmMajor}
-    ln -s ${gdb}/bin/gdb $out/libexec/tinygo/gdb-multiarch
   '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
     substituteInPlace Makefile \
       --replace "./build/tinygo" "${buildPackages.tinygo}/bin/tinygo"
   '';
 
   preBuild = ''
-    export PATH=$out/libexec/tinygo:$PATH
+    export PATH=${bootstrapTools}:$PATH
     export HOME=$TMPDIR
   '';
 
@@ -149,7 +153,7 @@ buildGoModule rec {
     make build/release
 
     wrapProgram $out/bin/tinygo \
-      --prefix PATH : ${lib.makeBinPath [ go avrdude openocd avrgcc binaryen ]}:$out/libexec/tinygo
+      --prefix PATH : ${lib.makeBinPath [ go avrdude openocd avrgcc binaryen ]}:${bootstrapTools}
 
     runHook postInstall
   '';
diff --git a/nixpkgs/pkgs/development/compilers/tvm/default.nix b/nixpkgs/pkgs/development/compilers/tvm/default.nix
index a26096b540fc..e72cc3cdb93a 100644
--- a/nixpkgs/pkgs/development/compilers/tvm/default.nix
+++ b/nixpkgs/pkgs/development/compilers/tvm/default.nix
@@ -2,14 +2,14 @@
 
 stdenv.mkDerivation rec {
   pname = "tvm";
-  version = "0.12.0";
+  version = "0.13.0";
 
   src = fetchFromGitHub {
     owner = "apache";
     repo = "incubator-tvm";
     rev = "v${version}";
     fetchSubmodules = true;
-    sha256 = "sha256-NHfYx45Zad+jsILR24c2U+Xmb2rKaTyl8xl5uxAFtak=";
+    sha256 = "sha256-WG0vU3lxX5FNs0l37mTE1T7rSEEtfTEisE3cMphzeAk=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/nixpkgs/pkgs/development/compilers/unison/default.nix b/nixpkgs/pkgs/development/compilers/unison/default.nix
index f34992c8a36e..ad2a80551dc3 100644
--- a/nixpkgs/pkgs/development/compilers/unison/default.nix
+++ b/nixpkgs/pkgs/development/compilers/unison/default.nix
@@ -11,17 +11,17 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "unison-code-manager";
-  version = "M5b";
+  version = "M5c";
 
   src = if stdenv.isDarwin then
     fetchurl {
       url = "https://github.com/unisonweb/unison/releases/download/release/${finalAttrs.version}/ucm-macos.tar.gz";
-      hash = "sha256-Uknt1NrywmGs8YovlnN8TU8iaYgT1jeYP4SQCuK1u+I=";
+      hash = "sha256-LTpsKwiV0ZxReLcuzoJYuMP1jN6v8M/z6mUqH9s5A+g=";
     }
   else
     fetchurl {
       url = "https://github.com/unisonweb/unison/releases/download/release/${finalAttrs.version}/ucm-linux.tar.gz";
-      hash = "sha256-CZLGA4fFFysxHkwedC8RBLmHWwr3BM8xqps7hN3TC/g=";
+      hash = "sha256-6gSX8HOv/K4zFTz1O4VvrpWR9+iQyLOO6vIRv6oVw/c=";
     };
 
   # The tarball is just the prebuilt binary, in the archive root.
@@ -46,8 +46,9 @@ stdenv.mkDerivation (finalAttrs: {
     description = "Modern, statically-typed purely functional language";
     homepage = "https://unisonweb.org/";
     license = with licenses; [ mit bsd3 ];
+    mainProgram = "ucm";
     maintainers = [ maintainers.virusdave ];
     platforms = [ "x86_64-darwin" "x86_64-linux" "aarch64-darwin" ];
-    mainProgram = "ucm";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
   };
 })
diff --git a/nixpkgs/pkgs/development/compilers/yosys/default.nix b/nixpkgs/pkgs/development/compilers/yosys/default.nix
index a25142fa9fd5..6ce2cc9f162e 100644
--- a/nixpkgs/pkgs/development/compilers/yosys/default.nix
+++ b/nixpkgs/pkgs/development/compilers/yosys/default.nix
@@ -71,13 +71,13 @@ let
 
 in stdenv.mkDerivation rec {
   pname   = "yosys";
-  version = "0.31";
+  version = "0.32";
 
   src = fetchFromGitHub {
     owner = "YosysHQ";
     repo  = "yosys";
     rev   = "${pname}-${version}";
-    hash  = "sha256-BGeqI0U2AdKgsQQw3f/C0l1ENPTlQ3Eoa8TaLRE+aWI=";
+    hash  = "sha256-ER61pIvXNjV74A9LwxeXDXoQFkVgqjdI9KiYQyOobk8=";
   };
 
   enableParallelBuilding = true;
diff --git a/nixpkgs/pkgs/development/compilers/zig/0.10.nix b/nixpkgs/pkgs/development/compilers/zig/0.10.nix
index c21a51afa5b3..d02b9ff1c976 100644
--- a/nixpkgs/pkgs/development/compilers/zig/0.10.nix
+++ b/nixpkgs/pkgs/development/compilers/zig/0.10.nix
@@ -6,6 +6,7 @@
 , libxml2
 , zlib
 , coreutils
+, callPackage
 }@args:
 
 import ./generic.nix args {
@@ -18,7 +19,7 @@ import ./generic.nix args {
   patches = [
     # Backport alignment related panics from zig-master to 0.10.
     # Upstream issue: https://github.com/ziglang/zig/issues/14559
-    ./zig_14559.patch
+    ./002-0.10-macho-fixes.patch
   ];
 
   cmakeFlags = [
diff --git a/nixpkgs/pkgs/development/compilers/zig/0.11.nix b/nixpkgs/pkgs/development/compilers/zig/0.11.nix
index 7c4fcedc0538..b393f42c6513 100644
--- a/nixpkgs/pkgs/development/compilers/zig/0.11.nix
+++ b/nixpkgs/pkgs/development/compilers/zig/0.11.nix
@@ -6,6 +6,7 @@
 , libxml2
 , zlib
 , coreutils
+, callPackage
 }@args:
 
 import ./generic.nix args {
diff --git a/nixpkgs/pkgs/development/compilers/zig/0.9.1.nix b/nixpkgs/pkgs/development/compilers/zig/0.9.nix
index a05d5ae893cf..d648c9c2eb64 100644
--- a/nixpkgs/pkgs/development/compilers/zig/0.9.1.nix
+++ b/nixpkgs/pkgs/development/compilers/zig/0.9.nix
@@ -6,6 +6,7 @@
 , libxml2
 , zlib
 , coreutils
+, callPackage
 }@args:
 
 import ./generic.nix args {
@@ -15,12 +16,11 @@ import ./generic.nix args {
 
   patches = [
     # Fix index out of bounds reading RPATH (cherry-picked from 0.10-dev)
-    ./rpath.patch
+    ./000-0.9-read-dynstr-at-rpath-offset.patch
     # Fix build on macOS 13 (cherry-picked from 0.10-dev)
-    ./ventura.patch
+    ./001-0.9-bump-macos-supported-version.patch
   ];
 
-  # TODO: remove on next upgrade
   prePatch =
     let
       zig_0_10_0 = fetchFromGitHub {
diff --git a/nixpkgs/pkgs/development/compilers/zig/rpath.patch b/nixpkgs/pkgs/development/compilers/zig/000-0.9-read-dynstr-at-rpath-offset.patch
index 70633193f944..70633193f944 100644
--- a/nixpkgs/pkgs/development/compilers/zig/rpath.patch
+++ b/nixpkgs/pkgs/development/compilers/zig/000-0.9-read-dynstr-at-rpath-offset.patch
diff --git a/nixpkgs/pkgs/development/compilers/zig/ventura.patch b/nixpkgs/pkgs/development/compilers/zig/001-0.9-bump-macos-supported-version.patch
index 07b90e223553..07b90e223553 100644
--- a/nixpkgs/pkgs/development/compilers/zig/ventura.patch
+++ b/nixpkgs/pkgs/development/compilers/zig/001-0.9-bump-macos-supported-version.patch
diff --git a/nixpkgs/pkgs/development/compilers/zig/zig_14559.patch b/nixpkgs/pkgs/development/compilers/zig/002-0.10-macho-fixes.patch
index 95f0bdf701e2..95f0bdf701e2 100644
--- a/nixpkgs/pkgs/development/compilers/zig/zig_14559.patch
+++ b/nixpkgs/pkgs/development/compilers/zig/002-0.10-macho-fixes.patch
diff --git a/nixpkgs/pkgs/development/compilers/zig/generic.nix b/nixpkgs/pkgs/development/compilers/zig/generic.nix
index 5cc75cbbf6eb..a0dbea04869e 100644
--- a/nixpkgs/pkgs/development/compilers/zig/generic.nix
+++ b/nixpkgs/pkgs/development/compilers/zig/generic.nix
@@ -6,6 +6,7 @@
 , libxml2
 , zlib
 , coreutils
+, callPackage
 , ...
 }:
 
@@ -53,12 +54,18 @@ stdenv.mkDerivation (finalAttrs: {
     runHook postInstallCheck
   '';
 
+  passthru = {
+    hook = callPackage ./hook.nix {
+      zig = finalAttrs.finalPackage;
+    };
+  };
+
   meta = {
     description = "General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software";
     homepage = "https://ziglang.org/";
     changelog = "https://ziglang.org/download/${finalAttrs.version}/release-notes.html";
     license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ aiotter andrewrk AndersonTorres figsoda ];
+    maintainers = with lib.maintainers; [ andrewrk ] ++ lib.teams.zig.members;
     platforms = lib.platforms.unix;
   };
 } // removeAttrs args [ "hash" ])
diff --git a/nixpkgs/pkgs/development/compilers/zig/hook.nix b/nixpkgs/pkgs/development/compilers/zig/hook.nix
index df6304a34378..254a64597dd3 100644
--- a/nixpkgs/pkgs/development/compilers/zig/hook.nix
+++ b/nixpkgs/pkgs/development/compilers/zig/hook.nix
@@ -8,6 +8,14 @@ makeSetupHook {
 
   propagatedBuildInputs = [ zig ];
 
+  substitutions = {
+    zig_default_flags =
+      if lib.versionAtLeast zig.version "0.11" then
+        "-Doptimize=ReleaseSafe -Dcpu=baseline"
+      else
+        "-Drelease-safe=true -Dcpu=baseline";
+  };
+
   passthru = { inherit zig; };
 
   meta = {
diff --git a/nixpkgs/pkgs/development/compilers/zig/setup-hook.sh b/nixpkgs/pkgs/development/compilers/zig/setup-hook.sh
index f514180692ea..f84a02a3268c 100644
--- a/nixpkgs/pkgs/development/compilers/zig/setup-hook.sh
+++ b/nixpkgs/pkgs/development/compilers/zig/setup-hook.sh
@@ -20,7 +20,7 @@
 # https://github.com/NixOS/nixpkgs/pull/241741#issuecomment-1624227485
 # https://github.com/ziglang/zig/issues/14281#issuecomment-1624220653
 
-readonly zigDefaultFlagsArray=("-Drelease-safe=true" "-Dcpu=baseline")
+readonly zigDefaultFlagsArray=(@zig_default_flags@)
 
 function zigSetGlobalCacheDir {
     ZIG_GLOBAL_CACHE_DIR=$(mktemp -d)
diff --git a/nixpkgs/pkgs/development/compilers/zig/shell-completions.nix b/nixpkgs/pkgs/development/compilers/zig/shell-completions.nix
new file mode 100644
index 000000000000..74beb5f63d65
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/zig/shell-completions.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zig-shell-completions";
+  version = "unstable-2023-08-17";
+
+  src = fetchFromGitHub {
+    owner = "ziglang";
+    repo = "shell-completions";
+    rev = "de9f83166d792cce6a0524e63d2755952dd9872c";
+    hash = "sha256-92n41/AWbHYkXiBtbWw+hXZKJCE7KW9igd8cLSBQfHo=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    installShellCompletion --bash --name zig.bash _zig.bash
+    installShellCompletion --zsh --name _zig _zig
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ziglang/shell-completions";
+    description = "Shell completions for the Zig compiler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronjheng ];
+    platforms = platforms.all;
+  };
+}