Commit Graph

932 Commits

Author SHA1 Message Date
Adam Joseph
92186a49bf gcc: factor out forceLibgccToBuildCrtStuff 2023-08-14 15:08:28 -07:00
Sergei Trofimovich
3d66844c2d gcc: revert "do not install sys-include headers for cross-compilers."
The change reverts commit 7df4387ebd

A few reasons to revert the commit:
1. The change was not enough to restore `-idirafter` override semantic
   to match unwrapped compiler.
2. The change broke override semantics for cross-compilers
3. The change made override semantics different between cross-compiler
   and native compiler

All of three have some overlap between, but I think it's important
to call all of them out.

The main fallout is the uboot builds, reported by cynerd.

Used the following test to check the override recovery:

    $ nix shell github:NixOS/nixpkgs/release-22.05#pkgsCross.aarch64-multiplatform.stdenv.cc
    $$ cat stdio.h
    # empty
    $$ printf "#include <stdio.h>" | aarch64-unknown-linux-gnu-gcc -E - -o - -idirafter . >/dev/null; echo $?
    0

It failed before the change and succeded after.
2023-07-26 16:40:42 +01:00
Adam Joseph
7621636030 gcc: use Nix instead of bash for conditional
Now that we use the standard builder, the commands produced by
pre-configure.nix are wrapped in a bash function.  Inside of a bash
function, `export foo=` will still add `foo` to the environment of
any child processes forked after that point, but those variables
will *not* be visible to bash code which is outside of the
function-scope in which the `export` occurs.

Weird crap like this is yet another reason why we need to move away
from using bash for logic.  Let's switch.
2023-07-07 05:56:46 -07:00
Adam Joseph
e99f6372fa gcc: use callFile instead of callPackage for builder.nix 2023-07-07 05:56:46 -07:00
Adam Joseph
5eaf17927e gcc: add -g to declare
The bash `declare` builtin works differently when it occurs inside
function, as it now does due to breaking up the monolithic
`builder.sh` into separate phases.  We have to add `-g` in order to
get the outside-of-a-bash-function behavior when using `declare`
within a bash function.
2023-07-07 05:56:46 -07:00
Adam Joseph
67da7b9a1f gcc: remove builder.sh 2023-07-07 05:56:44 -07:00
Adam Joseph
e3f05c22aa gcc: use common/builder.nix
This commit replaces `stdenv.mkDerivation` with `(callPackage
../common/builder.nix {})` in all versions of gcc.
2023-07-07 05:55:15 -07:00
Adam Joseph
c413f5a6c1 gcc: remove builder = ../builder.sh from gcc/${version}/default.nix
This commit deletes the custom builder attribute from all gcc versions.
2023-07-07 05:55:15 -07:00
Adam Joseph
1157e1d856 gcc: add args to common/builder.nix, split up script into phases
This commit adds arguments to `builder.nix`, making it a callable
function, and splits up the single massive shell script into
separate attributes for each phase.  It also drops the first two
lines and the last line because these are part of the default
builder.

All script lines which were not part of a phase function have been
moved into `preUnpack` since this is the first phase that runs.
Subsequent commits will move parts of this to more sensible
locations.
2023-07-07 05:55:15 -07:00
Adam Joseph
72284b0d40 gcc: make common/builder.nix into valid Nix syntax
This commit performs two search-and-replace operations:

- replace all `${` with `''${`
- replace `''` with `""` in shell scripts

