Commit Graph

847 Commits

Author SHA1 Message Date
Sergei Trofimovich
d65d457f68
Merge pull request #219811 from trofi/gcc-cross-no-sys-includes
gcc: do not install sys-include headers for cross-compilers.
2023-03-11 20:49:25 +00:00
Weijia Wang
042dd5c271
Merge pull request #217995 from amjoseph-nixpkgs/pr/gcc/disable-bootstrap-buildFlags-again
gcc/{11,12}: update buildFlags for `--disable-bootstrap` case
2023-03-08 09:36:51 +02:00
Adam Joseph
8a05f77b5d https://github.com/NixOS/nixpkgs/pull/217995#pullrequestreview-1318620540 2023-03-07 02:04:27 -08:00
Sergei Trofimovich
7df4387ebd gcc: do not install sys-include headers for cross-compilers.
Before the change include headers for cross-compilers like `pkgsStatic`
looked like this:

    $ nix build -L --impure --expr 'with import ./. {}; pkgsStatic.stdenv.mkDerivation { name = "probe"; buildCommand = "echo | $CXX -x c++ -E -v - |& fgrep -B10 search; exit 1"; }' |& unnix

    #include "..." search starts here:
    #include <...> search starts here:
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include/c++/13.0.1
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include/c++/13.0.1/x86_64-unknown-linux-musl
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include/c++/13.0.1/backward
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/sys-include
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/include
     /<<NIX>>/musl-static-x86_64-unknown-linux-musl-1.2.3-dev/include
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/include-fixed
    End of search list.

Note that `.../sys-include` inhibits the effect of `musl-static-x86_64-unknown-linux-musl-1.2.3-dev/include`.

After the change the paths look as expected:

    $ nix build -L --impure --expr 'with import ./. {}; pkgsStatic.stdenv.mkDerivation { name = "probe"; buildCommand = "echo | $CXX -x c++ -E -v - |& fgrep -B10 search; exit 1"; }' |& unnix

    #include "..." search starts here:
    #include <...> search starts here:
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include/c++/13.0.1
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include/c++/13.0.1/x86_64-unknown-linux-musl
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include/c++/13.0.1/backward
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/../../../../x86_64-unknown-linux-musl/include
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/include
     /<<NIX>>/musl-static-x86_64-unknown-linux-musl-1.2.3-dev/include
     /<<NIX>>/x86_64-unknown-linux-musl-stage-final-gcc-13.0.0/lib/gcc/x86_64-unknown-linux-musl/13.0.1/include-fixed
    End of search list.
2023-03-06 09:26:51 +00:00
github-actions[bot]
de3f71e277
Merge staging-next into staging 2023-02-26 06:02:30 +00:00
Winter
3d0de0e8c8 gcc12: fix building foreign toolchain on aarch64-darwin
It seems that the patchset we apply to get some fixes for aarch64-darwin
support [0] breaks in unexpected ways when compiling a foreign toolchain [1].
Luckily, according to the branch's author, the patchset isn't required
for merely using aarch64-darwin as the build system [2], so let's only apply
it when hostPlatform == aarch64-darwin to fix cross.

[0]: https://github.com/iains/gcc-12-branch
[1]: https://github.com/iains/gcc-12-branch/issues/18
[2]: https://github.com/iains/gcc-12-branch/issues/18#issuecomment-1435792834
2023-02-26 00:48:03 -05:00
Adam Joseph
c3547bc6eb gcc/{11,12}: update buildFlags for --disable-bootstrap case
This commit updates the `buildFlags`, which is a single string with
one of four possibilities:

  - ""
  - "profiled"
  - "bootstrap"
  - "profiledbootstrap"

Previously only the last two were possible.  Since
2ea3482502 all four are possible.
2023-02-23 23:22:19 -08:00
Adam Joseph
86a0e46ed4 gcc: fix implication order in assertion
In 6812dd98c4 I mistakenly had the
implication order reversed.  This commit corrects that mistake.

The original assertion (which is correct) was the following, which
asserts that if you enable the GDB plugin, you must enable plugins
generally (there is shared infrastructure):

```
assert enableGdbPlugin -> enablePlugin;
```

When the option name was changed to `disableGdbPlugin`, I
incorrectly wrote:

```
assert disableGdbPlugin -> enablePlugin;
```

And then again incorrectly wrote:

```
assert disableGdbPlugin -> !enablePlugin;
```

This commit uses the correct equivalent for the first statement,
which is the contrapositive:

```
assert !enablePlugin -> disableGdbPlugin;
```
2023-02-23 22:54:49 -08:00
github-actions[bot]
3cdd771820
Merge staging-next into staging 2023-02-23 18:01:49 +00:00
Adam Joseph
24b07fc9e5 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 <sandro.jaeckel@gmail.com>
2023-02-22 19:30:34 -08:00
Artturin
f9fdf2d402 treewide: move NIX_CFLAGS_COMPILE to the env attrset
with structuredAttrs lists will be bash arrays which cannot be exported
which will be a issue with some patches and some wrappers like cc-wrapper

this makes it clearer that NIX_CFLAGS_COMPILE must be a string as lists
in env cause a eval failure
2023-02-22 21:23:04 +02:00
github-actions[bot]
8c0220980d
Merge staging-next into staging 2023-02-19 00:03:03 +00:00
Yureka
3a2b7bd7d7 gcc: add missing libucontext buildInput for pkgsMusl.gccgo12 2023-02-18 23:51:32 +01:00
Sergei Trofimovich
2ea3482502
Merge pull request #216136 from amjoseph-nixpkgs/pr/gcc/enableBootstrap
gcc: expose --disable-bootstrap as disableBootstrap
2023-02-18 08:51:38 +00:00
Robert Scott
0eedcfc3f4
Merge pull request #212498 from risicle/ris-fortify3
hardening flags: add `FORTIFY_SOURCE=3` support
2023-02-16 21:19:30 +00:00
Adam Joseph
37fe1613cf gcc: expose --disable-bootstrap as disableBootstrap 2023-02-15 23:32:19 -08:00
Felix Buehler
cdb39a86e0 treewide: use optionalString 2023-02-13 21:52:34 +01:00
Vladimír Čunát
a6767ed934
Merge #212363: gcc11: apply upstream patch
...into staging-next
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103910
2023-02-13 13:36:01 +01:00
github-actions[bot]
87f957b5e2
Merge master into staging-next 2023-02-12 16:02:45 +00:00
Adam Joseph
b83f032ffc gcc/11: apply upstream fix 103910 so openjdk builds
Our openjdk derivations fail to build with `-march=opteron` (via
either `NIX_CFLAGS_COMPILE` or `hostPlatform.gcc.arch`).  This was
fixed upstream in gcc12 but not carried back to gcc11:

  https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=d243f4009d8071b734df16cd70f4c5d09a373769

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103910

Since gcc11 is still nixpkgs' primary compiler, this PR cherry-picks
the fix out of gcc12.

Unfortunately since `-march=` can be added after the `gcc11`
derivation is built we can't apply this patch conditionally (which
we don't usually do anyways).
2023-02-12 07:40:05 -08:00
Artturin
6986717510 gcc: add common/meta.nix
inherit has to be used otherwise makeOverridable attributes are added
2023-02-12 05:44:34 +02:00
Artturin
e277984d0b gcc: add callFile to make it more convenient to call files
inherit generated with 'nix eval --json --impure --expr "with import ./. {}; lib.attrNames (lib.functionArgs gccX.cc.override)" | jq '.[]' --raw-output'
2023-02-11 21:17:30 +02:00
github-actions[bot]
c76e040c19
Merge master into staging-next 2023-02-09 12:01:30 +00:00
Artturin
951c2fb2dd gcc10,gcc11,gcc12: move dependencies to common/dependencies.nix 2023-02-08 04:07:48 +02:00
Artturin
c4269cd7bf gcc7,gcc8: move dependencies to common/dependencies.nix 2023-02-08 04:07:48 +02:00
Artturin
18f9f26a79 gcc6: move dependencies to common/dependencies.nix
the (vc4 redox) flex conditional was missing in all other gcc version
because gcc6 was the default at the time it was added

that is one of the problems common/dependencies.nix fixes
2023-02-08 04:06:21 +02:00
Artturin
5564beebfe gcc: add common/dependencies.nix
there is a duplication issue in the gcc's so this will help with that

