about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2010-02-27 00:52:48 +0000
committerLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2010-02-27 00:52:48 +0000
commitb1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53 (patch)
tree20ffb7b6e7f7e4a2a999787b54ea1ac69403e141
parent72edd547411be0c074e40ab83f7ecb5bf4344923 (diff)
downloadnixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.tar
nixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.tar.gz
nixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.tar.bz2
nixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.tar.lz
nixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.tar.xz
nixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.tar.zst
nixlib-b1b7266aa3d2e7023ad1b55ee7edc6a93f87ea53.zip
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
-rw-r--r--pkgs/development/compilers/gcc-4.4/default.nix3
-rw-r--r--pkgs/development/libraries/glibc-2.11/common.nix4
-rw-r--r--pkgs/development/libraries/glibc-2.11/default.nix2
-rw-r--r--pkgs/os-specific/linux/kernel-headers/2.6.32.nix11
-rw-r--r--pkgs/top-level/all-packages.nix9
-rw-r--r--pkgs/top-level/release.nix1
6 files changed, 20 insertions, 10 deletions
diff --git a/pkgs/development/compilers/gcc-4.4/default.nix b/pkgs/development/compilers/gcc-4.4/default.nix
index 3ae45592fd53..358e52124072 100644
--- a/pkgs/development/compilers/gcc-4.4/default.nix
+++ b/pkgs/development/compilers/gcc-4.4/default.nix
@@ -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" +
diff --git a/pkgs/development/libraries/glibc-2.11/common.nix b/pkgs/development/libraries/glibc-2.11/common.nix
index 2fd3fbcbab9c..77a89f744908 100644
--- a/pkgs/development/libraries/glibc-2.11/common.nix
+++ b/pkgs/development/libraries/glibc-2.11/common.nix
@@ -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"
diff --git a/pkgs/development/libraries/glibc-2.11/default.nix b/pkgs/development/libraries/glibc-2.11/default.nix
index c638e0bcf702..32c37aaac34e 100644
--- a/pkgs/development/libraries/glibc-2.11/default.nix
+++ b/pkgs/development/libraries/glibc-2.11/default.nix
@@ -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"
diff --git a/pkgs/os-specific/linux/kernel-headers/2.6.32.nix b/pkgs/os-specific/linux/kernel-headers/2.6.32.nix
index a09ad98c85ca..dbc6797934de 100644
--- a/pkgs/os-specific/linux/kernel-headers/2.6.32.nix
+++ b/pkgs/os-specific/linux/kernel-headers/2.6.32.nix
@@ -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
   '';
 
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d4ec90bfae1b..bec3c8aeaefa 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -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 {
diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix
index dbcb4003e2d7..b957096cb08a 100644
--- a/pkgs/top-level/release.nix
+++ b/pkgs/top-level/release.nix
@@ -708,6 +708,7 @@ let
       bigEndian = false;
       arch = "arm";
       float = "soft";
+      withTLS = true;
   };
   nativePlatforms = linux;
 in {