[PATCH] gnu: mingw: Add x86_64 support.

  • Done
  • quality assurance status badge
Details
3 participants
  • Carl Dong
  • Thompson, David
  • Jan Nieuwenhuizen
Owner
unassigned
Submitted by
Carl Dong
Severity
normal
C
C
Carl Dong wrote on 12 Aug 2019 22:46
(name . guix-patches@gnu.org)(address . guix-patches@gnu.org)
u4aN_2bXkeBODxvyzylFp_8zOBqWcVOOwJoQO3SzUY4-5CBLijSCjy9yzorApX2D5jTRhLbC3QMmfVlZPc6UgsVJ8IJkA-az5Y9OFNRq2Ws=@carldong.me
This patch parameterizes previously hard-coded instances of
i686-w64-mingw32, adding support for x86_64-w64-mingw32.

* gnu/packages/mingw.scm (make-mingw-w64): New procedure.
(mingw-w64-i686, mingw-w64-x86_64): New variables.
(%mingw-triplet): Remove.
(mingw-w64): Update to point to 'mingw-w64-i686'.
* gnu/packages/cross-base.scm (cross-gcc): Use 'libc' keyword argument
if specified, instead of treating it as a boolean.
(native-libc): Return the correct mingw-w64 depending on machine
specified in target.
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add "x86_64-mingw".
* gnu/build/cross-toolchain.scm (set-cross-path/mingw): Replace
hardcoded 'i686-w64-mingw32' instances with 'target' keyword argument.
(cross-gcc-build-phases): Update accordingly; use 'target-mingw?'
helper.
* gnu/ci.scm (%cross-targets): Add "x86_64-w64-mingw32".
---
gnu/build/cross-toolchain.scm | 11 ++--
gnu/ci.scm | 3 +-
gnu/packages/bootstrap.scm | 1 +
gnu/packages/cross-base.scm | 5 +-
gnu/packages/mingw.scm | 120 ++++++++++++++++++----------------
5 files changed, 76 insertions(+), 64 deletions(-)

