Merge pull request #181943 from trofi/fix-cross-built-gcc

gcc: pass --with-build-sysroot=/

Changed files
+29 -2
pkgs
build-support
bintools-wrapper
development
compilers
gcc
+5
pkgs/build-support/bintools-wrapper/ld-wrapper.sh
···
n+=1; skip "$p2"
elif [ "$p" = -dynamic-linker ] && badPath "$p2"; then
n+=1; skip "$p2"
elif [ "${p:0:1}" = / ] && badPath "$p"; then
# We cannot skip this; barf.
echo "impure path \`$p' used in link" >&2
···
n+=1; skip "$p2"
elif [ "$p" = -dynamic-linker ] && badPath "$p2"; then
n+=1; skip "$p2"
+
elif [ "$p" = -syslibroot ] && [ $p2 == // ]; then
+
# When gcc is built on darwin --with-build-sysroot=/
+
# produces '-syslibroot //' linker flag. It's a no-op,
+
# which does not introduce impurities.
+
n+=1; skip "$p2"
elif [ "${p:0:1}" = / ] && badPath "$p"; then
# We cannot skip this; barf.
echo "impure path \`$p' used in link" >&2
+24 -2
pkgs/development/compilers/gcc/common/configure-flags.nix
···
"--with-mpc=${libmpc}"
]
++ lib.optional (libelf != null) "--with-libelf=${libelf}"
-
++ lib.optional (!(crossMingw && crossStageStatic))
-
"--with-native-system-header-dir=${lib.getDev stdenv.cc.libc}/include"
# Basic configuration
++ [
···
"--with-mpc=${libmpc}"
]
++ lib.optional (libelf != null) "--with-libelf=${libelf}"
+
++ lib.optionals (!crossStageStatic) [
+
(if libcCross == null
+
then "--with-native-system-header-dir=${lib.getDev stdenv.cc.libc}/include"
+
else "--with-native-system-header-dir=${lib.getDev libcCross}${libcCross.incdir or "/include"}")
+
# gcc builds for cross-compilers (build != host) or cross-built
+
# gcc (host != target) always apply the offset prefix to disentangle
+
# target headers from build or host headers:
+
# ${with_build_sysroot}${native_system_header_dir}
+
# or ${test_exec_prefix}/${target_noncanonical}/sys-include
+
# or ${with_sysroot}${native_system_header_dir}
+
# While native build (build == host == target) uses passed headers
+
# path as is:
+
# ${native_system_header_dir}
+
#
+
# Nixpkgs uses flat directory structure for both native and cross
+
# cases. As a result libc headers don't get found for cross case
+
# and many modern features get disabled (libssp is used instead of
+
# target-specific implementations and similar). More details at:
+
# https://github.com/NixOS/nixpkgs/pull/181802#issuecomment-1186822355
+
#
+
# We pick "/" path to effectively avoid sysroot offset and make it work
+
# as a native case.
+
"--with-build-sysroot=/"
+
]
# Basic configuration
++ [