[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#74290] [PATCH 05/31] gnu: Add basic support for x86_64-pc-gnu targe
From: |
Janneke Nieuwenhuizen |
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@gnu.org>
-;;; Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2017, 2020, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2020, 2021 Mathieu Othacehe <othacehe@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@gnu.org>
;;; Copyright © 2023, 2024 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@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@cyberdimension.org>
;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
;;; Copyright © 2023 Philip McGrath <philip@philipmcgrath.com>
-;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
;;; Copyright © 2024 Herman Rimm <herman@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@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com
- [bug#74290] [PATCH 00/31] Add support for x86_64-gnu, aka the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 02/31] gnu: gnumach: Update to v1.8+git20240714., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 03/31] gnu: hurd: Update to v0.9.git20240714., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 01/31] gnu: mig: Update to v1.8+git20231217., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 06/31] gnu: cross-libc: Support cross-building for the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 08/31] gnu: elfutils: Fix build for 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 10/31] gnu: patch: Fix build for the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 11/31] gnu: libxcrypt: Support the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 05/31] gnu: Add basic support for x86_64-pc-gnu target, aka 64bit Hurd.,
Janneke Nieuwenhuizen <=
- [bug#74290] [PATCH 04/31] gnu: gcc: Add indirections current-gcc, current-gcc-toolchain., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 07/31] gnu: bash-minimal: Fix build for 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 12/31] gnu: libstdc++: Support the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 09/31] gnu: grep: Fix build for the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 13/31] gnu: gcc-13, gcc-14: Support being used as parent for gcc-static., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 15/31] system: image: Add hurd64 image types., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 17/31] gnu: libgcrypt: Use libgpg-error-1.50 for the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 18/31] gnu: perl: Support cross-building for the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10
- [bug#74290] [PATCH 14/31] DRAFT gnu: bootstrap: Add support for x86_64-gnu, aka the 64bit Hurd., Janneke Nieuwenhuizen, 2024/11/10