From 2d176b593b731436b4310a74c226775a16d6dee2 Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Mon, 17 May 2021 23:50:16 +0200 Subject: [PATCH] gcc*: force building a cross compiler if host and target platform differ gcc's configure system has the nasty habit (for us) of judging for itself if it is building a cross compiler (or cross compiling), but on the limited information of the build, host and target platforms' config which only contains a subset of the information we encode in `stdenv.*Platform`. The practical consequence was that prior to this change building `pkgsLLVM.buildPackages.gcc` actually fails because it refuses to use `--with-headers` with something it believes to not be a cross compiler. As a workaround we force the appropriate variable in the configure script to always be `yes` regardless of its own conditional check. At some point we probably should report this issue in some capacity, so future gcc versions don't force us into workarounds like this and acdc783418538f23cdfb671bc8fd4b1c076979bd. --- pkgs/development/compilers/gcc/10/default.nix | 2 +- pkgs/development/compilers/gcc/11/default.nix | 2 +- pkgs/development/compilers/gcc/4.8/default.nix | 2 +- pkgs/development/compilers/gcc/4.9/default.nix | 2 +- pkgs/development/compilers/gcc/6/default.nix | 2 +- pkgs/development/compilers/gcc/7/default.nix | 2 +- pkgs/development/compilers/gcc/8/default.nix | 2 +- pkgs/development/compilers/gcc/9/default.nix | 2 +- pkgs/development/compilers/gcc/common/pre-configure.nix | 9 ++++++++- 9 files changed, 16 insertions(+), 9 deletions(-) diff --git a/pkgs/development/compilers/gcc/10/default.nix b/pkgs/development/compilers/gcc/10/default.nix index 2f7991a9212..aebe7b30f1a 100644 --- a/pkgs/development/compilers/gcc/10/default.nix +++ b/pkgs/development/compilers/gcc/10/default.nix @@ -186,7 +186,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform gnatboot langAda langGo langJit; + inherit version targetPlatform hostPlatform gnatboot langAda langGo langJit; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/11/default.nix b/pkgs/development/compilers/gcc/11/default.nix index 73f3d7b2a97..c9d8663c0c4 100644 --- a/pkgs/development/compilers/gcc/11/default.nix +++ b/pkgs/development/compilers/gcc/11/default.nix @@ -186,7 +186,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform gnatboot langAda langGo langJit; + inherit version targetPlatform hostPlatform gnatboot langAda langGo langJit; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/4.8/default.nix b/pkgs/development/compilers/gcc/4.8/default.nix index 4ed41ba3ca1..86dd9247f5a 100644 --- a/pkgs/development/compilers/gcc/4.8/default.nix +++ b/pkgs/development/compilers/gcc/4.8/default.nix @@ -196,7 +196,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform langJava langGo; + inherit version targetPlatform hostPlatform langJava langGo; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/4.9/default.nix b/pkgs/development/compilers/gcc/4.9/default.nix index 0eb0a85eaff..b7c9e5bcc0a 100644 --- a/pkgs/development/compilers/gcc/4.9/default.nix +++ b/pkgs/development/compilers/gcc/4.9/default.nix @@ -209,7 +209,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform langJava langGo; + inherit version targetPlatform hostPlatform langJava langGo; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/6/default.nix b/pkgs/development/compilers/gcc/6/default.nix index 32a4ad0dd09..069d9c18a62 100644 --- a/pkgs/development/compilers/gcc/6/default.nix +++ b/pkgs/development/compilers/gcc/6/default.nix @@ -232,7 +232,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform gnatboot langJava langAda langGo; + inherit version targetPlatform hostPlatform gnatboot langJava langAda langGo; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/7/default.nix b/pkgs/development/compilers/gcc/7/default.nix index 33edc81ce53..1f153b0fb3a 100644 --- a/pkgs/development/compilers/gcc/7/default.nix +++ b/pkgs/development/compilers/gcc/7/default.nix @@ -197,7 +197,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform langGo; + inherit version targetPlatform hostPlatform langGo; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index dae98afccb9..4d9e216947d 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -183,7 +183,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform langGo; + inherit version targetPlatform hostPlatform langGo; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/9/default.nix b/pkgs/development/compilers/gcc/9/default.nix index ebe20e0cba5..09cf7e98db7 100644 --- a/pkgs/development/compilers/gcc/9/default.nix +++ b/pkgs/development/compilers/gcc/9/default.nix @@ -200,7 +200,7 @@ stdenv.mkDerivation ({ preConfigure = import ../common/pre-configure.nix { inherit lib; - inherit version hostPlatform gnatboot langAda langGo langJit; + inherit version targetPlatform hostPlatform gnatboot langAda langGo langJit; }; dontDisableStatic = true; diff --git a/pkgs/development/compilers/gcc/common/pre-configure.nix b/pkgs/development/compilers/gcc/common/pre-configure.nix index 1c65b4a8ba6..d9977e0ba2f 100644 --- a/pkgs/development/compilers/gcc/common/pre-configure.nix +++ b/pkgs/development/compilers/gcc/common/pre-configure.nix @@ -1,4 +1,4 @@ -{ lib, version, hostPlatform +{ lib, version, hostPlatform, targetPlatform , gnatboot ? null , langAda ? false , langJava ? false @@ -58,3 +58,10 @@ lib.optionalString (hostPlatform.isSunOS && hostPlatform.is64bit) '' + lib.optionalString (hostPlatform.isDarwin && langJit) '' export STRIP='strip -x' '' + +# HACK: if host and target config are the same, but the platforms are +# actually different we need to convince the configure script that it +# is in fact building a cross compiler although it doesn't believe it. ++ lib.optionalString (targetPlatform.config == hostPlatform.config && targetPlatform != hostPlatform) '' + substituteInPlace configure --replace is_cross_compiler=no is_cross_compiler=yes +''