* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. @ 2019-08-12 20:46 Carl Dong 2019-08-13 22:27 ` Jan Nieuwenhuizen 2019-08-14 12:09 ` [bug#37012] " Thompson, David 0 siblings, 2 replies; 9+ messages in thread From: Carl Dong @ 2019-08-12 20:46 UTC (permalink / raw) To: 37012 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(-) 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 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-12 20:46 [bug#37012] [PATCH] gnu: mingw: Add x86_64 support Carl Dong @ 2019-08-13 22:27 ` Jan Nieuwenhuizen 2019-08-14 6:57 ` Jan Nieuwenhuizen 2019-08-14 12:09 ` [bug#37012] " Thompson, David 1 sibling, 1 reply; 9+ messages in thread From: Jan Nieuwenhuizen @ 2019-08-13 22:27 UTC (permalink / raw) To: Carl Dong; +Cc: 37012 Carl Dong writes: Hi Carl! > 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 --8<---------------cut here---------------start------------->8--- $ ./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) --8<---------------cut here---------------end--------------->8--- Does this it work for you, can you verify? > 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 > @@ -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. > 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 ... > + (description > + "Minimalist GNU for Windows (@dfn{MinGW}) is a complete software > +de velopment environment for creating native Microsoft Windows applications. ^^ What happened here? > +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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-13 22:27 ` Jan Nieuwenhuizen @ 2019-08-14 6:57 ` Jan Nieuwenhuizen 2019-08-14 17:54 ` Carl Dong 0 siblings, 1 reply; 9+ messages in thread From: Jan Nieuwenhuizen @ 2019-08-14 6:57 UTC (permalink / raw) To: Carl Dong; +Cc: 37012 Jan Nieuwenhuizen writes: Hello again, >> 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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-14 6:57 ` Jan Nieuwenhuizen @ 2019-08-14 17:54 ` Carl Dong 2019-08-14 18:40 ` Jan Nieuwenhuizen 0 siblings, 1 reply; 9+ messages in thread From: Carl Dong @ 2019-08-14 17:54 UTC (permalink / raw) To: Jan Nieuwenhuizen; +Cc: 37012@debbugs.gnu.org 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(-) 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" ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-14 17:54 ` Carl Dong @ 2019-08-14 18:40 ` Jan Nieuwenhuizen 2019-08-14 18:50 ` Carl Dong 0 siblings, 1 reply; 9+ messages in thread From: Jan Nieuwenhuizen @ 2019-08-14 18:40 UTC (permalink / raw) To: Carl Dong; +Cc: 37012@debbugs.gnu.org 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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-14 18:40 ` Jan Nieuwenhuizen @ 2019-08-14 18:50 ` Carl Dong 2019-08-14 19:33 ` bug#37012: " Jan Nieuwenhuizen 0 siblings, 1 reply; 9+ messages in thread From: Carl Dong @ 2019-08-14 18:50 UTC (permalink / raw) To: Jan Nieuwenhuizen; +Cc: 37012\@debbugs.gnu.org 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: > 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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#37012: [PATCH] gnu: mingw: Add x86_64 support. 2019-08-14 18:50 ` Carl Dong @ 2019-08-14 19:33 ` Jan Nieuwenhuizen 0 siblings, 0 replies; 9+ messages in thread From: Jan Nieuwenhuizen @ 2019-08-14 19:33 UTC (permalink / raw) To: Carl Dong; +Cc: 37012@debbugs.gnu.org Carl Dong writes: Hello Carl, > It would seem from the synopsis that the version of wine packaged with > Guix is 32-bit only. 'Doh! > 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: --8<---------------cut here---------------start------------->8--- 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! --8<---------------cut here---------------end--------------->8--- 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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-12 20:46 [bug#37012] [PATCH] gnu: mingw: Add x86_64 support Carl Dong 2019-08-13 22:27 ` Jan Nieuwenhuizen @ 2019-08-14 12:09 ` Thompson, David 2019-08-14 17:56 ` Carl Dong 1 sibling, 1 reply; 9+ messages in thread From: Thompson, David @ 2019-08-14 12:09 UTC (permalink / raw) To: Carl Dong; +Cc: 37012 Hi Carl, On Mon, Aug 12, 2019 at 4:47 PM Carl Dong <contact@carldong.me> wrote: > > 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 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#37012] [PATCH] gnu: mingw: Add x86_64 support. 2019-08-14 12:09 ` [bug#37012] " Thompson, David @ 2019-08-14 17:56 ` Carl Dong 0 siblings, 0 replies; 9+ messages in thread From: Carl Dong @ 2019-08-14 17:56 UTC (permalink / raw) To: Thompson, David; +Cc: 37012@debbugs.gnu.org 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" ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-08-14 19:35 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-08-12 20:46 [bug#37012] [PATCH] gnu: mingw: Add x86_64 support Carl Dong 2019-08-13 22:27 ` Jan Nieuwenhuizen 2019-08-14 6:57 ` Jan Nieuwenhuizen 2019-08-14 17:54 ` Carl Dong 2019-08-14 18:40 ` Jan Nieuwenhuizen 2019-08-14 18:50 ` Carl Dong 2019-08-14 19:33 ` bug#37012: " Jan Nieuwenhuizen 2019-08-14 12:09 ` [bug#37012] " Thompson, David 2019-08-14 17:56 ` Carl Dong
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.