This commit is left unsquashed to make review of the subsequent
commits easier.
2023-07-07 05:55:15 -07:00
Adam Joseph
caf22a33eb gcc: copy gcc/builder.sh to gcc/common/builder.nix
This commit is left unsquashed to make review of the subsequent
commits easier.
2023-07-07 05:55:15 -07:00
github-actions[bot]
b6ae9ef2db
Merge master into staging-next 2023-07-20 06:01:21 +00:00
github-actions[bot]
e048c645c9
Merge master into staging-next 2023-07-20 00:02:29 +00:00
Adam Joseph
07494a467a
Merge pull request #243615 from amjoseph-nixpkgs/pr/gcc/fix-m68k
gcc: if isM68k, look for libgcc_s.so.2 (instead of .so.1)
2023-07-19 22:10:25 +00:00
github-actions[bot]
972652b656
Merge staging-next into staging 2023-07-14 12:02:21 +00:00
Vladimír Čunát
c4c0e2e2ec
gnat11: avoid the new "fortify3" hardening
It broke build: https://hydra.nixos.org/build/227264335
Motivation: coreboot-toolchain.* depend on gnat11.

It's just a hack-fix.  gnat12 seems OK, just as other languages on 11,
at least those built on Hydra.  /cc PR #224822 which enabled the flag.
2023-07-14 09:04:12 +02:00
John Ericson
badbdfd88d
Merge pull request #243194 from amjoseph-nixpkgs/pr/gcc/crossStageStatic-undo-the-hack
gcc: revert "kludge to prevent mass-rebuild" from #238154
2023-07-13 21:40:51 -04:00
github-actions[bot]
c796e255b3
Merge staging-next into staging 2023-07-14 00:03:13 +00:00
github-actions[bot]
7f792be99d
Merge staging-next into staging 2023-07-13 12:01:50 +00:00
github-actions[bot]
e4fb0591c3
Merge staging-next into staging 2023-07-11 18:01:45 +00:00
Sergei Trofimovich
bc1e68558b
Merge pull request #241980 from trofi/gcc-print-configure-flags
gcc: restore 'Configured with:' output on 'gcc -v' output
2023-07-10 19:23:58 +01:00
Randy Eckenrode
937f472e92
Revert "gcc: fix build on x86_64-darwin"
This reverts commit b39481bc09.
2023-07-09 13:29:11 -06:00
Sergei Trofimovich
41b146ff40 gcc: restore 'Configured with:' output on 'gcc -v' output
When reporting 'gcc' bugs upstream I'm occasionally asked for the actual
configure flags I used to build gcc.

Before the change `gcc -v` always reported empty string:

    $ gcc -v
    ...
    Target: x86_64-unknown-linux-gnu
    Configured with:

After the change `gcc -v` contains original options with slightly
mangled nix store paths to avoid build-only dependency retention:

    $ gcc -v
    ...
    Target: x86_64-unknown-linux-gnu
    Configured with: ../source/configure --prefix=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gcc-14.0.0 --with-gmp-include=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gmp-6.2.1-dev/include --with-gmp-lib=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gmp-6.2.1/lib --with-mpfr-include=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-mpfr-4.2.0-dev/include --with-mpfr-lib=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-mpfr-4.2.0/lib --with-mpc=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libmpc-1.3.1 --with-native-system-header-dir=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-glibc-2.37-8-dev/include --with-build-sysroot=/ --program-prefix= --enable-lto --disable-libstdcxx-pch --without-included-gettext --with-system-zlib --enable-checking=release --enable-static --enable-languages=c,c++ --disable-multilib --enable-plugin --disable-libcc1 --with-isl=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-isl-0.20 --disable-bootstrap --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-unknown-linux-gnu

While a bit verbose I think it's useful to see how we build gcc.
2023-07-08 14:17:51 +01:00
Weijia Wang
b39481bc09 gcc: fix build on x86_64-darwin 2023-07-08 11:03:41 +03:00
Adam Joseph
424952b7b4 gccWithoutTargetLibc: link libgcc_s.so using -mnewlib if isPower
Closes #244405

Also adds considerably more commenting to document what is going on.
2023-07-06 05:50:26 -07:00
Adam Joseph
a35e1694a8 gcc: if isM68k, look for libgcc_s.so.2 (instead of .so.1)
Closes #243613
2023-07-01 16:45:44 -07:00
Adam Joseph
96a2f1b4e1 gcc: kludge to prevent mass-rebuild
This commit is reverted in #240596 (which must go to staging).
2023-07-01 13:12:41 -07:00
Adam Joseph
63305d00d3 gcc: withoutTargetLibc: build libgcc_s.so
We want a `libgcc_s.so` to be built by the first stage
cross-compiler (withoutTargetLibc), since that is the compiler which
will compile the target libc.

This commit accomplishes that, by making three changes:

1. Replacing the `targetPlatform.libc == "msvcrt" &&` conditional
   with `enableShared`, so that the code which cross-build
   `libgcc_s.so` is used for all cross compilers capable of emitting
   shared libraries.

2. Removing the `targetPlatform == hostPlatform` guard from the code
   which produces the `libgcc` output.

3. Looking for build products in in "lib/${targetPlatform.config}/"
   rather than "lib/", so we will find them when cross compiling.
2023-07-01 13:12:41 -07:00
Adam Joseph
443dfc4b05 gcc: s_crossStageStatic_withoutTargetLibc_
This commit renames the `crossStageStatic` argument to the `gcc`
expression to `withoutTargetLibc`.  See previous commit for details.
2023-07-01 13:12:41 -07:00
Adam Joseph
2affd455a4 gccCrossStageStatic: enable dynamic libraries, rename to gccWithoutTargetLibc
This commit allows `gccCrossStageStatic` to build dynamically-linked
libraries.  Since is no longer restricted to building static
libraries its name is no longer appropriate, and this commit also
renames it to the more-accurate `gccWithoutTargetLibc`.

By default, you can't build a gcc that knows how to create dynamic
libraries unless you have already built the targetPlatform libc.

Because of this, our gcc cross-compiler is built in two stages:

  1. Build a cross-compiler (gccCrossStageStatic) that can build
     only static libraries.

  2. Use gccCrossStageStatic to compile the targetPlatform libc.

  3. Use the targetPlatform libc to build a fully-capable cross
     compiler.

You might notice that this pattern looks very similar to what we do
with `xgcc` in the stdenv bootstrap.  Indeed it is!  I would like to
work towards getting the existing stdenv bootstrap to handle cross
compilers as well.  However we don't want to cripple `stdenv.xgcc`
by taking away its ability to build dynamic libraries.

It turns out that the only thing gcc needs the targetPlatform libc
for is to emit a DT_NEEDED for `-lc` into `libgcc.so`.  That's it!
And since we don't use `gccCrossStageStatic` to build anything other
than libc, it's safe to omit the `DT_NEEDED` because that `libgcc`
will never be loaded by anything other than `libc`.  So `libc` will
already be in the process's address space.

Other people have noticed this; crosstool-ng has been using this
approach for a very long time:

  36ad0b17a7/scripts/build/cc/gcc.sh (L638-L640)
2023-07-01 13:12:40 -07:00
Adam Joseph
e41f217257 gcc: use hasSharedLibraries instead of isStatic 2023-07-01 13:12:22 -07:00
Adam Joseph
c04c1a1777 Revert "gcc: kludge to prevent mass-rebuild"
This reverts commit 8dce1f7383b064ae5adee7702a8eeed06346dd24.
2023-06-30 02:28:13 -07:00
Adam Joseph
91ef45c98a gcc: disable glibc<->libgcc circularity workaround for windows and LLVM
This essentially reverts #238154 if `isWindows` or `useLLVM`, the
two cases where it caused breakage:

  https://github.com/NixOS/nixpkgs/pull/238154#issuecomment-1633752094

Since #238154 exists mainly for `isGNU` (i.e. due to the
glibc<->libgcc circular dependency) disabling it here isn't a big deal.
2023-06-30 01:39:58 -07:00
Adam Joseph
0344bcbcf4 gcc: deduplicate boilerplate
This commit deduplicates libgcc-related boilerplate which appears in
every version of our gcc expression, by moving it into libgcc.nix.