gcc49,gcc48: move dependencies to common/dependencies.nix
2023-02-08 04:03:55 +02:00
Vladimír Čunát
9e2af38827
Merge branch 'staging' into staging-next 2023-02-01 17:05:25 +01:00
Sergei Trofimovich
b8b5fc1463 gcc: revert "provide both native and cross forms of gcc.libs libraries"
This reverts commit 2c931bd5f4.

The https://github.com/NixOS/nixpkgs/pull/209153 reverted --sysroot=/
change as it broke other astects of library search paths.

While it might still be useful to pull in gcc libraries when
non-standard --sysroot= is passed there are no meaningful use cases of
it in `nixpkgs` yet. Let's revert it for now.
2023-02-01 07:42:11 +00:00
Sergei Trofimovich
8212ae0455
Merge pull request #213909 from amjoseph-nixpkgs/pr/gcc/comment
gcc/common/configure-flags.nix: fix comment
2023-02-01 07:30:32 +00:00
Adam Joseph
b02da45b3c gcc/common/configure-flags.nix: fix comment
On a native (host==build==target) build, `${with_build_sysroot}` can
be omitted.  In that case, the line modified by this commit is
correct.

However, if `--with-build-sysroot=` is passed to `./configure`, then
`${with_build_sysroot}` will be used, similar to the cross case, and
the headers will be taken from:

  ${with_build_sysroot}${native_system_header_dir}

See:

  https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/configure.ac;h=62bc908b991ff0b700225aef32743cd3d7c4daaf;hb=HEAD#l2439

This commit adjusts the comment to account for the case where
`--with-build-sysroot` is passed to a native compiler.
2023-01-31 21:40:48 -08:00
Robert Scott
c09e1fa406 gcc: mark hardeningUnsupportedFlags fortify3 for all but gcc 12 2023-01-24 21:52:12 +00:00
github-actions[bot]
cd6a5f6c46
Merge staging-next into staging 2023-01-24 00:02:42 +00:00
github-actions[bot]
727e365f02
Merge master into staging-next 2023-01-24 00:02:11 +00:00
Sandro
2696d7e4a6
Merge pull request #208657 from tpwrules/darwin-fix-avr 2023-01-23 23:48:21 +01:00
John Ericson
791c80ae74
Merge pull request #212271 from alyssais/gcc-uclibc-libgomp
gcc: don't disable libgomp for uclibc targets
2023-01-23 16:59:17 -05:00
John Ericson
8240bc77e8
Merge pull request #212275 from alyssais/libdl
treewide: remove -ldl linker flags
2023-01-23 16:28:21 -05:00
Alyssa Ross
12d2821bf5
treewide: remove -ldl linker flags
With all libcs I'm aware of, libdl is now either empty (Glibc, musl,
uclibc, illumos), a symlink to libc or equivalent (Apple), or does not
exist (FreeBSD, NetBSD).  So explicitly linking libdl now does nothing
for the former platforms, and breaks the build for the latter
platforms.

With this patch I've removed -ldl from all overridden linker flags for
all free packages in Nixpkgs.  Everything still seems to build.
2023-01-23 15:34:53 +00:00
Alyssa Ross
5b22ff71e1
gcc: don't disable libgomp for uclibc targets
I'm reasonably confident this is no longer necessary, as uclibc's
libdl.a is empty, and I can cross-build stdenv.cc.cc for
x86_64-unknown-linux-uclibc with libgomp enabled.
2023-01-23 14:44:06 +00:00
Sergei Trofimovich
b9b1d958d0 Merge remote-tracking branch 'origin/staging-next' into staging
Conflicts:
	pkgs/development/libraries/qt-6/modules/qtbase.nix
	pkgs/stdenv/linux/make-bootstrap-tools.nix
2023-01-20 21:56:57 +00:00
Alyssa Ross
4ed0e1a743 gcc: use as(1) from binutils with LLVM bintools
LLVM does not provide a drop-in replacement for as(1).

This makes it possible to build a GNU Fortran cross compiler from GNU
to LLVM — e.g. buildPackages.gfortran for
{ system = "aarch64-linux"; useLLVM = true; }
2023-01-20 18:35:25 +01:00
John Ericson
2c48770293
Merge pull request #210816 from obsidiansystems/gcc-fix-bug-80431
gcc: Backport fix of GCC Issue 80431 from version 12
2023-01-17 11:45:29 -05:00
John Ericson
d6d1897904 gcc: Backport fix of GCC Issue 80431 from version 12
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431

