From c69230c81f9657fd6338c1cd625139a1c1d1c39f Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Tue, 2 Jan 2024 09:27:32 +0200 Subject: [PATCH] gnu: Add support for x86_64-linux-gnux32. * gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add entry for x86_64-linux-gnux32. * gnu/packages/gcc.scm (gcc-configure-flags-for-triplet): Add configure-flag for x86_64-linux-gnux32. * guix/platforms/x86.scm (x86_64-linux-gnux32): New variable. * guix/utils.scm (gnu-triplet->nix-system): Force x86_64-linux-gnux32 to output a different nix-system than x86_64-linux-gnu. Change-Id: I519fea2f8357e4b9895ede05fe8a5e373e9b034a Signed-off-by: Efraim Flashner --- gnu/packages/bootstrap.scm | 5 ++++- gnu/packages/gcc.scm | 5 ++++- guix/platforms/x86.scm | 10 ++++++++++ guix/utils.scm | 4 +++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index 602d8f26c5..a36bb289cd 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2014, 2015, 2018, 2019 Mark H Weaver -;;; Copyright © 2017, 2020 Efraim Flashner +;;; Copyright © 2017, 2020, 2024 Efraim Flashner ;;; Copyright © 2018, 2020, 2022 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2019 Carl Dong ;;; Copyright © 2019 Léo Le Bouter @@ -323,6 +323,9 @@ or false to signal an error." ((string=? system "powerpc64-linux") "/lib/ld64.so.1") ((string=? system "alpha-linux") "/lib/ld-linux.so.2") + ;; TODO: Differentiate between x86_64-linux-gnu and x86_64-linux-gnux32. + ((string=? system "x86_64-linux-gnux32") "/lib/ld-linux-x32.so.2") + ;; XXX: This one is used bare-bones, without a libc, so add a case ;; here just so we can keep going. ((string=? system "arm-eabi") "no-ld.so") diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index a8b74a3632..5590cd3d7e 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2014, 2015, 2018 Mark H Weaver ;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus ;;; Copyright © 2015, 2023 Andreas Enge -;;; Copyright © 2015-2018, 2020-2023 Efraim Flashner +;;; Copyright © 2015-2018, 2020-2024 Efraim Flashner ;;; Copyright © 2016 Carlos Sánchez de La Lama ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018, 2020, 2022 Marius Bakke @@ -75,6 +75,9 @@ where the OS part is overloaded to denote a specific ABI---into GCC "--with-mode=thumb" "--with-fpu=neon")) + ((string-match "x86_64-linux-gnux32" target) + '("--with-abi=mx32")) + ((and (string-suffix? "-gnu" target) (not (string-contains target "-linux"))) ;; Cross-compilation of libcilkrts in GCC 5.5.0 to GNU/Hurd fails diff --git a/guix/platforms/x86.scm b/guix/platforms/x86.scm index 4ed5638c14..0c8fc7296c 100644 --- a/guix/platforms/x86.scm +++ b/guix/platforms/x86.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 Mathieu Othacehe +;;; Copyright © 2023, 2024 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,7 @@ #:use-module (guix records) #:export (i686-linux x86_64-linux + x86_64-linux-x32 i686-mingw x86_64-mingw i586-gnu)) @@ -41,6 +43,14 @@ (rust-target "x86_64-unknown-linux-gnu") (glibc-dynamic-linker "/lib/ld-linux-x86-64.so.2"))) +(define x86_64-linux-x32 + (platform + (target "x86_64-linux-gnux32") + (system #f) + (linux-architecture "x86_64") + (rust-target "x86_64-unknown-linux-gnux32") + (glibc-dynamic-linker "/lib/ld-linux-x32.so.2"))) + (define i686-mingw (platform (target "i686-w64-mingw32") diff --git a/guix/utils.scm b/guix/utils.scm index 8e71f97e1c..f4bf965e9a 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2015 David Thompson ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2018, 2020 Marius Bakke -;;; Copyright © 2020, 2021 Efraim Flashner +;;; Copyright © 2020, 2021, 2024 Efraim Flashner ;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer ;;; Copyright © 2021 Simon Tournier ;;; Copyright © 2021 Chris Marusich @@ -634,6 +634,8 @@ returned by `config.guess'." (else triplet)))) (cond ((string-match "^arm[^-]*-([^-]+-)?linux-gnueabihf" triplet) "armhf-linux") + ;; Otherwise it will show up as x86_64-linux... which isn't wrong. + ((string-match "x86_64-linux-gnux32" triplet) "x86_64-linux-gnux32") ((string-match "^([^-]+)-([^-]+-)?linux-gnu.*" triplet) => (lambda (m)