From c11be19059c24d385cd28218f9a6ded9e87bf1da Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Mon, 24 Jul 2023 04:00:24 -0700 Subject: [PATCH 01/21] default-gcc-version: init This commit lifts the default gcc version to a top-level attribute so it can be overridden. --- pkgs/top-level/all-packages.nix | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index afa659852f357..e10af6ecd18d9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15662,14 +15662,12 @@ with pkgs; gbforth = callPackage ../development/compilers/gbforth { }; - inherit (let - num = - if (with stdenv.targetPlatform; isVc4 || libc == "relibc") then 6 - else 12; - numS = toString num; - in { - gcc = pkgs.${"gcc${numS}"}; - gccFun = callPackage (../development/compilers/gcc + "/${numS}"); + default-gcc-version = + if (with stdenv.targetPlatform; isVc4 || libc == "relibc") then 6 + else 12; + inherit ({ + gcc = pkgs.${"gcc${toString default-gcc-version}"}; + gccFun = callPackage (../development/compilers/gcc + "/${toString default-gcc-version}"); }) gcc gccFun; gcc-unwrapped = gcc.cc; From 0f7bf37e5a9b8ac4a690303310c00e8edc5d74cd Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 22:49:19 -0700 Subject: [PATCH 02/21] gcc: cp ./13/default.nix ./default.nix --- pkgs/development/compilers/gcc/default.nix | 351 +++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 pkgs/development/compilers/gcc/default.nix diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix new file mode 100644 index 0000000000000..2701aac94ee08 --- /dev/null +++ b/pkgs/development/compilers/gcc/default.nix @@ -0,0 +1,351 @@ +{ 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://raw.githubusercontent.com/Homebrew/formula-patches/3c5cbc8e9cf444a1967786af48e430588e1eb481/gcc/gcc-13.2.0.diff"; + sha256 = "sha256-Y5r3U3dwAFG6+b0TNCFd18PNxYu2+W/5zDbZ5cHvv+U="; + }) + ++ 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 ((callFile ../common/builder.nix {}) ({ + pname = "${crossNameAddon}${name}"; + inherit version; + + 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; }) +] + From 2e16ac593afc9217c05f8f1099a1cee09a584527 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 22:49:44 -0700 Subject: [PATCH 03/21] gcc: default.nix: replace ../ with ./ --- pkgs/development/compilers/gcc/default.nix | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 2701aac94ee08..01cedef86b8bf 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -61,13 +61,13 @@ let majorVersion = "13"; 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 + 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 + ./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 @@ -76,7 +76,7 @@ let majorVersion = "13"; url = "https://raw.githubusercontent.com/Homebrew/formula-patches/3c5cbc8e9cf444a1967786af48e430588e1eb481/gcc/gcc-13.2.0.diff"; sha256 = "sha256-Y5r3U3dwAFG6+b0TNCFd18PNxYu2+W/5zDbZ5cHvv+U="; }) - ++ optional langD ../libphobos.patch + ++ optional langD ./libphobos.patch # backport fixes to build gccgo with musl libc ++ optionals (langGo && stdenv.hostPlatform.isMusl) [ @@ -117,10 +117,10 @@ let majorVersion = "13"; ] # Fix detection of bootstrap compiler Ada support (cctools as) on Nix Darwin - ++ optional (stdenv.isDarwin && langAda) ../ada-cctools-as-detection-configure.patch + ++ 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 + ++ optional (stdenv.isDarwin && langAda) ./gnat-darwin-dylib-install-name.patch ; /* Cross-gcc settings (build == host != target) */ @@ -195,7 +195,7 @@ let majorVersion = "13"; in -lib.pipe ((callFile ../common/builder.nix {}) ({ +lib.pipe ((callFile ./common/builder.nix {}) ({ pname = "${crossNameAddon}${name}"; inherit version; @@ -266,12 +266,12 @@ lib.pipe ((callFile ../common/builder.nix {}) ({ inherit noSysDirs staticCompiler withoutTargetLibc libcCross crossMingw; - inherit (callFile ../common/dependencies.nix { }) depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget; + inherit (callFile ./common/dependencies.nix { }) depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget; NIX_LDFLAGS = lib.optionalString hostPlatform.isSunOS "-lm"; - preConfigure = (callFile ../common/pre-configure.nix { }) + '' + preConfigure = (callFile ./common/pre-configure.nix { }) + '' ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h ''; @@ -279,7 +279,7 @@ lib.pipe ((callFile ../common/builder.nix {}) ({ configurePlatforms = [ "build" "host" "target" ]; - configureFlags = callFile ../common/configure-flags.nix { }; + configureFlags = callFile ./common/configure-flags.nix { }; targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; @@ -291,7 +291,7 @@ lib.pipe ((callFile ../common/builder.nix {}) ({ lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap"; in lib.optional (target != "") target; - inherit (callFile ../common/strip-attributes.nix { }) + inherit (callFile ./common/strip-attributes.nix { }) stripDebugList stripDebugListTarget preFixup; @@ -317,7 +317,7 @@ lib.pipe ((callFile ../common/builder.nix {}) ({ LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath (optional (zlib != null) zlib)); - inherit (callFile ../common/extra-target-flags.nix { }) + inherit (callFile ./common/extra-target-flags.nix { }) EXTRA_FLAGS_FOR_TARGET EXTRA_LDFLAGS_FOR_TARGET ; @@ -331,7 +331,7 @@ lib.pipe ((callFile ../common/builder.nix {}) ({ inherit enableShared enableMultilib; meta = { - inherit (callFile ../common/meta.nix { }) + inherit (callFile ./common/meta.nix { }) homepage license description @@ -345,7 +345,7 @@ lib.pipe ((callFile ../common/builder.nix {}) ({ // optionalAttrs (enableMultilib) { dontMoveLib64 = true; } )) [ - (callPackage ../common/libgcc.nix { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; }) - (callPackage ../common/checksum.nix { inherit langC langCC; }) + (callPackage ./common/libgcc.nix { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; }) + (callPackage ./common/checksum.nix { inherit langC langCC; }) ] From 59daa069474fa5025762eafb86f5fa5bd1a89997 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 22:56:22 -0700 Subject: [PATCH 04/21] gcc: default.nix: parameterize by version --- pkgs/development/compilers/gcc/default.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 01cedef86b8bf..4be1d1a95f8df 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -31,8 +31,12 @@ , disableGdbPlugin ? !enablePlugin , nukeReferences , callPackage +, version }: +# only gcc13 is currently supported +assert lib.versions.major version == "13"; + # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -54,8 +58,8 @@ assert reproducibleBuild -> profiledCompiler == false; with lib; with builtins; -let majorVersion = "13"; - version = "${majorVersion}.1.0"; +let majorVersion = lib.versions.major version; + inherit version; disableBootstrap = !stdenv.hostPlatform.isDarwin && !profiledCompiler; inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -141,7 +145,7 @@ let majorVersion = "13"; stageNameAddon crossNameAddon ; - # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc13.cc.override)" | jq '.[]' --raw-output' + # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc${majorVersion}.cc.override)" | jq '.[]' --raw-output' inherit binutils buildPackages From c3bae705a970726297d3b22f40816c91c5760dfd Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 22:56:43 -0700 Subject: [PATCH 05/21] gcc: if atLeast 13, use deduplicated version --- pkgs/development/compilers/gcc/13/default.nix | 351 ------------------ .../{ => patches}/13/no-sys-dirs-riscv.patch | 0 pkgs/top-level/all-packages.nix | 11 +- 3 files changed, 10 insertions(+), 352 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/13/default.nix rename pkgs/development/compilers/gcc/{ => patches}/13/no-sys-dirs-riscv.patch (100%) diff --git a/pkgs/development/compilers/gcc/13/default.nix b/pkgs/development/compilers/gcc/13/default.nix deleted file mode 100644 index 03d8e394ed6ae..0000000000000 --- a/pkgs/development/compilers/gcc/13/default.nix +++ /dev/null @@ -1,351 +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}.2.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://raw.githubusercontent.com/Homebrew/formula-patches/3c5cbc8e9cf444a1967786af48e430588e1eb481/gcc/gcc-13.2.0.diff"; - sha256 = "sha256-Y5r3U3dwAFG6+b0TNCFd18PNxYu2+W/5zDbZ5cHvv+U="; - }) - ++ 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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - src = fetchurl { - url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - hash = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o="; - }; - - 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/pkgs/development/compilers/gcc/13/no-sys-dirs-riscv.patch b/pkgs/development/compilers/gcc/patches/13/no-sys-dirs-riscv.patch similarity index 100% rename from pkgs/development/compilers/gcc/13/no-sys-dirs-riscv.patch rename to pkgs/development/compilers/gcc/patches/13/no-sys-dirs-riscv.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e10af6ecd18d9..1f250af3d3104 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15798,7 +15798,14 @@ with pkgs; (lib.listToAttrs (map (version: let atLeast = lib.versionAtLeast version; attrName = "gcc${lib.replaceStrings ["."] [""] version}"; - pkg = lowPrio (wrapCC (callPackage (../development/compilers/gcc + "/${version}") ({ + deduplicatedVersions = { # map from majorVersion to exact version + "13" = "13.1.0"; + }; + deduplicated = deduplicatedVersions ? "${version}"; + path = if deduplicated + then ../development/compilers/gcc/default.nix + else ../development/compilers/gcc + "/${version}"; + pkg = lowPrio (wrapCC (callPackage path ({ inherit noSysDirs; reproducibleBuild = true; profiledCompiler = false; @@ -15823,6 +15830,8 @@ with pkgs; } // lib.optionalAttrs (atLeast "6" && !(atLeast "9")) { # gcc 10 is too strict to cross compile gcc <= 8 stdenv = if (stdenv.targetPlatform != stdenv.buildPlatform) && stdenv.cc.isGNU then gcc7Stdenv else stdenv; + } // lib.optionalAttrs deduplicated { + version = deduplicatedVersions."${version}"; }))); in lib.nameValuePair attrName pkg ) [ "4.8" "4.9" "6" "7" "8" "9" "10" "11" "12" "13" ])) From dc3eb566d1314c00e24b66b2997064dbe58fe6cc Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 23:05:34 -0700 Subject: [PATCH 06/21] gcc: if atLeast 12, use deduplicated version --- pkgs/development/compilers/gcc/12/default.nix | 357 ------------------ pkgs/development/compilers/gcc/default.nix | 33 +- ...thread-model-support-from-mcfgthread.patch | 0 .../12/lambda-ICE-PR109241.patch | 0 pkgs/top-level/all-packages.nix | 1 + 5 files changed, 26 insertions(+), 365 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/12/default.nix rename pkgs/development/compilers/gcc/{ => patches}/12/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/12/lambda-ICE-PR109241.patch (100%) diff --git a/pkgs/development/compilers/gcc/12/default.nix b/pkgs/development/compilers/gcc/12/default.nix deleted file mode 100644 index da9ebb0a63c17..0000000000000 --- a/pkgs/development/compilers/gcc/12/default.nix +++ /dev/null @@ -1,357 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 4be1d1a95f8df..623e1719e9d0c 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -34,8 +34,8 @@ , version }: -# only gcc13 is currently supported -assert lib.versions.major version == "13"; +# only gcc>=12 is currently supported +assert lib.versionAtLeast version "12"; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -72,14 +72,24 @@ let majorVersion = lib.versions.major version; ./gnat-cflags-11.patch ./gcc-12-gfortran-driving.patch ./ppc-musl.patch + ] ++ optionals (majorVersion == "12") [ + # 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 - ++ optional (stdenv.isDarwin && stdenv.isAarch64 && buildPlatform == hostPlatform && hostPlatform == targetPlatform) (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="; - }) + ++ optional (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}") ++ optional langD ./libphobos.patch # backport fixes to build gccgo with musl libc @@ -125,6 +135,10 @@ let majorVersion = lib.versions.major version; # 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 (majorVersion == "12" && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") + ./Added-mcf-thread-model-support-from-mcfgthread.patch ; /* Cross-gcc settings (build == host != target) */ @@ -205,7 +219,10 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ src = fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - sha256 = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; + sha256 = { + "13.1.0" = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; + "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; + }."${version}"; }; inherit patches; diff --git a/pkgs/development/compilers/gcc/12/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/12/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/12/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/12/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/development/compilers/gcc/12/lambda-ICE-PR109241.patch b/pkgs/development/compilers/gcc/patches/12/lambda-ICE-PR109241.patch similarity index 100% rename from pkgs/development/compilers/gcc/12/lambda-ICE-PR109241.patch rename to pkgs/development/compilers/gcc/patches/12/lambda-ICE-PR109241.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1f250af3d3104..6c87920a5ab32 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15800,6 +15800,7 @@ with pkgs; attrName = "gcc${lib.replaceStrings ["."] [""] version}"; deduplicatedVersions = { # map from majorVersion to exact version "13" = "13.1.0"; + "12" = "12.3.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From 8a822d6e5d94f8c5e7ce0785f463d6068e8b5bc5 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 23:28:37 -0700 Subject: [PATCH 07/21] gcc: if atLeast 11, use deduplicated version --- pkgs/development/compilers/gcc/11/default.nix | 311 ------------------ pkgs/development/compilers/gcc/default.nix | 75 +++-- ...thread-model-support-from-mcfgthread.patch | 0 .../11/avr-gcc-11.3-darwin.patch | 0 .../{ => patches}/11/gcc-issue-103910.patch | 0 pkgs/top-level/all-packages.nix | 1 + 6 files changed, 54 insertions(+), 333 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/11/default.nix rename pkgs/development/compilers/gcc/{ => patches}/11/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/11/avr-gcc-11.3-darwin.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/11/gcc-issue-103910.patch (100%) diff --git a/pkgs/development/compilers/gcc/11/default.nix b/pkgs/development/compilers/gcc/11/default.nix deleted file mode 100644 index b009972307740..0000000000000 --- a/pkgs/development/compilers/gcc/11/default.nix +++ /dev/null @@ -1,311 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 623e1719e9d0c..85122b45fba1e 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -34,8 +34,14 @@ , version }: -# only gcc>=12 is currently supported -assert lib.versionAtLeast version "12"; +let + atLeast13 = lib.versionAtLeast version "13"; + atLeast12 = lib.versionAtLeast version "12"; + atLeast11 = lib.versionAtLeast version "11"; +in + +# only gcc>=11 is currently supported +assert atLeast11; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -46,7 +52,7 @@ 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; +assert atLeast12 -> !langD; # threadsCross is just for MinGW assert threadsCross != {} -> stdenv.targetPlatform.isWindows; @@ -60,16 +66,19 @@ with builtins; let majorVersion = lib.versions.major version; inherit version; - disableBootstrap = !stdenv.hostPlatform.isDarwin && !profiledCompiler; + disableBootstrap = !stdenv.hostPlatform.isDarwin && (atLeast12 -> !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 - ++ [ + optional (!atLeast12) ./fix-bug-80431.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 + ++ optionals (langAda || atLeast12) [ ./gnat-cflags-11.patch + ] ++ optionals atLeast12 [ ./gcc-12-gfortran-driving.patch ./ppc-musl.patch ] ++ optionals (majorVersion == "12") [ @@ -78,22 +87,37 @@ let majorVersion = lib.versions.major version; ] # 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) ({ - "13" = fetchpatch { + ++ 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 { + }) ]; + "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}") + }) ]; + }."${majorVersion}" or []) ++ optional langD ./libphobos.patch + ++ optional langFortran ../gfortran-driving.patch + + # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering + ++ optional (!atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch + # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering + ++ optionals (!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 + 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 (!atLeast12 && stdenv.isDarwin && targetPlatform.isAvr) ./avr-gcc-11.3-darwin.patch # backport fixes to build gccgo with musl libc - ++ optionals (langGo && stdenv.hostPlatform.isMusl) [ + ++ optionals (atLeast12 && langGo && stdenv.hostPlatform.isMusl) [ (fetchpatch { excludes = [ "gcc/go/gofrontend/MERGE" ]; url = "https://github.com/gcc-mirror/gcc/commit/cf79b1117bd177d3d4c6ed24b6fa243c3628ac2d.diff"; @@ -131,14 +155,17 @@ let majorVersion = lib.versions.major version; ] # Fix detection of bootstrap compiler Ada support (cctools as) on Nix Darwin - ++ optional (stdenv.isDarwin && langAda) ./ada-cctools-as-detection-configure.patch + ++ optional (atLeast12 && 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 + ++ optional (atLeast12 && stdenv.isDarwin && langAda) ./gnat-darwin-dylib-install-name.patch # Obtain latest patch with ../update-mcfgthread-patches.sh - ++ optional (majorVersion == "12" && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") + ++ optional (!atLeast13 && !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 + ++ optionals (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] ; /* Cross-gcc settings (build == host != target) */ @@ -219,9 +246,10 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ src = fetchurl { url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - sha256 = { + ${if atLeast12 then "sha256" else "hash"} = { "13.1.0" = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; + "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk="; }."${version}"; }; @@ -233,7 +261,8 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ libc_dev = stdenv.cc.libc_dev; - hardeningDisable = [ "format" "pie" ]; + hardeningDisable = [ "format" "pie" ] + ++ lib.optionals (!atLeast12 && langAda) [ "fortify3" ]; postPatch = '' configureScripts=$(find . -name configure) @@ -244,7 +273,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ # 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 \ + substituteInPlace gcc/config/darwin-c.c${lib.optionalString atLeast12 "c"} \ --replace 'if (stdinc)' 'if (0)' substituteInPlace libgcc/config/t-slibgcc-darwin \ @@ -306,7 +335,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ buildFlags = # we do not yet have Nix-driven profiling - assert profiledCompiler -> !disableBootstrap; + assert atLeast12 -> (profiledCompiler -> !disableBootstrap); let target = lib.optionalString (profiledCompiler) "profiled" + lib.optionalString (targetPlatform == hostPlatform && hostPlatform == buildPlatform && !disableBootstrap) "bootstrap"; @@ -346,6 +375,8 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ passthru = { inherit langC langCC langObjC langObjCpp langAda langFortran langGo langD version; isGNU = true; + } // lib.optionalAttrs (!atLeast12) { + hardeningUnsupportedFlags = [ "fortify3" ]; }; enableParallelBuilding = true; diff --git a/pkgs/development/compilers/gcc/11/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/11/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/11/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/11/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/development/compilers/gcc/11/avr-gcc-11.3-darwin.patch b/pkgs/development/compilers/gcc/patches/11/avr-gcc-11.3-darwin.patch similarity index 100% rename from pkgs/development/compilers/gcc/11/avr-gcc-11.3-darwin.patch rename to pkgs/development/compilers/gcc/patches/11/avr-gcc-11.3-darwin.patch diff --git a/pkgs/development/compilers/gcc/11/gcc-issue-103910.patch b/pkgs/development/compilers/gcc/patches/11/gcc-issue-103910.patch similarity index 100% rename from pkgs/development/compilers/gcc/11/gcc-issue-103910.patch rename to pkgs/development/compilers/gcc/patches/11/gcc-issue-103910.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6c87920a5ab32..43064e73c9745 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15801,6 +15801,7 @@ with pkgs; deduplicatedVersions = { # map from majorVersion to exact version "13" = "13.1.0"; "12" = "12.3.0"; + "11" = "11.4.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From c72e136046856c960890e59ed0443e2fde1816e8 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 23:39:16 -0700 Subject: [PATCH 08/21] gcc: if atLeast 10, use deduplicated version --- pkgs/development/compilers/gcc/10/default.nix | 296 ------------------ pkgs/development/compilers/gcc/default.nix | 47 ++- ...thread-model-support-from-mcfgthread.patch | 0 pkgs/top-level/all-packages.nix | 1 + 4 files changed, 33 insertions(+), 311 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/10/default.nix rename pkgs/development/compilers/gcc/{ => patches}/10/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) 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 similarity index 100% rename from pkgs/development/compilers/gcc/10/Added-mcf-thread-model-support-from-mcfgthread.patch rename to 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 43064e73c9745..4c754a91fec6c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15802,6 +15802,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 From 01902c7b4574fc5ae446af88764c96137a87eabd Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 23:46:09 -0700 Subject: [PATCH 09/21] gcc: if atLeast 9, use deduplicated version --- pkgs/development/compilers/gcc/9/default.nix | 294 ------------------ pkgs/development/compilers/gcc/default.nix | 25 +- ...thread-model-support-from-mcfgthread.patch | 0 .../9/avoid-cycling-subreg-reloads.patch | 0 ...ix-struct-redefinition-on-glibc-2.36.patch | 0 .../9/gcc9-asan-glibc-2.34.patch | 0 pkgs/top-level/all-packages.nix | 1 + 7 files changed, 17 insertions(+), 303 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/9/default.nix rename pkgs/development/compilers/gcc/{ => patches}/9/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/9/avoid-cycling-subreg-reloads.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/9/fix-struct-redefinition-on-glibc-2.36.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/9/gcc9-asan-glibc-2.34.patch (100%) diff --git a/pkgs/development/compilers/gcc/9/default.nix b/pkgs/development/compilers/gcc/9/default.nix deleted file mode 100644 index d08de2a5b79ce..0000000000000 --- a/pkgs/development/compilers/gcc/9/default.nix +++ /dev/null @@ -1,294 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 4b9282adc68ee..adfadd2e39150 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -39,10 +39,11 @@ let atLeast12 = lib.versionAtLeast version "12"; atLeast11 = lib.versionAtLeast version "11"; atLeast10 = lib.versionAtLeast version "10"; + atLeast9 = lib.versionAtLeast version "9"; in -# only gcc>=10 is currently supported -assert atLeast10; +# only gcc>=9 is currently supported +assert atLeast9; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -72,12 +73,15 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = - optional (!atLeast12) ./fix-bug-80431.patch - ++ optional (!atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch + optional (!atLeast10) ./9/fix-struct-redefinition-on-glibc-2.36.patch + ++ optional (!atLeast12) ./fix-bug-80431.patch + ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch + ++ optional (!atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch - ++ optional (noSysDirs && (is10 || (!atLeast12 -> hostPlatform.isRiscV))) ./no-sys-dirs-riscv.patch + ++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch + ++ optional (noSysDirs && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch ++ optionals (langAda || atLeast12) [ ./gnat-cflags-11.patch ] ++ optionals (langAda && !atLeast11) [ @@ -171,7 +175,7 @@ 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 { + ++ optional (majorVersion == "10" && 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="; }); @@ -259,6 +263,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk="; "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; + "9.5.0" = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7"; }."${version}"; }; @@ -315,12 +320,14 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ '' ) )) - + lib.optionalString targetPlatform.isAvr '' + + lib.optionalString targetPlatform.isAvr ('' makeFlagsArray+=( + '' + (lib.optionalString atLeast10 '' '-s' # workaround for hitting hydra log limit + '') + '' 'LIMITS_H_TEST=false' ) - ''; + ''); inherit noSysDirs staticCompiler withoutTargetLibc libcCross crossMingw; @@ -330,7 +337,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ NIX_LDFLAGS = lib.optionalString hostPlatform.isSunOS "-lm"; - preConfigure = (callFile ./common/pre-configure.nix { }) + '' + preConfigure = (callFile ./common/pre-configure.nix { }) + lib.optionalString atLeast10 '' ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h ''; diff --git a/pkgs/development/compilers/gcc/9/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/9/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/9/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/9/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/development/compilers/gcc/9/avoid-cycling-subreg-reloads.patch b/pkgs/development/compilers/gcc/patches/9/avoid-cycling-subreg-reloads.patch similarity index 100% rename from pkgs/development/compilers/gcc/9/avoid-cycling-subreg-reloads.patch rename to pkgs/development/compilers/gcc/patches/9/avoid-cycling-subreg-reloads.patch diff --git a/pkgs/development/compilers/gcc/9/fix-struct-redefinition-on-glibc-2.36.patch b/pkgs/development/compilers/gcc/patches/9/fix-struct-redefinition-on-glibc-2.36.patch similarity index 100% rename from pkgs/development/compilers/gcc/9/fix-struct-redefinition-on-glibc-2.36.patch rename to pkgs/development/compilers/gcc/patches/9/fix-struct-redefinition-on-glibc-2.36.patch diff --git a/pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patch b/pkgs/development/compilers/gcc/patches/9/gcc9-asan-glibc-2.34.patch similarity index 100% rename from pkgs/development/compilers/gcc/9/gcc9-asan-glibc-2.34.patch rename to pkgs/development/compilers/gcc/patches/9/gcc9-asan-glibc-2.34.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4c754a91fec6c..a292b4edc3047 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15803,6 +15803,7 @@ with pkgs; "12" = "12.3.0"; "11" = "11.4.0"; "10" = "10.4.0"; + "9" = "9.5.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From 942d7ecf08d70273056413e2ed41a39cc82b2bc2 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 16 Aug 2023 23:53:43 -0700 Subject: [PATCH 10/21] gcc: if atLeast 8, use deduplicated version --- pkgs/development/compilers/gcc/8/default.nix | 279 ------------------ pkgs/development/compilers/gcc/default.nix | 20 +- ...thread-model-support-from-mcfgthread.patch | 0 pkgs/top-level/all-packages.nix | 1 + 4 files changed, 14 insertions(+), 286 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/8/default.nix rename pkgs/development/compilers/gcc/{ => patches}/8/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix deleted file mode 100644 index 274373a4fc8f3..0000000000000 --- a/pkgs/development/compilers/gcc/8/default.nix +++ /dev/null @@ -1,279 +0,0 @@ -{ lib, stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs -, langC ? true, langCC ? true, langFortran ? false -, langObjC ? stdenv.targetPlatform.isDarwin -, langObjCpp ? stdenv.targetPlatform.isDarwin -, langGo ? false -, reproducibleBuild ? true -, profiledCompiler ? false -, langJit ? false -, staticCompiler ? false -, enableShared ? stdenv.targetPlatform.hasSharedLibraries -, enableLTO ? stdenv.hostPlatform.hasSharedLibraries -, texinfo ? null -, perl ? null # optional, for texi2pod (then pod2man) -, gmp, mpfr, libmpc, gettext, which, patchelf, binutils -, isl ? null # optional, for the Graphite optimization framework. -, zlib ? null -, enableMultilib ? false -, enablePlugin ? stdenv.hostPlatform == stdenv.buildPlatform # Whether to support user-supplied plug-ins -, name ? "gcc" -, libcCross ? null -, threadsCross ? null # for MinGW -, withoutTargetLibc ? false -, gnused ? null -, cloog ? null # unused; just for compat with gcc4, as we override the parameter on some places -, buildPackages -, callPackage -}: - -# Make sure we get GNU sed. -assert stdenv.buildPlatform.isDarwin -> gnused != null; - -# The go frontend is written in c++ -assert langGo -> langCC; - -# threadsCross is just for MinGW -assert threadsCross != {} -> stdenv.targetPlatform.isWindows; - -# profiledCompiler builds inject non-determinism in one of the compilation stages. -# If turned on, we can't provide reproducible builds anymore -assert reproducibleBuild -> profiledCompiler == false; - -with lib; -with builtins; - -let majorVersion = "8"; - version = "${majorVersion}.5.0"; - - inherit (stdenv) buildPlatform hostPlatform targetPlatform; - - patches = [ - # Fix https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431 - ../fix-bug-80431.patch - ../9/fix-struct-redefinition-on-glibc-2.36.patch - ] ++ optional (targetPlatform != hostPlatform) ../libstdc++-target.patch - ++ optional targetPlatform.isNetBSD ../libstdc++-netbsd-ctypes.patch - ++ optional noSysDirs ../no-sys-dirs.patch - /* ++ optional (hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied - url = "https://git.busybox.net/buildroot/plain/package/gcc/${version}/0900-remove-selftests.patch?id=11271540bfe6adafbc133caf6b5b902a816f5f02"; - sha256 = ""; # TODO: uncomment and check hash when available. - }) */ - ++ optional langFortran ../gfortran-driving.patch - ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch - ++ optional (targetPlatform.libc == "musl") ../libgomp-dont-force-initial-exec.patch - - # Obtain latest patch with ../update-mcfgthread-patches.sh - ++ optional (!withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch - ++ [ ../libsanitizer-no-cyclades-9.patch ]; - - /* Cross-gcc settings (build == host != target) */ - crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; - stageNameAddon = if withoutTargetLibc then "stage-static" else "stage-final"; - crossNameAddon = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-${stageNameAddon}-"; - - callFile = lib.callPackageWith { - # lets - inherit - majorVersion - version - buildPlatform - hostPlatform - targetPlatform - patches - crossMingw - stageNameAddon - crossNameAddon - ; - # inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gcc8.cc.override)" | jq '.[]' --raw-output' - inherit - binutils - buildPackages - cloog - withoutTargetLibc - enableLTO - enableMultilib - enablePlugin - enableShared - fetchpatch - fetchurl - gettext - gmp - gnused - isl - langC - langCC - langFortran - langGo - langJit - langObjC - langObjCpp - lib - libcCross - libmpc - mpfr - name - noSysDirs - patchelf - perl - profiledCompiler - reproducibleBuild - staticCompiler - stdenv - targetPackages - texinfo - threadsCross - which - zip - zlib - ; - }; - -in - -lib.pipe ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - src = fetchurl { - url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; - sha256 = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; - }; - - inherit patches; - - outputs = [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib"; - setOutputFlags = false; - NIX_NO_SELF_RPATH = true; - - libc_dev = stdenv.cc.libc_dev; - - hardeningDisable = [ "format" "pie" ]; - - postPatch = '' - configureScripts=$(find . -name configure) - for configureScript in $configureScripts; do - patchShebangs $configureScript - done - '' - # This should kill all the stdinc frameworks that gcc and friends like to - # insert into default search paths. - + lib.optionalString hostPlatform.isDarwin '' - substituteInPlace gcc/config/darwin-c.c \ - --replace 'if (stdinc)' 'if (0)' - - substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name ''${!outputLib}/lib/\$(SHLIB_INSTALL_NAME)" - - substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname" - '' - + ( - lib.optionalString (targetPlatform != hostPlatform || stdenv.cc.libc != null) - # On NixOS, use the right path to the dynamic linker instead of - # `/lib/ld*.so'. - (let - libc = if libcCross != null then libcCross else stdenv.cc.libc; - in - ( - '' echo "fixing the \`GLIBC_DYNAMIC_LINKER', \`UCLIBC_DYNAMIC_LINKER', and \`MUSL_DYNAMIC_LINKER' macros..." - for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h - do - grep -q _DYNAMIC_LINKER "$header" || continue - echo " fixing \`$header'..." - sed -i "$header" \ - -e 's|define[[:blank:]]*\([UCG]\+\)LIBC_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define \1LIBC_DYNAMIC_LINKER\2 "${libc.out}\3"|g' \ - -e 's|define[[:blank:]]*MUSL_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define MUSL_DYNAMIC_LINKER\1 "${libc.out}\2"|g' - done - '' - + lib.optionalString (targetPlatform.libc == "musl") - '' - sed -i gcc/config/linux.h -e '1i#undef LOCAL_INCLUDE_DIR' - '' - )) - ) - + lib.optionalString targetPlatform.isAvr '' - makeFlagsArray+=( - 'LIMITS_H_TEST=false' - ) - ''; - - inherit noSysDirs staticCompiler withoutTargetLibc - libcCross crossMingw; - - inherit (callFile ../common/dependencies.nix { }) - depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget; - - NIX_LDFLAGS = lib.optionalString hostPlatform.isSunOS "-lm"; - - preConfigure = callFile ../common/pre-configure.nix { }; - - dontDisableStatic = true; - - configurePlatforms = [ "build" "host" "target" ]; - - configureFlags = callFile ../common/configure-flags.nix { }; - - targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; - - buildFlags = optional - (targetPlatform == hostPlatform && hostPlatform == buildPlatform) - (if profiledCompiler then "profiledbootstrap" else "bootstrap"); - - # https://gcc.gnu.org/PR109898 - enableParallelInstalling = false; - - inherit (callFile ../common/strip-attributes.nix { }) - stripDebugList - stripDebugListTarget - preFixup; - - # https://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 - ${if hostPlatform.system == "x86_64-solaris" then "CC" else null} = "gcc -m64"; - - # Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find the - # library headers and binaries, regarless of the language being compiled. - # - # Likewise, the LTO code doesn't find zlib. - # - # Cross-compiling, we need gcc not to read ./specs in order to build the g++ - # compiler (after the specs for the cross-gcc are created). Having - # LIBRARY_PATH= makes gcc read the specs from ., and the build breaks. - - CPATH = optionals (targetPlatform == hostPlatform) (makeSearchPathOutput "dev" "include" ([] - ++ optional (zlib != null) zlib - )); - - LIBRARY_PATH = optionals (targetPlatform == hostPlatform) (makeLibraryPath (optional (zlib != null) zlib)); - - inherit (callFile ../common/extra-target-flags.nix { }) - EXTRA_FLAGS_FOR_TARGET - EXTRA_LDFLAGS_FOR_TARGET - ; - - passthru = { - inherit langC langCC langObjC langObjCpp langFortran langGo version; - isGNU = true; - hardeningUnsupportedFlags = [ "fortify3" ]; - }; - - enableParallelBuilding = true; - inherit enableShared enableMultilib; - - meta = { - inherit (callFile ../common/meta.nix { }) - homepage - license - description - longDescription - platforms - maintainers - ; - badPlatforms = [ "aarch64-darwin" ]; - }; -} - -// optionalAttrs (enableMultilib) { dontMoveLib64 = true; } -)) -[ - (callPackage ../common/libgcc.nix { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; }) -] diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index adfadd2e39150..94d077791f3a4 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -40,17 +40,18 @@ let atLeast11 = lib.versionAtLeast version "11"; atLeast10 = lib.versionAtLeast version "10"; atLeast9 = lib.versionAtLeast version "9"; + atLeast8 = lib.versionAtLeast version "8"; in -# only gcc>=9 is currently supported -assert atLeast9; +# only gcc>=8 is currently supported +assert atLeast8; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; # The go frontend is written in c++ assert langGo -> langCC; -assert langAda -> gnat-bootstrap != null; +assert atLeast9 -> (langAda -> gnat-bootstrap != null); # TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes). # error: GDC is required to build d @@ -73,18 +74,19 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = - optional (!atLeast10) ./9/fix-struct-redefinition-on-glibc-2.36.patch + optional (majorVersion == "9") ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (!atLeast12) ./fix-bug-80431.patch + ++ optional (!atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch ++ optional (!atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch ++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch - ++ optional (noSysDirs && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch + ++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch ++ optionals (langAda || atLeast12) [ ./gnat-cflags-11.patch - ] ++ optionals (langAda && !atLeast11) [ + ] ++ optionals (langAda && atLeast9 && !atLeast11) [ ./gnat-cflags.patch ] ++ optionals atLeast12 [ ./gcc-12-gfortran-driving.patch @@ -107,11 +109,12 @@ let majorVersion = lib.versions.major version; sha256 = "sha256-naL5ZNiurqfDBiPSU8PTbTmLqj25B+vjjiqc4fAFgYs="; }) ]; }."${majorVersion}" or []) - ++ optional langD ./libphobos.patch + ++ optional (atLeast9 && langD) ./libphobos.patch ++ optional langFortran ../gfortran-driving.patch # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optional (!atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch + ++ optional (!atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optionals (atLeast11 && !atLeast12 && stdenv.isDarwin) [ (fetchpatch { @@ -172,6 +175,8 @@ let majorVersion = lib.versions.major version; ++ optional (!atLeast13 && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./Added-mcf-thread-model-support-from-mcfgthread.patch + ++ optional (!atLeast9) ./libsanitizer-no-cyclades-9.patch + # openjdk build fails without this on -march=opteron; is upstream in gcc12 ++ optionals (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] @@ -264,6 +269,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk="; "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; "9.5.0" = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7"; + "8.5.0" = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; }."${version}"; }; diff --git a/pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/8/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/8/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a292b4edc3047..0f07e416bca95 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15804,6 +15804,7 @@ with pkgs; "11" = "11.4.0"; "10" = "10.4.0"; "9" = "9.5.0"; + "8" = "8.5.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From b3d07e87d2cdd29f501b13070065d0cec3f01ebd Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 00:01:15 -0700 Subject: [PATCH 11/21] gcc: if atLeast 7, use deduplicated version --- pkgs/development/compilers/gcc/7/default.nix | 304 ------------------ pkgs/development/compilers/gcc/default.nix | 36 ++- .../7/0001-Fix-build-for-glibc-2.31.patch | 0 ...thread-model-support-from-mcfgthread.patch | 0 .../7/gcc8-asan-glibc-2.34.patch | 0 .../gcc/{ => patches}/7/riscv-no-relax.patch | 0 .../7/riscv-pthread-reentrant.patch | 0 pkgs/top-level/all-packages.nix | 1 + 8 files changed, 31 insertions(+), 310 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/7/default.nix rename pkgs/development/compilers/gcc/{ => patches}/7/0001-Fix-build-for-glibc-2.31.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/7/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/7/gcc8-asan-glibc-2.34.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/7/riscv-no-relax.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/7/riscv-pthread-reentrant.patch (100%) diff --git a/pkgs/development/compilers/gcc/7/default.nix b/pkgs/development/compilers/gcc/7/default.nix deleted file mode 100644 index 72e241214fe46..0000000000000 --- a/pkgs/development/compilers/gcc/7/default.nix +++ /dev/null @@ -1,304 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 94d077791f3a4..5a9b54123e5be 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -41,10 +41,11 @@ let atLeast10 = lib.versionAtLeast version "10"; atLeast9 = lib.versionAtLeast version "9"; atLeast8 = lib.versionAtLeast version "8"; + atLeast7 = lib.versionAtLeast version "7"; in -# only gcc>=8 is currently supported -assert atLeast8; +# only gcc>=7 is currently supported +assert atLeast7; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -74,7 +75,16 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = - optional (majorVersion == "9") ./9/fix-struct-redefinition-on-glibc-2.36.patch + optionals (!atLeast8) [ + # 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 (!atLeast12) ./fix-bug-80431.patch ++ optional (!atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch @@ -110,10 +120,18 @@ let majorVersion = lib.versions.major version; }) ]; }."${majorVersion}" or []) ++ optional (atLeast9 && langD) ./libphobos.patch + ++ optional (!atLeast8 && 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 # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optional (!atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch + ++ optional (!atLeast8 && 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 (!atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering ++ optionals (atLeast11 && !atLeast12 && stdenv.isDarwin) [ @@ -270,6 +288,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; "9.5.0" = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7"; "8.5.0" = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; + "7.5.0" = "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq"; }."${version}"; }; @@ -351,7 +370,9 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ configurePlatforms = [ "build" "host" "target" ]; - configureFlags = callFile ./common/configure-flags.nix { }; + configureFlags = (callFile ./common/configure-flags.nix { }) + ++ optional (!atLeast8 && targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419" + ++ optional (!atLeast8 && targetPlatform.isNetBSD) "--disable-libcilkrts"; targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; @@ -421,9 +442,12 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ } // lib.optionalAttrs (!atLeast11) { badPlatforms = [ "aarch64-darwin" ]; }; +} // optionalAttrs (!atLeast8) { + env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument"; + doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv +} // optionalAttrs (enableMultilib) { + dontMoveLib64 = true; } - -// optionalAttrs (enableMultilib) { dontMoveLib64 = true; } )) ([ (callPackage ./common/libgcc.nix { inherit version langC langCC langJit targetPlatform hostPlatform withoutTargetLibc enableShared; }) diff --git a/pkgs/development/compilers/gcc/7/0001-Fix-build-for-glibc-2.31.patch b/pkgs/development/compilers/gcc/patches/7/0001-Fix-build-for-glibc-2.31.patch similarity index 100% rename from pkgs/development/compilers/gcc/7/0001-Fix-build-for-glibc-2.31.patch rename to pkgs/development/compilers/gcc/patches/7/0001-Fix-build-for-glibc-2.31.patch diff --git a/pkgs/development/compilers/gcc/7/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/7/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/7/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/7/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patch b/pkgs/development/compilers/gcc/patches/7/gcc8-asan-glibc-2.34.patch similarity index 100% rename from pkgs/development/compilers/gcc/7/gcc8-asan-glibc-2.34.patch rename to pkgs/development/compilers/gcc/patches/7/gcc8-asan-glibc-2.34.patch diff --git a/pkgs/development/compilers/gcc/7/riscv-no-relax.patch b/pkgs/development/compilers/gcc/patches/7/riscv-no-relax.patch similarity index 100% rename from pkgs/development/compilers/gcc/7/riscv-no-relax.patch rename to pkgs/development/compilers/gcc/patches/7/riscv-no-relax.patch diff --git a/pkgs/development/compilers/gcc/7/riscv-pthread-reentrant.patch b/pkgs/development/compilers/gcc/patches/7/riscv-pthread-reentrant.patch similarity index 100% rename from pkgs/development/compilers/gcc/7/riscv-pthread-reentrant.patch rename to pkgs/development/compilers/gcc/patches/7/riscv-pthread-reentrant.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0f07e416bca95..ae765c357c53d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15805,6 +15805,7 @@ with pkgs; "10" = "10.4.0"; "9" = "9.5.0"; "8" = "8.5.0"; + "7" = "7.5.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From b505fb47118d939e00ac5ad26a2164509c6d210f Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 00:26:47 -0700 Subject: [PATCH 12/21] gcc: if atLeast 6, use deduplicated version --- pkgs/development/compilers/gcc/6/default.nix | 370 ------------------ pkgs/development/compilers/gcc/default.nix | 153 ++++++-- .../6/0001-Fix-build-for-glibc-2.31.patch | 0 ...thread-model-support-from-mcfgthread.patch | 0 .../{ => patches}/6/fix-objdump-check.patch | 0 .../gcc/{ => patches}/6/gnat-glibc234.patch | 0 .../6/gogcc-workaround-glibc-2.36.patch | 0 pkgs/top-level/all-packages.nix | 1 + 8 files changed, 132 insertions(+), 392 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/6/default.nix rename pkgs/development/compilers/gcc/{ => patches}/6/0001-Fix-build-for-glibc-2.31.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/6/Added-mcf-thread-model-support-from-mcfgthread.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/6/fix-objdump-check.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/6/gnat-glibc234.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/6/gogcc-workaround-glibc-2.36.patch (100%) diff --git a/pkgs/development/compilers/gcc/6/default.nix b/pkgs/development/compilers/gcc/6/default.nix deleted file mode 100644 index f19c2b4f46c8a..0000000000000 --- a/pkgs/development/compilers/gcc/6/default.nix +++ /dev/null @@ -1,370 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 5a9b54123e5be..5d26da4801fe8 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -32,6 +32,17 @@ , nukeReferences , callPackage , version + +# 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 @@ -42,17 +53,20 @@ let atLeast9 = lib.versionAtLeast version "9"; atLeast8 = lib.versionAtLeast version "8"; atLeast7 = lib.versionAtLeast version "7"; + atLeast6 = lib.versionAtLeast version "6"; in -# only gcc>=7 is currently supported -assert atLeast7; +assert langJava -> !atLeast7 && zip != null && unzip != null && zlib != null && boehmgc != null && perl != null; # for `--enable-java-home' + +# only gcc>=6 is currently supported +assert atLeast6; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; # The go frontend is written in c++ assert langGo -> langCC; -assert atLeast9 -> (langAda -> gnat-bootstrap != null); +assert (!atLeast7 || atLeast9) -> (langAda -> gnat-bootstrap != null); # TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes). # error: GDC is required to build d @@ -75,7 +89,12 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = - optionals (!atLeast8) [ + optionals (!atLeast7) [ + ./9/fix-struct-redefinition-on-glibc-2.36.patch + ] ++ optionals (!atLeast7 && !stdenv.targetPlatform.isRedox) [ + ./use-source-date-epoch.patch + ./6/0001-Fix-build-for-glibc-2.31.patch + ] ++ optionals (atLeast7 && !atLeast8) [ # 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 @@ -83,15 +102,18 @@ let majorVersion = lib.versions.major version; # 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") + ] ++ optionals (atLeast7 && !atLeast8) [ (./. + "/${majorVersion}/0001-Fix-build-for-glibc-2.31.patch") ] ++ optional (majorVersion == "9") ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (!atLeast12) ./fix-bug-80431.patch - ++ optional (!atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch + ++ optional (atLeast7 && !atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch - ++ optional (!atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch + ++ optional (atLeast7 && !atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch + ++ optional (!atLeast7 && langAda) ./gnat-cflags.patch + ++ optional (!atLeast7 && langAda) ./6/gnat-glibc234.patch ++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch ++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch ++ optionals (langAda || atLeast12) [ @@ -120,19 +142,20 @@ let majorVersion = lib.versions.major version; }) ]; }."${majorVersion}" or []) ++ optional (atLeast9 && langD) ./libphobos.patch - ++ optional (!atLeast8 && hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied + ++ optional (atLeast7 && !atLeast8 && 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 # TODO: deduplicate this with copy above -- leaving duplicated for now in order to avoid changing eval results by reordering - ++ optional (!atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch + ++ optional (atLeast7 && !atLeast12 && targetPlatform.libc == "musl" && targetPlatform.isPower) ./ppc-musl.patch ++ optional (!atLeast8 && 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 (!atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch + ++ optional (atLeast7 && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch + ++ optional (!atLeast7 && 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 (atLeast11 && !atLeast12 && stdenv.isDarwin) [ (fetchpatch { @@ -208,7 +231,12 @@ let majorVersion = lib.versions.major version; stageNameAddon = if withoutTargetLibc then "stage-static" else "stage-final"; crossNameAddon = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-${stageNameAddon}-"; - callFile = lib.callPackageWith { + javaAwtGtk = langJava && x11Support; + xlibs = [ + libX11 libXt libSM libICE libXtst libXrender libXrandr libXi + xorgproto + ]; + callFile = lib.callPackageWith ({ # lets inherit majorVersion @@ -271,16 +299,70 @@ let majorVersion = lib.versions.major version; 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 = fetchurl { - url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz"; + src = if !atLeast7 && stdenv.targetPlatform.isVc4 then fetchFromGitHub { + owner = "itszor"; + repo = "gcc-vc4"; + rev = "e90ff43f9671c760cf0d1dd62f569a0fb9bf8918"; + sha256 = "0gxf66hwqk26h8f853sybphqa5ca0cva2kmrw5jsiv6139g0qnp8"; + } else if !atLeast7 && 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 "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.xz"; ${if majorVersion == "11" then "hash" else "sha256"} = { "13.1.0" = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; @@ -289,12 +371,18 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "9.5.0" = "13ygjmd938m0wmy946pxdhz9i1wq7z4w10l6pvidak0xxxj9yxi7"; "8.5.0" = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; "7.5.0" = "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq"; + "6.5.0" = "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby"; }."${version}"; - }; + }); inherit patches; - outputs = [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib"; + outputs = + if atLeast7 + then [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib" + else if langJava || langGo || langJit then ["out" "man" "info"] + else [ "out" "lib" "man" "info" ]; + setOutputFlags = false; NIX_NO_SELF_RPATH = true; @@ -303,12 +391,12 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ hardeningDisable = [ "format" "pie" ] ++ lib.optionals (atLeast11 && !atLeast12 && langAda) [ "fortify3" ]; - postPatch = '' + 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 hostPlatform.isDarwin '' @@ -345,7 +433,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ '' ) )) - + lib.optionalString targetPlatform.isAvr ('' + + lib.optionalString (atLeast7 && targetPlatform.isAvr) ('' makeFlagsArray+=( '' + (lib.optionalString atLeast10 '' '-s' # workaround for hitting hydra log limit @@ -371,8 +459,8 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ configurePlatforms = [ "build" "host" "target" ]; configureFlags = (callFile ./common/configure-flags.nix { }) - ++ optional (!atLeast8 && targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419" - ++ optional (!atLeast8 && targetPlatform.isNetBSD) "--disable-libcilkrts"; + ++ optional (atLeast7 && !atLeast8 && targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419" + ++ optional (atLeast7 && !atLeast8 && targetPlatform.isNetBSD) "--disable-libcilkrts"; targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; @@ -403,6 +491,11 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ # 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++ @@ -411,9 +504,17 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ 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)); + 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 @@ -442,11 +543,19 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ } // lib.optionalAttrs (!atLeast11) { badPlatforms = [ "aarch64-darwin" ]; }; -} // optionalAttrs (!atLeast8) { +} // optionalAttrs (atLeast7 && !atLeast8) { env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument"; +} // optionalAttrs (!atLeast7) { + env.langJava = langJava; +} // optionalAttrs (!atLeast8) { doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv } // optionalAttrs (enableMultilib) { dontMoveLib64 = true; +} // optionalAttrs (!atLeast7 && langJava && !stdenv.hostPlatform.isDarwin) { + postFixup = '' + target="$(echo "$out/libexec/gcc"/*/*/ecj*)" + patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target" + ''; } )) ([ diff --git a/pkgs/development/compilers/gcc/6/0001-Fix-build-for-glibc-2.31.patch b/pkgs/development/compilers/gcc/patches/6/0001-Fix-build-for-glibc-2.31.patch similarity index 100% rename from pkgs/development/compilers/gcc/6/0001-Fix-build-for-glibc-2.31.patch rename to pkgs/development/compilers/gcc/patches/6/0001-Fix-build-for-glibc-2.31.patch diff --git a/pkgs/development/compilers/gcc/6/Added-mcf-thread-model-support-from-mcfgthread.patch b/pkgs/development/compilers/gcc/patches/6/Added-mcf-thread-model-support-from-mcfgthread.patch similarity index 100% rename from pkgs/development/compilers/gcc/6/Added-mcf-thread-model-support-from-mcfgthread.patch rename to pkgs/development/compilers/gcc/patches/6/Added-mcf-thread-model-support-from-mcfgthread.patch diff --git a/pkgs/development/compilers/gcc/6/fix-objdump-check.patch b/pkgs/development/compilers/gcc/patches/6/fix-objdump-check.patch similarity index 100% rename from pkgs/development/compilers/gcc/6/fix-objdump-check.patch rename to pkgs/development/compilers/gcc/patches/6/fix-objdump-check.patch diff --git a/pkgs/development/compilers/gcc/6/gnat-glibc234.patch b/pkgs/development/compilers/gcc/patches/6/gnat-glibc234.patch similarity index 100% rename from pkgs/development/compilers/gcc/6/gnat-glibc234.patch rename to pkgs/development/compilers/gcc/patches/6/gnat-glibc234.patch diff --git a/pkgs/development/compilers/gcc/6/gogcc-workaround-glibc-2.36.patch b/pkgs/development/compilers/gcc/patches/6/gogcc-workaround-glibc-2.36.patch similarity index 100% rename from pkgs/development/compilers/gcc/6/gogcc-workaround-glibc-2.36.patch rename to pkgs/development/compilers/gcc/patches/6/gogcc-workaround-glibc-2.36.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ae765c357c53d..2693204523b6d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15806,6 +15806,7 @@ with pkgs; "9" = "9.5.0"; "8" = "8.5.0"; "7" = "7.5.0"; + "6" = "6.5.0"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From 8a4148a538e59935a172bed626552d2743d2d45b Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 01:05:25 -0700 Subject: [PATCH 13/21] gcc: if atLeast 4.9, use deduplicated version --- .../development/compilers/gcc/4.9/default.nix | 352 ------------------ pkgs/development/compilers/gcc/default.nix | 105 ++++-- .../gcc/{ => patches}/4.9/libsanitizer.patch | 0 .../4.9/parallel-strsignal.patch | 0 pkgs/top-level/all-packages.nix | 2 + 5 files changed, 77 insertions(+), 382 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/4.9/default.nix rename pkgs/development/compilers/gcc/{ => patches}/4.9/libsanitizer.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/4.9/parallel-strsignal.patch (100%) diff --git a/pkgs/development/compilers/gcc/4.9/default.nix b/pkgs/development/compilers/gcc/4.9/default.nix deleted file mode 100644 index fadc9b72c45fc..0000000000000 --- a/pkgs/development/compilers/gcc/4.9/default.nix +++ /dev/null @@ -1,352 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 5d26da4801fe8..00ddbdb62de76 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -56,17 +56,20 @@ let atLeast6 = lib.versionAtLeast version "6"; 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' -# only gcc>=6 is currently supported -assert atLeast6; +# only gcc>=4.9 is currently supported +assert lib.versionAtLeast version "4.9"; # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; # The go frontend is written in c++ assert langGo -> langCC; -assert (!atLeast7 || atLeast9) -> (langAda -> gnat-bootstrap != null); +assert (atLeast6 && (!atLeast7 || atLeast9)) -> (langAda -> gnat-bootstrap != null); # TODO: fixup D bootstapping, probably by using gdc11 (and maybe other changes). # error: GDC is required to build d @@ -91,9 +94,19 @@ let majorVersion = lib.versions.major version; patches = optionals (!atLeast7) [ ./9/fix-struct-redefinition-on-glibc-2.36.patch - ] ++ optionals (!atLeast7 && !stdenv.targetPlatform.isRedox) [ + ] ++ optionals ((!atLeast7 && !stdenv.targetPlatform.isRedox) || !atLeast6) [ ./use-source-date-epoch.patch + ] ++ optionals (atLeast6 && !atLeast7 && !stdenv.targetPlatform.isRedox) [ ./6/0001-Fix-build-for-glibc-2.31.patch + ] ++ optionals (!atLeast6) [ + ./parallel-bconfig.patch + (./. + "/${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 (atLeast7 && !atLeast8) [ # https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00633.html (./. + "/${majorVersion}/riscv-pthread-reentrant.patch") @@ -105,15 +118,15 @@ let majorVersion = lib.versions.major version; ] ++ optionals (atLeast7 && !atLeast8) [ (./. + "/${majorVersion}/0001-Fix-build-for-glibc-2.31.patch") ] ++ optional (majorVersion == "9") ./9/fix-struct-redefinition-on-glibc-2.36.patch - ++ optional (!atLeast12) ./fix-bug-80431.patch + ++ optional (atLeast6 && !atLeast12) ./fix-bug-80431.patch ++ optional (atLeast7 && !atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch ++ optional (atLeast7 && !atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch - ++ optional (!atLeast7 && langAda) ./gnat-cflags.patch - ++ optional (!atLeast7 && langAda) ./6/gnat-glibc234.patch + ++ optional (atLeast6 && !atLeast7 && langAda) ./gnat-cflags.patch + ++ optional (atLeast6 && !atLeast7 && langAda) ./6/gnat-glibc234.patch ++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch ++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch ++ optionals (langAda || atLeast12) [ @@ -147,15 +160,19 @@ let majorVersion = lib.versions.major version; sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs"; }) ++ optional langFortran ../gfortran-driving.patch - + ++ optionals (!atLeast6) [ + # 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 (!atLeast8 && targetPlatform.libc == "musl" && targetPlatform.isx86_32) (fetchpatch { + ++ optional (atLeast6 && !atLeast8 && 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 (atLeast7 && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch - ++ optional (!atLeast7 && langGo) ./gogcc-workaround-glibc-2.36.patch + ++ optional (atLeast6 && atLeast7 && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch + ++ optional (atLeast6 && !atLeast7 && 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 (atLeast11 && !atLeast12 && stdenv.isDarwin) [ (fetchpatch { @@ -213,10 +230,35 @@ let majorVersion = lib.versions.major version; ++ optional (atLeast12 && stdenv.isDarwin && langAda) ./gnat-darwin-dylib-install-name.patch # Obtain latest patch with ../update-mcfgthread-patches.sh - ++ optional (!atLeast13 && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") + ++ optional (atLeast6 && !atLeast13 && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") ./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 (!atLeast6) (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 (!atLeast9) ./libsanitizer-no-cyclades-9.patch + ++ optional (!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 (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] @@ -349,12 +391,12 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ pname = "${crossNameAddon}${name}"; inherit version; - src = if !atLeast7 && stdenv.targetPlatform.isVc4 then fetchFromGitHub { + src = if majorVersion == "6" && stdenv.targetPlatform.isVc4 then fetchFromGitHub { owner = "itszor"; repo = "gcc-vc4"; rev = "e90ff43f9671c760cf0d1dd62f569a0fb9bf8918"; sha256 = "0gxf66hwqk26h8f853sybphqa5ca0cva2kmrw5jsiv6139g0qnp8"; - } else if !atLeast7 && stdenv.targetPlatform.isRedox then fetchFromGitHub { + } else if majorVersion == "6" && stdenv.targetPlatform.isRedox then fetchFromGitHub { owner = "redox-os"; repo = "gcc"; rev = "f360ac095028d286fc6dde4d02daed48f59813fa"; # `redox` branch @@ -362,7 +404,9 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ } else (fetchurl { url = if atLeast7 then "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz" - else "mirror://gnu/gcc/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 majorVersion == "11" then "hash" else "sha256"} = { "13.1.0" = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; @@ -372,6 +416,8 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "8.5.0" = "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"; "7.5.0" = "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq"; "6.5.0" = "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby"; + "4.9.4" = "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc"; + "4.8.5" = "08yggr18v373a1ihj0rg2vd6psnic42b518xcgp3r9k81xz1xyr2"; }."${version}"; }); @@ -380,7 +426,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ outputs = if atLeast7 then [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib" - else if langJava || langGo || langJit then ["out" "man" "info"] + else if langJava || langGo || (if atLeast6 then langJit else targetPlatform.isDarwin) then ["out" "man" "info"] else [ "out" "lib" "man" "info" ]; setOutputFlags = false; @@ -399,7 +445,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ '') # This should kill all the stdinc frameworks that gcc and friends like to # insert into default search paths. - + lib.optionalString hostPlatform.isDarwin '' + + lib.optionalString (atLeast6 && hostPlatform.isDarwin) '' substituteInPlace gcc/config/darwin-c.c${lib.optionalString atLeast12 "c"} \ --replace 'if (stdinc)' 'if (0)' @@ -417,19 +463,19 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ 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..." + '' 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 _DYNAMIC_LINKER "$header" || continue + 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' \ - -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' + -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' '' ) )) @@ -447,9 +493,6 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ inherit (callFile ./common/dependencies.nix { }) depsBuildBuild nativeBuildInputs depsBuildTarget buildInputs depsTargetTarget; - NIX_LDFLAGS = lib.optionalString hostPlatform.isSunOS "-lm"; - - preConfigure = (callFile ./common/pre-configure.nix { }) + lib.optionalString atLeast10 '' ln -sf ${libxcrypt}/include/crypt.h libsanitizer/sanitizer_common/crypt.h ''; @@ -547,11 +590,13 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ 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 (!atLeast7 && langJava && !stdenv.hostPlatform.isDarwin) { +} // optionalAttrs (!atLeast7 && langJava && (!atLeast6 || !stdenv.hostPlatform.isDarwin)) { postFixup = '' target="$(echo "$out/libexec/gcc"/*/*/ecj*)" patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target" diff --git a/pkgs/development/compilers/gcc/4.9/libsanitizer.patch b/pkgs/development/compilers/gcc/patches/4.9/libsanitizer.patch similarity index 100% rename from pkgs/development/compilers/gcc/4.9/libsanitizer.patch rename to pkgs/development/compilers/gcc/patches/4.9/libsanitizer.patch diff --git a/pkgs/development/compilers/gcc/4.9/parallel-strsignal.patch b/pkgs/development/compilers/gcc/patches/4.9/parallel-strsignal.patch similarity index 100% rename from pkgs/development/compilers/gcc/4.9/parallel-strsignal.patch rename to pkgs/development/compilers/gcc/patches/4.9/parallel-strsignal.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2693204523b6d..2a5d37d4858f6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15807,6 +15807,8 @@ with pkgs; "8" = "8.5.0"; "7" = "7.5.0"; "6" = "6.5.0"; + "4.9"= "4.9.4"; + #"4.8"= "4.8.5"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From da87387073d524816aee9667344dbec5cfb66c6f Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 01:15:26 -0700 Subject: [PATCH 14/21] gcc: if atLeast 4.8, use deduplicated version --- .../development/compilers/gcc/4.8/default.nix | 325 ------------------ pkgs/development/compilers/gcc/default.nix | 47 ++- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 34 insertions(+), 340 deletions(-) delete mode 100644 pkgs/development/compilers/gcc/4.8/default.nix diff --git a/pkgs/development/compilers/gcc/4.8/default.nix b/pkgs/development/compilers/gcc/4.8/default.nix deleted file mode 100644 index acc8ba41a00b2..0000000000000 --- a/pkgs/development/compilers/gcc/4.8/default.nix +++ /dev/null @@ -1,325 +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 ((callFile ../common/builder.nix {}) ({ - pname = "${crossNameAddon}${name}"; - inherit version; - - 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/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 00ddbdb62de76..c7a7ade0a9e24 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -54,6 +54,7 @@ let atLeast8 = lib.versionAtLeast version "8"; atLeast7 = lib.versionAtLeast version "7"; atLeast6 = lib.versionAtLeast version "6"; + atLeast49 = lib.versionAtLeast version "4.9"; in # We enable the isl cloog backend. @@ -61,9 +62,6 @@ assert !atLeast6 -> (cloog != null -> isl != null); assert langJava -> !atLeast7 && zip != null && unzip != null && zlib != null && boehmgc != null && perl != null; # for `--enable-java-home' -# only gcc>=4.9 is currently supported -assert lib.versionAtLeast version "4.9"; - # Make sure we get GNU sed. assert stdenv.buildPlatform.isDarwin -> gnused != null; @@ -92,14 +90,15 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; patches = - optionals (!atLeast7) [ + optionals (atLeast49 && !atLeast7) [ ./9/fix-struct-redefinition-on-glibc-2.36.patch - ] ++ optionals ((!atLeast7 && !stdenv.targetPlatform.isRedox) || !atLeast6) [ + ] ++ optionals (atLeast49 && ((!atLeast7 && !stdenv.targetPlatform.isRedox) || !atLeast6)) [ ./use-source-date-epoch.patch ] ++ optionals (atLeast6 && !atLeast7 && !stdenv.targetPlatform.isRedox) [ ./6/0001-Fix-build-for-glibc-2.31.patch ] ++ optionals (!atLeast6) [ ./parallel-bconfig.patch + ] ++ optionals (atLeast49 && !atLeast6) [ (./. + "/${lib.versions.major version}.${lib.versions.minor version}/parallel-strsignal.patch") (./. + "/${lib.versions.major version}.${lib.versions.minor version}/libsanitizer.patch") (fetchpatch { @@ -160,7 +159,8 @@ let majorVersion = lib.versions.major version; sha256 = "0mrvxsdwip2p3l17dscpc1x8vhdsciqw1z5q9i6p5g9yg1cqnmgs"; }) ++ optional langFortran ../gfortran-driving.patch - ++ optionals (!atLeast6) [ + ++ optional (!atLeast49 && hostPlatform.isDarwin) ../gfortran-darwin-NXConstStr.patch + ++ optionals (atLeast49 && !atLeast6) [ # glibc-2.26 ./struct-ucontext.patch ./struct-sigaltstack-4.9.patch @@ -234,7 +234,7 @@ let majorVersion = lib.versions.major version; ./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 (!atLeast6) (builtins.map ({commit, sha256}: fetchpatch {url = "https://github.com/hjl-tools/gcc/commit/${commit}.patch"; inherit sha256;}) + ++ optionals (atLeast49 && !atLeast6) (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"; } @@ -249,8 +249,8 @@ let majorVersion = lib.versions.major version; { commit = "1e961ed49b18e176c7457f53df2433421387c23b"; sha256 = "04dnqqs4qsvz4g8cq6db5id41kzys7hzhcaycwmc9rpqygs2ajwz"; } { commit = "e137c72d099f9b3b47f4cc718aa11eab14df1a9c"; sha256 = "1ms0dmz74yf6kwgjfs4d2fhj8y6mcp2n184r3jk44wx2xc24vgb2"; }]) - ++ optional (!atLeast9) ./libsanitizer-no-cyclades-9.patch - ++ optional (!atLeast6) [ + ++ optional (atLeast49 && !atLeast9) ./libsanitizer-no-cyclades-9.patch + ++ optional (atLeast49 && !atLeast6) [ # gcc-11 compatibility (fetchpatch { name = "gcc4-char-reload.patch"; @@ -266,7 +266,26 @@ let majorVersion = lib.versions.major version; ++ optional (majorVersion == "10" && 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 (!atLeast49) [ + (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="; + }) + ]; /* Cross-gcc settings (build == host != target) */ crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; @@ -426,7 +445,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ outputs = if atLeast7 then [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib" - else if langJava || langGo || (if atLeast6 then langJit else targetPlatform.isDarwin) then ["out" "man" "info"] + else if atLeast49 && (langJava || langGo || (if atLeast6 then langJit else targetPlatform.isDarwin)) then ["out" "man" "info"] else [ "out" "lib" "man" "info" ]; setOutputFlags = false; @@ -568,7 +587,7 @@ ${""} done inherit langC langCC langObjC langObjCpp langAda langFortran langGo langD version; isGNU = true; } // lib.optionalAttrs (!atLeast12) { - hardeningUnsupportedFlags = [ "fortify3" ]; + hardeningUnsupportedFlags = lib.optionals (!atLeast49) [ "stackprotector" ] ++ [ "fortify3" ]; }; enableParallelBuilding = true; @@ -584,7 +603,7 @@ ${""} done maintainers ; } // lib.optionalAttrs (!atLeast11) { - badPlatforms = [ "aarch64-darwin" ]; + badPlatforms = if atLeast49 then [ "aarch64-darwin" ] else lib.platforms.darwin; }; } // optionalAttrs (atLeast7 && !atLeast8) { env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument"; @@ -596,7 +615,7 @@ ${""} done doCheck = false; # requires a lot of tools, causes a dependency cycle for stdenv } // optionalAttrs (enableMultilib) { dontMoveLib64 = true; -} // optionalAttrs (!atLeast7 && langJava && (!atLeast6 || !stdenv.hostPlatform.isDarwin)) { +} // optionalAttrs (atLeast49 && !atLeast7 && langJava && (!atLeast6 || !stdenv.hostPlatform.isDarwin)) { postFixup = '' target="$(echo "$out/libexec/gcc"/*/*/ecj*)" patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2a5d37d4858f6..8fa72ea5ef2d3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15808,7 +15808,7 @@ with pkgs; "7" = "7.5.0"; "6" = "6.5.0"; "4.9"= "4.9.4"; - #"4.8"= "4.8.5"; + "4.8"= "4.8.5"; }; deduplicated = deduplicatedVersions ? "${version}"; path = if deduplicated From 7367bb691df526292d0cd37bdba25319c4ad982b Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 01:21:54 -0700 Subject: [PATCH 15/21] gcc: move patches attribute into patches/ subdirectory --- pkgs/development/compilers/gcc/default.nix | 198 +-------------- .../ada-cctools-as-detection-configure.patch | 0 .../compilers/gcc/patches/default.nix | 235 ++++++++++++++++++ .../gcc/{ => patches}/fix-bug-80431.patch | 0 .../gcc-12-gfortran-driving.patch | 0 .../{ => patches}/gcc-12-no-sys-dirs.patch | 0 .../gfortran-darwin-NXConstStr.patch | 0 .../gcc/{ => patches}/gfortran-driving.patch | 0 .../gcc/{ => patches}/gnat-cflags-11.patch | 0 .../gcc/{ => patches}/gnat-cflags.patch | 0 .../gnat-darwin-dylib-install-name.patch | 0 .../libgomp-dont-force-initial-exec.patch | 0 .../gcc/{ => patches}/libphobos.patch | 0 .../libsanitizer-no-cyclades-9.patch | 0 .../libsanitizer-no-cyclades.patch | 0 .../libstdc++-netbsd-ctypes.patch | 0 .../gcc/{ => patches}/libstdc++-target.patch | 0 .../no-sys-dirs-riscv-gcc9.patch | 0 .../gcc/{ => patches}/no-sys-dirs-riscv.patch | 0 .../gcc/{ => patches}/no-sys-dirs.patch | 0 .../gcc/{ => patches}/parallel-bconfig.patch | 0 .../gcc/{ => patches}/ppc-musl.patch | 0 .../res_state-not-declared.patch | 0 .../{ => patches}/sigsegv-not-declared.patch | 0 .../struct-sigaltstack-4.9.patch | 0 .../{ => patches}/struct-sigaltstack.patch | 0 .../{ => patches}/struct-ucontext-4.5.patch | 0 .../{ => patches}/struct-ucontext-4.8.patch | 0 .../struct-ucontext-libjava.patch | 0 .../gcc/{ => patches}/struct-ucontext.patch | 0 .../update-mcfgthread-patches.sh | 0 .../{ => patches}/use-source-date-epoch.patch | 0 32 files changed, 236 insertions(+), 197 deletions(-) rename pkgs/development/compilers/gcc/{ => patches}/ada-cctools-as-detection-configure.patch (100%) create mode 100644 pkgs/development/compilers/gcc/patches/default.nix rename pkgs/development/compilers/gcc/{ => patches}/fix-bug-80431.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gcc-12-gfortran-driving.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gcc-12-no-sys-dirs.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gfortran-darwin-NXConstStr.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gfortran-driving.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gnat-cflags-11.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gnat-cflags.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/gnat-darwin-dylib-install-name.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/libgomp-dont-force-initial-exec.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/libphobos.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/libsanitizer-no-cyclades-9.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/libsanitizer-no-cyclades.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/libstdc++-netbsd-ctypes.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/libstdc++-target.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/no-sys-dirs-riscv-gcc9.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/no-sys-dirs-riscv.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/no-sys-dirs.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/parallel-bconfig.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/ppc-musl.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/res_state-not-declared.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/sigsegv-not-declared.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/struct-sigaltstack-4.9.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/struct-sigaltstack.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/struct-ucontext-4.5.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/struct-ucontext-4.8.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/struct-ucontext-libjava.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/struct-ucontext.patch (100%) rename pkgs/development/compilers/gcc/{ => patches}/update-mcfgthread-patches.sh (100%) rename pkgs/development/compilers/gcc/{ => patches}/use-source-date-epoch.patch (100%) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index c7a7ade0a9e24..1c2bf9d46b912 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -89,203 +89,7 @@ let majorVersion = lib.versions.major version; inherit (stdenv) buildPlatform hostPlatform targetPlatform; - patches = - optionals (atLeast49 && !atLeast7) [ - ./9/fix-struct-redefinition-on-glibc-2.36.patch - ] ++ optionals (atLeast49 && ((!atLeast7 && !stdenv.targetPlatform.isRedox) || !atLeast6)) [ - ./use-source-date-epoch.patch - ] ++ optionals (atLeast6 && !atLeast7 && !stdenv.targetPlatform.isRedox) [ - ./6/0001-Fix-build-for-glibc-2.31.patch - ] ++ optionals (!atLeast6) [ - ./parallel-bconfig.patch - ] ++ optionals (atLeast49 && !atLeast6) [ - (./. + "/${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 (atLeast7 && !atLeast8) [ - # 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") - ] ++ optionals (atLeast7 && !atLeast8) [ - (./. + "/${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 (atLeast7 && !atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch - ++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch - ++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch - ++ optional (atLeast7 && !atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch - ++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch - ++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch - ++ optional (atLeast6 && !atLeast7 && langAda) ./gnat-cflags.patch - ++ optional (atLeast6 && !atLeast7 && langAda) ./6/gnat-glibc234.patch - ++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch - ++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch - ++ optionals (langAda || atLeast12) [ - ./gnat-cflags-11.patch - ] ++ optionals (langAda && atLeast9 && !atLeast11) [ - ./gnat-cflags.patch - ] ++ optionals atLeast12 [ - ./gcc-12-gfortran-driving.patch - ./ppc-musl.patch - ] ++ optionals (majorVersion == "12") [ - # 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 (atLeast7 && !atLeast8 && 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 (!atLeast49 && hostPlatform.isDarwin) ../gfortran-darwin-NXConstStr.patch - ++ optionals (atLeast49 && !atLeast6) [ - # 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 (atLeast6 && !atLeast8 && 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 (atLeast6 && atLeast7 && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch - ++ optional (atLeast6 && !atLeast7 && 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 (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 - 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 (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) [ - (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") - ./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 (atLeast49 && !atLeast6) (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 (atLeast49 && !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 (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] - - ++ optional (majorVersion == "10" && 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 (!atLeast49) [ - (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="; - }) - ]; + patches = callFile ./patches {}; /* Cross-gcc settings (build == host != target) */ crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; diff --git a/pkgs/development/compilers/gcc/ada-cctools-as-detection-configure.patch b/pkgs/development/compilers/gcc/patches/ada-cctools-as-detection-configure.patch similarity index 100% rename from pkgs/development/compilers/gcc/ada-cctools-as-detection-configure.patch rename to pkgs/development/compilers/gcc/patches/ada-cctools-as-detection-configure.patch diff --git a/pkgs/development/compilers/gcc/patches/default.nix b/pkgs/development/compilers/gcc/patches/default.nix new file mode 100644 index 0000000000000..d46046ed5713e --- /dev/null +++ b/pkgs/development/compilers/gcc/patches/default.nix @@ -0,0 +1,235 @@ +{ 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"; + inherit (lib) optionals optional; +in + +optionals (atLeast49 && !atLeast7) [ + ./9/fix-struct-redefinition-on-glibc-2.36.patch +] ++ optionals (atLeast49 && ((!atLeast7 && !stdenv.targetPlatform.isRedox) || !atLeast6)) [ + ./use-source-date-epoch.patch +] ++ optionals (atLeast6 && !atLeast7 && !stdenv.targetPlatform.isRedox) [ + ./6/0001-Fix-build-for-glibc-2.31.patch +] ++ optionals (!atLeast6) [ + ./parallel-bconfig.patch +] ++ optionals (atLeast49 && !atLeast6) [ + (./. + "/${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 (atLeast7 && !atLeast8) [ + # 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") +] ++ optionals (atLeast7 && !atLeast8) [ + (./. + "/${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 (atLeast7 && !atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch +++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch +++ optional (targetPlatform != hostPlatform) ./libstdc++-target.patch +++ optional (atLeast7 && !atLeast10 && targetPlatform.isNetBSD) ./libstdc++-netbsd-ctypes.patch +++ optional (noSysDirs && atLeast12) ./gcc-12-no-sys-dirs.patch +++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch +++ optional (atLeast6 && !atLeast7 && langAda) ./gnat-cflags.patch +++ optional (atLeast6 && !atLeast7 && langAda) ./6/gnat-glibc234.patch +++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch +++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.patch +++ optionals (langAda || atLeast12) [ + ./gnat-cflags-11.patch +] ++ optionals (langAda && atLeast9 && !atLeast11) [ + ./gnat-cflags.patch +] ++ optionals atLeast12 [ + ./gcc-12-gfortran-driving.patch + ./ppc-musl.patch +] ++ optionals (majorVersion == "12") [ + # 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 (atLeast7 && !atLeast8 && 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 (!atLeast49 && hostPlatform.isDarwin) ../gfortran-darwin-NXConstStr.patch +++ optionals (atLeast49 && !atLeast6) [ + # 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 (atLeast6 && !atLeast8 && 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 (atLeast6 && atLeast7 && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch +++ optional (atLeast6 && !atLeast7 && 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 (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 + 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 (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) [ + (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") + ./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 (atLeast49 && !atLeast6) (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 (atLeast49 && !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 (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] + +++ optional (majorVersion == "10" && 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 (!atLeast49) [ + (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/pkgs/development/compilers/gcc/fix-bug-80431.patch b/pkgs/development/compilers/gcc/patches/fix-bug-80431.patch similarity index 100% rename from pkgs/development/compilers/gcc/fix-bug-80431.patch rename to pkgs/development/compilers/gcc/patches/fix-bug-80431.patch diff --git a/pkgs/development/compilers/gcc/gcc-12-gfortran-driving.patch b/pkgs/development/compilers/gcc/patches/gcc-12-gfortran-driving.patch similarity index 100% rename from pkgs/development/compilers/gcc/gcc-12-gfortran-driving.patch rename to pkgs/development/compilers/gcc/patches/gcc-12-gfortran-driving.patch diff --git a/pkgs/development/compilers/gcc/gcc-12-no-sys-dirs.patch b/pkgs/development/compilers/gcc/patches/gcc-12-no-sys-dirs.patch similarity index 100% rename from pkgs/development/compilers/gcc/gcc-12-no-sys-dirs.patch rename to pkgs/development/compilers/gcc/patches/gcc-12-no-sys-dirs.patch diff --git a/pkgs/development/compilers/gcc/gfortran-darwin-NXConstStr.patch b/pkgs/development/compilers/gcc/patches/gfortran-darwin-NXConstStr.patch similarity index 100% rename from pkgs/development/compilers/gcc/gfortran-darwin-NXConstStr.patch rename to pkgs/development/compilers/gcc/patches/gfortran-darwin-NXConstStr.patch diff --git a/pkgs/development/compilers/gcc/gfortran-driving.patch b/pkgs/development/compilers/gcc/patches/gfortran-driving.patch similarity index 100% rename from pkgs/development/compilers/gcc/gfortran-driving.patch rename to pkgs/development/compilers/gcc/patches/gfortran-driving.patch diff --git a/pkgs/development/compilers/gcc/gnat-cflags-11.patch b/pkgs/development/compilers/gcc/patches/gnat-cflags-11.patch similarity index 100% rename from pkgs/development/compilers/gcc/gnat-cflags-11.patch rename to pkgs/development/compilers/gcc/patches/gnat-cflags-11.patch diff --git a/pkgs/development/compilers/gcc/gnat-cflags.patch b/pkgs/development/compilers/gcc/patches/gnat-cflags.patch similarity index 100% rename from pkgs/development/compilers/gcc/gnat-cflags.patch rename to pkgs/development/compilers/gcc/patches/gnat-cflags.patch diff --git a/pkgs/development/compilers/gcc/gnat-darwin-dylib-install-name.patch b/pkgs/development/compilers/gcc/patches/gnat-darwin-dylib-install-name.patch similarity index 100% rename from pkgs/development/compilers/gcc/gnat-darwin-dylib-install-name.patch rename to pkgs/development/compilers/gcc/patches/gnat-darwin-dylib-install-name.patch diff --git a/pkgs/development/compilers/gcc/libgomp-dont-force-initial-exec.patch b/pkgs/development/compilers/gcc/patches/libgomp-dont-force-initial-exec.patch similarity index 100% rename from pkgs/development/compilers/gcc/libgomp-dont-force-initial-exec.patch rename to pkgs/development/compilers/gcc/patches/libgomp-dont-force-initial-exec.patch diff --git a/pkgs/development/compilers/gcc/libphobos.patch b/pkgs/development/compilers/gcc/patches/libphobos.patch similarity index 100% rename from pkgs/development/compilers/gcc/libphobos.patch rename to pkgs/development/compilers/gcc/patches/libphobos.patch diff --git a/pkgs/development/compilers/gcc/libsanitizer-no-cyclades-9.patch b/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades-9.patch similarity index 100% rename from pkgs/development/compilers/gcc/libsanitizer-no-cyclades-9.patch rename to pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades-9.patch diff --git a/pkgs/development/compilers/gcc/libsanitizer-no-cyclades.patch b/pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades.patch similarity index 100% rename from pkgs/development/compilers/gcc/libsanitizer-no-cyclades.patch rename to pkgs/development/compilers/gcc/patches/libsanitizer-no-cyclades.patch diff --git a/pkgs/development/compilers/gcc/libstdc++-netbsd-ctypes.patch b/pkgs/development/compilers/gcc/patches/libstdc++-netbsd-ctypes.patch similarity index 100% rename from pkgs/development/compilers/gcc/libstdc++-netbsd-ctypes.patch rename to pkgs/development/compilers/gcc/patches/libstdc++-netbsd-ctypes.patch diff --git a/pkgs/development/compilers/gcc/libstdc++-target.patch b/pkgs/development/compilers/gcc/patches/libstdc++-target.patch similarity index 100% rename from pkgs/development/compilers/gcc/libstdc++-target.patch rename to pkgs/development/compilers/gcc/patches/libstdc++-target.patch diff --git a/pkgs/development/compilers/gcc/no-sys-dirs-riscv-gcc9.patch b/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv-gcc9.patch similarity index 100% rename from pkgs/development/compilers/gcc/no-sys-dirs-riscv-gcc9.patch rename to pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv-gcc9.patch diff --git a/pkgs/development/compilers/gcc/no-sys-dirs-riscv.patch b/pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv.patch similarity index 100% rename from pkgs/development/compilers/gcc/no-sys-dirs-riscv.patch rename to pkgs/development/compilers/gcc/patches/no-sys-dirs-riscv.patch diff --git a/pkgs/development/compilers/gcc/no-sys-dirs.patch b/pkgs/development/compilers/gcc/patches/no-sys-dirs.patch similarity index 100% rename from pkgs/development/compilers/gcc/no-sys-dirs.patch rename to pkgs/development/compilers/gcc/patches/no-sys-dirs.patch diff --git a/pkgs/development/compilers/gcc/parallel-bconfig.patch b/pkgs/development/compilers/gcc/patches/parallel-bconfig.patch similarity index 100% rename from pkgs/development/compilers/gcc/parallel-bconfig.patch rename to pkgs/development/compilers/gcc/patches/parallel-bconfig.patch diff --git a/pkgs/development/compilers/gcc/ppc-musl.patch b/pkgs/development/compilers/gcc/patches/ppc-musl.patch similarity index 100% rename from pkgs/development/compilers/gcc/ppc-musl.patch rename to pkgs/development/compilers/gcc/patches/ppc-musl.patch diff --git a/pkgs/development/compilers/gcc/res_state-not-declared.patch b/pkgs/development/compilers/gcc/patches/res_state-not-declared.patch similarity index 100% rename from pkgs/development/compilers/gcc/res_state-not-declared.patch rename to pkgs/development/compilers/gcc/patches/res_state-not-declared.patch diff --git a/pkgs/development/compilers/gcc/sigsegv-not-declared.patch b/pkgs/development/compilers/gcc/patches/sigsegv-not-declared.patch similarity index 100% rename from pkgs/development/compilers/gcc/sigsegv-not-declared.patch rename to pkgs/development/compilers/gcc/patches/sigsegv-not-declared.patch diff --git a/pkgs/development/compilers/gcc/struct-sigaltstack-4.9.patch b/pkgs/development/compilers/gcc/patches/struct-sigaltstack-4.9.patch similarity index 100% rename from pkgs/development/compilers/gcc/struct-sigaltstack-4.9.patch rename to pkgs/development/compilers/gcc/patches/struct-sigaltstack-4.9.patch diff --git a/pkgs/development/compilers/gcc/struct-sigaltstack.patch b/pkgs/development/compilers/gcc/patches/struct-sigaltstack.patch similarity index 100% rename from pkgs/development/compilers/gcc/struct-sigaltstack.patch rename to pkgs/development/compilers/gcc/patches/struct-sigaltstack.patch diff --git a/pkgs/development/compilers/gcc/struct-ucontext-4.5.patch b/pkgs/development/compilers/gcc/patches/struct-ucontext-4.5.patch similarity index 100% rename from pkgs/development/compilers/gcc/struct-ucontext-4.5.patch rename to pkgs/development/compilers/gcc/patches/struct-ucontext-4.5.patch diff --git a/pkgs/development/compilers/gcc/struct-ucontext-4.8.patch b/pkgs/development/compilers/gcc/patches/struct-ucontext-4.8.patch similarity index 100% rename from pkgs/development/compilers/gcc/struct-ucontext-4.8.patch rename to pkgs/development/compilers/gcc/patches/struct-ucontext-4.8.patch diff --git a/pkgs/development/compilers/gcc/struct-ucontext-libjava.patch b/pkgs/development/compilers/gcc/patches/struct-ucontext-libjava.patch similarity index 100% rename from pkgs/development/compilers/gcc/struct-ucontext-libjava.patch rename to pkgs/development/compilers/gcc/patches/struct-ucontext-libjava.patch diff --git a/pkgs/development/compilers/gcc/struct-ucontext.patch b/pkgs/development/compilers/gcc/patches/struct-ucontext.patch similarity index 100% rename from pkgs/development/compilers/gcc/struct-ucontext.patch rename to pkgs/development/compilers/gcc/patches/struct-ucontext.patch diff --git a/pkgs/development/compilers/gcc/update-mcfgthread-patches.sh b/pkgs/development/compilers/gcc/patches/update-mcfgthread-patches.sh similarity index 100% rename from pkgs/development/compilers/gcc/update-mcfgthread-patches.sh rename to pkgs/development/compilers/gcc/patches/update-mcfgthread-patches.sh diff --git a/pkgs/development/compilers/gcc/use-source-date-epoch.patch b/pkgs/development/compilers/gcc/patches/use-source-date-epoch.patch similarity index 100% rename from pkgs/development/compilers/gcc/use-source-date-epoch.patch rename to pkgs/development/compilers/gcc/patches/use-source-date-epoch.patch From 02198751fa6a44b9c4a74c5d0bbcc0d75918db87 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 02:06:50 -0700 Subject: [PATCH 16/21] gcc: move version-map out of all-packages.nix, into pkgs/ --- pkgs/development/compilers/gcc/default.nix | 18 ++++++++++-- pkgs/top-level/all-packages.nix | 33 ++++++---------------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 1c2bf9d46b912..2aef3007cbf9e 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -31,7 +31,7 @@ , disableGdbPlugin ? !enablePlugin , nukeReferences , callPackage -, version +, majorMinorVersion # only for gcc<=6.x , langJava ? false @@ -46,6 +46,20 @@ }: 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"; @@ -231,7 +245,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ then "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.xz" else "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2"; ${if majorVersion == "11" then "hash" else "sha256"} = { - "13.1.0" = "sha256-YdaE8Kpedqxlha2ImKJCeq3ol57V5/hUkihsTfwT7oY="; + "13.2.0" = "sha256-4nXnZEKmBnNBon8Exca4PYYTFEAEwEE1KIY9xrXHQ9o="; "12.3.0" = "sha256-lJpdT5nnhkIak7Uysi/6tVeN5zITaZdbka7Jet/ajDs="; "11.4.0" = "sha256-Py2yIrAH6KSiPNW6VnJu8I6LHx6yBV7nLBQCzqc6jdk="; "10.5.0" = "sha256-JRCVQ/30bzl8NHtdi3osflaUpaUczkucbh6opxyjB8E="; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8fa72ea5ef2d3..262728e914c6e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15795,40 +15795,25 @@ with pkgs; # This expression will be pushed into pkgs/development/compilers/gcc/common # once the top-level gcc/${version}/default.nix files are deduplicated. inherit - (lib.listToAttrs (map (version: - let atLeast = lib.versionAtLeast version; - attrName = "gcc${lib.replaceStrings ["."] [""] version}"; - deduplicatedVersions = { # map from majorVersion to exact version - "13" = "13.1.0"; - "12" = "12.3.0"; - "11" = "11.4.0"; - "10" = "10.4.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"; - }; - deduplicated = deduplicatedVersions ? "${version}"; - path = if deduplicated - then ../development/compilers/gcc/default.nix - else ../development/compilers/gcc + "/${version}"; - pkg = lowPrio (wrapCC (callPackage path ({ + (lib.listToAttrs (map (majorMinorVersion: + let atLeast = lib.versionAtLeast majorMinorVersion; + attrName = "gcc${lib.replaceStrings ["."] [""] majorMinorVersion}"; + pkg = lowPrio (wrapCC (callPackage ../development/compilers/gcc/default.nix ({ inherit noSysDirs; + inherit majorMinorVersion; reproducibleBuild = true; profiledCompiler = false; libcCross = if stdenv.targetPlatform != stdenv.buildPlatform then libcCross else null; - threadsCross = if stdenv.targetPlatform != stdenv.buildPlatform then threadsCrossFor version else { }; + threadsCross = if stdenv.targetPlatform != stdenv.buildPlatform then threadsCrossFor majorMinorVersion else { }; isl = if stdenv.isDarwin then null else if atLeast "9" then isl_0_20 else if atLeast "7" then isl_0_17 else if atLeast "6" then (if stdenv.targetPlatform.isRedox then isl_0_17 else isl_0_14) else if atLeast "4.9" then isl_0_11 else /* "4.8" */ isl_0_14; - } // lib.optionalAttrs (version == "4.8") { + } // lib.optionalAttrs (majorMinorVersion == "4.8") { texinfo = texinfo5; # doesn't validate since 6.1 -> 6.3 bump - } // lib.optionalAttrs (version == "4.9") { + } // lib.optionalAttrs (majorMinorVersion == "4.9") { # Build fails on Darwin with clang stdenv = if stdenv.isDarwin then gccStdenv else stdenv; } // lib.optionalAttrs (!(atLeast "6")) { @@ -15839,8 +15824,6 @@ with pkgs; } // lib.optionalAttrs (atLeast "6" && !(atLeast "9")) { # gcc 10 is too strict to cross compile gcc <= 8 stdenv = if (stdenv.targetPlatform != stdenv.buildPlatform) && stdenv.cc.isGNU then gcc7Stdenv else stdenv; - } // lib.optionalAttrs deduplicated { - version = deduplicatedVersions."${version}"; }))); in lib.nameValuePair attrName pkg ) [ "4.8" "4.9" "6" "7" "8" "9" "10" "11" "12" "13" ])) From 57e5724306c43715181766233a956d88bd1fa766 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 02:31:07 -0700 Subject: [PATCH 17/21] gcc: update gccFun for deduplicated gcc expressions --- pkgs/top-level/all-packages.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 262728e914c6e..64fffefb47fc3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15667,7 +15667,7 @@ with pkgs; else 12; inherit ({ gcc = pkgs.${"gcc${toString default-gcc-version}"}; - gccFun = callPackage (../development/compilers/gcc + "/${toString default-gcc-version}"); + gccFun = callPackage ../development/compilers/gcc; }) gcc gccFun; gcc-unwrapped = gcc.cc; @@ -15768,6 +15768,7 @@ with pkgs; cc = gccFun { # copy-pasted inherit noSysDirs; + majorMinorVersion = toString default-gcc-version; reproducibleBuild = true; profiledCompiler = false; From 869b6392857a857334d333184cda1f3b1bddab0e Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 17 Aug 2023 01:48:14 -0700 Subject: [PATCH 18/21] gcc: clean up version conditions --- pkgs/development/compilers/gcc/default.nix | 53 +++++----- .../compilers/gcc/patches/default.nix | 96 ++++++++++--------- 2 files changed, 84 insertions(+), 65 deletions(-) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 2aef3007cbf9e..90d49147a63a5 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -69,6 +69,16 @@ let 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. @@ -81,7 +91,7 @@ assert stdenv.buildPlatform.isDarwin -> gnused != null; # The go frontend is written in c++ assert langGo -> langCC; -assert (atLeast6 && (!atLeast7 || atLeast9)) -> (langAda -> gnat-bootstrap != null); +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 @@ -97,8 +107,7 @@ assert reproducibleBuild -> profiledCompiler == false; with lib; with builtins; -let majorVersion = lib.versions.major version; - inherit version; +let inherit version; disableBootstrap = atLeast11 && !stdenv.hostPlatform.isDarwin && (atLeast12 -> !profiledCompiler); inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -228,17 +237,17 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ pname = "${crossNameAddon}${name}"; inherit version; - src = if majorVersion == "6" && stdenv.targetPlatform.isVc4 then fetchFromGitHub { + src = if is6 && stdenv.targetPlatform.isVc4 then fetchFromGitHub { owner = "itszor"; repo = "gcc-vc4"; rev = "e90ff43f9671c760cf0d1dd62f569a0fb9bf8918"; sha256 = "0gxf66hwqk26h8f853sybphqa5ca0cva2kmrw5jsiv6139g0qnp8"; - } else if majorVersion == "6" && stdenv.targetPlatform.isRedox then fetchFromGitHub { + } else if is6 && stdenv.targetPlatform.isRedox then fetchFromGitHub { owner = "redox-os"; repo = "gcc"; rev = "f360ac095028d286fc6dde4d02daed48f59813fa"; # `redox` branch sha256 = "1an96h8l58pppyh3qqv90g8hgcfd9hj7igvh2gigmkxbrx94khfl"; - } else (fetchurl { + } else fetchurl { url = if atLeast7 then "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz" else if atLeast6 @@ -256,7 +265,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ "4.9.4" = "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc"; "4.8.5" = "08yggr18v373a1ihj0rg2vd6psnic42b518xcgp3r9k81xz1xyr2"; }."${version}"; - }); + }; inherit patches; @@ -272,14 +281,14 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ libc_dev = stdenv.cc.libc_dev; hardeningDisable = [ "format" "pie" ] - ++ lib.optionals (atLeast11 && !atLeast12 && langAda) [ "fortify3" ]; + ++ lib.optionals (is11 && langAda) [ "fortify3" ]; - postPatch = (lib.optionalString atLeast7 '' + 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) '' @@ -339,8 +348,8 @@ ${""} done configurePlatforms = [ "build" "host" "target" ]; configureFlags = (callFile ./common/configure-flags.nix { }) - ++ optional (atLeast7 && !atLeast8 && targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419" - ++ optional (atLeast7 && !atLeast8 && targetPlatform.isNetBSD) "--disable-libcilkrts"; + ++ optional (is7 && targetPlatform.isAarch64) "--enable-fix-cortex-a53-843419" + ++ optional (is7 && targetPlatform.isNetBSD) "--disable-libcilkrts"; targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; @@ -405,7 +414,7 @@ ${""} done inherit langC langCC langObjC langObjCpp langAda langFortran langGo langD version; isGNU = true; } // lib.optionalAttrs (!atLeast12) { - hardeningUnsupportedFlags = lib.optionals (!atLeast49) [ "stackprotector" ] ++ [ "fortify3" ]; + hardeningUnsupportedFlags = lib.optionals is48 [ "stackprotector" ] ++ [ "fortify3" ]; }; enableParallelBuilding = true; @@ -421,23 +430,23 @@ ${""} done maintainers ; } // lib.optionalAttrs (!atLeast11) { - badPlatforms = if atLeast49 then [ "aarch64-darwin" ] else lib.platforms.darwin; + badPlatforms = if !is49 then [ "aarch64-darwin" ] else lib.platforms.darwin; }; -} // optionalAttrs (atLeast7 && !atLeast8) { +} // optionalAttrs is7 { env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.cc.isClang && langFortran) "-Wno-unused-command-line-argument"; } // optionalAttrs (!atLeast7) { env.langJava = langJava; -} // optionalAttrs (atLeast6) { +} // 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) { +} // optionalAttrs enableMultilib { dontMoveLib64 = true; -} // optionalAttrs (atLeast49 && !atLeast7 && langJava && (!atLeast6 || !stdenv.hostPlatform.isDarwin)) { - postFixup = '' - target="$(echo "$out/libexec/gcc"/*/*/ecj*)" - patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target" - ''; +} // optionalAttrs (((is49 && !stdenv.hostPlatform.isDarwin) || is6) && langJava) { + postFixup = '' + target="$(echo "$out/libexec/gcc"/*/*/ecj*)" + patchelf --set-rpath "$(patchelf --print-rpath "$target"):$out/lib" "$target" + ''; } )) ([ diff --git a/pkgs/development/compilers/gcc/patches/default.nix b/pkgs/development/compilers/gcc/patches/default.nix index d46046ed5713e..1a9d7be539b24 100644 --- a/pkgs/development/compilers/gcc/patches/default.nix +++ b/pkgs/development/compilers/gcc/patches/default.nix @@ -34,18 +34,28 @@ let 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 (atLeast49 && !atLeast7) [ +optionals (is49 || is6) [ ./9/fix-struct-redefinition-on-glibc-2.36.patch -] ++ optionals (atLeast49 && ((!atLeast7 && !stdenv.targetPlatform.isRedox) || !atLeast6)) [ +] ++ optionals (is49 || (is6 && !stdenv.targetPlatform.isRedox)) [ ./use-source-date-epoch.patch -] ++ optionals (atLeast6 && !atLeast7 && !stdenv.targetPlatform.isRedox) [ +] ++ optionals (is6 && !stdenv.targetPlatform.isRedox) [ ./6/0001-Fix-build-for-glibc-2.31.patch ] ++ optionals (!atLeast6) [ ./parallel-bconfig.patch -] ++ optionals (atLeast49 && !atLeast6) [ +] ++ optionals (is49) [ (./. + "/${lib.versions.major version}.${lib.versions.minor version}/parallel-strsignal.patch") (./. + "/${lib.versions.major version}.${lib.versions.minor version}/libsanitizer.patch") (fetchpatch { @@ -53,7 +63,7 @@ optionals (atLeast49 && !atLeast7) [ 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 (atLeast7 && !atLeast8) [ +] ++ 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 @@ -61,28 +71,27 @@ optionals (atLeast49 && !atLeast7) [ # 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") -] ++ optionals (atLeast7 && !atLeast8) [ (./. + "/${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 (atLeast7 && !atLeast9) ./9/fix-struct-redefinition-on-glibc-2.36.patch -++ optional (atLeast10 && !atLeast11) ./11/fix-struct-redefinition-on-glibc-2.36.patch +++ optional (is7 || is8) ./9/fix-struct-redefinition-on-glibc-2.36.patch +++ optional (is10) ./11/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 && atLeast12) ./gcc-12-no-sys-dirs.patch -++ optional (noSysDirs && !atLeast12) ./no-sys-dirs.patch -++ optional (atLeast6 && !atLeast7 && langAda) ./gnat-cflags.patch -++ optional (atLeast6 && !atLeast7 && langAda) ./6/gnat-glibc234.patch -++ optional (noSysDirs && atLeast10 && (is10 || !atLeast12 -> hostPlatform.isRiscV)) ./no-sys-dirs-riscv.patch -++ optional (noSysDirs && atLeast9 && !atLeast10 && hostPlatform.isRiscV) ./no-sys-dirs-riscv-gcc9.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 && (is10 || (!atLeast12 -> hostPlatform.isRiscV))) ./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 && atLeast9 && !atLeast11) [ +] ++ optionals (langAda && (is9 || is10)) [ ./gnat-cflags.patch ] ++ optionals atLeast12 [ ./gcc-12-gfortran-driving.patch ./ppc-musl.patch -] ++ optionals (majorVersion == "12") [ +] ++ optionals is12 [ # backport ICE fix on ccache code ./12/lambda-ICE-PR109241.patch ] @@ -101,27 +110,27 @@ optionals (atLeast49 && !atLeast7) [ }) ]; }."${majorVersion}" or []) ++ optional (atLeast9 && langD) ./libphobos.patch -++ optional (atLeast7 && !atLeast8 && hostPlatform != buildPlatform) (fetchpatch { # XXX: Refine when this should be applied +++ 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 langFortran ../gfortran-driving.patch -++ optional (!atLeast49 && hostPlatform.isDarwin) ../gfortran-darwin-NXConstStr.patch -++ optionals (atLeast49 && !atLeast6) [ +++ 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 (atLeast6 && !atLeast8 && targetPlatform.libc == "musl" && targetPlatform.isx86_32) (fetchpatch { +++ 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 (atLeast6 && atLeast7 && !atLeast9 && targetPlatform.libc == "musl") ./libgomp-dont-force-initial-exec.patch -++ optional (atLeast6 && !atLeast7 && langGo) ./gogcc-workaround-glibc-2.36.patch +++ 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 (atLeast11 && !atLeast12 && stdenv.isDarwin) [ +++ 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 @@ -130,7 +139,7 @@ optionals (atLeast49 && !atLeast7) [ }) ] # https://github.com/osx-cross/homebrew-avr/issues/280#issuecomment-1272381808 -++ optional (atLeast11 && !atLeast12 && stdenv.isDarwin && targetPlatform.isAvr) ./avr-gcc-11.3-darwin.patch +++ 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) [ @@ -181,23 +190,24 @@ optionals (atLeast49 && !atLeast7) [ ./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 (atLeast49 && !atLeast6) (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"; }]) +++ 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 (atLeast49 && !atLeast6) [ +++ optional (is49 && !atLeast6) [ # gcc-11 compatibility (fetchpatch { name = "gcc4-char-reload.patch"; @@ -208,13 +218,13 @@ optionals (atLeast49 && !atLeast7) [ ] # openjdk build fails without this on -march=opteron; is upstream in gcc12 -++ optionals (majorVersion == "11") [ ./11/gcc-issue-103910.patch ] +++ optionals (is11) [ ./11/gcc-issue-103910.patch ] -++ optional (majorVersion == "10" && buildPlatform.system == "aarch64-darwin" && targetPlatform != buildPlatform) (fetchpatch { +++ 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 (!atLeast49) [ +++ 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"; From fa0fc88e0c2434cb519bbf1ad637eadd08ab3218 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Sun, 20 Aug 2023 22:43:43 -0700 Subject: [PATCH 19/21] gcc: match weird whack-a-mole per-version hash algorithm --- pkgs/development/compilers/gcc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc/default.nix b/pkgs/development/compilers/gcc/default.nix index 90d49147a63a5..f467aa32f7d1d 100644 --- a/pkgs/development/compilers/gcc/default.nix +++ b/pkgs/development/compilers/gcc/default.nix @@ -253,7 +253,7 @@ lib.pipe ((callFile ./common/builder.nix {}) ({ else if atLeast6 then "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.xz" else "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2"; - ${if majorVersion == "11" then "hash" else "sha256"} = { + ${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="; From 39b20be0570873b60bdc3520fb5ec2bcdb359062 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Sun, 20 Aug 2023 22:48:21 -0700 Subject: [PATCH 20/21] gcc: resolve merge conflict from staging --- pkgs/development/compilers/gcc/patches/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/gcc/patches/default.nix b/pkgs/development/compilers/gcc/patches/default.nix index 1a9d7be539b24..76c6e876a0e89 100644 --- a/pkgs/development/compilers/gcc/patches/default.nix +++ b/pkgs/development/compilers/gcc/patches/default.nix @@ -75,14 +75,14 @@ optionals (is49 || is6) [ ] ++ 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 (is10) ./11/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 && (is10 || (!atLeast12 -> hostPlatform.isRiscV))) ./no-sys-dirs-riscv.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 From b955304456e58c3be8df824d7ad2ffc997411945 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Sun, 20 Aug 2023 23:26:36 -0700 Subject: [PATCH 21/21] gcc: patches: fix patch name --- pkgs/development/compilers/gcc/patches/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc/patches/default.nix b/pkgs/development/compilers/gcc/patches/default.nix index 76c6e876a0e89..79dbad30a0a9c 100644 --- a/pkgs/development/compilers/gcc/patches/default.nix +++ b/pkgs/development/compilers/gcc/patches/default.nix @@ -187,7 +187,7 @@ optionals (is49 || is6) [ # Obtain latest patch with ../update-mcfgthread-patches.sh ++ optional (atLeast6 && !atLeast13 && !withoutTargetLibc && targetPlatform.isMinGW && threadsCross.model == "mcf") - ./Added-mcf-thread-model-support-from-mcfgthread.patch + (./. + "/${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