gcc: native aarch64-darwin support
This commit is contained in:
parent
d67b19f223
commit
4aa95e3312
|
@ -432,14 +432,16 @@ stdenv.mkDerivation {
|
||||||
# Always add -march based on cpu in triple. Sometimes there is a
|
# 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
|
# discrepency (x86_64 vs. x86-64), so we provide an "arch" arg in
|
||||||
# that case.
|
# 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) ''
|
isGccArchSupported targetPlatform.gcc.arch) ''
|
||||||
echo "-march=${targetPlatform.gcc.arch}" >> $out/nix-support/cc-cflags-before
|
echo "-march=${targetPlatform.gcc.arch}" >> $out/nix-support/cc-cflags-before
|
||||||
''
|
''
|
||||||
|
|
||||||
# -mcpu is not very useful. You should use mtune and march
|
# -mcpu is not very useful. You should use mtune and march
|
||||||
# instead. It’s provided here for backwards compatibility.
|
# 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
|
echo "-mcpu=${targetPlatform.gcc.cpu}" >> $out/nix-support/cc-cflags-before
|
||||||
''
|
''
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,11 @@ let majorVersion = "11";
|
||||||
++ optional langFortran ../gfortran-driving.patch
|
++ optional langFortran ../gfortran-driving.patch
|
||||||
++ optional (targetPlatform.libc == "musl" && targetPlatform.isPower) ../ppc-musl.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
|
# Obtain latest patch with ../update-mcfgthread-patches.sh
|
||||||
++ optional (!crossStageStatic && targetPlatform.isMinGW) ./Added-mcf-thread-model-support-from-mcfgthread.patch;
|
++ optional (!crossStageStatic && targetPlatform.isMinGW) ./Added-mcf-thread-model-support-from-mcfgthread.patch;
|
||||||
|
|
||||||
|
@ -103,9 +108,15 @@ stdenv.mkDerivation ({
|
||||||
|
|
||||||
hardeningDisable = [ "format" "pie" ];
|
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
|
# This should kill all the stdinc frameworks that gcc and friends like to
|
||||||
# insert into default search paths.
|
# insert into default search paths.
|
||||||
prePatch = lib.optionalString hostPlatform.isDarwin ''
|
+ lib.optionalString hostPlatform.isDarwin ''
|
||||||
substituteInPlace gcc/config/darwin-c.c \
|
substituteInPlace gcc/config/darwin-c.c \
|
||||||
--replace 'if (stdinc)' 'if (0)'
|
--replace 'if (stdinc)' 'if (0)'
|
||||||
|
|
||||||
|
@ -114,14 +125,8 @@ stdenv.mkDerivation ({
|
||||||
|
|
||||||
substituteInPlace libgfortran/configure \
|
substituteInPlace libgfortran/configure \
|
||||||
--replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname"
|
--replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname"
|
||||||
'';
|
''
|
||||||
|
+ (
|
||||||
postPatch = ''
|
|
||||||
configureScripts=$(find . -name configure)
|
|
||||||
for configureScript in $configureScripts; do
|
|
||||||
patchShebangs $configureScript
|
|
||||||
done
|
|
||||||
'' + (
|
|
||||||
if targetPlatform != hostPlatform || stdenv.cc.libc != null then
|
if targetPlatform != hostPlatform || stdenv.cc.libc != null then
|
||||||
# On NixOS, use the right path to the dynamic linker instead of
|
# On NixOS, use the right path to the dynamic linker instead of
|
||||||
# `/lib/ld*.so'.
|
# `/lib/ld*.so'.
|
||||||
|
|
|
@ -170,7 +170,8 @@ let
|
||||||
++ lib.optional javaAwtGtk "--enable-java-awt=gtk"
|
++ lib.optional javaAwtGtk "--enable-java-awt=gtk"
|
||||||
++ lib.optional (langJava && javaAntlr != null) "--with-antlr-jar=${javaAntlr}"
|
++ 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.optionals (targetPlatform != hostPlatform) crossConfigureFlags
|
||||||
++ lib.optional (targetPlatform != hostPlatform) "--disable-bootstrap"
|
++ lib.optional (targetPlatform != hostPlatform) "--disable-bootstrap"
|
||||||
|
|
||||||
|
|
|
@ -10350,7 +10350,9 @@ in
|
||||||
else ../development/compilers/gcc/10);
|
else ../development/compilers/gcc/10);
|
||||||
gcc = if (with stdenv.targetPlatform; isVc4 || libc == "relibc")
|
gcc = if (with stdenv.targetPlatform; isVc4 || libc == "relibc")
|
||||||
then gcc6 else
|
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;
|
gcc-unwrapped = gcc.cc;
|
||||||
|
|
||||||
gccStdenv = if stdenv.cc.isGNU then stdenv else stdenv.override {
|
gccStdenv = if stdenv.cc.isGNU then stdenv else stdenv.override {
|
||||||
|
@ -10562,7 +10564,8 @@ in
|
||||||
|
|
||||||
gcc_latest = gcc11;
|
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 {
|
gfortran48 = wrapCC (gcc48.cc.override {
|
||||||
name = "gfortran";
|
name = "gfortran";
|
||||||
|
@ -10650,7 +10653,8 @@ in
|
||||||
inherit (gnome2) libart_lgpl;
|
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 {
|
gnat6 = wrapCC (gcc6.cc.override {
|
||||||
name = "gnat";
|
name = "gnat";
|
||||||
|
|
Loading…
Reference in a new issue