From 34e9eae68c9583acce5abc4100add3d88932a5ae Mon Sep 17 00:00:00 2001 From: Carl Dong Date: Tue, 1 Mar 2022 11:35:17 -0500 Subject: gnu: cross-base: Don't specify mingw --with-newlib Previous to this commit, we added a --with-newlib configure flag to cross-gcc when cross-newlib?, but cross-newlib? is true only when target-mingw?. It turns out that specifying --with-newlib disables the GLIBCXX_CROSSCONFIG check, which is used to detect _GLIBCXX_HAVE__WFOPEN, which is required in C++17 std::filesystem for mingw-w64 systems. Additional context: In gnu/packages/embedded.scm, --with-newlib is specified explicitly when we're actually using newlib, which seems like the correct way of handling it. Situation in other distros: - Debian's gcc-mingw-w64 doesn't specify --with-newlib - Fedora's mingw64-gcc-c++ explicitly specifies --without-newlib Chesterton's fence: Chatting with janneke, who originally added this mechanism, reveals that this flag is not only no longer required, but also that removing it doesn't break his guile-mingw builds. See IRC logs of #guix for 2022-02-15. * gnu/packages/cross-base.scm (cross-gcc-arguments): Don't check for and specify --with-newlib. (cross-libc): Check for mingw and use mingw-w64 directly. (cross-newlib?): Remove, unexport. (native-libc): Remove. --- gnu/packages/cross-base.scm | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 529144d127..66412b9e92 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -42,7 +42,6 @@ #:export (cross-binutils cross-libc cross-gcc - cross-newlib? cross-kernel-headers)) (define-syntax %xgcc @@ -177,10 +176,6 @@ base compiler and using LIBC (which may be either a libc package or #f.)" `((string-append "--with-toolexeclibdir=" (assoc-ref %outputs "lib") "/" ,target "/lib")) - '()) - ;; For a newlib (non-glibc) target - ,@(if (cross-newlib? target) - '("--with-newlib") '())) ,(if libc @@ -489,10 +484,11 @@ target that libc." (xheaders (cross-kernel-headers target))) "Return LIBC cross-built for TARGET, a GNU triplet. Use XGCC and XBINUTILS and the cross tool chain." - (if (cross-newlib? target libc) - (native-libc target libc - #:xgcc xgcc - #:xbinutils xbinutils) + (if (target-mingw? target) + (let ((machine (substring target 0 (string-index target #\-)))) + (make-mingw-w64 machine + #:xgcc xgcc + #:xbinutils xbinutils)) (package (inherit libc) (name (string-append "glibc-cross-" target)) @@ -553,24 +549,6 @@ and the cross tool chain." ,@(package-inputs libc) ;FIXME: static-bash ,@(package-native-inputs libc)))))) -(define* (native-libc target - #:optional - (libc glibc) - #:key - xgcc - xbinutils) - (if (target-mingw? target) - (let ((machine (substring target 0 (string-index target #\-)))) - (make-mingw-w64 machine - #:xgcc xgcc - #:xbinutils xbinutils)) - libc)) - -(define* (cross-newlib? target - #:optional - (libc glibc)) - (not (eq? (native-libc target libc) libc))) - ;;; Concrete cross tool chains are instantiated like this: ;; -- cgit v1.2.3