summary refs log tree commit diff
path: root/pkgs/top-level
diff options
context:
space:
mode:
authorLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2012-05-24 22:07:23 +0000
committerLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2012-05-24 22:07:23 +0000
commit383b76df790a3722b005934f9799d3edc9fecb8e (patch)
tree1a7236ee847fa7c084e3e6433a2a3439b1d3308f /pkgs/top-level
parente9186a03b9eba84b830de16d341f3caedcac8ba7 (diff)
downloadnixlib-383b76df790a3722b005934f9799d3edc9fecb8e.tar
nixlib-383b76df790a3722b005934f9799d3edc9fecb8e.tar.gz
nixlib-383b76df790a3722b005934f9799d3edc9fecb8e.tar.bz2
nixlib-383b76df790a3722b005934f9799d3edc9fecb8e.tar.lz
nixlib-383b76df790a3722b005934f9799d3edc9fecb8e.tar.xz
nixlib-383b76df790a3722b005934f9799d3edc9fecb8e.tar.zst
nixlib-383b76df790a3722b005934f9799d3edc9fecb8e.zip
Fixing mingw-w64 builds. I can build simple C++ programs with gccCrossStageFinal.
I also add tests for hydra; let's see if it builds far.


svn path=/nixpkgs/trunk/; revision=34232
Diffstat (limited to 'pkgs/top-level')
-rw-r--r--pkgs/top-level/all-packages.nix8
-rw-r--r--pkgs/top-level/release-cross.nix23
2 files changed, 28 insertions, 3 deletions
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c7a0fae055d0..3e6658ef1346 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1852,9 +1852,9 @@ let
 
   gccCrossStageStatic = let
       isMingw = (stdenv.cross.libc == "msvcrt");
-      isMingw64 = (stdenv.cross.libc == "msvcrt64");
-      libcCross1 = if isMingw then windows.mingw_headers1 else
-                   if isMingw64 then windows.mingw_w64_headers else null;
+      isMingw64 = isMingw && stdenv.cross.config == "x86_64-w64-mingw32";
+      libcCross1 = if isMingw64 then windows.mingw_w64_headers else
+                   if isMingw then windows.mingw_headers1 else null;
     in
       wrapGCCCross {
       gcc = forceBuildDrv (lib.addMetaAttrs { platforms = []; } (
@@ -3528,6 +3528,8 @@ let
   # We can choose:
   libcCrossChooser = name : if (name == "glibc") then glibcCross
     else if (name == "uclibc") then uclibcCross
+    else if (name == "msvcrt" && stdenv.cross.config == "x86_64-w64-mingw32") then
+      windows.mingw_w64
     else if (name == "msvcrt") then windows.mingw_headers3
     else throw "Unknown libc";
 
diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix
index 3c34ec4b0f62..a1af20acc77c 100644
--- a/pkgs/top-level/release-cross.nix
+++ b/pkgs/top-level/release-cross.nix
@@ -164,6 +164,29 @@ in {
   };
 }) // (
 
+/* Test some cross builds on mingw-w64 */
+let
+  crossSystem = {
+      # That's the triplet they use in the mingw-w64 docs,
+      # and it's relevant for nixpkgs conditions.
+      config = "x86_64-w64-mingw32";
+      arch = "x86_64"; # Irrelevant
+      libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
+      platform = {};
+  };
+in {
+  crossMingwW64 = mapTestOnCross crossSystem {
+    coreutils.hostDrv = nativePlatforms;
+    boehmgc.hostDrv = nativePlatforms;
+    gmp.hostDrv = nativePlatforms;
+    guile_1_8.hostDrv = nativePlatforms;
+    libffi.hostDrv = nativePlatforms;
+    libtool.hostDrv = nativePlatforms;
+    libunistring.hostDrv = nativePlatforms;
+    windows.wxMSW.hostDrv = nativePlatforms;
+  };
+}) // (
+
 /* GNU aka. GNU/Hurd.  */
 let
   crossSystem = {