I will be submitting a separate PR which changes this boilerplate,
but that PR will be much easier to review if I can make the change
in just one place.

Meanwhile, *this* commit has no effect on eval:

$ for A in 10  11  12  13  4.8  4.9  6  7  8  9; do nix-instantiate . -A gcc$(echo $A | tr -d .); done 2>/dev/null | sort | tee before
/nix/store/1a37lnzpnz0dhm3lphiy2gcdrxgqa7ma-gcc-wrapper-4.8.5.drv
/nix/store/5szdivc8il0c3g94dq4wqnq5j77a9h6p-gcc-wrapper-11.4.0.drv
/nix/store/bmmc717wmnp1j2xkd3if5dfxicnflvn5-gcc-wrapper-7.5.0.drv
/nix/store/fc1ggpixv3wqcazchhl2hnn5zl5ds30l-gcc-wrapper-13.1.0.drv
/nix/store/j9c2b20w35r3ag5nxmklhagbwsgjhds2-gcc-wrapper-4.9.4.drv
/nix/store/nq7q57bxmsk2g457wr4b9449as3f216w-gcc-wrapper-12.3.0.drv
/nix/store/sqmkkfapzykapcs4azvxm83n786ga7q1-gcc-wrapper-10.4.0.drv
/nix/store/vxnz30i23mkl4ldsq485kxn7q0p2y4nf-gcc-wrapper-8.5.0.drv
/nix/store/yfhv0bv15cg5kj2xsb9fcgb6pdlw42v0-gcc-wrapper-6.5.0.drv
/nix/store/yi5gr75pb6kddnll10jg25hhndhkba7s-gcc-wrapper-9.5.0.drv

$ for A in 10  11  12  13  4.8  4.9  6  7  8  9; do nix-instantiate . -A gcc$(echo $A | tr -d .); done | sort | tee after
/nix/store/1a37lnzpnz0dhm3lphiy2gcdrxgqa7ma-gcc-wrapper-4.8.5.drv
/nix/store/5szdivc8il0c3g94dq4wqnq5j77a9h6p-gcc-wrapper-11.4.0.drv
/nix/store/bmmc717wmnp1j2xkd3if5dfxicnflvn5-gcc-wrapper-7.5.0.drv
/nix/store/fc1ggpixv3wqcazchhl2hnn5zl5ds30l-gcc-wrapper-13.1.0.drv
/nix/store/j9c2b20w35r3ag5nxmklhagbwsgjhds2-gcc-wrapper-4.9.4.drv
/nix/store/nq7q57bxmsk2g457wr4b9449as3f216w-gcc-wrapper-12.3.0.drv
/nix/store/sqmkkfapzykapcs4azvxm83n786ga7q1-gcc-wrapper-10.4.0.drv
/nix/store/vxnz30i23mkl4ldsq485kxn7q0p2y4nf-gcc-wrapper-8.5.0.drv
/nix/store/yfhv0bv15cg5kj2xsb9fcgb6pdlw42v0-gcc-wrapper-6.5.0.drv
/nix/store/yi5gr75pb6kddnll10jg25hhndhkba7s-gcc-wrapper-9.5.0.drv

$ diff -u after before
$
2023-06-27 19:21:49 -07:00
Alyssa Ross
0f2191f3b2
Merge remote-tracking branch 'origin/staging-next' into staging
Conflicts:
	pkgs/development/compilers/gcc/11/default.nix
2023-06-22 06:23:16 +00:00
Janne Heß
61e5bba2b7
gcc11: 11.3.0 -> 11.4.0 2023-06-19 07:48:37 +02:00
Arnout Engelen
f6a7658c51
gcc: disable parallelism when installing
to avoid missing sections in the info pages due
the index being overwritten by parallel `install-info`
invocations
2023-06-13 17:16:23 +02:00
Arnout Engelen
e8d0aa9d19
Revert "gcc: install info files serially"
Because the build still uses a pre-4.4 version of GNU Make,
this option makes the whole build serial rather than only
the installation.

See also https://gcc.gnu.org/PR109898

This reverts commit f3995cee01.
2023-06-13 17:16:20 +02:00
github-actions[bot]
9f2767ce37
Merge staging-next into staging 2023-06-10 18:01:41 +00:00
Daniel Nagy
ca2cb9f644 treewide: "libary" -> "library" 2023-06-10 14:54:08 +01:00
Artturi
69b154f738
Merge pull request #234204 from vcunat/p/gcc-nofetch-patch 2023-06-08 17:53:58 +03:00
Sergei Trofimovich
aaf4f4acca
Merge pull request #234887 from trofi/mingw-w64-gcc-13-fix
gcc13: drop already upstreamed mingwW64 patch
2023-06-06 08:05:23 +01:00
Sergei Trofimovich
9de90335f9 gcc13: drop already upstreamed mingwW64 patch
Without the change the patch failed to apply as:

```
$ nix build -f. pkgsCross.mingwW64.stdenv.cc.cc
...
x86_64-w64-mingw32-stage-final-gcc> applying patch /nix/store/sb9irfs83qvdgkf23agvv1vn96n9z31p-Added-mcf-thread-model-support-from-mcfgthread.patch
x86_64-w64-mingw32-stage-final-gcc> patching file config/gthr.m4
x86_64-w64-mingw32-stage-final-gcc> Reversed (or previously applied) patch detected!  Assume -R? [n]
x86_64-w64-mingw32-stage-final-gcc> Apply anyway? [n]
x86_64-w64-mingw32-stage-final-gcc> Skipping patch.
...
```

The patch is apready present in gcc-13.1.0.
2023-05-29 22:40:07 +01:00
Sergei Trofimovich
e1356f9958
Merge pull request #232075 from trofi/gcc12-update
gcc12: 12.2.0 -> 12.3.0
2023-05-29 10:05:32 +01:00
Sergei Trofimovich
c78434b2cd gcc12: 12.2.0 -> 12.3.0
Added an ICE backport for `ccache` build failure.
2023-05-27 09:42:47 +01:00
Vladimír Čunát
c98d687fd6
gcc{6..11}: import a patch into nixpkgs
fetchurl can't be used on generated patches this way.
The hash doesn't match anymore.  fetchpatch would be an alternative.
2023-05-26 12:55:25 +02:00
Elias Naur
8d2846edbb
gcc: only disable aligned_alloc for darwin build/host/target platforms (#226290)
Before this change a Darwin gcc would output binaries that avoid
aligned_alloc, regardless of target platform. That's fine for Darwin
targets, but not for non-darwin targets such as pkgsCross.raspberryPi.

This change replaces the single configure flag with a flag for
each of build, host, target.

Idea by @trofi.
2023-05-16 19:43:17 -04:00
Sergei Trofimovich
e86e25fd5d
Merge pull request #228388 from trofi/gcc13
gcc13, gccgo13, gfortran13, gnat13: init at 13.1.0
2023-05-13 21:16:40 +01:00
Sergei Trofimovich
4b8b00f56c gcc13, gccgo13, gfortran13, gnat13: init at 13.1.0
It's a copy of `gcc12.cc` implementation. Nothing special added here.

Note that gccgo13 does not build yet (similar to existing gccgo12).
The failure is related to libgcc_s.so lookup problems. Not specific
to gcc-13 release.

Co-authored-by: Weijia Wang <9713184+wegank@users.noreply.github.com>
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
2023-05-13 13:18:08 +01:00
Vladimír Čunát
ae3f6c9c6d
Merge #229898: gcc: install info files serially
...into staging
2023-05-10 08:39:57 +02:00