From acdc783418538f23cdfb671bc8fd4b1c076979bd Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Fri, 16 Apr 2021 17:39:04 +0200 Subject: [PATCH] gcc*: always force --program-prefix and pass --target Don't rely on gcc detecting from the passed platforms which prefix to use, but always specify the prefix nixpkgs expects (or doesn't). This allows us to work around problems where the configure script would add prefix where nixpkgs doesn't expect one (if `--target` was specified, but the same as `--host`) or doesn't add one if nixpkgs expects one (if `--target` and `--host` are the same, but we are actually cross compiling, but the relevant parts of the platform are not encoded into the platform config. See also ca9be0511b0661be5255dd1fe0b05c5eaf3e56d8. --- pkgs/development/compilers/gcc/10/default.nix | 3 +-- pkgs/development/compilers/gcc/4.8/default.nix | 3 +-- pkgs/development/compilers/gcc/4.9/default.nix | 3 +-- pkgs/development/compilers/gcc/6/default.nix | 3 +-- pkgs/development/compilers/gcc/7/default.nix | 3 +-- pkgs/development/compilers/gcc/8/default.nix | 3 +-- pkgs/development/compilers/gcc/9/default.nix | 3 +-- .../compilers/gcc/common/configure-flags.nix | 15 +++++++++++++++ 8 files changed, 22 insertions(+), 14 deletions(-) diff --git a/pkgs/development/compilers/gcc/10/default.nix b/pkgs/development/compilers/gcc/10/default.nix index 1502b09cca6a..c265fff2215f 100644 --- a/pkgs/development/compilers/gcc/10/default.nix +++ b/pkgs/development/compilers/gcc/10/default.nix @@ -186,8 +186,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/4.8/default.nix b/pkgs/development/compilers/gcc/4.8/default.nix index 6a2121a82981..957c85cfde56 100644 --- a/pkgs/development/compilers/gcc/4.8/default.nix +++ b/pkgs/development/compilers/gcc/4.8/default.nix @@ -196,8 +196,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/4.9/default.nix b/pkgs/development/compilers/gcc/4.9/default.nix index 709288559d1c..5d30f80edb2d 100644 --- a/pkgs/development/compilers/gcc/4.9/default.nix +++ b/pkgs/development/compilers/gcc/4.9/default.nix @@ -209,8 +209,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/6/default.nix b/pkgs/development/compilers/gcc/6/default.nix index 93c9dde61fc3..0ac54e093b4f 100644 --- a/pkgs/development/compilers/gcc/6/default.nix +++ b/pkgs/development/compilers/gcc/6/default.nix @@ -232,8 +232,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/7/default.nix b/pkgs/development/compilers/gcc/7/default.nix index d9b4c639b5ab..233d022514e0 100644 --- a/pkgs/development/compilers/gcc/7/default.nix +++ b/pkgs/development/compilers/gcc/7/default.nix @@ -197,8 +197,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index 6ecf462d54d9..4e57e43437fd 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -182,8 +182,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/9/default.nix b/pkgs/development/compilers/gcc/9/default.nix index 7f35f5c7bb99..92810ecffaf2 100644 --- a/pkgs/development/compilers/gcc/9/default.nix +++ b/pkgs/development/compilers/gcc/9/default.nix @@ -199,8 +199,7 @@ stdenv.mkDerivation ({ dontDisableStatic = true; - # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = [ "build" "host" "target" ]; configureFlags = import ../common/configure-flags.nix { inherit diff --git a/pkgs/development/compilers/gcc/common/configure-flags.nix b/pkgs/development/compilers/gcc/common/configure-flags.nix index fc4fbb34c502..4cf06cd41079 100644 --- a/pkgs/development/compilers/gcc/common/configure-flags.nix +++ b/pkgs/development/compilers/gcc/common/configure-flags.nix @@ -44,6 +44,9 @@ let crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt"; crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem"; + targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) + "${stdenv.targetPlatform.config}-"; + crossConfigureFlags = # Ensure that -print-prog-name is able to find the correct programs. [ @@ -112,6 +115,18 @@ let # Basic configuration ++ [ + # Force target prefix. The behavior if `--target` and `--host` + # are specified is inconsistent: Sometimes specifying `--target` + # always causes a prefix to be generated, sometimes it's only + # added if the `--host` and `--target` differ. This means that + # sometimes there may be a prefix even though nixpkgs doesn't + # expect one and sometimes there may be none even though nixpkgs + # expects one (since not all information is serialized into the + # config attribute). The easiest way out of these problems is to + # always set the program prefix, so gcc will conform to our + # expectations. + "--program-prefix=${targetPrefix}" + (lib.enableFeature enableLTO "lto") "--disable-libstdcxx-pch" "--without-included-gettext"