From 24b07fc9e5216d8ae22205c2f8c688e2738d8502 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Mon, 13 Feb 2023 14:36:08 -0800 Subject: [PATCH] gcc/common: add disableGdbPlugin option This commit adds an option `disableGdbPlugin` which controls whether or not the plugin *for* GDB will be built. This plugin contains a copy of `gcc`. The configure flag that this option controls is called `--disable-libcc1`. This flag name is slightly confusing: it is used only by GDB (and apparently unmaintained), yet the flag name does not mention GDB. This is why the option name is different from the configure flag name. The primary motivation for this commit is to allow the following PR (which is not yet merged) to pass `--disable-libcc1` when building the final native (build=host=target) compiler as part of the stdenv bootstrap: https://github.com/NixOS/nixpkgs/pull/209870 We need to `--disable-libcc1` in this scenario because gcc's build machinery links `libcc1` against the `libstdc++` that is part of the *compiler used to compile gcc*, rather than against the `libstdc++` that is built *by* gcc. In an FHS distribution this distinction is not terribly important because dynamically linked libraries are late-bound (ld.so resolution). However in nixpkgs this causes a reference back to the bootstrapFiles to leak all the way through to the final stdenv. More details can be found in the comment in `pkgs/stdenv/linux/default.nix` of the PR linked above. Co-authored-by: Sandro --- pkgs/development/compilers/gcc/11/default.nix | 2 ++ pkgs/development/compilers/gcc/12/default.nix | 2 ++ pkgs/development/compilers/gcc/common/configure-flags.nix | 8 +++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkgs/development/compilers/gcc/11/default.nix b/pkgs/development/compilers/gcc/11/default.nix index 15b21fcdbeae..3919fbe89f38 100644 --- a/pkgs/development/compilers/gcc/11/default.nix +++ b/pkgs/development/compilers/gcc/11/default.nix @@ -27,6 +27,7 @@ , cloog # unused; just for compat with gcc4, as we override the parameter on some places , buildPackages , libxcrypt +, disableGdbPlugin ? !enablePlugin }: # Make sure we get GNU sed. @@ -115,6 +116,7 @@ let majorVersion = "11"; enableLTO enableMultilib enablePlugin + disableGdbPlugin enableShared disableBootstrap fetchpatch diff --git a/pkgs/development/compilers/gcc/12/default.nix b/pkgs/development/compilers/gcc/12/default.nix index 10db2adc4166..562d7113b6a2 100644 --- a/pkgs/development/compilers/gcc/12/default.nix +++ b/pkgs/development/compilers/gcc/12/default.nix @@ -28,6 +28,7 @@ , cloog # unused; just for compat with gcc4, as we override the parameter on some places , buildPackages , libxcrypt +, disableGdbPlugin ? !enablePlugin }: # Make sure we get GNU sed. @@ -144,6 +145,7 @@ let majorVersion = "12"; cloog crossStageStatic disableBootstrap + disableGdbPlugin enableLTO enableMultilib enablePlugin diff --git a/pkgs/development/compilers/gcc/common/configure-flags.nix b/pkgs/development/compilers/gcc/common/configure-flags.nix index e3a4aa7cccdf..e0a713bc3853 100644 --- a/pkgs/development/compilers/gcc/common/configure-flags.nix +++ b/pkgs/development/compilers/gcc/common/configure-flags.nix @@ -11,6 +11,7 @@ , enableLTO , enableMultilib , enablePlugin +, disableGdbPlugin ? !enablePlugin , enableShared , langC @@ -26,6 +27,7 @@ , disableBootstrap ? stdenv.targetPlatform != stdenv.hostPlatform }: +assert disableGdbPlugin -> !enablePlugin; assert langJava -> lib.versionOlder version "7"; # Note [Windows Exception Handling] @@ -172,9 +174,9 @@ let then ["--enable-multilib" "--disable-libquadmath"] else ["--disable-multilib"]) ++ lib.optional (!enableShared) "--disable-shared" - ++ [ - (lib.enableFeature enablePlugin "plugin") - ] + ++ lib.singleton (lib.enableFeature enablePlugin "plugin") + # Libcc1 is the GCC cc1 plugin for the GDB debugger which is only used by gdb + ++ lib.optional disableGdbPlugin "--disable-libcc1" # Support -m32 on powerpc64le/be ++ lib.optional (targetPlatform.system == "powerpc64le-linux")