From 383b76df790a3722b005934f9799d3edc9fecb8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Batlle=20i=20Rossell?= Date: Thu, 24 May 2012 22:07:23 +0000 Subject: [PATCH] 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 --- .../os-specific/windows/mingw-w64/default.nix | 14 +++++------ pkgs/top-level/all-packages.nix | 8 ++++--- pkgs/top-level/release-cross.nix | 23 +++++++++++++++++++ 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/pkgs/os-specific/windows/mingw-w64/default.nix b/pkgs/os-specific/windows/mingw-w64/default.nix index 570b40bdac69..c358565c4551 100644 --- a/pkgs/os-specific/windows/mingw-w64/default.nix +++ b/pkgs/os-specific/windows/mingw-w64/default.nix @@ -11,6 +11,13 @@ stdenv.mkDerivation (rec { sha256 = "043jk6z90f9pxs9kfn6ckh2vlnbgcv6yfbp5ybahrj3z58dcijp5"; }; + # I don't know what's that $host directory about, I put the + # files inside include as usual. + postInstall = '' + rmdir $out/include + mv $out/x86_64-w64-mingw32/* $out + rm -R $out/x86_64-w64-mingw32 + ''; } // (if onlyHeaders then { name = name + "-headers"; @@ -18,13 +25,6 @@ stdenv.mkDerivation (rec { cd mingw-w64-headers ''; configureFlags = "--without-crt --host=x86_64-w64-mingw32"; - - # I don't know what's that $host directory about, I put the - # files inside include as usual. - postInstall = '' - mv $out/x86_64-w64-mingw32/include/* $out/include - rm -R $out/x86_64-w64-mingw32 - ''; } else { buildInputs = [ gccCross binutilsCross ]; 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 = {