Toggle diff (230 lines)
diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm
index d430b8afc4..77e279f07d 100644
--- a/gnu/build/cross-toolchain.scm
+++ b/gnu/build/cross-toolchain.scm
@@ -22,6 +22,7 @@
(define-module (gnu build cross-toolchain)
#:use-module (guix build utils)
#:use-module (guix build gnu-build-system)
+ #:use-module (guix utils)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
@@ -95,7 +96,7 @@ C_INCLUDE_PATH et al."
;; We're building the sans-libc cross-compiler, so nothing to do.
#t)))

-(define* (set-cross-path/mingw #:key inputs #:allow-other-keys)
+(define* (set-cross-path/mingw #:key inputs target #:allow-other-keys)
"Add the cross MinGW headers to CROSS_C_*_INCLUDE_PATH, and remove them from
C_*INCLUDE_PATH."
(let ((libc (assoc-ref inputs "libc"))
@@ -112,7 +113,7 @@ C_*INCLUDE_PATH."

(if libc
(let ((cpath (string-append libc "/include"
- ":" libc "/i686-w64-mingw32/include")))
+ ":" libc "/" target "/include")))
(for-each (cut setenv <> cpath)
%gcc-cross-include-paths))

@@ -142,7 +143,7 @@ C_*INCLUDE_PATH."
(when libc
(setenv "CROSS_LIBRARY_PATH"
(string-append libc "/lib"
- ":" libc "/i686-w64-mingw32/lib")))
+ ":" libc "/" target "/lib")))

(setenv "CPP" (string-append gcc "/bin/cpp"))
(for-each (lambda (var)
@@ -168,8 +169,8 @@ C_*INCLUDE_PATH."
a target triplet."
(modify-phases phases
(add-before 'configure 'set-cross-path
- (if (string-contains target "mingw")
- set-cross-path/mingw
+ (if (target-mingw? target)
+ (cut set-cross-path/mingw #:target target <...>)
set-cross-path))
(add-after 'install 'make-cross-binutils-visible
(cut make-cross-binutils-visible #:target target <...>))
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 4885870e16..aeebd4f14b 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -130,7 +130,8 @@ SYSTEM."
"aarch64-linux-gnu"
"powerpc-linux-gnu"
"i586-pc-gnu" ;aka. GNU/Hurd
- "i686-w64-mingw32"))
+ "i686-w64-mingw32"
+ "x86_64-w64-mingw32"))

(define %guixsd-supported-systems
'("x86_64-linux" "i686-linux" "armhf-linux"))
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 5030b815b9..13a7ef5cc5 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -187,6 +187,7 @@ return value is ignored."
((string=? system "avr") "no-ld.so")
((string=? system "propeller-elf") "no-ld.so")
((string=? system "i686-mingw") "no-ld.so")
+ ((string=? system "x86_64-mingw") "no-ld.so")
((string=? system "vc4-elf") "no-ld.so")

(else (error "dynamic linker name not known for this system"
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index a0341ebc5d..35cb2ab25f 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -249,7 +249,7 @@ target that libc."
(cond
((target-mingw? target)
(if libc
- `(("libc" ,mingw-w64)
+ `(("libc" ,libc)
,@inputs)
`(("mingw-source" ,(package-source mingw-w64))
,@inputs)))
@@ -509,7 +509,8 @@ and the cross tool chain."
#:optional
(libc glibc))
(if (target-mingw? target)
- mingw-w64
+ (let ((machine (substring target 0 (string-index target #\-))))
+ (make-mingw-w64 machine))
libc))

(define* (cross-newlib? target
diff --git a/gnu/packages/mingw.scm b/gnu/packages/mingw.scm
index 3e96f2c475..907f2c3c35 100644
--- a/gnu/packages/mingw.scm
+++ b/gnu/packages/mingw.scm
@@ -31,62 +31,70 @@
#:use-module (guix utils)
#:use-module (ice-9 match))

-(define %mingw-triplet
- "i686-w64-mingw32")
+(define-public (make-mingw-w64 machine)
+ (let ((triplet (string-append machine "-" "w64-mingw32")))
+ (package
+ (name (string-append "mingw-w64" "-" machine))
+ (version "5.0.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://sourceforge.net/projects/mingw-w64/files/mingw-w64/"
+ "mingw-w64-release/mingw-w64-v" version ".tar.bz2"))
+ (sha256
+ (base32 "00zq3z1hbzd5yzmskskjg79xrzwsqx7ihyprfaxy4hb897vf29sm"))
+ (patches (search-patches "mingw-w64-5.0rc2-gcc-4.9.3.patch"))))
+ (native-inputs `(("xgcc-core" ,(cross-gcc triplet))
+ ("xbinutils" ,(cross-binutils triplet))))
+ (build-system gnu-build-system)
+ (search-paths
+ (list (search-path-specification
+ (variable "CROSS_C_INCLUDE_PATH")
+ (files `("include" ,(string-append triplet "/include"))))
+ (search-path-specification
+ (variable "CROSS_LIBRARY_PATH")
+ (files
+ `("lib" "lib64"
+ ,(string-append triplet "/lib")
+ ,(string-append triplet "/lib64"))))))
+ (arguments
+ `(#:configure-flags '(,(string-append "--host=" triplet))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'setenv
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((xgcc-core (assoc-ref inputs "xgcc-core"))
+ (mingw-headers (string-append (getcwd) "/mingw-w64-headers")))
+ (setenv "CPP"
+ (string-append xgcc-core ,(string-append "/bin/" triplet "-cpp")))
+ (setenv "CROSS_C_INCLUDE_PATH"
+ (string-append
+ mingw-headers
+ ":" mingw-headers "/include"
+ ":" mingw-headers "/crt"
+ ":" mingw-headers "/defaults/include"
+ ":" mingw-headers "/direct-x/include"))))))
+ #:make-flags (list "DEFS=-DHAVE_CONFIG_H -D__MINGW_HAS_DXSDK=1")
+ #:tests? #f ; compiles and includes glibc headers
+ #:strip-binaries? #f))
+ (home-page "https://mingw-w64.org")
+ (synopsis "Minimalist GNU for Windows")
+ (description
+ "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
+de velopment environment for creating native Microsoft Windows applications.

-(define-public mingw-w64
- (package
- (name "mingw-w64")
- (version "5.0.4")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "https://sourceforge.net/projects/mingw-w64/files/mingw-w64/"
- "mingw-w64-release/mingw-w64-v" version ".tar.bz2"))
- (sha256
- (base32 "00zq3z1hbzd5yzmskskjg79xrzwsqx7ihyprfaxy4hb897vf29sm"))
- (patches (search-patches "mingw-w64-5.0rc2-gcc-4.9.3.patch"))))
- (native-inputs `(("xgcc-core" ,(cross-gcc %mingw-triplet))
- ("xbinutils" ,(cross-binutils %mingw-triplet))))
- (build-system gnu-build-system)
- (search-paths
- (list (search-path-specification
- (variable "CROSS_C_INCLUDE_PATH")
- (files '("include" "i686-w64-mingw32/include")))
- (search-path-specification
- (variable "CROSS_LIBRARY_PATH")
- (files
- '("lib" "lib64" "i686-w64-mingw32/lib" "i686-w64-mingw32/lib64")))))
- (arguments
- `(#:configure-flags '("--host=i686-w64-mingw32")
- #:phases
- (modify-phases %standard-phases
- (add-before 'configure 'setenv
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((xgcc-core (assoc-ref inputs "xgcc-core"))
- (mingw-headers (string-append (getcwd) "/mingw-w64-headers")))
- (setenv "CPP"
- (string-append xgcc-core "/bin/i686-w64-mingw32-cpp"))
- (setenv "CROSS_C_INCLUDE_PATH"
- (string-append
- mingw-headers
- ":" mingw-headers "/include"
- ":" mingw-headers "/crt"
- ":" mingw-headers "/defaults/include"
- ":" mingw-headers "/direct-x/include"))))))
- #:make-flags (list "DEFS=-DHAVE_CONFIG_H -D__MINGW_HAS_DXSDK=1")
- #:tests? #f ; compiles and includes glibc headers
- #:strip-binaries? #f))
- (home-page "https://mingw-w64.org")
- (synopsis "Minimalist GNU for Windows")
- (description
- "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
-development environment for creating native Microsoft Windows applications.
+It includes a set of Windows-specific header files and static import libraries
+wh ich enable the use of the Windows API. It does not rely on any third-party C
+ru ntime dynamic-link libraries (@dfn{DLL}s).

-It includes a set of Windows-specific header files and static import libraries
-which enable the use of the Windows API. It does not rely on any third-party C
-runtime dynamic-link libraries (@dfn{DLL}s).
+Mi ngw-w64 is an advancement of the original mingw.org project and provides
+se veral new APIs such as DirectX and DDK, and 64-bit support.")
+ (license license:fdl1.3+))))

-Mingw-w64 is an advancement of the original mingw.org project and provides
-several new APIs such as DirectX and DDK, and 64-bit support.")
- (license license:fdl1.3+)))
+(define-public mingw-w64-i686
+ (make-mingw-w64 "i686"))
+
+(define-public mingw-w64-x86_64
+ (make-mingw-w64 "x86_64"))
+
+(define-public mingw-w64 mingw-w64-i686)
--
2.22.0
J
J
Jan Nieuwenhuizen wrote on 14 Aug 2019 00:27
(name . Carl Dong)(address . contact@carldong.me)(address . 37012@debbugs.gnu.org)
87o90sitvi.fsf@gnu.org
Carl Dong writes:

Hi Carl!

Toggle quote (3 lines)
> This patch parameterizes previously hard-coded instances of
> i686-w64-mingw32, adding support for x86_64-w64-mingw32.

That would be great. When I try it, I get

Toggle snippet (37 lines)
$ ./pre-inst-env guix build --target=i686-w64-mingw32 hello --no-build-hook
building /gnu/store/b3qq8g6lhwgadp09vwwmnyd91bvll3s3-module-import-compiled.drv...
Backtrace:
In ice-9/boot-9.scm:
841:4 19 (with-throw-handler _ _ _)
In system/base/compile.scm:
59:11 18 (_)
155:11 17 (_ #<closed: file 61d8c0>)
235:18 16 (read-and-compile #<input: /gnu/store/vdspbcgdlfg7xblm?> ?)
183:32 15 (compile-fold (#<procedure compile-tree-il (x e opts)>) ?)
In ice-9/boot-9.scm:
2312:4 14 (save-module-excursion _)
In language/scheme/compile-tree-il.scm:
31:15 13 (_)
In ice-9/psyntax.scm:
1235:36 12 (expand-top-sequence _ _ _ #f _ _ _)
1182:24 11 (parse _ (("placeholder" placeholder)) ((top) #(# # ?)) ?)
285:10 10 (parse _ (("placeholder" placeholder)) (()) _ c&e (# #) #)
In ice-9/eval.scm:
293:34 9 (_ #<module (#{ g31}#) 62bf00>)
In ice-9/boot-9.scm:
2874:4 8 (define-module* _ #:filename _ #:pure _ #:version _ # _ ?)
2071:24 7 (call-with-deferred-observers _)
2887:24 6 (_)
222:29 5 (map1 _)
222:29 4 (map1 (((guix build gnu-build-system)) ((guix utils)) ?))
222:17 3 (map1 (((guix utils)) ((srfi srfi-1)) ((srfi #)) ((?)) ?))
2803:6 2 (resolve-interface _ #:select _ #:hide _ #:prefix _ # _ ?)
In unknown file:
1 (scm-error misc-error #f "~A ~S" ("no code for modu?" ?) ?)
In ice-9/boot-9.scm:
752:25 0 (dispatch-exception _ _ _)

ice-9/boot-9.scm:752:25: In procedure dispatch-exception:
no code for module (guix utils)

Does this it work for you, can you verify?

Toggle quote (10 lines)
> diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm
> index d430b8afc4..77e279f07d 100644
> --- a/gnu/build/cross-toolchain.scm
> +++ b/gnu/build/cross-toolchain.scm
> @@ -22,6 +22,7 @@
> (define-module (gnu build cross-toolchain)
> #:use-module (guix build utils)
> #:use-module (guix build gnu-build-system)
> + #:use-module (guix utils)

I am suspecting this one here, in which case

Toggle quote (12 lines)
> @@ -168,8 +169,8 @@ C_*INCLUDE_PATH."
> a target triplet."
> (modify-phases phases
> (add-before 'configure 'set-cross-path
> - (if (string-contains target "mingw")
> - set-cross-path/mingw
> + (if (target-mingw? target)
> + (cut set-cross-path/mingw #:target target <...>)
> set-cross-path))
> (add-after 'install 'make-cross-binutils-visible
> (cut make-cross-binutils-visible #:target target <...>))

this would need to change.

Toggle quote (4 lines)
> diff --git a/gnu/packages/mingw.scm b/gnu/packages/mingw.scm
> index 3e96f2c475..907f2c3c35 100644
> --- a/gnu/packages/mingw.scm
> +++ b/gnu/packages/mingw.scm
...
Toggle quote (3 lines)
> + (description
> + "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
> +de velopment environment for creating native Microsoft Windows applications.
^^
What happened here?

Toggle quote (3 lines)
> +It includes a set of Windows-specific header files and static import libraries
> +wh ich enable the use of the Windows API. It does not rely on any third-party C
> +ru ntime dynamic-link libraries (@dfn{DLL}s).
^^

Otherwise, LGTM.

Greetings,
janneke

--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com| Avatar® http://AvatarAcademy.com
J
J
Jan Nieuwenhuizen wrote on 14 Aug 2019 08:57
(name . Carl Dong)(address . contact@carldong.me)(address . 37012@debbugs.gnu.org)
874l2kmdya.fsf@gnu.org
Jan Nieuwenhuizen writes:

Hello again,

Toggle quote (5 lines)
>> This patch parameterizes previously hard-coded instances of
>> i686-w64-mingw32, adding support for x86_64-w64-mingw32.
>
> That would be great.

Just before you create a new patch, please also add some copyright
headers.

Thanks!
janneke

--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com| Avatar® http://AvatarAcademy.com
T
T
Thompson, David wrote on 14 Aug 2019 14:09
(name . Carl Dong)(address . contact@carldong.me)(address . 37012@debbugs.gnu.org)
CAJ=RwfZ8eokyAVhzC86P76TVAin5ws+h_9AerPZ94o=fyOGJAg@mail.gmail.com
Hi Carl,

On Mon, Aug 12, 2019 at 4:47 PM Carl Dong <contact@carldong.me> wrote:
Toggle quote (4 lines)
>
> This patch parameterizes previously hard-coded instances of
> i686-w64-mingw32, adding support for x86_64-w64-mingw32.

Thanks for doing this! I've been experimenting with building Guile
projects for Windows and this was on my wishlist.

Which reminds me, I have a patch series that updates to the latest
version of MinGW that I should share.

- Dave
C
C
Carl Dong wrote on 14 Aug 2019 19:54
(name . Jan Nieuwenhuizen)(address . janneke@gnu.org)(name . 37012@debbugs.gnu.org)(address . 37012@debbugs.gnu.org)
y9GTolNpEpkHH35zvM9UsZZe3UXf8omDVHkvEwdHU6f7mgUPmz9IUioco_XiweX1Lr8xuEa36Jxz64MXUcLylRM37uCZ6iQMM4WgNzMU67M=@carldong.me
Here's the updated patch that I've tested. Let me know if this works for you! :-)

From e6df2d6f9b47b02abec01a16f2d0b1271dcec1d2 Mon Sep 17 00:00:00 2001
From: Carl Dong <contact@carldong.me>
Date: Wed, 14 Aug 2019 13:46:53 -0400
Subject: [PATCH] gnu: mingw: Add x86_64 support.

This patch parameterizes previously hard-coded instances of
i686-w64-mingw32, adding support for x86_64-w64-mingw32.

* gnu/packages/mingw.scm (make-mingw-w64): New procedure.
(mingw-w64-i686, mingw-w64-x86_64): New variables.
(%mingw-triplet): Remove.
(mingw-w64): Update to point to 'mingw-w64-i686'.
* gnu/packages/cross-base.scm (cross-gcc): Use 'libc' keyword argument
if specified, instead of treating it as a boolean.
(native-libc): Return the correct mingw-w64 depending on machine
specified in target.
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add "x86_64-mingw".
* gnu/build/cross-toolchain.scm (set-cross-path/mingw): Replace
hardcoded 'i686-w64-mingw32' instances with 'target' keyword argument.
(cross-gcc-build-phases): Update accordingly; use 'target-mingw?'
implementation of target checking and add commentary.
* gnu/ci.scm (%cross-targets): Add "x86_64-w64-mingw32".
---
gnu/build/cross-toolchain.scm | 15 +++--
gnu/ci.scm | 3 +-
gnu/packages/bootstrap.scm | 2 +
gnu/packages/cross-base.scm | 6 +-
gnu/packages/mingw.scm | 111 ++++++++++++++++++----------------
5 files changed, 78 insertions(+), 59 deletions(-)

Toggle diff (252 lines)
diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm
index d430b8afc4..201b36ff7c 100644
--- a/gnu/build/cross-toolchain.scm
+++ b/gnu/build/cross-toolchain.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -95,7 +96,7 @@ C_INCLUDE_PATH et al."
;; We're building the sans-libc cross-compiler, so nothing to do.
#t)))

-(define* (set-cross-path/mingw #:key inputs #:allow-other-keys)
+(define* (set-cross-path/mingw #:key inputs target #:allow-other-keys)
"Add the cross MinGW headers to CROSS_C_*_INCLUDE_PATH, and remove them from
C_*INCLUDE_PATH."
(let ((libc (assoc-ref inputs "libc"))
@@ -112,7 +113,7 @@ C_*INCLUDE_PATH."

(if libc
(let ((cpath (string-append libc "/include"
- ":" libc "/i686-w64-mingw32/include")))
+ ":" libc "/" target "/include")))
(for-each (cut setenv <> cpath)
%gcc-cross-include-paths))

@@ -142,7 +143,7 @@ C_*INCLUDE_PATH."
(when libc
(setenv "CROSS_LIBRARY_PATH"
(string-append libc "/lib"
- ":" libc "/i686-w64-mingw32/lib")))
+ ":" libc "/" target "/lib")))

(setenv "CPP" (string-append gcc "/bin/cpp"))
(for-each (lambda (var)
@@ -168,8 +169,12 @@ C_*INCLUDE_PATH."
a target triplet."
(modify-phases phases
(add-before 'configure 'set-cross-path
- (if (string-contains target "mingw")
- set-cross-path/mingw
+ ;; This mingw32 target checking logic should match that of target-mingw?
+ ;; in (guix utils), but (guix utils) is too large too copy over to the
+ ;; build side entirely and for now we have no way to select variables to
+ ;; copy over. See (gnu packages cross-base) for more details.
+ (if (string-suffix? "-mingw32" target)
+ (cut set-cross-path/mingw #:target target <...>)
set-cross-path))
(add-after 'install 'make-cross-binutils-visible
(cut make-cross-binutils-visible #:target target <...>))
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 4885870e16..aeebd4f14b 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -130,7 +130,8 @@ SYSTEM."
"aarch64-linux-gnu"
"powerpc-linux-gnu"
"i586-pc-gnu" ;aka. GNU/Hurd
- "i686-w64-mingw32"))
+ "i686-w64-mingw32"
+ "x86_64-w64-mingw32"))

(define %guixsd-supported-systems
'("x86_64-linux" "i686-linux" "armhf-linux"))
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 5030b815b9..cd99425379 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -187,6 +188,7 @@ return value is ignored."
((string=? system "avr") "no-ld.so")
((string=? system "propeller-elf") "no-ld.so")
((string=? system "i686-mingw") "no-ld.so")
+ ((string=? system "x86_64-mingw") "no-ld.so")
((string=? system "vc4-elf") "no-ld.so")

(else (error "dynamic linker name not known for this system"
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index a0341ebc5d..e277139f25 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -4,6 +4,7 @@
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -249,7 +250,7 @@ target that libc."
(cond
((target-mingw? target)
(if libc
- `(("libc" ,mingw-w64)
+ `(("libc" ,libc)
,@inputs)
`(("mingw-source" ,(package-source mingw-w64))
,@inputs)))
@@ -509,7 +510,8 @@ and the cross tool chain."
#:optional
(libc glibc))
(if (target-mingw? target)
- mingw-w64
+ (let ((machine (substring target 0 (string-index target #\-))))
+ (make-mingw-w64 machine))
libc))

(define* (cross-newlib? target
diff --git a/gnu/packages/mingw.scm b/gnu/packages/mingw.scm
index 3e96f2c475..017f9453ab 100644
--- a/gnu/packages/mingw.scm
+++ b/gnu/packages/mingw.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Carl Dong <contact@carldong.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -31,56 +32,56 @@
#:use-module (guix utils)
#:use-module (ice-9 match))

-(define %mingw-triplet
- "i686-w64-mingw32")
-
-(define-public mingw-w64
- (package
- (name "mingw-w64")
- (version "5.0.4")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "https://sourceforge.net/projects/mingw-w64/files/mingw-w64/"
- "mingw-w64-release/mingw-w64-v" version ".tar.bz2"))
- (sha256
- (base32 "00zq3z1hbzd5yzmskskjg79xrzwsqx7ihyprfaxy4hb897vf29sm"))
- (patches (search-patches "mingw-w64-5.0rc2-gcc-4.9.3.patch"))))
- (native-inputs `(("xgcc-core" ,(cross-gcc %mingw-triplet))
- ("xbinutils" ,(cross-binutils %mingw-triplet))))
- (build-system gnu-build-system)
- (search-paths
- (list (search-path-specification
- (variable "CROSS_C_INCLUDE_PATH")
- (files '("include" "i686-w64-mingw32/include")))
- (search-path-specification
- (variable "CROSS_LIBRARY_PATH")
- (files
- '("lib" "lib64" "i686-w64-mingw32/lib" "i686-w64-mingw32/lib64")))))
- (arguments
- `(#:configure-flags '("--host=i686-w64-mingw32")
- #:phases
- (modify-phases %standard-phases
- (add-before 'configure 'setenv
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((xgcc-core (assoc-ref inputs "xgcc-core"))
- (mingw-headers (string-append (getcwd) "/mingw-w64-headers")))
- (setenv "CPP"
- (string-append xgcc-core "/bin/i686-w64-mingw32-cpp"))
- (setenv "CROSS_C_INCLUDE_PATH"
- (string-append
- mingw-headers
- ":" mingw-headers "/include"
- ":" mingw-headers "/crt"
- ":" mingw-headers "/defaults/include"
- ":" mingw-headers "/direct-x/include"))))))
- #:make-flags (list "DEFS=-DHAVE_CONFIG_H -D__MINGW_HAS_DXSDK=1")
- #:tests? #f ; compiles and includes glibc headers
- #:strip-binaries? #f))
- (home-page "https://mingw-w64.org")
- (synopsis "Minimalist GNU for Windows")
- (description
- "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
+(define-public (make-mingw-w64 machine)
+ (let ((triplet (string-append machine "-" "w64-mingw32")))
+ (package
+ (name (string-append "mingw-w64" "-" machine))
+ (version "5.0.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://sourceforge.net/projects/mingw-w64/files/mingw-w64/"
+ "mingw-w64-release/mingw-w64-v" version ".tar.bz2"))
+ (sha256
+ (base32 "00zq3z1hbzd5yzmskskjg79xrzwsqx7ihyprfaxy4hb897vf29sm"))
+ (patches (search-patches "mingw-w64-5.0rc2-gcc-4.9.3.patch"))))
+ (native-inputs `(("xgcc-core" ,(cross-gcc triplet))
+ ("xbinutils" ,(cross-binutils triplet))))
+ (build-system gnu-build-system)
+ (search-paths
+ (list (search-path-specification
+ (variable "CROSS_C_INCLUDE_PATH")
+ (files `("include" ,(string-append triplet "/include"))))
+ (search-path-specification
+ (variable "CROSS_LIBRARY_PATH")
+ (files
+ `("lib" "lib64"
+ ,(string-append triplet "/lib")
+ ,(string-append triplet "/lib64"))))))
+ (arguments
+ `(#:configure-flags '(,(string-append "--host=" triplet))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'setenv
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((xgcc-core (assoc-ref inputs "xgcc-core"))
+ (mingw-headers (string-append (getcwd) "/mingw-w64-headers")))
+ (setenv "CPP"
+ (string-append xgcc-core ,(string-append "/bin/" triplet "-cpp")))
+ (setenv "CROSS_C_INCLUDE_PATH"
+ (string-append
+ mingw-headers
+ ":" mingw-headers "/include"
+ ":" mingw-headers "/crt"
+ ":" mingw-headers "/defaults/include"
+ ":" mingw-headers "/direct-x/include"))))))
+ #:make-flags (list "DEFS=-DHAVE_CONFIG_H -D__MINGW_HAS_DXSDK=1")
+ #:tests? #f ; compiles and includes glibc headers
+ #:strip-binaries? #f))
+ (home-page "https://mingw-w64.org")
+ (synopsis "Minimalist GNU for Windows")
+ (description
+ "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software
development environment for creating native Microsoft Windows applications.

It includes a set of Windows-specific header files and static import libraries
@@ -89,4 +90,12 @@ runtime dynamic-link libraries (@dfn{DLL}s).

Mingw-w64 is an advancement of the original mingw.org project and provides
several new APIs such as DirectX and DDK, and 64-bit support.")
- (license license:fdl1.3+)))
+ (license license:fdl1.3+))))
+
+(define-public mingw-w64-i686
+ (make-mingw-w64 "i686"))
+
+(define-public mingw-w64-x86_64
+ (make-mingw-w64 "x86_64"))
+
+(define-public mingw-w64 mingw-w64-i686)
--
2.22.0

Cheers,
Carl Dong
contact@carldong.me
"I fight for the users"
C
C
Carl Dong wrote on 14 Aug 2019 19:56
(name . Thompson, David)(address . dthompson2@worcester.edu)(name . 37012@debbugs.gnu.org)(address . 37012@debbugs.gnu.org)
9wfR-EPJQK4vTppzl9yieynFry2GoHZQvzZNFva5NLc5AuTT620JctolB3v38prYdt6AIcxpry5EM8oKll23WoZGCbSdf4n4tI7rCVnZHTE=@carldong.me
Dave,

That's fantastic news :-)

I also have a preliminary version of the nsis installer packager, please let me know if you'd have use for it!


Cheers,
Carl Dong
contact@carldong.me
"I fight for the users"
J
J
Jan Nieuwenhuizen wrote on 14 Aug 2019 20:40
(name . Carl Dong)(address . contact@carldong.me)(name . 37012@debbugs.gnu.org)(address . 37012@debbugs.gnu.org)
87pnl7d1zl.fsf@gnu.org
Carl Dong writes:

Hello Carl,

Toggle quote (2 lines)
> Here's the updated patch that I've tested. Let me know if this works for you! :-)

Thanks!

Toggle quote (5 lines)
> From e6df2d6f9b47b02abec01a16f2d0b1271dcec1d2 Mon Sep 17 00:00:00 2001
> From: Carl Dong <contact@carldong.me>
> Date: Wed, 14 Aug 2019 13:46:53 -0400
> Subject: [PATCH] gnu: mingw: Add x86_64 support.

It looks good and I can compile `hello'; the traditional 32 bit version:

./pre-inst-env guix build --target=i686-w64-mingw32 hello

and now also

./pre-inst-env guix build --target=x86_64-w64-mingw32 hello

However, while the 32 bit still works for me, the 64 bit version does
not. How is that for you? Do you have any idea how to verify if the
x86_64 hello.exe is OK or how to debug that?

Toggle snippet (15 lines)
20:33:04 janneke@dundal:~/src/guix/wip [env]
$ file /gnu/store/4hayc4wmxz0b0bw555n5gny7xkhg7w6y-hello-2.10/bin/hello.exe
/gnu/store/4hayc4wmxz0b0bw555n5gny7xkhg7w6y-hello-2.10/bin/hello.exe: PE32 executable (console) Intel 80386, for MS Windows
20:34:04 janneke@dundal:~/src/guix/wip [env]
$ guix environment --ad-hoc wine -- wine /gnu/store/4hayc4wmxz0b0bw555n5gny7xkhg7w6y-hello-2.10/bin/hello.exe
Hello, world!
20:34:14 janneke@dundal:~/src/guix/wip [env]
$ file /gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe
/gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe: PE32+ executable (console) x86-64, for MS Windows
20:34:22 janneke@dundal:~/src/guix/wip [env]
$ guix environment --ad-hoc wine -- wine /gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe
wine: Bad EXE format for Z:\gnu\store\v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10\bin\hello.exe.
[193]

Possibly I'm even using wine wrong?

Other than that the patch looks fine. It would be nice if we knew
wether the 64bit version can produce something useful, though. Can
you/someone please shed some light on that?

Greetings,
janneke

--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com| Avatar® http://AvatarAcademy.com
C
C
Carl Dong wrote on 14 Aug 2019 20:50
(name . Jan Nieuwenhuizen)(address . janneke@gnu.org)(name . 37012\@debbugs.gnu.org)(address . 37012@debbugs.gnu.org)
W4k-8NiDGPltXqKW2nRUlCE1rHqvbSWLxorGeDza-VXbHvlumDlMKqrscZwFU86ol0ZjBpwYLWgx7K7pQvRWgXaCoMxXwNjb0PmST_dd02c=@carldong.me
Hey janneke!

It would seem from the synopsis that the version of wine packaged with Guix is 32-bit only. I will test out the 64-bit hello binary when I get home on my Windows machine!

Cheers,
Carl Dong
contact@carldong.me
"I fight for the users"

??????? Original Message ???????
On Wednesday, August 14, 2019 6:40 PM, Jan Nieuwenhuizen <janneke@gnu.org> wrote:

Toggle quote (54 lines)
> Carl Dong writes:
>
> Hello Carl,
>
> > Here's the updated patch that I've tested. Let me know if this works for you! :-)
>
> Thanks!
>
> > From e6df2d6f9b47b02abec01a16f2d0b1271dcec1d2 Mon Sep 17 00:00:00 2001
> > From: Carl Dong contact@carldong.me
> > Date: Wed, 14 Aug 2019 13:46:53 -0400
> > Subject: [PATCH] gnu: mingw: Add x86_64 support.
>
> It looks good and I can compile `hello'; the traditional 32 bit version:
>
> ./pre-inst-env guix build --target=i686-w64-mingw32 hello
>
> and now also
>
> ./pre-inst-env guix build --target=x86_64-w64-mingw32 hello
>
> However, while the 32 bit still works for me, the 64 bit version does
> not. How is that for you? Do you have any idea how to verify if the
> x86_64 hello.exe is OK or how to debug that?
>
> --8<---------------cut here---------------start------------->8---
> 20:33:04 janneke@dundal:~/src/guix/wip [env]
> $ file /gnu/store/4hayc4wmxz0b0bw555n5gny7xkhg7w6y-hello-2.10/bin/hello.exe
> /gnu/store/4hayc4wmxz0b0bw555n5gny7xkhg7w6y-hello-2.10/bin/hello.exe: PE32 executable (console) Intel 80386, for MS Windows
> 20:34:04 janneke@dundal:~/src/guix/wip [env]
> $ guix environment --ad-hoc wine -- wine /gnu/store/4hayc4wmxz0b0bw555n5gny7xkhg7w6y-hello-2.10/bin/hello.exe
> Hello, world!
> 20:34:14 janneke@dundal:~/src/guix/wip [env]
> $ file /gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe
> /gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe: PE32+ executable (console) x86-64, for MS Windows
> 20:34:22 janneke@dundal:~/src/guix/wip [env]
> $ guix environment --ad-hoc wine -- wine /gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe
> wine: Bad EXE format for Z:\gnu\store\v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10\bin\hello.exe.
> [193]
> --8<---------------cut here---------------end--------------->8---
>
> Possibly I'm even using wine wrong?
>
> Other than that the patch looks fine. It would be nice if we knew
> wether the 64bit version can produce something useful, though. Can
> you/someone please shed some light on that?
>
> Greetings,
> janneke
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Jan Nieuwenhuizen janneke@gnu.org | GNU LilyPond http://lilypond.org
> Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
J
J
Jan Nieuwenhuizen wrote on 14 Aug 2019 21:33
(name . Carl Dong)(address . contact@carldong.me)(name . 37012@debbugs.gnu.org)(address . 37012-done@debbugs.gnu.org)
87lfvvcziz.fsf@gnu.org
Carl Dong writes:

Hello Carl,

Toggle quote (3 lines)
> It would seem from the synopsis that the version of wine packaged with
> Guix is 32-bit only.

'Doh!

Toggle quote (3 lines)
> I will test out the 64-bit hello binary when I get home on my Windows
> machine!

Thanks, but no pressing need for that now, look:

Toggle snippet (5 lines)
21:27:49 janneke@dundal:~/src/guix/wip [env]
$ guix environment --ad-hoc wine64 -- wine64 /gnu/store/v83ag9ahcg5g5qp06rlvjmvrydyriv7p-hello-2.10/bin/hello.exe
Hello, world!

Pushed to master as 67dac6b8920755cb011047157bb7b4fae4760143

Thanks again!
janneke

--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com| Avatar® http://AvatarAcademy.com
Closed
?