I am trying to compile the gcc compiler with GCC version >= 12 and when I ran make
I got the following error
tti -I../../../../gittea/gcc/libcpp -I.
-I../../../../gittea/gcc/libcpp/../include
-I../../../../gittea/gcc/libcpp/include -c -o expr.o -MT expr.o
-MMD -MP -MF .deps/expr.Tpo ../../../../gittea/gcc/libcpp/expr.cc
../../../../gittea/gcc/libcpp/expr.cc: In function ‘unsigned int
cpp_classify_number(cpp_reader*, const cpp_token*, const char**,
location_t)’:
../../../../gittea/gcc/libcpp/expr.cc:842:35: error: format not a
string literal and no format arguments [-Werror=format-security]
842 | cpp_warning_with_line (pfile, CPP_W_LONG_LONG,
virtual_location,
|
~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
843 | 0, message);
| ~~~~~~~~~~~
../../../../gittea/gcc/libcpp/expr.cc:845:38: error: format not a
string literal and no format arguments [-Werror=format-security]
845 | cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
846 | virtual_location, 0, message);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../gittea/gcc/libcpp/expr.cc:855:33: error: format not a
string literal and no format arguments [-Werror=format-security]
855 | cpp_warning_with_line (pfile, CPP_W_SIZE_T_LITERALS,
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
856 | virtual_location, 0, message);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../gittea/gcc/libcpp/expr.cc:867:42: error: format not a
string literal and no format arguments [-Werror=format-security]
867 | cpp_pedwarning_with_line (pfile, CPP_W_C11_C2X_COMPAT,
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
868 | virtual_location, 0, message);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../gittea/gcc/libcpp/expr.cc:870:39: error: format not a
string literal and no format arguments [-Werror=format-security]
870 | cpp_warning_with_line (pfile, CPP_W_C11_C2X_COMPAT,
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
871 | virtual_location, 0, message);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../gittea/gcc/libcpp/expr.cc:877:35: error: format not a
string literal and no format arguments [-Werror=format-security]
877 | cpp_error_with_line (pfile, CPP_DL_PEDWARN,
virtual_location, 0,
|
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
878 | message);
| ~~~~~~~~
cc1plus: some warnings are being treated as errors
I have the feeling that I am missing something because this code
has not been touched since 2012 (thank git blame)
so I am pretty sure that I am missing something, but not sure what.
I am also building this within a nix-shell, so my dependencies are
{
description = "gcc compiler";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let pkgs = nixpkgs.legacyPackages.${system};
in {
packages = {
default = pkgs.gnumake;
};
formatter = pkgs.nixpkgs-fmt;
devShell = pkgs.mkShell {
buildInputs = [
pkgs.gnumake
pkgs.gcc13
pkgs.libgcc
pkgs.glibc
pkgs.gmp
pkgs.libmpc
pkgs.mpfr
pkgs.flex
pkgs.bison
pkgs.isl
pkgs.pkg-config
pkgs.autoconf-archive
pkgs.autoconf
pkgs.automake
];
};
}
);
}
The problem is how nix/NixOS build the package! More information on this issue https://github.com/NixOS/nixpkgs/issues/18995
This took me a while but I found a problem with the help of
Some GCC guru.
Some compiler flags are enabled by default with nix, which can cause
hard time for people who work with low-level stuff.
However, the solution is pretty simple. All Nix users need to specify hardeningDisable
.
In my case, I just disabled the flake file hardeningDisable = [ "all" ];
Full solution
{
description = "gcc compiler";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let pkgs = nixpkgs.legacyPackages.${system};
in {
packages = {
default = pkgs.gnumake;
};
formatter = pkgs.nixpkgs-fmt;
devShell = pkgs.mkShell {
hardeningDisable = [ "all" ]; # Disable all hardening flags
buildInputs = [
pkgs.gnumake
pkgs.gcc13
pkgs.gmp
pkgs.libmpc
pkgs.mpfr
pkgs.flex
pkgs.bison
pkgs.isl
pkgs.pkg-config
pkgs.autoconf-archive
pkgs.autoconf
pkgs.automake
];
};
}
);
}
GCC needs to be built outside of its source directory. Are you building it on some Linux distribution? Which one? See gcc.gnu.org/install and contact me (Basile Starynkevitch, in France) by email to
[email protected]
Hi, I know and I am building it outside of the src, I think also I have all the dependencies enabled but there is something strange that it is going on. My arch machine is able to build it. BTW my build machine is running on NixOS