gcc-cross-wrapper: Remove in favor of newly-cross-supporting cc-wrapper
This commit is contained in:
parent
8a7433fca4
commit
121e7d9335
@ -1,5 +0,0 @@
|
|||||||
export NIX_CROSS_CFLAGS_COMPILE="@cflagsCompile@ $NIX_CROSS_CFLAGS_COMPILE"
|
|
||||||
export NIX_CROSS_CFLAGS_LINK="@cflagsLink@ $NIX_CROSS_CFLAGS_LINK"
|
|
||||||
export NIX_CROSS_LDFLAGS="@ldflags@ $NIX_CROSS_LDFLAGS"
|
|
||||||
export NIX_CROSS_LDFLAGS_BEFORE="@ldflagsBefore@ $NIX_CROSS_LDFLAGS_BEFORE"
|
|
||||||
export NIX_CROSS_GLIBC_FLAGS_SET=1
|
|
@ -1,120 +0,0 @@
|
|||||||
source $stdenv/setup
|
|
||||||
|
|
||||||
mkdir $out
|
|
||||||
mkdir $out/bin
|
|
||||||
mkdir $out/nix-support
|
|
||||||
|
|
||||||
# Force gcc to use ld-wrapper.sh when calling ld.
|
|
||||||
cflagsCompile="-B$out/bin/"
|
|
||||||
|
|
||||||
if test -z "$nativeLibc" -a -n "$libc"; then
|
|
||||||
cflagsCompile="$cflagsCompile -B$gccLibs/lib -B$libc/lib/ -isystem $libc_dev/include"
|
|
||||||
ldflags="$ldflags -L$libc/lib"
|
|
||||||
# Get the proper dynamic linker for glibc and uclibc.
|
|
||||||
dlinker=`eval 'echo $libc/lib/ld*.so.?'`
|
|
||||||
if [ -n "$dlinker" ]; then
|
|
||||||
ldflagsBefore="-dynamic-linker $dlinker"
|
|
||||||
|
|
||||||
# The same as above, but put into files, useful for the gcc builder.
|
|
||||||
echo $dlinker > $out/nix-support/dynamic-linker
|
|
||||||
# This trick is to avoid dependencies on the cross-toolchain gcc
|
|
||||||
# for libgcc, libstdc++, ...
|
|
||||||
# -L is for libtool's .la files, and -rpath for the usual fixupPhase
|
|
||||||
# shrinking rpaths.
|
|
||||||
if [ -n "$gccLibs" ]; then
|
|
||||||
ldflagsBefore="$ldflagsBefore -rpath $gccLibs/lib"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$osxMinVersion" ]; then
|
|
||||||
cflagsCompile="$cflagsCompile -mmacosx-version-min=$osxMinVersion"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$cflagsCompile -B$libc/lib/ -idirafter $libc/include -idirafter $gcc/lib/gcc/*/*/include-fixed" > $out/nix-support/libc-cflags
|
|
||||||
|
|
||||||
echo "-L$libc/lib -rpath $libc/lib -rpath-link $libc/lib" > $out/nix-support/libc-ldflags
|
|
||||||
|
|
||||||
# The dynamic linker is passed in `ldflagsBefore' to allow
|
|
||||||
# explicit overrides of the dynamic linker by callers to gcc/ld
|
|
||||||
# (the *last* value counts, so ours should come first).
|
|
||||||
echo "$ldflagsBefore" > $out/nix-support/libc-ldflags-before
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$nativeTools"; then
|
|
||||||
gccPath="$nativePrefix/bin"
|
|
||||||
ldPath="$nativePrefix/bin"
|
|
||||||
else
|
|
||||||
ldflags="$ldflags -L$gcc/lib -L$gcc/lib64"
|
|
||||||
gccPath="$gcc/bin"
|
|
||||||
ldPath="$binutils/$crossConfig/bin"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
doSubstitute() {
|
|
||||||
local src=$1
|
|
||||||
local dst=$2
|
|
||||||
substitute "$src" "$dst" \
|
|
||||||
--subst-var "out" \
|
|
||||||
--subst-var "shell" \
|
|
||||||
--subst-var "gcc" \
|
|
||||||
--subst-var "gccProg" \
|
|
||||||
--subst-var "binutils" \
|
|
||||||
--subst-var "libc" \
|
|
||||||
--subst-var "cflagsCompile" \
|
|
||||||
--subst-var "cflagsLink" \
|
|
||||||
--subst-var "ldflags" \
|
|
||||||
--subst-var "ldflagsBefore" \
|
|
||||||
--subst-var "ldPath" \
|
|
||||||
--subst-var-by "ld" "$ldPath/ld"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Make wrapper scripts around gcc, g++, and g77. Also make symlinks
|
|
||||||
# cc, c++, and f77.
|
|
||||||
mkGccWrapper() {
|
|
||||||
local dst=$1
|
|
||||||
local src=$2
|
|
||||||
|
|
||||||
if ! test -f "$src"; then
|
|
||||||
echo "$src does not exist (skipping)"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
gccProg="$src"
|
|
||||||
doSubstitute "$gccWrapper" "$dst"
|
|
||||||
chmod +x "$dst"
|
|
||||||
}
|
|
||||||
|
|
||||||
mkGccWrapper $out/bin/$crossConfig-gcc $gccPath/$crossConfig-gcc
|
|
||||||
#ln -s gcc $out/bin/cc
|
|
||||||
|
|
||||||
mkGccWrapper $out/bin/$crossConfig-g++ $gccPath/$crossConfig-g++
|
|
||||||
ln -s $crossConfig-g++ $out/bin/$crossConfig-c++
|
|
||||||
|
|
||||||
mkGccWrapper $out/bin/$crossConfig-cpp $gccPath/$crossConfig-cpp
|
|
||||||
|
|
||||||
mkGccWrapper $out/bin/$crossConfig-g77 $gccPath/$crossConfig-g77
|
|
||||||
ln -s $crossConfig-g77 $out/bin/$crossConfig-f77
|
|
||||||
|
|
||||||
ln -s $binutils/bin/$crossConfig-ar $out/bin/$crossConfig-ar
|
|
||||||
ln -s $binutils/bin/$crossConfig-as $out/bin/$crossConfig-as
|
|
||||||
ln -s $binutils/bin/$crossConfig-nm $out/bin/$crossConfig-nm
|
|
||||||
ln -s $binutils/bin/$crossConfig-strip $out/bin/$crossConfig-strip
|
|
||||||
|
|
||||||
|
|
||||||
# Make a wrapper around the linker.
|
|
||||||
doSubstitute "$ldWrapper" "$out/bin/$crossConfig-ld"
|
|
||||||
chmod +x "$out/bin/$crossConfig-ld"
|
|
||||||
|
|
||||||
|
|
||||||
# Emit a setup hook. Also store the path to the original GCC and
|
|
||||||
# Glibc.
|
|
||||||
test -n "$gcc" && echo $gcc > $out/nix-support/orig-cc
|
|
||||||
test -n "$libc" && echo $libc > $out/nix-support/orig-libc
|
|
||||||
test -n "$libc_dev" && echo $libc_dev > $out/nix-support/orig-libc-dev
|
|
||||||
|
|
||||||
doSubstitute "$addFlags" "$out/nix-support/add-flags"
|
|
||||||
|
|
||||||
doSubstitute "$setupHook" "$out/nix-support/setup-hook"
|
|
||||||
|
|
||||||
cp -p $utils $out/nix-support/utils
|
|
@ -1,65 +0,0 @@
|
|||||||
# The Nix `gcc' stdenv.mkDerivation is not directly usable, since it doesn't
|
|
||||||
# know where the C library and standard header files are. Therefore
|
|
||||||
# the compiler produced by that package cannot be installed directly
|
|
||||||
# in a user environment and used from the command line. This
|
|
||||||
# stdenv.mkDerivation provides a wrapper that sets up the right environment
|
|
||||||
# variables so that the compiler and the linker just "work".
|
|
||||||
|
|
||||||
{ name ? "", stdenv, nativeTools, nativeLibc, noLibc ? false, nativePrefix ? ""
|
|
||||||
, gcc ? null, libc ? null, binutils ? null, shell ? "", cross
|
|
||||||
}:
|
|
||||||
|
|
||||||
assert nativeTools -> nativePrefix != "";
|
|
||||||
assert !nativeTools -> gcc != null && binutils != null;
|
|
||||||
assert !noLibc -> (!nativeLibc -> libc != null);
|
|
||||||
|
|
||||||
let
|
|
||||||
chosenName = if name == "" then gcc.name else name;
|
|
||||||
gccLibs = stdenv.mkDerivation {
|
|
||||||
name = chosenName + "-libs";
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
echo $out
|
|
||||||
mkdir -p "$out"
|
|
||||||
|
|
||||||
if [ -d "${gcc}/${cross.config}/lib" ]
|
|
||||||
then
|
|
||||||
cp -Rd "${gcc}/${cross.config}/lib" "$out/lib"
|
|
||||||
chmod -R +w "$out/lib"
|
|
||||||
for a in "$out/lib/"*.la; do
|
|
||||||
sed -i -e "s,${gcc}/${cross.config}/lib,$out/lib,g" $a
|
|
||||||
done
|
|
||||||
rm -f "$out/lib/"*.py
|
|
||||||
else
|
|
||||||
# The MinGW cross-compiler falls into this category.
|
|
||||||
mkdir "$out/lib"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
builder = ./builder.sh;
|
|
||||||
setupHook = ./setup-hook.sh;
|
|
||||||
gccWrapper = ./gcc-wrapper.sh;
|
|
||||||
ldWrapper = ./ld-wrapper.sh;
|
|
||||||
utils = ./utils.sh;
|
|
||||||
addFlags = ./add-flags;
|
|
||||||
inherit nativeTools nativeLibc nativePrefix gcc binutils;
|
|
||||||
libc = if libc ? out then libc.out else libc;
|
|
||||||
libc_dev = if libc ? dev then libc.dev else libc;
|
|
||||||
crossConfig = if cross != null then cross.config else null;
|
|
||||||
osxMinVersion = cross.osxMinVersion or null;
|
|
||||||
gccLibs = if gcc != null then gccLibs else null;
|
|
||||||
name = chosenName;
|
|
||||||
langC = if nativeTools then true else gcc.langC;
|
|
||||||
langCC = if nativeTools then true else gcc.langCC;
|
|
||||||
langF77 = if nativeTools then false else gcc ? langFortran;
|
|
||||||
shell = if shell == "" then stdenv.shell else shell;
|
|
||||||
meta = if gcc != null then gcc.meta else
|
|
||||||
{ description = "System C compiler wrapper";
|
|
||||||
};
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
target = cross;
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,117 +0,0 @@
|
|||||||
#! @shell@ -e
|
|
||||||
|
|
||||||
if test -n "$NIX_CC_WRAPPER_START_HOOK"; then
|
|
||||||
source "$NIX_CC_WRAPPER_START_HOOK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$NIX_CROSS_GLIBC_FLAGS_SET"; then
|
|
||||||
source @out@/nix-support/add-flags
|
|
||||||
fi
|
|
||||||
|
|
||||||
source @out@/nix-support/utils
|
|
||||||
|
|
||||||
|
|
||||||
# Figure out if linker flags should be passed. GCC prints annoying
|
|
||||||
# warnings when they are not needed.
|
|
||||||
dontLink=0
|
|
||||||
if test "$*" = "-v" -o -z "$*"; then
|
|
||||||
dontLink=1
|
|
||||||
else
|
|
||||||
for i in "$@"; do
|
|
||||||
if test "$i" = "-c"; then
|
|
||||||
dontLink=1
|
|
||||||
elif test "$i" = "-S"; then
|
|
||||||
dontLink=1
|
|
||||||
elif test "$i" = "-E"; then
|
|
||||||
dontLink=1
|
|
||||||
elif test "$i" = "-E"; then
|
|
||||||
dontLink=1
|
|
||||||
elif test "$i" = "-M"; then
|
|
||||||
dontLink=1
|
|
||||||
elif test "$i" = "-MM"; then
|
|
||||||
dontLink=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Optionally filter out paths not refering to the store.
|
|
||||||
params=("$@")
|
|
||||||
if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE"; then
|
|
||||||
rest=()
|
|
||||||
n=0
|
|
||||||
while test $n -lt ${#params[*]}; do
|
|
||||||
p=${params[n]}
|
|
||||||
p2=${params[$((n+1))]}
|
|
||||||
if test "${p:0:3}" = "-L/" && badPath "${p:2}"; then
|
|
||||||
skip $p
|
|
||||||
elif test "$p" = "-L" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "${p:0:3}" = "-I/" && badPath "${p:2}"; then
|
|
||||||
skip $p
|
|
||||||
elif test "$p" = "-I" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "$p" = "-isystem" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
else
|
|
||||||
rest=("${rest[@]}" "$p")
|
|
||||||
fi
|
|
||||||
n=$((n + 1))
|
|
||||||
done
|
|
||||||
params=("${rest[@]}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Add the flags for the C compiler proper.
|
|
||||||
extraAfter=($NIX_CROSS_CFLAGS_COMPILE)
|
|
||||||
extraBefore=()
|
|
||||||
|
|
||||||
if test "$dontLink" != "1"; then
|
|
||||||
|
|
||||||
# Add the flags that should only be passed to the compiler when
|
|
||||||
# linking.
|
|
||||||
extraAfter=(${extraAfter[@]} $NIX_CROSS_CFLAGS_LINK)
|
|
||||||
|
|
||||||
# Add the flags that should be passed to the linker (and prevent
|
|
||||||
# `ld-wrapper' from adding NIX_CROSS_LDFLAGS again).
|
|
||||||
for i in $NIX_CROSS_LDFLAGS_BEFORE; do
|
|
||||||
if test "${i:0:3}" = "-L/"; then
|
|
||||||
extraBefore=(${extraBefore[@]} "$i")
|
|
||||||
else
|
|
||||||
extraBefore=(${extraBefore[@]} "-Wl,$i")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
for i in $NIX_CROSS_LDFLAGS; do
|
|
||||||
if test "${i:0:3}" = "-L/"; then
|
|
||||||
extraAfter=(${extraAfter[@]} "$i")
|
|
||||||
else
|
|
||||||
extraAfter=(${extraAfter[@]} "-Wl,$i")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
export NIX_CROSS_LDFLAGS_SET=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Optionally print debug info.
|
|
||||||
if test "$NIX_DEBUG" = "1"; then
|
|
||||||
echo "original flags to @gccProg@:" >&2
|
|
||||||
for i in "${params[@]}"; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
echo "extraBefore flags to @gccProg@:" >&2
|
|
||||||
for i in ${extraBefore[@]}; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
echo "extraAfter flags to @gccProg@:" >&2
|
|
||||||
for i in ${extraAfter[@]}; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$NIX_CC_WRAPPER_EXEC_HOOK"; then
|
|
||||||
source "$NIX_CC_WRAPPER_EXEC_HOOK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# We want gcc to call the wrapper linker, not that of binutils.
|
|
||||||
export PATH="@ldPath@:$PATH"
|
|
||||||
|
|
||||||
exec @gccProg@ ${extraBefore[@]} "${params[@]}" ${extraAfter[@]}
|
|
@ -1,145 +0,0 @@
|
|||||||
#! @shell@ -e
|
|
||||||
|
|
||||||
if test -n "$NIX_LD_WRAPPER_START_HOOK"; then
|
|
||||||
source "$NIX_LD_WRAPPER_START_HOOK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$NIX_CROSS_GLIBC_FLAGS_SET"; then
|
|
||||||
source @out@/nix-support/add-flags
|
|
||||||
fi
|
|
||||||
|
|
||||||
source @out@/nix-support/utils
|
|
||||||
|
|
||||||
|
|
||||||
# Optionally filter out paths not refering to the store.
|
|
||||||
params=("$@")
|
|
||||||
if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE" \
|
|
||||||
-a \( -z "$NIX_IGNORE_LD_THROUGH_GCC" -o -z "$NIX_CROSS_LDFLAGS_SET" \); then
|
|
||||||
rest=()
|
|
||||||
n=0
|
|
||||||
while test $n -lt ${#params[*]}; do
|
|
||||||
p=${params[n]}
|
|
||||||
p2=${params[$((n+1))]}
|
|
||||||
if test "${p:0:3}" = "-L/" && badPath "${p:2}"; then
|
|
||||||
skip $p
|
|
||||||
elif test "$p" = "-L" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "$p" = "-rpath" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "$p" = "-dynamic-linker" && badPath "$p2"; then
|
|
||||||
n=$((n + 1)); skip $p2
|
|
||||||
elif test "${p:0:1}" = "/" && badPath "$p"; then
|
|
||||||
# We cannot skip this; barf.
|
|
||||||
echo "impure path \`$p' used in link" >&2
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
rest=("${rest[@]}" "$p")
|
|
||||||
fi
|
|
||||||
n=$((n + 1))
|
|
||||||
done
|
|
||||||
params=("${rest[@]}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
extra=()
|
|
||||||
extraBefore=()
|
|
||||||
|
|
||||||
if test -z "$NIX_CROSS_LDFLAGS_SET"; then
|
|
||||||
extra=(${extra[@]} $NIX_CROSS_LDFLAGS)
|
|
||||||
extraBefore=(${extraBefore[@]} $NIX_CROSS_LDFLAGS_BEFORE)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Add all used dynamic libraries to the rpath.
|
|
||||||
if test "$NIX_DONT_SET_RPATH" != "1"; then
|
|
||||||
|
|
||||||
# First, find all -L... switches.
|
|
||||||
allParams=("${params[@]}" ${extra[@]})
|
|
||||||
libPath=""
|
|
||||||
addToLibPath() {
|
|
||||||
local path="$1"
|
|
||||||
if test "${path:0:1}" != "/"; then return 0; fi
|
|
||||||
case "$path" in
|
|
||||||
*..*|*./*|*/.*|*//*)
|
|
||||||
local path2
|
|
||||||
if path2=$(readlink -f "$path"); then
|
|
||||||
path="$path2"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
case $libPath in
|
|
||||||
*\ $path\ *) return 0 ;;
|
|
||||||
esac
|
|
||||||
libPath="$libPath $path "
|
|
||||||
}
|
|
||||||
n=0
|
|
||||||
while test $n -lt ${#allParams[*]}; do
|
|
||||||
p=${allParams[n]}
|
|
||||||
p2=${allParams[$((n+1))]}
|
|
||||||
if test "${p:0:3}" = "-L/"; then
|
|
||||||
addToLibPath ${p:2}
|
|
||||||
elif test "$p" = "-L"; then
|
|
||||||
addToLibPath ${p2}
|
|
||||||
n=$((n + 1))
|
|
||||||
fi
|
|
||||||
n=$((n + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
# Second, for each -l... switch, find the directory containing the
|
|
||||||
# library and add it to the rpath.
|
|
||||||
rpath=""
|
|
||||||
addToRPath() {
|
|
||||||
# If the path is not in the store, don't add it to the rpath.
|
|
||||||
# This typically happens for libraries in /tmp that are later
|
|
||||||
# copied to $out/lib. If not, we're screwed.
|
|
||||||
if test "${1:0:${#NIX_STORE}}" != "$NIX_STORE"; then return 0; fi
|
|
||||||
case $rpath in
|
|
||||||
*\ $1\ *) return 0 ;;
|
|
||||||
esac
|
|
||||||
rpath="$rpath $1 "
|
|
||||||
}
|
|
||||||
findLib() {
|
|
||||||
for i in $libPath; do
|
|
||||||
if test -f $i/lib$1.so; then
|
|
||||||
addToRPath $i
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
n=0
|
|
||||||
while test $n -lt ${#allParams[*]}; do
|
|
||||||
p=${allParams[n]}
|
|
||||||
p2=${allParams[$((n+1))]}
|
|
||||||
if test "${p:0:2}" = "-l"; then
|
|
||||||
findLib ${p:2}
|
|
||||||
elif test "$p" = "-l"; then
|
|
||||||
# I haven't seen `-l foo', but you never know...
|
|
||||||
findLib ${p2}
|
|
||||||
n=$((n + 1))
|
|
||||||
fi
|
|
||||||
n=$((n + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
# Finally, add `-rpath' switches.
|
|
||||||
for i in $rpath; do
|
|
||||||
extra=(${extra[@]} -rpath $i -rpath-link $i)
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Optionally print debug info.
|
|
||||||
if test "$NIX_DEBUG" = "1"; then
|
|
||||||
echo "original flags to @ld@:" >&2
|
|
||||||
for i in "${params[@]}"; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
echo "extra flags to @ld@:" >&2
|
|
||||||
for i in ${extra[@]}; do
|
|
||||||
echo " $i" >&2
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$NIX_LD_WRAPPER_EXEC_HOOK"; then
|
|
||||||
source "$NIX_LD_WRAPPER_EXEC_HOOK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec @ld@ ${extraBefore[@]} "${params[@]}" ${extra[@]}
|
|
@ -1,90 +0,0 @@
|
|||||||
NIX_CROSS_CFLAGS_COMPILE=""
|
|
||||||
NIX_CROSS_LDFLAGS=""
|
|
||||||
|
|
||||||
crossAddCVars () {
|
|
||||||
if test -d $1/include; then
|
|
||||||
export NIX_CROSS_CFLAGS_COMPILE="$NIX_CROSS_CFLAGS_COMPILE -I$1/include"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -d $1/lib; then
|
|
||||||
export NIX_CROSS_LDFLAGS="$NIX_CROSS_LDFLAGS -L$1/lib -rpath-link $1/lib"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
crossEnvHooks+=(crossAddCVars)
|
|
||||||
|
|
||||||
crossStripDirs() {
|
|
||||||
local dirs="$1"
|
|
||||||
local stripFlags="$2"
|
|
||||||
local dirsNew=
|
|
||||||
|
|
||||||
for d in ${dirs}; do
|
|
||||||
if test -d "$prefix/$d"; then
|
|
||||||
dirsNew="${dirsNew} $prefix/$d "
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
dirs=${dirsNew}
|
|
||||||
|
|
||||||
if test -n "${dirs}"; then
|
|
||||||
header "cross stripping (with flags $stripFlags) in $dirs"
|
|
||||||
# libc_nonshared.a should never be stripped, or builds will break.
|
|
||||||
find $dirs -type f -print0 | xargs -0 ${xargsFlags:--r} $crossConfig-strip $stripFlags || true
|
|
||||||
stopNest
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
crossStrip () {
|
|
||||||
# In cross_renaming we may rename dontCrossStrip to dontStrip, and
|
|
||||||
# dontStrip to dontNativeStrip.
|
|
||||||
# TODO: strip _only_ ELF executables, and return || fail here...
|
|
||||||
if test -z "$dontCrossStrip"; then
|
|
||||||
stripDebugList=${stripDebugList:-lib lib64 libexec bin sbin}
|
|
||||||
if test -n "$stripDebugList"; then
|
|
||||||
crossStripDirs "$stripDebugList" "${stripDebugFlags:--S}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
stripAllList=${stripAllList:-}
|
|
||||||
if test -n "$stripAllList"; then
|
|
||||||
crossStripDirs "$stripAllList" "${stripAllFlags:--s}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
preDistPhases=(${preDistPhases[@]} crossStrip)
|
|
||||||
|
|
||||||
|
|
||||||
# Note: these come *after* $out in the PATH (see setup.sh).
|
|
||||||
|
|
||||||
if test -n "@gcc@"; then
|
|
||||||
PATH=$PATH:@gcc@/bin
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "@binutils@"; then
|
|
||||||
PATH=$PATH:@binutils@/bin
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "@libc@"; then
|
|
||||||
PATH=$PATH:@libc@/bin
|
|
||||||
crossAddCVars @libc@
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$dontSetConfigureCross" != "1"; then
|
|
||||||
configureFlags="$configureFlags --build=$system --host=$crossConfig"
|
|
||||||
fi
|
|
||||||
# Disabling the tests when cross compiling, as usually the tests are meant for
|
|
||||||
# native compilations.
|
|
||||||
doCheck=""
|
|
||||||
|
|
||||||
# Don't strip foreign binaries with native "strip" tool.
|
|
||||||
dontStrip=1
|
|
||||||
|
|
||||||
# Add the output as an rpath.
|
|
||||||
if test "$NIX_NO_SELF_RPATH" != "1"; then
|
|
||||||
export NIX_CROSS_LDFLAGS="-rpath $out/lib -rpath-link $out/lib $NIX_CROSS_LDFLAGS"
|
|
||||||
if test -n "$NIX_LIB64_IN_SELF_RPATH"; then
|
|
||||||
export NIX_CROSS_LDFLAGS="-rpath $out/lib64 -rpath-link $out/lib $NIX_CROSS_LDFLAGS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
export CC=${crossConfig}-gcc
|
|
||||||
export CXX=${crossConfig}-g++
|
|
@ -1,24 +0,0 @@
|
|||||||
skip () {
|
|
||||||
if test "$NIX_DEBUG" = "1"; then
|
|
||||||
echo "skipping impure path $1" >&2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Checks whether a path is impure. E.g., `/lib/foo.so' is impure, but
|
|
||||||
# `/nix/store/.../lib/foo.so' isn't.
|
|
||||||
badPath() {
|
|
||||||
local p=$1
|
|
||||||
|
|
||||||
# Relative paths are okay (since they're presumably relative to
|
|
||||||
# the temporary build directory).
|
|
||||||
if test "${p:0:1}" != "/"; then return 1; fi
|
|
||||||
|
|
||||||
# Otherwise, the path should refer to the store or some temporary
|
|
||||||
# directory (including the build directory).
|
|
||||||
test \
|
|
||||||
"$p" != "/dev/null" -a \
|
|
||||||
"${p:0:${#NIX_STORE}}" != "$NIX_STORE" -a \
|
|
||||||
"${p:0:4}" != "/tmp" -a \
|
|
||||||
"${p:0:${#NIX_BUILD_TOP}}" != "$NIX_BUILD_TOP"
|
|
||||||
}
|
|
@ -5168,8 +5168,8 @@ with pkgs;
|
|||||||
if targetPlatform.libc == "msvcrt" then windows.mingw_w64_headers
|
if targetPlatform.libc == "msvcrt" then windows.mingw_w64_headers
|
||||||
else if targetPlatform.libc == "libSystem" then darwin.xcode
|
else if targetPlatform.libc == "libSystem" then darwin.xcode
|
||||||
else null;
|
else null;
|
||||||
in wrapGCCCross {
|
in wrapCCCross {
|
||||||
gcc = forcedNativePackages.gcc.cc.override {
|
cc = forcedNativePackages.gcc.cc.override {
|
||||||
crossStageStatic = true;
|
crossStageStatic = true;
|
||||||
langCC = false;
|
langCC = false;
|
||||||
libcCross = libcCross1;
|
libcCross = libcCross1;
|
||||||
@ -5179,19 +5179,17 @@ with pkgs;
|
|||||||
};
|
};
|
||||||
libc = libcCross1;
|
libc = libcCross1;
|
||||||
inherit (forcedNativePackages) binutils;
|
inherit (forcedNativePackages) binutils;
|
||||||
cross = targetPlatform;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Only needed for mingw builds
|
# Only needed for mingw builds
|
||||||
gccCrossMingw2 = assert targetPlatform != buildPlatform; wrapGCCCross {
|
gccCrossMingw2 = assert targetPlatform != buildPlatform; wrapCCCross {
|
||||||
gcc = gccCrossStageStatic.gcc;
|
cc = gccCrossStageStatic.gcc;
|
||||||
libc = windows.mingw_headers2;
|
libc = windows.mingw_headers2;
|
||||||
inherit (forcedNativePackages) binutils;
|
inherit (forcedNativePackages) binutils;
|
||||||
cross = targetPlatform;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
gccCrossStageFinal = assert targetPlatform != buildPlatform; wrapGCCCross {
|
gccCrossStageFinal = assert targetPlatform != buildPlatform; wrapCCCross {
|
||||||
gcc = forcedNativePackages.gcc.cc.override {
|
cc = forcedNativePackages.gcc.cc.override {
|
||||||
crossStageStatic = false;
|
crossStageStatic = false;
|
||||||
|
|
||||||
# Why is this needed?
|
# Why is this needed?
|
||||||
@ -5199,7 +5197,6 @@ with pkgs;
|
|||||||
};
|
};
|
||||||
libc = libcCross;
|
libc = libcCross;
|
||||||
inherit (forcedNativePackages) binutils;
|
inherit (forcedNativePackages) binutils;
|
||||||
cross = targetPlatform;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
gcc45 = lowPrio (wrapCC (callPackage ../development/compilers/gcc/4.5 {
|
gcc45 = lowPrio (wrapCC (callPackage ../development/compilers/gcc/4.5 {
|
||||||
@ -5924,14 +5921,19 @@ with pkgs;
|
|||||||
libc = glibc;
|
libc = glibc;
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapGCCCross =
|
wrapCCCross =
|
||||||
{gcc, libc, binutils, cross, shell ? "", name ? "gcc-cross-wrapper"}:
|
{cc, libc, binutils, shell ? "", name ? "gcc-cross-wrapper"}:
|
||||||
|
|
||||||
forcedNativePackages.callPackage ../build-support/gcc-cross-wrapper {
|
forcedNativePackages.ccWrapperFun {
|
||||||
nativeTools = false;
|
nativeTools = false;
|
||||||
nativeLibc = false;
|
nativeLibc = false;
|
||||||
noLibc = (libc == null);
|
noLibc = (libc == null);
|
||||||
inherit gcc binutils libc shell name cross;
|
|
||||||
|
dyld = if stdenv.isDarwin then darwin.dyld else null;
|
||||||
|
isGNU = cc.isGNU or false;
|
||||||
|
isClang = cc.isClang or false;
|
||||||
|
|
||||||
|
inherit cc binutils libc shell name;
|
||||||
};
|
};
|
||||||
|
|
||||||
# prolog
|
# prolog
|
||||||
|
Loading…
x
Reference in New Issue
Block a user