fixing libcCross related flags

(excluding darwin and mingw for now)
This commit is contained in:
Eric Litak 2016-05-29 09:27:47 -07:00
parent e8ca9dca53
commit 7399d0949c
3 changed files with 24 additions and 14 deletions

View File

@ -44,7 +44,8 @@ stdenv.mkDerivation {
ldWrapper = ./ld-wrapper.sh; ldWrapper = ./ld-wrapper.sh;
utils = ./utils.sh; utils = ./utils.sh;
addFlags = ./add-flags; addFlags = ./add-flags;
inherit nativeTools nativeLibc nativePrefix gcc libc binutils; inherit nativeTools nativeLibc nativePrefix gcc binutils;
libc = if libc ? out then libc.out else libc;
crossConfig = if cross != null then cross.config else null; crossConfig = if cross != null then cross.config else null;
osxMinVersion = cross.osxMinVersion or null; osxMinVersion = cross.osxMinVersion or null;
gccLibs = if gcc != null then gccLibs else null; gccLibs = if gcc != null then gccLibs else null;

View File

@ -256,9 +256,9 @@ stdenv.mkDerivation ({
sed -i "${gnu_h}" \ sed -i "${gnu_h}" \
-es'|LIB_SPEC *"\(.*\)$|LIB_SPEC "${extraLibSpec} \1|g' -es'|LIB_SPEC *"\(.*\)$|LIB_SPEC "${extraLibSpec} \1|g'
echo "setting \`NATIVE_SYSTEM_HEADER_DIR' and \`STANDARD_INCLUDE_DIR' to \`${libc}/include'..." echo "setting \`NATIVE_SYSTEM_HEADER_DIR' and \`STANDARD_INCLUDE_DIR' to \`${libc.dev}/include'..."
sed -i "${gnu_h}" \ sed -i "${gnu_h}" \
-es'|#define STANDARD_INCLUDE_DIR.*$|#define STANDARD_INCLUDE_DIR "${libc}/include"|g' -es'|#define STANDARD_INCLUDE_DIR.*$|#define STANDARD_INCLUDE_DIR "${libc.dev}/include"|g'
'' ''
else if cross != null || stdenv.cc.libc != null then else if cross != null || stdenv.cc.libc != null then
# On NixOS, use the right path to the dynamic linker instead of # On NixOS, use the right path to the dynamic linker instead of
@ -272,7 +272,7 @@ stdenv.mkDerivation ({
grep -q LIBC_DYNAMIC_LINKER "$header" || continue grep -q LIBC_DYNAMIC_LINKER "$header" || continue
echo " fixing \`$header'..." echo " fixing \`$header'..."
sed -i "$header" \ sed -i "$header" \
-e 's|define[[:blank:]]*\([UCG]\+\)LIBC_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define \1LIBC_DYNAMIC_LINKER\2 "${libc}\3"|g' -e 's|define[[:blank:]]*\([UCG]\+\)LIBC_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define \1LIBC_DYNAMIC_LINKER\2 "${libc.out}\3"|g'
done done
'' ''
else null; else null;
@ -482,15 +482,28 @@ stdenv.mkDerivation ({
++ optional (libpthread != null) libpthread))); ++ optional (libpthread != null) libpthread)));
EXTRA_TARGET_CFLAGS = EXTRA_TARGET_CFLAGS =
if cross != null && libcCross != null if cross != null && libcCross != null then [
then "-idirafter ${libcCross}/include" "-idirafter ${libcCross.dev}/include"
]
++ optionals (! crossStageStatic) [
"-B${libcCross.out}/lib"
]
else null; else null;
EXTRA_TARGET_LDFLAGS = EXTRA_TARGET_LDFLAGS =
if cross != null && libcCross != null if cross != null && libcCross != null then [
then "-B${libcCross}/lib -Wl,-L${libcCross}/lib" + "-Wl,-L${libcCross.out}/lib"
(optionalString (libpthreadCross != null) ]
" -L${libpthreadCross}/lib -Wl,${libpthreadCross.TARGET_LDFLAGS}") ++ (if crossStageStatic then [
"-B${libcCross.out}/lib"
] else [
"-Wl,-rpath,${libcCross.out}/lib"
"-Wl,-rpath-link,${libcCross.out}/lib"
])
++ optionals (libpthreadCross != null) [
"-L${libpthreadCross}/lib"
"-Wl,${libpthreadCross.TARGET_LDFLAGS}"
]
else null; else null;
passthru = passthru =

View File

@ -70,10 +70,6 @@ if test "$noSysDirs" = "1"; then
# gcj in. # gcj in.
unset LIBRARY_PATH unset LIBRARY_PATH
unset CPATH unset CPATH
if test -z "$crossStageStatic"; then
EXTRA_TARGET_CFLAGS="-B${libcCross}/lib -idirafter ${libcCross}/include"
EXTRA_TARGET_LDFLAGS="-Wl,-L${libcCross}/lib -Wl,-rpath,${libcCross}/lib -Wl,-rpath-link,${libcCross}/lib"
fi
else else
if test -z "$NIX_CC_CROSS"; then if test -z "$NIX_CC_CROSS"; then
EXTRA_TARGET_CFLAGS="$EXTRA_FLAGS" EXTRA_TARGET_CFLAGS="$EXTRA_FLAGS"