3
0
Fork 0
forked from mirrors/nixpkgs

Merge pull request #81844 from lopsided98/gcc-separate-output-cross

gcc: place cross-compiled target libraries in lib output
This commit is contained in:
Matthew Bauer 2020-03-05 20:30:35 -05:00 committed by GitHub
commit b8102aa32e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 21 deletions

View file

@ -41,7 +41,9 @@ let
libc_bin = if libc == null then null else getBin libc; libc_bin = if libc == null then null else getBin libc;
libc_dev = if libc == null then null else getDev libc; libc_dev = if libc == null then null else getDev libc;
libc_lib = if libc == null then null else getLib libc; libc_lib = if libc == null then null else getLib libc;
cc_solib = getLib cc; cc_solib = getLib cc
+ optionalString (targetPlatform != hostPlatform) "/${targetPlatform.config}";
# The wrapper scripts use 'cat' and 'grep', so we may need coreutils. # The wrapper scripts use 'cat' and 'grep', so we may need coreutils.
coreutils_bin = if nativeTools then "" else getBin coreutils; coreutils_bin = if nativeTools then "" else getBin coreutils;

View file

@ -133,7 +133,7 @@ if test "$noSysDirs" = "1"; then
if test "$crossStageStatic" == 1; then if test "$crossStageStatic" == 1; then
# We don't want the gcc build to assume there will be a libc providing # We don't want the gcc build to assume there will be a libc providing
# limits.h in this stagae # limits.h in this stage
makeFlagsArray+=( makeFlagsArray+=(
'LIMITS_H_TEST=false' 'LIMITS_H_TEST=false'
) )
@ -203,31 +203,31 @@ postConfigure() {
preInstall() { preInstall() {
# Make lib64 symlinks to lib. # Make lib64 symlinks to lib.
if [ -n "$is64bit" -a -z "$enableMultilib" ]; then if [ -n "$is64bit" -a -z "$enableMultilib" ]; then
mkdir -p "$out/lib" mkdir -p "$out/${targetConfig}/lib"
ln -s lib "$out/lib64" ln -s lib "$out/${targetConfig}/lib64"
mkdir -p "$lib/lib" mkdir -p "$lib/${targetConfig}/lib"
ln -s lib "$lib/lib64" ln -s lib "$lib/${targetConfig}/lib64"
fi fi
} }
postInstall() { postInstall() {
# Move runtime libraries to $lib. # Move runtime libraries to $lib.
moveToOutput "lib/lib*.so*" "$lib" moveToOutput "${targetConfig+$targetConfig/}lib/lib*.so*" "$lib"
moveToOutput "lib/lib*.la" "$lib" moveToOutput "${targetConfig+$targetConfig/}lib/lib*.la" "$lib"
moveToOutput "lib/lib*.dylib" "$lib" moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dylib" "$lib"
moveToOutput "share/gcc-*/python" "$lib" moveToOutput "share/gcc-*/python" "$lib"
for i in "$lib"/lib/*.{la,py}; do for i in "$lib/${targetConfig}"/lib/*.{la,py}; do
substituteInPlace "$i" --replace "$out" "$lib" substituteInPlace "$i" --replace "$out" "$lib"
done done
if [ -n "$enableMultilib" ]; then if [ -n "$enableMultilib" ]; then
moveToOutput "lib64/lib*.so*" "$lib" moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.so*" "$lib"
moveToOutput "lib64/lib*.la" "$lib" moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.la" "$lib"
moveToOutput "lib64/lib*.dylib" "$lib" moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.dylib" "$lib"
for i in "$lib"/lib64/*.{la,py}; do for i in "$lib/${targetConfig}"/lib64/*.{la,py}; do
substituteInPlace "$i" --replace "$out" "$lib" substituteInPlace "$i" --replace "$out" "$lib"
done done
fi fi
@ -247,13 +247,6 @@ postInstall() {
NEW_RPATH=`echo "$PREV_RPATH" | sed 's,:[^:]*bootstrap-tools/lib,,g'` NEW_RPATH=`echo "$PREV_RPATH" | sed 's,:[^:]*bootstrap-tools/lib,,g'`
patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK
done done
# For some reason the libs retain RPATH to $out
for i in "$lib"/lib/{libtsan,libasan,libubsan}.so.*.*.*; do
PREV_RPATH=`patchelf --print-rpath "$i"`
NEW_RPATH=`echo "$PREV_RPATH" | sed "s,:${out}[^:]*,,g"`
patchelf --set-rpath "$NEW_RPATH" "$i" && echo OK
done
fi fi
if type "install_name_tool"; then if type "install_name_tool"; then