Commit Graph

785 Commits

Author SHA1 Message Date
Franz Pletz
0097f57b1f
gcc11: fix build with libxcrypt 2022-10-09 18:07:54 +02:00
Theodore Ni
816cb20bd3
gcc12: switch to Homebrew patch on aarch64-darwin
We can presume that this patch is better tested and better maintained.
2022-09-04 11:07:54 -07:00
Martin Weinelt
249398ffa8 Merge remote-tracking branch 'origin/staging-next' into staging 2022-08-25 00:32:27 +02:00
github-actions[bot]
9179666d33
Merge master into staging-next 2022-08-23 12:01:12 +00:00
Vladimír Čunát
f8eb3f491f
Merge #187418: gcc12: 12.1.0 -> 12.2.0 2022-08-23 07:52:03 +02:00
Sergei Trofimovich
657075f9fa gcc12: 12.1.0 -> 12.2.0
Co-authored-by: Robert Scott <github@humanleg.org.uk>
2022-08-21 13:56:21 +01:00
github-actions[bot]
a6c886b7fd
Merge master into staging-next 2022-08-21 06:01:17 +00:00
Theodore Ni
1b0a51cbb7
gcc49: mark unsupported on aarch64-darwin
It's not supported and likely too old to be supported.
2022-08-20 15:11:53 -07:00
github-actions[bot]
77394c111b
Merge staging-next into staging 2022-08-20 18:02:00 +00:00
Sergei Trofimovich
1f7186ab5c libgccjit: don't try to enter into non-existent $lib output
Fixes build failure on `staging-next` introduced by commit c817efe6
("gcc: extend stripping of .a libraries and .o objects"):

    ...-bootstrap-stage3-stdenv-linux/setup: line 106: pushd: no other directory

Build failure happens because `libgccjit` has different `outputs` layout
compared to the rest of `gcc` derivations:

     outputs = [ "out" "man" "info" ] ++ lib.optional (!langJit) "lib";

The change carves out `$lib` lib handling part to avoid `gcc` rebuild
in `staging-next`.
2022-08-20 12:51:36 +01:00
Sergei Trofimovich
7f458e5c50
Merge pull request #187234 from trofi/drop-libelf-from-gcc
gcc: drop unused libelf dependency
2022-08-19 19:16:35 +01:00
Artturi
9adf0c2035
Merge pull request #185972 from Artturin/gccstrictdeps
gcc/: correct gnused conditionals
2022-08-19 20:50:23 +03:00
github-actions[bot]
c00ace1204
Merge master into staging-next 2022-08-19 12:01:31 +00:00
Sergei Trofimovich
3b60b31d60 gcc: drop unused libelf dependency
gcc stopped using libelf in commit 48215350c24 ("re PR lto/46273 (Failed
to bootstrap)") around 2010, before gcc-4.6.0.
2022-08-18 08:35:41 +01:00
Artturin
f16be229dc gcc/: correct gnused conditionals and move to nativeBuildInputs
hostPlatform changes were done in commits like 7a13457253

it should have been buildPlatform instead according to the comment
2022-08-17 21:03:40 +03:00
Vladimír Čunát
ddc75d1843
Merge #185284: gcc: fix bootstrapTools.mips64el-linux-gnuabin32
...into staging
2022-08-16 13:12:01 +02:00
Theodore Ni
74b420b612
gcc12: apply working patch for darwin-aarch64 2022-08-13 12:04:03 -07:00
Theodore Ni
cf206e9d00
gcc11: pick up bugfixes for darwin-aarch64
Amongst others, this picks up the fix for:

    https://github.com/iains/gcc-darwin-arm64/issues/54
2022-08-13 11:37:09 -07:00
github-actions[bot]
67f5b5a85d
Merge staging-next into staging 2022-08-08 18:02:11 +00:00
adisbladis
5cc12aa8cb
Merge pull request #182187 from adisbladis/newlib-nano-cc
newlib-nano: Set same flags as regular newlib in cc-wrapper/gcc config
2022-08-08 22:07:57 +08:00
Adam Joseph
a6daffb118 gcc: factor out $linkLib64toLib, move it from bash to nix
This commit factors out the conditional which creates the `lib64->lib`
symlink in the `preInstall` phase, and calculates its value in nix
code rather than bash code so touching it doesn't cause a global
rebuild on every platform.
2022-08-05 13:52:25 -07:00
Adam Joseph
dfba0bf93b gcc: do not create lib64->lib links on mips64n32
On mips, gcc follows the somewhat awkward IRIX convention of putting
mips64 binaries in `lib64` and mips64n32 binaries in `lib32`.  So on
mips64n32 we do not want the `lib64` symlinks.
2022-08-05 11:07:16 -07:00
Adam Joseph
cbc80ff32b gcc: add linkLib32toLib to create lib32->lib links
Our gcc builder creates lib64->lib links to ensure that the "primary"
libraries for the targetPlatform wind up in $PREFIX/lib.  This is
required in order for make-bootstrap-files.nix to work correctly.

On mips, gcc follows the somewhat awkward IRIX convention of putting
mips32 binaries in `lib` and mips64n32 binaries in `lib32`.  So we
need similar symlinks there.  This may come up on other ILP32
platforms as well, so a general-purpose variable name is provided.
2022-08-05 11:07:14 -07:00
Sergei Trofimovich
c817efe660 gcc: extend stripping of .a libraries and .o objects
The initial intent was to strip .a and .o files, not .a.o files.
While at it expanded stripping for $lib output as well.

Without the change `libgcc.a` was not stripped and `.debug*` sections
made into final binaries. It's not a problem on it's own, but it's an
unintended side-effect. Noticed on `crystal_1_0` test failure where
`crystal` was not able to handle `dwarf-5`.

While at it allowed absolute file names to be passed to stripDebugList
and friends.
2022-08-03 22:28:47 +01:00
Bernardo Meurer
88c63ca65a
Merge pull request #182513 from trofi/strip-for-host-and-target
gcc: enable stripping for cross-compilers
2022-07-28 00:30:49 -07:00
Sergei Trofimovich
eece5d0dc0 gcc: enable stripping for cross-compilers
With explicit support for distinction between Host and Target strip paths
we can now safely strip ELF binaries with their according strip tools
without fear of damaging binaries due to architecture mismatch.

Closure size change for `pkgsCross.mingwW64.gcc12Stdenv.cc.cc`:

    # before:
    $ nix path-info -Sh $(nix-build -A pkgsCross.mingwW64.gcc12Stdenv.cc.cc) | unnix
    /<<NIX>>/x86_64-w64-mingw32-stage-final-gcc-debug-12.1.0           2.5G

    # after:
    $ nix path-info -Sh $(nix-build -A pkgsCross.mingwW64.gcc12Stdenv.cc.cc) | unnix
    /<<NIX>>/x86_64-w64-mingw32-stage-final-gcc-12.1.0         1.5G
2022-07-25 11:06:58 +01:00
Sergei Trofimovich
c7062b9769
Merge pull request #181994 from trofi/gcc-drop-outdated-sed
gcc: drop outdated sed for system headers clobber
2022-07-24 15:01:22 +01:00
Sergei Trofimovich
ea8e124000 gcc: always enable inhibit_libc=true for --without-headers builds
It's a follow-up to the breakage caused by 21966e13d2
("gcc: pass --with-build-sysroot=/"). It caused `pkgsLLVM`
cross-toolchain bootstrap breakage:

    $ nix build --no-link -f. pkgsLLVM.hello
    ...
    failed: /nix/store/...-x86_64-unknown-linux-gnu-stage-static-gcc-13.0.0.drv:
    ...
    configure flags: ... --enable-languages=c --disable-multilib \
      --disable-shared --enable-plugin ... --disable-libssp --disable-nls \
      --without-headers --disable-threads --disable-libgomp --disable-libquadmath \
      --disable-shared --disable-libatomic --disable-decimal-float --disable-libmpx \
      --disable-bootstrap \
      \
      --build=x86_64-unknown-linux-gnu \
      --host=x86_64-unknown-linux-gnu \
      --target=x86_64-unknown-linux-gnu
    ...
    The directory that should contain system headers does not exist:
      /usr/include
    make[2]: *** [Makefile:3279: stmp-fixinc] Error 1 shuffle=1658621302
    rm gfdl.pod gcc.pod gcov-dump.pod gcov-tool.pod fsf-funding.pod gpl.pod cpp.pod gcov.pod lto-dump.pod
    make[2]: Leaving directory '/build/build/gcc'

Note: it's a no-libc build. It's not expected to use any libc headers.
But in this case fixincludes tries to run and uses default /usr/include
location.

Fixinsludes is not normally expected to run during cross-compilation
on --without-headers. gcc/configure.ac:

    : ${inhibit_libc=false}
    if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
           test x$with_newlib = xyes ; } &&
         { test "x$with_headers" = xno || test ! -f "$target_header_dir/stdio.h"; } ; then
           inhibit_libc=true
    fi

The change explicitly passes inhibit_libc=true to configure to disable
include fixing on such cases.

