summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/os-specific/linux/uclibc/default.nix26
-rw-r--r--pkgs/top-level/all-packages.nix16
-rw-r--r--pkgs/top-level/release-cross.nix24
-rw-r--r--pkgs/top-level/release-lib.nix13
4 files changed, 52 insertions, 27 deletions
diff --git a/pkgs/os-specific/linux/uclibc/default.nix b/pkgs/os-specific/linux/uclibc/default.nix
index 3390469545f..75fa6a701de 100644
--- a/pkgs/os-specific/linux/uclibc/default.nix
+++ b/pkgs/os-specific/linux/uclibc/default.nix
@@ -1,17 +1,17 @@
-{stdenv, fetchurl, linuxHeaders, gccCross ? null}:
+{stdenv, fetchurl, linuxHeaders, cross ? null, gccCross ? null}:
 
 assert stdenv.isLinux;
+assert cross != null -> gccCross != null;
 
 let
-    target = if (gccCross != null) then gccCross.target else null;
-    enableArmEABI = (target == null && stdenv.system "armv5tel-linux")
-      || (target != null && target.arch == "arm");
+    enableArmEABI = (cross == null && stdenv.platform.kernelArch == "arm")
+      || (cross != null && cross.arch == "arm");
 
     configArmEABI = if enableArmEABI then
         ''-e 's/.*CONFIG_ARM_OABI.*//' \
         -e 's/.*CONFIG_ARM_EABI.*/CONFIG_ARM_EABI=y/' '' else "";
 
-    enableBigEndian = (target != null && target.bigEndian);
+    enableBigEndian = (cross != null && cross.bigEndian);
     
     configBigEndian = if enableBigEndian then ""
       else
@@ -19,12 +19,12 @@ let
         -e 's/.*ARCH_WANTS_BIG_ENDIAN.*/#ARCH_WANTS_BIG_ENDIAN=y/' \
         -e 's/.*ARCH_WANTS_LITTLE_ENDIAN.*/ARCH_WANTS_LITTLE_ENDIAN=y/' '';
 
