After some testing with an ultrasparc cross-compiler:

Updating the cross-build expressions, adding some flexibility.
Updated the linux headers used cross building, as 2.6.28 had bugs on endianness in
sparc64.
There were, as usual some bugs in gcc. Maybe not many make a cross compiler to
ultrasparc.

For the record, I could build an ultrasparc kernel with this base nix:
import /etc/nixos/nixpkgs/default.nix   # The root nixpkgs default.nix
{
    crossSystem = {
        config = "sparc64-unknown-linux";
        bigEndian = true;
        arch = "sparc64";
        float = "soft";
        withTLS = true;
        cpu = "ultrasparc";
    };

    config = pkgs: {
      packageOverrides = pkgs : {
        platform = {
            name = "sparc64";
            kernelHeadersBaseConfig = "sparc64_defconfig";
            kernelBaseConfig = "sparc64_defconfig";
            kernelArch = "sparc";
            kernelAutoModules = false;
            kernelTarget = "zImage";
            uboot = null;
        };
      };
    };
}

Although it did not boot directly in qemu-system-sparc64:
[sparc64] Kernel already loaded
Unhandled Exception 0x0000000000000020
PC = 0x0000000000404000 NPC = 0x0000000000404004

svn path=/nixpkgs/trunk/; revision=20269
This commit is contained in:
Lluís Batlle i Rossell 2010-02-27 00:52:48 +00:00
parent 72edd54741
commit b1b7266aa3
6 changed files with 20 additions and 10 deletions

View file

@ -57,8 +57,11 @@ let version = "4.4.3";
javaAwtGtk = langJava && gtk != null;
withCPU = if cross ? cpu then " --with-cpu=${cross.cpu}" else "";
crossConfigureFlags =
"--target=${cross.config}" +
withCPU +
(if crossStageStatic then
" --disable-libssp --disable-nls" +
" --without-headers" +

View file

@ -67,9 +67,9 @@ stdenv.mkDerivation ({
then "--enable-profile"
else "--disable-profile")
] ++ stdenv.lib.optionals (cross != null) [
"--with-tls"
(if cross.withTLS then "--with-tls" else "--without-tls")
(if cross.float == "float" then "--without-fp" else "--with-fp")
"--enable-kernel=2.6.0"
"--without-fp"
"--with-__thread"
] ++ stdenv.lib.optionals (stdenv.system == "armv5tel-linux") [
"--host=arm-linux-gnueabi"

View file

@ -46,6 +46,8 @@ in
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
# Only due to a problem in gcc configure scripts:
libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"}
EOF
export BUILD_CC=gcc
export CC="$crossConfig-gcc"

View file

@ -1,21 +1,21 @@
{stdenv, fetchurl, perl, cross ? null}:
{stdenv, fetchurl, perl, cross ? null, platform}:
assert stdenv.isLinux;
assert cross == null -> stdenv.isLinux;
let version = "2.6.32.4"; in
let version = "2.6.32.9"; in
stdenv.mkDerivation {
name = "linux-headers-${version}";
src = fetchurl {
url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
sha256 = "1n8pj05sazxv1dgi68q61lrvrnzvvx61qqw6kx80vqizqanz97z1";
sha256 = "1g6hs7j5kmifb3phbnckdmrnxd0cpqrijnnbry86z26npsh9my7l";
};
targetConfig = if (cross != null) then cross.config else null;
platform =
if cross != null then cross.arch else
if cross != null then platform.kernelArch else
if stdenv.system == "i686-linux" then "i386" else
if stdenv.system == "x86_64-linux" then "x86_64" else
if stdenv.system == "powerpc-linux" then "powerpc" else
@ -33,6 +33,7 @@ stdenv.mkDerivation {
if test -n "$targetConfig"; then
export ARCH=$platform
fi
make ${platform.kernelHeadersBaseConfig}
make mrproper headers_check
'';

View file

@ -1967,7 +1967,9 @@ let
binutilsCross = binutilsCross cross;
libcCross = libcCross cross;
profiledCompiler = false;
enableMultilib = true;
enableMultilib = false;
# cross-building for ultrasparc in 4.4.3 will require disabling shared due to a gcc bug.
# enableShared = false;
crossStageStatic = false;
};
@ -1976,6 +1978,7 @@ let
crossStageStatic = true;
langCC = false;
libcCross = null;
enableShared = true;
});
libc = null;
binutils = binutilsCross cross;
@ -5841,8 +5844,8 @@ let
linuxHeaders = linuxHeaders_2_6_28;
linuxHeadersCross = cross : forceBuildDrv (import ../os-specific/linux/kernel-headers/2.6.28.nix {
inherit stdenv fetchurl cross perl;
linuxHeadersCross = cross : forceBuildDrv (import ../os-specific/linux/kernel-headers/2.6.32.nix {
inherit stdenv fetchurl cross perl platform;
});
linuxHeaders_2_6_18 = import ../os-specific/linux/kernel-headers/2.6.18.5.nix {

View file

@ -708,6 +708,7 @@ let
bigEndian = false;
arch = "arm";
float = "soft";
withTLS = true;
};
nativePlatforms = linux;
in {