Fixed `nix build --no-link -f. pkgsLLVM.hello` toolchain bootstrap.
2022-07-24 09:54:49 +01:00
John Ericson
21966e13d2
Merge pull request #181943 from trofi/fix-cross-built-gcc
gcc: pass --with-build-sysroot=/
2022-07-23 23:52:07 -04:00
Sergei Trofimovich
34636efced gcc: pass --with-build-sysroot=/ for gcc builds
Without this change cross-built gcc fails to detect stack protector style:

    $ nix log -f pkgs/stdenv/linux/make-bootstrap-tools-cross.nix powerpc64le.bootGCC | fgrep __stack_chk_fail
    checking __stack_chk_fail in target C library... no
    checking __stack_chk_fail in target C library... no

It happens because gcc treats search paths differently:

    https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/configure.ac;h=446747311a6aec3c810ad6aa4190f7bd383b94f7;hb=HEAD#l2458

     if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
        test x$build != x$host || test "x$with_build_sysroot" != x; then
       ...
       if test "x$with_build_sysroot" != "x"; then
         target_header_dir="${with_build_sysroot}${native_system_header_dir}"
       elif test "x$with_sysroot" = x; then
         target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
       elif test "x$with_sysroot" = xyes; then
         target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
       else
         target_header_dir="${with_sysroot}${native_system_header_dir}"
       fi
     else
       target_header_dir=${native_system_header_dir}
     fi

By passing --with-build-sysroot=/ we trick cross-case to use
`target_header_dir="${with_sysroot}${native_system_header_dir}"`
which makes it equivalent to non-cross
`target_header_dir="${with_build_sysroot}${native_system_header_dir}"`

Tested the following setups:
- cross-compiler without libc headers (powerpc64le-static)
- cross-compiler with libc headers (powerpc64le-debug)
- cross-build compiler with libc headers (powerpc64le bootstrapTools)

Before the change only 2 of 3 compilers detected libc headers.
After the change all 3 compilers detected libc headers.

For darwin we silently ignore '-syslibroot //' argument as it does not
introduce impurities.

While at it dropped mingw special case for no-libc build. Before the change
we passed both '--without-headers --with-native-system-headers-dir' for
no-libc gcc-static builds. This tricked darwin builds to find sys/sdt.h
and fail inhibid_libc builds. Now all targets avoid passing native headers
for gcc-static builds.

While at it fixed correct headers passing to
--with-native-system-headers-dir= in host != target case: we were passing
host's headers where intention was to pass target's headers.
Noticed the mismatch as a build failure on pkgsCross.powernv.stdenv.cc
on darwin where `sys/sdt.h` is present in host's headers (libSystem)
but not target's headers (`glibc`).

Co-authored-by: Adam Joseph <54836058+amjoseph-nixpkgs@users.noreply.github.com>
2022-07-23 18:40:07 +01:00
Sergei Trofimovich
cb63ee9ff8
Merge pull request #181999 from trofi/gcc-clean-up-configureFlags
gcc: turn configureFlags into a sigle list, not nested list
2022-07-20 15:46:36 +01:00
adisbladis
facbbae4b7 gcc: Set --with-newlib when using newlib-nano 2022-07-20 16:41:48 +08:00
Sergei Trofimovich
69da37a8fd gcc: turn configureFlags into a sigle list, not nested list
Before the change:

    $ nix repl pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
    nix-repl> :p powerpc64le.bootGCC.configureFlags
    [ ... "--enable-targets=powerpcle-linux" [ "--with-long-double-128" ] "--target=powerpc64le-unknown-linux-gnu" ]

After the change:

    nix-repl> :p powerpc64le.bootGCC.configureFlags
    [ ... "--enable-targets=powerpcle-linux" "--with-long-double-128" "--target=powerpc64le-unknown-linux-gnu" ]
2022-07-18 19:10:22 +01:00
Sergei Trofimovich
769956d65b gcc: drop outdated sed for system headers clobber
When reviewing https://github.com/NixOS/nixpkgs/pull/181802#issuecomment-1186834504
I noticed outdated code that attempted to override /usr/include.

    sed -i \
        -e "s,glibc_header_dir=/usr/include,glibc_header_dir=$libc_dev/include", \
        gcc/configure

`glibc_header_dir` was removed from `gcc-4.6` and later in
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=6961669f48aa18168b2d7daa7e2235fbec7cb636
(Dec 2010, "(gcc_cv_ld_eh_frame_hdr): Only check GNU ld for  --eh-frame-hdr.").

Since then gcc got `--with-native-system-header-dir=` which `nixpkgs` uses
for all packaged `gcc` versions.

The change should be a no-op.
2022-07-18 18:55:58 +01:00
github-actions[bot]
05798fee88
Merge staging-next into staging 2022-07-10 18:01:55 +00:00
Sergei Trofimovich
8f00857bf9 pkgsMusl.gcc12: backport build fix (PR106102)
Without the change gcc-12 on musl fails to build due to system headers
poisoning:

    /build/build/./prev-gcc/xg++ ... ../../gcc-13-20220626/gcc/cp/mapper-resolver.cc
        In file included from /<<NIX>>/musl-1.2.3-dev/include/pthread.h:30,
                 from /build/build/prev-x86_64-unknown-linux-musl/libstdc++-v3/include/x86_64-unknown-linux-musl/bits/gthr-default.h:35,
                 ....
                 from /build/build/prev-x86_64-unknown-linux-musl/libstdc++-v3/include/memory:77,
                 from ../../gcc-13-20220626/gcc/../libcody/cody.hh:24,
                 from ../../gcc-13-20220626/gcc/cp/../../c++tools/resolver.h:25,
                 from ../../gcc-13-20220626/gcc/cp/../../c++tools/resolver.cc:23,
                 from ../../gcc-13-20220626/gcc/cp/mapper-resolver.cc:32:
    /<<NIX>>/musl-1.2.3-dev/include/sched.h:84:7: error: attempt to use poisoned "calloc"
       84 | void *calloc(size_t, size_t);
          |       ^
    /<<NIX>>/musl-1.2.3-dev/include/sched.h:124:36: error: attempt to use poisoned "calloc"
      124 | #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n)))
          |                                    ^

The change pulls upstream fix as is.
2022-07-09 09:35:25 +01:00
Vladimír Čunát
43f9c191bf
Merge #110571: treewide: migrate to -fno-common
...into staging
2022-07-07 10:06:38 +02:00
Gaelan Steele
5b47eb13ac gcc, clang11: don't force -fcommon on GCC 10 or clang11
GCC 10 sets -fno-common by default. This broke some packages, so
when moving to GCC 10 we initially disabled this behavior. This
commit reverts that, bringing us closer to the standard and
upstream.

Co-authored-by: Sergei Trofimovich <slyich@gmail.com>
2022-07-06 08:37:00 +01:00
Vladimír Čunát
3f88d51e02
gcc10: 10.3.0 -> 10.4.0
Patches: the two seemed included in the release;
I also checked that the conditional patches still all apply.
2022-06-29 10:07:32 +02:00
Shea Levy
8e6206f9c9
gcc49: Fix build on darwin 2022-06-23 10:42:39 -04:00
Vladimír Čunát
06b472c49f
gcc9: 9.3.0 -> 9.5.0
The issue from 9.4.0 on aarch64-linux seems gone.
2022-06-05 23:24:46 +02:00
Vladimír Čunát
cb4e7fd9bc
gdc: nicer eval failure from versions >= 12
12 will also be copied into future versions;
these parts seem OK to be copied by default.
2022-05-23 16:24:25 +02:00
Francesco Gazzetta
6436bdeb7f gcc: add langD support to gcc 10 2022-05-23 16:09:25 +02:00
Sergei Trofimovich
857a06674d
Merge pull request #173817 from trofi/fix-gcc-12-on-darwin
gcc12: fix substituteInPlace on darwin
2022-05-21 06:42:58 +00:00
Sergei Trofimovich
5d2d60e3e2 gcc12: fix substituteInPlace on darwin
gcc-12 did a mass rename from .c to .cc c++ files. As a result build fails as:

    substitute(): ERROR: file 'gcc/config/darwin-c.c' does not exist

Closes: https://github.com/NixOS/nixpkgs/issues/172877
2022-05-20 23:59:36 +01:00
Francesco Gazzetta
c6ea401438 gdc: match gcc version
Programs compiled with gdc (such as tumiki-fighters and torus-trooper)
that depend on c++ libraries were failing with errors such as

/nix/store/3fqi6nigj8dkbvjnw8y4dy59gkq8vsj4-binutils-2.38/bin/ld: /nix/store/36960p41h83cwkcs2vpzg8ni39w4sc5m-bulletml-0.0.6/lib/libbulletml.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'

because of the mismatch with the gcc version used to compile the
libraries.

This commit unpins the gcc version gdc is based on, so they are kept in
sync.

gdc9 was removed since no other package depends specifically on that
version
2022-05-20 13:49:55 +02:00
Vladimír Čunát
148df9e42e
Merge #171830: gcc12, gfortran12, gnat12: init at 12.1.0 2022-05-10 10:59:28 +02:00
Sergei Trofimovich
c34a8024bf gcc12, gfortran12, gnat12: init at 12.1.0
A copy of gcc11 with minor patch changes:
- follow .c/.cc rename upstream
- made patches unconditional

Changes: https://www.gnu.org/software/gcc/gcc-12/changes.html
2022-05-07 13:50:47 +01:00
Vladimír Čunát
005e2edc05
Merge #171792: gcc11: downgrade to 11.2.0 on x86_64-darwin
...into staging-next
2022-05-07 08:19:02 +02:00
github-actions[bot]
6e0aca3c43
Merge master into staging-next 2022-05-06 12:02:02 +00:00