-    archMakeFlag = if (target != null) then "ARCH=${target.arch}" else "";
-    crossMakeFlag = if (target != null) then "CROSS=${target.config}-" else "";
+    archMakeFlag = if (cross != null) then "ARCH=${cross.arch}" else "";
+    crossMakeFlag = if (cross != null) then "CROSS=${cross.config}-" else "";
 in
 stdenv.mkDerivation {
-  name = "uclibc-0.9.30.1" + stdenv.lib.optionalString (target != null)
-    ("-" + target.config);
+  name = "uclibc-0.9.30.1" + stdenv.lib.optionalString (cross != null)
+    ("-" + cross.config);
 
   src = fetchurl {
     url = http://www.uclibc.org/downloads/uClibc-0.9.30.1.tar.bz2;
@@ -46,7 +46,7 @@ stdenv.mkDerivation {
   '';
 
   # Cross stripping hurts.
-  dontStrip = if (target != null) then true else false;
+  dontStrip = if (cross != null) then true else false;
 
   makeFlags = [ crossMakeFlag "VERBOSE=1" ];
 
@@ -54,13 +54,13 @@ stdenv.mkDerivation {
 
   patches = [ ./unifdef-getline.patch ];
 
-  # This will allow the usual gcc-cross-wrapper strip phase work as usual
-  crossConfig = if (target != null) then target.config else null;
+#  # This will allow the usual gcc-cross-wrapper strip phase work as usual
+#  crossConfig = if (cross != null) then cross.config else null;
 
   installPhase = ''
     mkdir -p $out
     make PREFIX=$out VERBOSE=1 install ${crossMakeFlag}
-    (cd $out/include && ln -s ${linuxHeaders}/include/* .) || exit 1
+    (cd $out/include && ln -s $(ls -d ${linuxHeaders}/include/* | grep -v "scsi$") .)
     sed -i s@/lib/@$out/lib/@g $out/lib/libc.so
   '';
   
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 158cd928266..04f2d450f1b 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -3740,9 +3740,14 @@ let
     installLocales = getPkgConfig "glibc" "locales" false;
   });
 
+  glibcCross = glibc211Cross;
+
   # We can choose:
-  libcCross = glibc211Cross;
-  # libcCross = uclibcCross;
+  libcCrossChooser = name : if (name == "glibc") then glibcCross
+    else if (name == "uclibc") then uclibcCross
+    else throw "Unknown libc";
+
+  libcCross = libcCrossChooser crossSystem.libc;
 
   eglibc = import ../development/libraries/eglibc {
     inherit fetchsvn stdenv;
@@ -6395,10 +6400,11 @@ let
   };
 */
 
-  uclibcCross = target: import ../os-specific/linux/uclibc {
+  uclibcCross = import ../os-specific/linux/uclibc {
     inherit fetchurl stdenv;
-    linuxHeaders = linuxHeadersCross target;
-    gccCross = gccCrossStageStatic target;
+    linuxHeaders = linuxHeadersCross;
+    gccCross = gccCrossStageStatic;
+    cross = assert crossSystem != null; crossSystem;
   };
 
   udev = makeOverridable (import ../os-specific/linux/udev) {
diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix
index 52fa7b09fe6..fdac71e2da3 100644
--- a/pkgs/top-level/release-cross.nix
+++ b/pkgs/top-level/release-cross.nix
@@ -37,6 +37,7 @@ let
     float = "soft";
     withTLS = true;
     platform = pkgs.platforms.sheevaplug;
+    libc = "glibc";
     openssl.system = "linux-generic32";
   };
 
@@ -48,6 +49,27 @@ in {
     });
 }) // (
 
+/* Test some cross builds to the Sheevaplug - uclibc*/
+let
+  crossSystem = {
+    config = "armv5tel-unknown-linux-gnueabi";  
+    bigEndian = false;
+    arch = "arm";
+    float = "soft";
+    withTLS = true;
+    platform = pkgs.platforms.sheevaplug;
+    libc = "uclibc";
+    openssl.system = "linux-generic32";
+  };
+
+in {
+  crossSheevaplugLinuxUclibc = mapTestOnCross crossSystem (
+    basic //
+    {
+      ubootSheevaplug.hostDrv = nativePlatforms;
+    });
+}) // (
+
 /* Test some cross builds to the mipsel */
 let
   crossSystem = {
@@ -56,6 +78,7 @@ let
     arch = "mips";
     float = "soft";
     withTLS = true;
+    libc = "glibc";
     platform = {
       name = "malta";
       kernelBaseConfig = "malta_defconfig";
@@ -80,6 +103,7 @@ let
     float = "hard";
     withTLS = true;
     cpu = "ultrasparc";
+    libc = "glibc";
     platform = {
         name = "ultrasparc";
         kernelHeadersBaseConfig = "sparc64_defconfig";
diff --git a/pkgs/top-level/release-lib.nix b/pkgs/top-level/release-lib.nix
index 88d4e1fedd5..7350c4cc1b6 100644
--- a/pkgs/top-level/release-lib.nix
+++ b/pkgs/top-level/release-lib.nix
@@ -52,18 +52,13 @@ rec {
     (path: value:
       let
         job = toJob value;
-        getPkg = pkgs: setCrossMaintainers
-          (pkgs.lib.addMetaAttrs { schedulingPriority = toString job.schedulingPriority; }
+        getPkg = pkgs: (pkgs.lib.addMetaAttrs {
+            schedulingPriority = toString job.schedulingPriority;
+            maintainers = crossMaintainers; 
+          }
           (pkgs.lib.getAttrFromPath path pkgs));
       in testOnCross crossSystem job.systems getPkg);
 
-  setCrossMaintainers = pkg:
-    pkg //
-    {
-      meta = (if pkg ? meta then pkg.meta else {})
-        // { maintainers = crossMaintainers; };
-    };
-
   /* Find all packages that have a meta.platforms field listing the
      supported platforms. */
   packagesWithMetaPlatform = attrSet: