Package: guix-patches;
Reported by: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Date: Sun, 10 Nov 2024 10:35:02 UTC
Severity: normal
Tags: patch
Done: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Janneke Nieuwenhuizen <janneke <at> gnu.org> To: 74290 <at> debbugs.gnu.org Cc: Andreas Enge <andreas <at> enge.fr>, Christopher Baines <guix <at> cbaines.net>, Efraim Flashner <efraim <at> flashner.co.il>, Ekaitz Zarraga <ekaitz <at> elenq.tech>, Josselin Poiret <dev <at> jpoiret.xyz>, Ludovic Courtès <ludo <at> gnu.org>, Mathieu Othacehe <othacehe <at> gnu.org>, Simon Tournier <zimon.toutoune <at> gmail.com>, Tobias Geerinckx-Rice <me <at> tobias.gr> Subject: [bug#74290] [PATCH 05/31] gnu: Add basic support for x86_64-pc-gnu target, aka 64bit Hurd. Date: Sun, 10 Nov 2024 11:38:01 +0100
* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Update comment on where to find shared linker name. * guix/platforms/x86.scm (x86_64-gnu): New exported variable. * guix/utils.scm (target-hurd64? system-hurd64?): New procedures. * gnu/packages/gcc.scm: (current-gcc): Use target-hurd64? in new procedure to select gcc-14 on 64bit Hurd. (libstdc++): Change to procedure. (libstdc++-headers): Update accordingly. * gnu/packages/commencement.scm (current-gcc-toolchain): Likewise, to select gcc-toolchain-14 on 64bit Hurd. * gnu/packages/cross-base.scm (%xgcc): Use current-gcc. (cross-kernel-headers*): Use target-hurd? instead of custom "i586..." matching to also use xhurd-core-headers for target-hurd64. * gnu/packages/make-bootstrap.scm (package-with-relocatable-glibc): Capture (current-gcc) before resetting %current-target-system. [native-inputs]: Move final-inputs before cross-packages. (%glibc-stripped): Likewise. (%gcc-static): Change to procedure. (%gcc-stripped): Likewise, update accordingly. (%gcc-bootstrap-tarball): Likewise, update accordingly. * gnu/ci.scm (%core-packages): Update accordingly. * gnu/packages/patches/gcc-14-cross-without-bootstrap.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/cross-base.scm (cross-gcc)[origin]: Use it when cross-building gcc >= 14. Change-Id: I4ae189e7e5188ced91744b89fe9d753b6a1fca78 --- gnu/ci.scm | 4 ++-- gnu/packages/commencement.scm | 6 +++-- gnu/packages/cross-base.scm | 6 ++--- gnu/packages/gcc.scm | 32 +++++++++++++------------- gnu/packages/make-bootstrap.scm | 40 +++++++++++++++++++++------------ guix/platforms/x86.scm | 11 ++++++++- guix/utils.scm | 15 ++++++++++++- 7 files changed, 76 insertions(+), 38 deletions(-) diff --git a/gnu/ci.scm b/gnu/ci.scm index 4e282d197f..e7e839d968 100644 --- a/gnu/ci.scm +++ b/gnu/ci.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012-2024 Ludovic Courtès <ludo <at> gnu.org> -;;; Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org> +;;; Copyright © 2017, 2020, 2024 Janneke Nieuwenhuizen <janneke <at> gnu.org> ;;; Copyright © 2018, 2019 Clément Lassieur <clement <at> lassieur.org> ;;; Copyright © 2020 Julien Lepiller <julien <at> lepiller.eu> ;;; Copyright © 2020, 2021 Mathieu Othacehe <othacehe <at> gnu.org> @@ -146,7 +146,7 @@ (define %core-packages %bootstrap-binaries-tarball %binutils-bootstrap-tarball (%glibc-bootstrap-tarball) - %gcc-bootstrap-tarball + (%gcc-bootstrap-tarball) %guile-bootstrap-tarball %bootstrap-tarballs)) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index 2b43759dac..682deb89cf 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -3642,10 +3642,12 @@ (define-public gcc-toolchain-14 ;; The default GCC (define (current-gcc-toolchain) "The current default gcc-toolchain version." - gcc-toolchain-11) + (if (target-hurd64?) + gcc-toolchain-14 + gcc-toolchain-11)) (define-public gcc-toolchain - (deprecated-package "gcc-toolchain" gcc-toolchain-11)) + (deprecated-package "gcc-toolchain" (current-gcc-toolchain))) (define-public gcc-toolchain-aka-gcc ;; It's natural for users to try "guix install gcc". This package diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 9c701efae8..7b32a6b64e 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -641,9 +641,9 @@ (define* (cross-kernel-headers* target ("hurd-headers" ,xhurd-headers) ("hurd-minimal" ,xhurd-minimal))))) - (match target - ((or "i586-pc-gnu" "i586-gnu") xhurd-core-headers) - (_ xlinux-headers))) + (if (target-hurd? target) + xhurd-core-headers + xlinux-headers)) (define* (cross-libc . args) (if (or (= (length args) 1) (contains-keyword? args)) diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 3b5d05b9a9..fc3746fb05 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -861,10 +861,12 @@ (define-public gcc-14 ;; the gcc-toolchain-* definitions. (define (current-gcc) "The current default gcc version." - gcc-11) + (if (target-hurd64?) + gcc-14 + gcc-11)) (define-public gcc - (deprecated-package "gcc" gcc-11)) + (deprecated-package "gcc" (current-gcc))) ;;; @@ -903,15 +905,15 @@ (define-public gcc-2.95 (outputs '("out")) (arguments (let ((matching-system - (match (%current-system) - ;; This package predates our 64-bit architectures. - ;; Force a 32-bit build targeting a similar architecture. - ("aarch64-linux" - "armhf-linux") - ("x86_64-linux" - "i686-linux") - (_ - (%current-system))))) + (match (%current-system) + ;; This package predates our 64-bit architectures. + ;; Force a 32-bit build targeting a similar architecture. + ("aarch64-linux" + "armhf-linux") + ("x86_64-linux" + "i686-linux") + (_ + (%current-system))))) (list #:system matching-system #:configure-flags #~'("--disable-werror") @@ -1050,8 +1052,8 @@ (define-public (make-libstdc++ gcc) (propagated-inputs '()) (synopsis "GNU C++ standard library"))) -(define libstdc++ - ;; Libstdc++ matching the default GCC. +(define (current-libstdc++) + ;; Libstdc++ matching the CURRENT-GCC. (make-libstdc++ (current-gcc))) (define libstdc++-headers @@ -1061,7 +1063,7 @@ (define libstdc++-headers ;; is right under include/c++ and not under ;; include/c++/x86_64-unknown-linux-gnu (aka. GPLUSPLUS_TOOL_INCLUDE_DIR). (package - (inherit libstdc++) + (inherit (current-libstdc++)) (name "libstdc++-headers") (outputs '("out")) (build-system trivial-build-system) @@ -1072,7 +1074,7 @@ (define libstdc++-headers (mkdir (string-append out "/include")) (symlink (string-append libstdc++ "/include") (string-append out "/include/c++"))))) - (inputs `(("libstdc++" ,libstdc++))) + (inputs `(("libstdc++" ,(current-libstdc++)))) (synopsis "Headers of GNU libstdc++"))) (define-public libstdc++-4.9 diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm index c6293b9a38..18281198ba 100644 --- a/gnu/packages/make-bootstrap.scm +++ b/gnu/packages/make-bootstrap.scm @@ -124,8 +124,11 @@ (define (package-with-relocatable-glibc p) (glibc-for-bootstrap ;; `cross-libc' already returns a cross libc, so clear ;; %CURRENT-TARGET-SYSTEM. - (parameterize ((%current-target-system #f)) - (cross-libc target)))) + (let ((xgcc (cross-gcc target #:xgcc (current-gcc)))) + (parameterize ((%current-target-system #f)) + (cross-libc target #:xgcc xgcc + #:xheaders (cross-kernel-headers + target #:xgcc xgcc)))))) ;; Standard inputs with the above libc and corresponding GCC. @@ -145,7 +148,10 @@ (define (package-with-relocatable-glibc p) target #:xbinutils (cross-binutils target) #:libc (cross-bootstrap-libc target)))) - `(("cross-gcc" ,(package + `(,@(%final-inputs) + ;; As versions for gcc and cross-gcc can differ, make sure to have + ;; cross-gcc behind gcc in CPLUS_INCLUDE_PATH. + ("cross-gcc" ,(package (inherit xgcc) (search-paths ;; Ensure the cross libc headers appears on the @@ -154,8 +160,7 @@ (define (package-with-relocatable-glibc p) (variable "CROSS_CPLUS_INCLUDE_PATH") (files '("include"))) (package-search-paths (current-gcc)))))) - ("cross-binutils" ,(cross-binutils target)) - ,@(%final-inputs))) + ("cross-binutils" ,(cross-binutils target)))) `(("libc" ,(glibc-for-bootstrap glibc)) ("libc:static" ,(glibc-for-bootstrap glibc) "static") ("gcc" ,(gcc-for-bootstrap glibc)) @@ -446,7 +451,8 @@ (define (%glibc-stripped) ;; GNU libc's essential shared libraries, dynamic linker, and headers, ;; with all references to store directories stripped. As a result, ;; libc.so is unusable and need to be patched for proper relocation. - (let ((glibc (glibc-for-bootstrap glibc))) + (let ((glibc (glibc-for-bootstrap glibc)) + (gcc (current-gcc))) (package (inherit glibc) (name "glibc-stripped") (build-system trivial-build-system) @@ -463,8 +469,13 @@ (define (%glibc-stripped) `(("libc" ,(let ((target (%current-target-system))) (if target (glibc-for-bootstrap - (parameterize ((%current-target-system #f)) - (cross-libc target))) + (let* ((xgcc (cross-gcc target #:xgcc gcc)) + (xheaders (cross-kernel-headers target + #:xgcc xgcc))) + (parameterize ((%current-target-system #f)) + (cross-libc target + #:xgcc xgcc + #:xheaders xheaders)))) glibc))))) (inputs `(("kernel-headers" @@ -478,11 +489,12 @@ (define (%glibc-stripped) ;; Only one output. (outputs '("out"))))) -(define %gcc-static +(define (%gcc-static) ;; A statically-linked GCC, with stripped-down functionality. (package-with-relocatable-glibc (package (inherit (current-gcc)) (name "gcc-static") + (source (package-source (current-gcc))) (outputs '("out")) ; all in one (arguments (substitute-keyword-arguments (package-arguments (current-gcc)) @@ -552,7 +564,7 @@ (define %gcc-static ,@(package-native-inputs (current-gcc))) (package-native-inputs (current-gcc))))))) -(define %gcc-stripped +(define (%gcc-stripped) ;; The subset of GCC files needed for bootstrap. (package (inherit (current-gcc)) @@ -575,7 +587,7 @@ (define %gcc-stripped (libdir (string-append out "/lib")) (includedir (string-append out "/include")) (libexecdir (string-append out "/libexec")) - (gcc #$%gcc-static)) + (gcc #$(%gcc-static))) (copy-recursively (string-append gcc "/bin") bindir) (for-each remove-store-references (find-files bindir ".*")) @@ -813,9 +825,9 @@ (define (%glibc-bootstrap-tarball) ;; A tarball with GNU libc's shared libraries, dynamic linker, and headers. (tarball-package (%glibc-stripped))) -(define %gcc-bootstrap-tarball +(define (%gcc-bootstrap-tarball) ;; A tarball with a dynamic-linked GCC and its headers. - (tarball-package %gcc-stripped)) + (tarball-package (%gcc-stripped))) (define %guile-bootstrap-tarball ;; A tarball with the statically-linked, relocatable Guile. @@ -856,7 +868,7 @@ (define %bootstrap-tarballs ((or "i686-linux" "x86_64-linux") (list %linux-libre-headers-bootstrap-tarball)) (_ - (list %gcc-bootstrap-tarball + (list (%gcc-bootstrap-tarball) %binutils-bootstrap-tarball (%glibc-bootstrap-tarball) %bootstrap-binaries-tarball))))) diff --git a/guix/platforms/x86.scm b/guix/platforms/x86.scm index 0c8fc7296c..5617e6dd68 100644 --- a/guix/platforms/x86.scm +++ b/guix/platforms/x86.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 Mathieu Othacehe <othacehe <at> gnu.org> ;;; Copyright © 2023, 2024 Efraim Flashner <efraim <at> flashner.co.il> +;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke <at> gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,7 +26,8 @@ (define-module (guix platforms x86) x86_64-linux-x32 i686-mingw x86_64-mingw - i586-gnu)) + i586-gnu + x86_64-gnu)) (define i686-linux (platform @@ -71,3 +73,10 @@ (define i586-gnu (system "i586-gnu") (rust-target "i686-unknown-hurd-gnu") (glibc-dynamic-linker "/lib/ld.so.1"))) + +(define x86_64-gnu + (platform + (target "x86_64-pc-gnu") + (system "x86_64-gnu") + (rust-target "x86_64-unknown-hurd-gnu") + (glibc-dynamic-linker "/lib/ld-x86-64.so.1"))) diff --git a/guix/utils.scm b/guix/utils.scm index f161cb4ef3..e100c03365 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -17,7 +17,7 @@ ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo <at> cyberdimension.org> ;;; Copyright © 2022 Antero Mejr <antero <at> mailbox.org> ;;; Copyright © 2023 Philip McGrath <philip <at> philipmcgrath.com> -;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke <at> gnu.org> +;;; Copyright © 2023, 2024 Janneke Nieuwenhuizen <janneke <at> gnu.org> ;;; Copyright © 2023 Zheng Junjie <873216071 <at> qq.com> ;;; Copyright © 2023 Foundation Devices, Inc. <hello <at> foundationdevices.com> ;;; Copyright © 2024 Herman Rimm <herman <at> rimm.ee> @@ -94,6 +94,8 @@ (define-module (guix utils) target-linux? target-hurd? system-hurd? + target-hurd64? + system-hurd64? target-mingw? target-x86-32? target-x86-64? @@ -716,6 +718,17 @@ (define* (system-hurd?) "Is the current system the GNU(/Hurd) system?" (and=> (%current-system) target-hurd?)) +(define* (target-hurd64? #:optional (target (or (%current-target-system) + (%current-system)))) + "Does TARGET represent the 64bit GNU(/Hurd) system?" + (and (target-hurd?) + (target-64bit? target))) + +(define* (system-hurd64?) + "Is the current system the 64bit GNU(/Hurd) system?" + (and (system-hurd?) + (target-64bit? (%current-system)))) + (define* (target-mingw? #:optional (target (%current-target-system))) "Is the operating system of TARGET Windows?" (and target -- Janneke Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond https://LilyPond.org Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.