diff options
author | Adam Joseph <adam@westernsemico.com> | 2023-08-16 23:39:16 -0700 |
---|---|---|
committer | Adam Joseph <adam@westernsemico.com> | 2023-08-20 23:00:01 -0700 |
commit | 10ee71f582c2820737f5586c92f16d64dfe4ad28 (patch) | |
tree | 9fb40ed2b184463e3bb6bb5b0e61af2bda978f82 | |
parent | 72fe04286e8f4f60a21d384788e59dbe94764434 (diff) |
gcc: if atLeast 10, use deduplicated version
-rw-r--r-- | pkgs/development/compilers/gcc/10/default.nix | 296 | ||||
-rw-r--r-- | pkgs/development/compilers/gcc/default.nix | 47 | ||||
-rw-r--r-- | pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch (renamed from pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch) | 0 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 1 |
4 files changed, 33 insertions, 311 deletions
diff --git a/pkgs/development/compilers/gcc/10/default.nix b/pkgs/development/compilers/gcc/10/default.nix deleted file mode 100644 index 0ab4819107f91..0000000000000 --- a/pkgs/development/compilers/gcc/10/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 ? 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}.5.0"; - - 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 ../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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - src = fetchurl { - url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - hash = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; - }; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 85122b45fba1e..4b9282adc68ee 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -38,10 +38,11 @@ let atLeast13 = lib.versionAtLeast version "13"; atLeast12 = lib.versionAtLeast version "12"; atLeast11 = lib.versionAtLeast version "11"; + atLeast10 = lib.versionAtLeast version "10"; in -# only gcc>=11 is currently supported -assert atLeast11; +# only gcc>=10 is currently supported +assert atLeast10; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -66,18 +67,21 @@ with builtins; let majorVersion = lib.versions.major version; inherit version; - disableBootstrap = !stdenv.hostPlatform.isDarwin && (atLeast12 -> !profiledCompiler); + disableBootstrap = atLeast11 && !stdenv.hostPlatform.isDarwin && (atLeast12 -> !profiledCompiler); inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = optional (!atLeast12) ./fix-bug-80431.patch + ++ optional (!atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch - ++ optional (noSysDirs && (!atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch + ++ optional (noSysDirs && (is10 || (!atLeast12 -> hostPlatform.isRiscV))) ./no-sys-dirs-riscv.patch ++ optionals (langAda || atLeast12) [ ./gnat-cflags-11.patch + ] ++ optionals (langAda && !atLeast11) [ + ./gnat-cflags.patch ] ++ optionals atLeast12 [ ./gcc-12-gfortran-driving.patch ./ppc-musl.patch @@ -105,7 +109,7 @@ let majorVersion = lib.versions.major version; # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optional (!atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering - ++ optionals (!atLeast12 && stdenv.isDarwin) [ + ++ optionals (atLeast11 && !atLeast12 && 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 @@ -114,7 +118,7 @@ let majorVersion = lib.versions.major version; }) ] # https://github.com/osx-cross/homebrew-avr/issues/280#issuecomment-1272381808 - ++ optional (!atLeast12 && stdenv.isDarwin && targetPlatform.isAvr) ./avr-gcc-11.3-darwin.patch + ++ optional (atLeast11 && !atLeast12 && stdenv.isDarwin && targetPlatform.isAvr) ./avr-gcc-11.3-darwin.patch # backport fixes to build gccgo with musl libc ++ optionals (atLeast12 && langGo && stdenv.hostPlatform.isMusl) [ @@ -166,7 +170,11 @@ let majorVersion = lib.versions.major version; # openjdk build fails without this on -march=opteron; is upstream in gcc12 ++ optionals (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] - ; + + ++ optional (!atLeast11 && 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"; @@ -246,10 +254,11 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ src = fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - ${if atLeast12 then "sha256" else "hash"} = { + ${if majorVersion == "11" then "hash" else "sha256"} = { "13.1.0" = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk="; + "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; }."${version}"; }; @@ -262,7 +271,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ libc_dev = stdenv.cc.libc_dev; hardeningDisable = [ "format" "pie" ] - ++ lib.optionals (!atLeast12 && langAda) [ "fortify3" ]; + ++ lib.optionals (atLeast11 && !atLeast12 && langAda) [ "fortify3" ]; postPatch = '' configureScripts=$(find . -name configure) @@ -336,10 +345,15 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ buildFlags = # we do not yet have Nix-driven profiling assert atLeast12 -> (profiledCompiler -> !disableBootstrap); - let target = - lib.optionalString (profiledCompiler) "profiled" + - lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap"; - in lib.optional (target != "") target; + 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 @@ -391,13 +405,16 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ platforms maintainers ; + } // lib.optionalAttrs (!atLeast11) { + badPlatforms = [ "aarch64-darwin" ]; }; } // optionalAttrs (enableMultilib) { dontMoveLib64 = true; } )) -[ +([ (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/pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch index d9809e828f10c..d9809e828f10c 100644 --- a/pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch +++ b/pkgs/development/compilers/gcc/patches/10/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fddbadd8dc49b..6fbd0bd7387c5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15804,6 +15804,7 @@ with pkgs; "13" = "13.1.0"; "12" = "12.3.0"; "11" = "11.4.0"; + "10" = "10.4.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated |