Improved support for building 32-bit binaries on x86_64-linux.
* glibc_multi: a wrapper that combines the 32-bit and 64-bit Glibcs. This is necessary so that 64-bit GCC can find gnu/stubs-32.h and the 32-bit Glibc libraries. To build glibc_multi on x86_64-linux, you still need either the i686-linux Glibc derivation from a channel, or to have configured Nix with support for forwarding the build to a i686-linux machine. In the future this may become unnecessary by providing a prebuilt binary of 32-bit Glibc somewhere (like the binaries used in the stdenvLinux bootstrap). * With glibc_multi, it becomes possible to build gcc with multilib support (i.e. it builds 32-bit and 64-bit versions of libgcc, libstdc++, etc.). svn path=/nixpkgs/trunk/; revision=12203
This commit is contained in:
parent
f960020e95
commit
48ac8018ca
|
@ -5,6 +5,7 @@
|
||||||
, texinfo ? null
|
, texinfo ? null
|
||||||
, gmp, mpfr
|
, gmp, mpfr
|
||||||
, bison ? null, flex ? null
|
, bison ? null, flex ? null
|
||||||
|
, enableMultilib ? false
|
||||||
}:
|
}:
|
||||||
|
|
||||||
assert langC;
|
assert langC;
|
||||||
|
@ -43,6 +44,7 @@ stdenv.mkDerivation {
|
||||||
++ optionals langTreelang [bison flex];
|
++ optionals langTreelang [bison flex];
|
||||||
|
|
||||||
configureFlags = "
|
configureFlags = "
|
||||||
|
${if enableMultilib then "" else "--disable-multilib"}
|
||||||
--disable-libstdcxx-pch
|
--disable-libstdcxx-pch
|
||||||
--with-system-zlib
|
--with-system-zlib
|
||||||
--enable-languages=${
|
--enable-languages=${
|
||||||
|
@ -60,8 +62,8 @@ stdenv.mkDerivation {
|
||||||
NIX_EXTRA_LDFLAGS = if staticCompiler then "-static" else "";
|
NIX_EXTRA_LDFLAGS = if staticCompiler then "-static" else "";
|
||||||
|
|
||||||
inherit gmp mpfr;
|
inherit gmp mpfr;
|
||||||
|
|
||||||
passthru = { inherit langC langCC langFortran langTreelang; };
|
passthru = { inherit langC langCC langFortran langTreelang enableMultilib; };
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = "http://gcc.gnu.org/";
|
homepage = "http://gcc.gnu.org/";
|
||||||
|
|
|
@ -1333,10 +1333,16 @@ let pkgs = rec {
|
||||||
profiledCompiler = true;
|
profiledCompiler = true;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
gcc43 = lowPrio (wrapGCCWith (import ../build-support/gcc-wrapper-new) (import ../development/compilers/gcc-4.3 {
|
gcc43 = lowPrio (wrapGCCWith (import ../build-support/gcc-wrapper-new) glibc (import ../development/compilers/gcc-4.3 {
|
||||||
inherit fetchurl stdenv texinfo gmp mpfr noSysDirs;
|
inherit fetchurl stdenv texinfo gmp mpfr noSysDirs;
|
||||||
profiledCompiler = false;
|
profiledCompiler = false;
|
||||||
#langFortran = true;
|
}));
|
||||||
|
|
||||||
|
gcc43multi = lowPrio (wrapGCCWith (import ../build-support/gcc-wrapper-new) glibc_multi (import ../development/compilers/gcc-4.3 {
|
||||||
|
stdenv = overrideGCC stdenv (wrapGCCWith (import ../build-support/gcc-wrapper) glibc_multi gcc42);
|
||||||
|
inherit fetchurl texinfo gmp mpfr noSysDirs;
|
||||||
|
profiledCompiler = false;
|
||||||
|
enableMultilib = true;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
gccApple = wrapGCC (import ../development/compilers/gcc-apple {
|
gccApple = wrapGCC (import ../development/compilers/gcc-apple {
|
||||||
|
@ -1748,7 +1754,7 @@ let pkgs = rec {
|
||||||
inherit fetchurl stdenv visualcpp windowssdk;
|
inherit fetchurl stdenv visualcpp windowssdk;
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapGCCWith = gccWrapper: baseGCC: gccWrapper {
|
wrapGCCWith = gccWrapper: glibc: baseGCC: gccWrapper {
|
||||||
nativeTools = stdenv ? gcc && stdenv.gcc.nativeTools;
|
nativeTools = stdenv ? gcc && stdenv.gcc.nativeTools;
|
||||||
nativeLibc = stdenv ? gcc && stdenv.gcc.nativeLibc;
|
nativeLibc = stdenv ? gcc && stdenv.gcc.nativeLibc;
|
||||||
nativePrefix = if stdenv ? gcc then stdenv.gcc.nativePrefix else "";
|
nativePrefix = if stdenv ? gcc then stdenv.gcc.nativePrefix else "";
|
||||||
|
@ -1757,7 +1763,7 @@ let pkgs = rec {
|
||||||
inherit stdenv binutils;
|
inherit stdenv binutils;
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapGCC = wrapGCCWith (import ../build-support/gcc-wrapper);
|
wrapGCC = wrapGCCWith (import ../build-support/gcc-wrapper) glibc;
|
||||||
|
|
||||||
# FIXME: This is a specific hack for GCC-UPC. Eventually, we may
|
# FIXME: This is a specific hack for GCC-UPC. Eventually, we may
|
||||||
# want to merge `gcc-upc-wrapper' and `gcc-wrapper'.
|
# want to merge `gcc-upc-wrapper' and `gcc-wrapper'.
|
||||||
|
@ -2591,6 +2597,28 @@ let pkgs = rec {
|
||||||
#installLocales = false;
|
#installLocales = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
glibc_multi =
|
||||||
|
assert system == "x86_64-linux";
|
||||||
|
runCommand "${glibc.name}-multi"
|
||||||
|
{ glibc64 = glibc;
|
||||||
|
glibc32 = (import ./all-packages.nix {system = "i686-linux";}).glibc;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
ensureDir $out
|
||||||
|
ln -s $glibc64/* $out/
|
||||||
|
|
||||||
|
rm $out/lib $out/lib64
|
||||||
|
ensureDir $out/lib
|
||||||
|
ln -s $glibc64/lib/* $out/lib
|
||||||
|
ln -s $glibc32/lib $out/lib/32
|
||||||
|
ln -s lib $out/lib64
|
||||||
|
|
||||||
|
rm $out/include
|
||||||
|
cp -rs $glibc32/include $out
|
||||||
|
chmod -R u+w $out/include
|
||||||
|
cp -rsf $glibc64/include $out
|
||||||
|
''; # */
|
||||||
|
|
||||||
gmime = import ../development/libraries/gmime {
|
gmime = import ../development/libraries/gmime {
|
||||||
inherit fetchurl stdenv pkgconfig zlib;
|
inherit fetchurl stdenv pkgconfig zlib;
|
||||||
inherit (gtkLibs) glib;
|
inherit (gtkLibs) glib;
|
||||||
|
|
Loading…
Reference in New Issue