diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 36a98a180b3..10085b91a13 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -432,14 +432,16 @@ stdenv.mkDerivation { # Always add -march based on cpu in triple. Sometimes there is a # discrepency (x86_64 vs. x86-64), so we provide an "arch" arg in # that case. - + optionalString ((targetPlatform ? gcc.arch) && + # TODO: aarch64-darwin has mcpu incompatible with gcc + + optionalString ((targetPlatform ? gcc.arch) && (isClang || !(stdenv.isDarwin && stdenv.isAarch64)) && isGccArchSupported targetPlatform.gcc.arch) '' echo "-march=${targetPlatform.gcc.arch}" >> $out/nix-support/cc-cflags-before '' # -mcpu is not very useful. You should use mtune and march # instead. It’s provided here for backwards compatibility. - + optionalString (targetPlatform ? gcc.cpu) '' + # TODO: aarch64-darwin has mcpu incompatible with gcc + + optionalString ((targetPlatform ? gcc.cpu) && (isClang || !(stdenv.isDarwin && stdenv.isAarch64))) '' echo "-mcpu=${targetPlatform.gcc.cpu}" >> $out/nix-support/cc-cflags-before '' diff --git a/pkgs/development/compilers/gcc/11/default.nix b/pkgs/development/compilers/gcc/11/default.nix index be058f357cd..8dcebfec8ae 100644 --- a/pkgs/development/compilers/gcc/11/default.nix +++ b/pkgs/development/compilers/gcc/11/default.nix @@ -72,6 +72,11 @@ let majorVersion = "11"; ++ optional langFortran ../gfortran-driving.patch ++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.patch + ++ optional (stdenv.isDarwin && stdenv.isAarch64) (fetchpatch { + url = "https://github.com/fxcoudert/gcc/compare/releases/gcc-11.1.0...gcc-11.1.0-arm-20210504.diff"; + sha256 = "sha256-JqCGJAfbOxSmkNyq49aFHteK/RFsCSLQrL9mzUCnaD0="; + }) + # Obtain latest patch with ../update-mcfgthread-patches.sh ++ optional (!crossStageStatic && targetPlatform.isMinGW) ./Added-mcf-thread-model-support-from-mcfgthread.patch; diff --git a/pkgs/development/compilers/gcc/common/configure-flags.nix b/pkgs/development/compilers/gcc/common/configure-flags.nix index 42deb970dfe..997771c2abf 100644 --- a/pkgs/development/compilers/gcc/common/configure-flags.nix +++ b/pkgs/development/compilers/gcc/common/configure-flags.nix @@ -185,7 +185,8 @@ let ++ lib.optional javaAwtGtk "--enable-java-awt=gtk" ++ lib.optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}" - ++ (import ../common/platform-flags.nix { inherit (stdenv) targetPlatform; inherit lib; }) + # TODO: aarch64-darwin has clang stdenv and its arch and cpu flag values are incompatible with gcc + ++ lib.optional (!(stdenv.isDarwin && stdenv.isAarch64)) (import ../common/platform-flags.nix { inherit (stdenv) targetPlatform; inherit lib; }) ++ lib.optionals (targetPlatform != hostPlatform) crossConfigureFlags ++ lib.optional (targetPlatform != hostPlatform) "--disable-bootstrap" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 760f38b824e..f217c2ac632 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10344,7 +10344,9 @@ in else ../development/compilers/gcc/10); gcc = if (with stdenv.targetPlatform; isVc4 || libc == "relibc") then gcc6 else - if stdenv.targetPlatform.isAarch64 then gcc9 else gcc10; + # aarch64-darwin doesn't support earlier gcc + if (stdenv.targetPlatform.isAarch64 && stdenv.isDarwin) then gcc11 + else if stdenv.targetPlatform.isAarch64 then gcc9 else gcc10; gcc-unwrapped = gcc.cc; wrapNonDeterministicGcc = stdenv: ccWrapper: @@ -10572,7 +10574,8 @@ in gcc_latest = gcc11; - gfortran = gfortran9; + # aarch64-darwin doesn't support earlier gcc + gfortran = if (stdenv.isDarwin && stdenv.isAarch64) then gfortran11 else gfortran9; gfortran48 = wrapCC (gcc48.cc.override { name = "gfortran"; @@ -10660,7 +10663,8 @@ in inherit (gnome2) libart_lgpl; }); - gnat = gnat9; + # aarch64-darwin doesn't support earlier gcc + gnat = if (stdenv.isDarwin && stdenv.isAarch64) then gnat11 else gnat9; gnat6 = wrapCC (gcc6.cc.override { name = "gnat";