From 829bdc1cb00ee1674749e132595c4a82a2fd72a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 29 Dec 2012 15:08:18 +0100 Subject: [PATCH 1/2] glibc: making 2.17 the glibc to use cross-building. --- pkgs/top-level/all-packages.nix | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 75c532b9be62..f8bda7883334 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3663,7 +3663,7 @@ let glibc = glibc217; - glibcCross = glibc213Cross; + glibcCross = glibc217Cross; glibc213 = (callPackage ../development/libraries/glibc/2.13 { kernelHeaders = linuxHeaders; @@ -3673,7 +3673,15 @@ let gccCross = null; }) // (if crossSystem != null then { crossDrv = glibc213Cross; } else {}); - glibc213Cross = forceNativeDrv (makeOverridable (import ../development/libraries/glibc/2.13) + glibc217 = callPackage ../development/libraries/glibc/2.17 { + kernelHeaders = linuxHeaders; + installLocales = config.glibc.locales or false; + machHeaders = null; + hurdHeaders = null; + gccCross = null; + }; + + glibc217Cross = forceNativeDrv (makeOverridable (import ../development/libraries/glibc/2.17) (let crossGNU = crossSystem != null && crossSystem.config == "i586-pc-gnu"; in { inherit stdenv fetchurl; @@ -3686,13 +3694,6 @@ let inherit fetchgit; })); - glibc217 = callPackage ../development/libraries/glibc/2.17 { - kernelHeaders = linuxHeaders; - installLocales = config.glibc.locales or false; - machHeaders = null; - hurdHeaders = null; - gccCross = null; - }; # We can choose: libcCrossChooser = name : if name == "glibc" then glibcCross From b8c0279b9f9870553b5606898707bb0fdeddb018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Sat, 29 Dec 2012 15:11:32 +0100 Subject: [PATCH 2/2] Unifying buildergo.sh and builder.sh into one. --- pkgs/build-support/gcc-wrapper/builder.sh | 2 + pkgs/build-support/gcc-wrapper/buildergo.sh | 194 -------------------- pkgs/build-support/gcc-wrapper/default.nix | 8 +- 3 files changed, 3 insertions(+), 201 deletions(-) delete mode 100644 pkgs/build-support/gcc-wrapper/buildergo.sh diff --git a/pkgs/build-support/gcc-wrapper/builder.sh b/pkgs/build-support/gcc-wrapper/builder.sh index ad2b8003f090..1c79c29b19ce 100644 --- a/pkgs/build-support/gcc-wrapper/builder.sh +++ b/pkgs/build-support/gcc-wrapper/builder.sh @@ -152,6 +152,8 @@ fi mkGccWrapper $out/bin/gcj $gccPath/gcj || true +mkGccWrapper $out/bin/gccgo $gccPath/gccgo || true + mkGccWrapper $out/bin/gnatgcc $gccPath/gnatgcc || true mkGnatWrapper $out/bin/gnatmake $gccPath/gnatmake || true mkGnatWrapper $out/bin/gnatbind $gccPath/gnatbind || true diff --git a/pkgs/build-support/gcc-wrapper/buildergo.sh b/pkgs/build-support/gcc-wrapper/buildergo.sh deleted file mode 100644 index cb6bfd7f0517..000000000000 --- a/pkgs/build-support/gcc-wrapper/buildergo.sh +++ /dev/null @@ -1,194 +0,0 @@ -source $stdenv/setup - - -mkdir -p $out/bin -mkdir -p $out/nix-support - - -if test -z "$nativeLibc"; then - dynamicLinker="$libc/lib/$dynamicLinker" - echo $dynamicLinker > $out/nix-support/dynamic-linker - - if test -e $libc/lib/32/ld-linux.so.2; then - echo $libc/lib/32/ld-linux.so.2 > $out/nix-support/dynamic-linker-m32 - fi - - # The "-B$libc/lib/" flag is a quick hack to force gcc to link - # against the crt1.o from our own glibc, rather than the one in - # /usr/lib. (This is only an issue when using an `impure' - # compiler/linker, i.e., one that searches /usr/lib and so on.) - # - # Unfortunately, setting -B appears to override the default search - # path. Thus, the gcc-specific "../includes-fixed" directory is - # now longer searched and glibc's header fails to - # compile, because it uses "#include_next " to find the - # limits.h file in ../includes-fixed. To remedy the problem, - # another -idirafter is necessary to add that directory again. - echo "-B$libc/lib/ -idirafter $libc/include -idirafter $gcc/lib/gcc/*/*/include-fixed" > $out/nix-support/libc-cflags - - echo "-L$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 "-dynamic-linker $dynamicLinker" > $out/nix-support/libc-ldflags-before -fi - -if test -n "$nativeTools"; then - gccPath="$nativePrefix/bin" - ldPath="$nativePrefix/bin" -else - if test -e "$gcc/lib64"; then - gccLDFlags="$gccLDFlags -L$gcc/lib64" - fi - gccLDFlags="$gccLDFlags -L$gcc/lib" - if [ -n "$langVhdl" ]; then - gccLDFlags="$gccLDFlags -L$zlib/lib" - fi - echo "$gccLDFlags" > $out/nix-support/gcc-ldflags - - # GCC shows $gcc/lib in `gcc -print-search-dirs', but not - # $gcc/lib64 (even though it does actually search there...).. - # This confuses libtool. So add it to the compiler tool search - # path explicitly. - if test -e "$gcc/lib64"; then - gccCFlags="$gccCFlags -B$gcc/lib64" - fi - - # Find the gcc libraries path (may work only without multilib) - if [ -n "$langAda" ]; then - basePath=`echo $gcc/lib/*/*/*` - gccCFlags="$gccCFlags -B$basePath -I$basePath/adainclude" - - gnatCFlags="-aI$basePath/adainclude -aO$basePath/adalib" - echo "$gnatCFlags" > $out/nix-support/gnat-cflags - fi - echo "$gccCFlags" > $out/nix-support/gcc-cflags - - gccPath="$gcc/bin" - ldPath="$binutils/bin" -fi - - -doSubstitute() { - local src=$1 - local dst=$2 - # Can't use substitute() here, because replace may not have been - # built yet (in the bootstrap). - sed \ - -e "s^@out@^$out^g" \ - -e "s^@shell@^$shell^g" \ - -e "s^@gcc@^$gcc^g" \ - -e "s^@gccProg@^$gccProg^g" \ - -e "s^@gnatProg@^$gnatProg^g" \ - -e "s^@gnatlinkProg@^$gnatlinkProg^g" \ - -e "s^@binutils@^$binutils^g" \ - -e "s^@coreutils@^$coreutils^g" \ - -e "s^@libc@^$libc^g" \ - -e "s^@ld@^$ldPath/ld^g" \ - < "$src" > "$dst" -} - - -# Make wrapper scripts around gcc, g++, and gfortran. 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 1 - fi - - gccProg="$src" - doSubstitute "$gccWrapper" "$dst" - chmod +x "$dst" -} - -mkGnatWrapper() { - local dst=$1 - local src=$2 - - if ! test -f "$src"; then - echo "$src does not exist (skipping)" - return 1 - fi - - gnatProg="$src" - doSubstitute "$gnatWrapper" "$dst" - chmod +x "$dst" -} - -mkGnatLinkWrapper() { - local dst=$1 - local src=$2 - - if ! test -f "$src"; then - echo "$src does not exist (skipping)" - return 1 - fi - - gnatlinkProg="$src" - doSubstitute "$gnatlinkWrapper" "$dst" - chmod +x "$dst" -} - -if mkGccWrapper $out/bin/gcc $gccPath/gcc -then - ln -sv gcc $out/bin/cc -fi - -if mkGccWrapper $out/bin/g++ $gccPath/g++ -then - ln -sv g++ $out/bin/c++ -fi - -if mkGccWrapper $out/bin/gfortran $gccPath/gfortran -then - ln -sv gfortran $out/bin/g77 - ln -sv gfortran $out/bin/f77 -fi - -mkGccWrapper $out/bin/gcj $gccPath/gcj || true - -mkGccWrapper $out/bin/gccgo $gccPath/gccgo || true - -mkGccWrapper $out/bin/gnatgcc $gccPath/gnatgcc || true -mkGnatWrapper $out/bin/gnatmake $gccPath/gnatmake || true -mkGnatWrapper $out/bin/gnatbind $gccPath/gnatbind || true -mkGnatLinkWrapper $out/bin/gnatlink $gccPath/gnatlink || true - -if [ -f $gccPath/ghdl ]; then - ln -sf $gccPath/ghdl $out/bin/ghdl -fi - -# Create a symlink to as (the assembler). This is useful when a -# gcc-wrapper is installed in a user environment, as it ensures that -# the right assembler is called. -ln -s $ldPath/as $out/bin/as - - -# Make a wrapper around the linker. -doSubstitute "$ldWrapper" "$out/bin/ld" -chmod +x "$out/bin/ld" - - -# Emit a setup hook. Also store the path to the original GCC and -# Glibc. -test -n "$gcc" && echo $gcc > $out/nix-support/orig-gcc -test -n "$libc" && echo $libc > $out/nix-support/orig-libc - -doSubstitute "$addFlags" "$out/nix-support/add-flags.sh" - -doSubstitute "$setupHook" "$out/nix-support/setup-hook" - -cp -p $utils $out/nix-support/utils.sh - - -# Propagate the wrapped gcc so that if you install the wrapper, you get -# tools like gcov, the manpages, etc. as well (including for binutils -# and Glibc). -if test -z "$nativeTools"; then - echo $gcc $binutils $libc > $out/nix-support/propagated-user-env-packages -fi diff --git a/pkgs/build-support/gcc-wrapper/default.nix b/pkgs/build-support/gcc-wrapper/default.nix index 5a4ccba5eb38..f696fbe2d36d 100644 --- a/pkgs/build-support/gcc-wrapper/default.nix +++ b/pkgs/build-support/gcc-wrapper/default.nix @@ -25,7 +25,7 @@ let langGo = if nativeTools then false else gcc ? langGo && gcc.langGo; in -stdenv.mkDerivation ({ +stdenv.mkDerivation { name = (if name != "" then name else gccName + "-wrapper") + (if gcc != null && gccVersion != "" then "-" + gccVersion else ""); @@ -91,9 +91,3 @@ stdenv.mkDerivation ({ abort "don't know the name of the dynamic linker for this platform") else ""; } -# This go wrapper should be reworked in stdenv-updates. -// (if langGo then -{ - inherit langGo; - builder = ./buildergo.sh; -} else {}))