This bug annoys me because I hit it when working on Nix. It causes
miscompilations in such a way that I am hard-pressed to think how a
program could inadvertainly rely on the bug (such that it would be
broken by the fix).

The bug is longstanding, and the (quite small) applies without
modification to many older GCCs. I have confirmed by running the test in
that commit that does indeed fix the bug with the backports too.
2023-01-14 22:33:57 -05:00
Sergei Trofimovich
ca4da963f8 Merge remote-tracking branch 'origin/staging-next' into staging
Conflicts:
    pkgs/development/libraries/audio/roc-toolkit/default.nix
2023-01-14 11:07:42 +00:00
Sergei Trofimovich
1bc0b7ad62
Merge pull request #209153 from trofi/gcc-libs-cross-link
gcc: provide both native and cross forms of gcc.libs libraries
2023-01-14 08:18:19 +00:00
github-actions[bot]
49722fd14a
Merge master into staging-next 2023-01-13 18:01:34 +00:00
Boey Maun Suang
c7ce0c86a6 gnat12: Fix GNAT Darwin dylib install names 2023-01-11 09:03:43 +11:00
Boey Maun Suang
3d64e7edbb gnat12: Add support for x86_64-darwin 2023-01-07 18:32:12 +11:00
Sergei Trofimovich
b18eedcdab
Merge pull request #208859 from trofi/gcc-builder-cleanup
gcc/builder.sh: drop dead RPATH clobbering code
2023-01-05 18:42:01 +00:00
Sergei Trofimovich
2c931bd5f4 gcc: provide both native and cross forms of gcc.libs libraries
I would like to use --sysroot=/nix/store/does/not/exist hack
for both `gcc` and `clang` drivers to remove default include
(and library) search paths when we override them with libc.

For `gcc` it works as is. But for `clang` it also drops some of
`gcc` search paths`. Let'sconsider 2 lookups.

Successful lookup (no `--sysroot`):

    $ printf "int main(){}" | clang++ -x c++ - -Wl,--verbose |& grep -F stdc++
    attempt to open /nix/store/...-gcc-11.3.0/lib/gcc/x86_64-unknown-linux-gnu/11.3.0/libstdc++.so failed
    attempt to open /nix/store/...-gcc-11.3.0-lib/x86_64-unknown-linux-gnu/lib/libstdc++.so failed
    attempt to open /nix/store/...-clang-11.1.0-lib/lib/libstdc++.so failed
    attempt to open /nix/store/...-gcc-11.3.0/lib64/gcc/x86_64-unknown-linux-gnu/11.3.0/libstdc++.so failed
    attempt to open /nix/store/...-gcc-11.3.0/lib64/gcc/x86_64-unknown-linux-gnu/11.3.0/../../../../lib64/libstdc++.so failed
    /nix/store/...-gcc-11.3.0/lib64/gcc/x86_64-unknown-linux-gnu/11.3.0/../../../../lib64/libstdc++.a

Failed lookup (has `--sysroot`):

    $ printf "int main(){}" | clang++ --sysroot=/does/not/exist -x c++ - -Wl,--verbose |& grep -F stdc++
    attempt to open /nix/store/...-gcc-11.3.0/lib/gcc/x86_64-unknown-linux-gnu/11.3.0/libstdc++.so failed
    attempt to open /nix/store/...-gcc-11.3.0-lib/x86_64-unknown-linux-gnu/lib/libstdc++.so failed
    attempt to open /nix/store/...-clang-11.1.0-lib/lib/libstdc++.so failed
    attempt to open /nix/store/...-gcc-11.3.0/lib64/gcc/x86_64-unknown-linux-gnu/11.3.0/libstdc++.so failed
    /nix/store/...-binutils-2.39/bin/ld: cannot find -lstdc++: No such file or directory

Note how `clang` starts the search roughly from
`gcc-11.3.0-lib/x86_64-unknown-linux-gnu/lib` in both cases. I think
it's our preferred location for both native and cross cases.

The change adds such a symlink:

    `gcc-11.3.0-lib` -> `gcc-11.3.0-lib/x86_64-unknown-linux-gnu`
2023-01-05 14:41:35 +00:00