diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index 8bd0c4eaf3..5337617a53 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -26,6 +26,7 @@ (define-module (gnu packages bootstrap) #:use-module (guix licenses) #:use-module (gnu packages) + #:use-module (gnu platform) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system) @@ -314,33 +315,29 @@ (define* (glibc-dynamic-linker (%current-system)))) "Return the name of Glibc's dynamic linker for SYSTEM." ;; See the 'SYSDEP_KNOWN_INTERPRETER_NAMES' cpp macro in libc. - (cond ((string=? system "x86_64-linux") "/lib/ld-linux-x86-64.so.2") - ((string=? system "i686-linux") "/lib/ld-linux.so.2") - ((string=? system "armhf-linux") "/lib/ld-linux-armhf.so.3") - ((string=? system "mips64el-linux") "/lib/ld.so.1") - ((string=? system "i586-gnu") "/lib/ld.so.1") - ((string=? system "i686-gnu") "/lib/ld.so.1") - ((string=? system "aarch64-linux") "/lib/ld-linux-aarch64.so.1") - ((string=? system "powerpc-linux") "/lib/ld.so.1") - ((string=? system "powerpc64-linux") "/lib/ld64.so.1") - ((string=? system "powerpc64le-linux") "/lib/ld64.so.2") - ((string=? system "alpha-linux") "/lib/ld-linux.so.2") - ((string=? system "s390x-linux") "/lib/ld64.so.1") - ((string=? system "riscv64-linux") "/lib/ld-linux-riscv64-lp64d.so.1") + (let ((platform (lookup-platform-by-system system))) + (cond + ((platform? platform) + (platform-glibc-dynamic-linker platform)) - ;; XXX: This one is used bare-bones, without a libc, so add a case - ;; here just so we can keep going. - ((string=? system "arm-elf") "no-ld.so") - ((string=? system "arm-eabi") "no-ld.so") - ((string=? system "xtensa-elf") "no-ld.so") - ((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") + ;; TODO: Define those as platforms. + ((string=? system "i686-gnu") "/lib/ld.so.1") + ((string=? system "powerpc64-linux") "/lib/ld64.so.1") + ((string=? system "alpha-linux") "/lib/ld-linux.so.2") - (else (error "dynamic linker name not known for this system" - system)))) + ;; XXX: This one is used bare-bones, without a libc, so add a case + ;; here just so we can keep going. + ((string=? system "arm-elf") "no-ld.so") + ((string=? system "arm-eabi") "no-ld.so") + ((string=? system "xtensa-elf") "no-ld.so") + ((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" + system))))) ;;; diff --git a/gnu/platform.scm b/gnu/platform.scm index 4c5211e107..fdc3685e7c 100644 --- a/gnu/platform.scm +++ b/gnu/platform.scm @@ -27,6 +27,7 @@ (define-module (gnu platform) platform-target platform-system platform-linux-architecture + platform-glibc-dynamic-linker platform-modules platforms @@ -58,12 +59,17 @@ (define-module (gnu platform) ;; ;; The 'linux-architecture' is only relevant if the kernel is Linux. In that ;; case, it corresponds to the ARCH variable used when building Linux. +;; +;; The 'glibc-dynamic-linker' field is the name of Glibc's dynamic linker for +;; the corresponding system. (define-record-type* platform make-platform platform? - (target platform-target) ;"x86_64-linux-gnu" - (system platform-system) ;"x86_64-linux" - (linux-architecture platform-linux-architecture ;"x86" - (default #f))) + (target platform-target) + (system platform-system) + (linux-architecture platform-linux-architecture + (default #f)) + (glibc-dynamic-linker platform-glibc-dynamic-linker)) + ;;; ;;; Platforms. diff --git a/gnu/platforms/arm.scm b/gnu/platforms/arm.scm index 1e61741a35..bf68b2d00f 100644 --- a/gnu/platforms/arm.scm +++ b/gnu/platforms/arm.scm @@ -27,10 +27,12 @@ (define armv7-linux (platform (target "arm-linux-gnueabihf") (system "armhf-linux") - (linux-architecture "arm"))) + (linux-architecture "arm") + (glibc-dynamic-linker "/lib/ld-linux-armhf.so.3"))) (define aarch64-linux (platform (target "aarch64-linux-gnu") (system "aarch64-linux") - (linux-architecture "arm64"))) + (linux-architecture "arm64") + (glibc-dynamic-linker "/lib/ld-linux-aarch64.so.1"))) diff --git a/gnu/platforms/hurd.scm b/gnu/platforms/hurd.scm new file mode 100644 index 0000000000..328e9818ad --- /dev/null +++ b/gnu/platforms/hurd.scm @@ -0,0 +1,29 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2021 Mathieu Othacehe +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu platforms hurd) + #:use-module (gnu platform) + #:use-module (gnu packages linux) + #:use-module (guix records) + #:export (hurd)) + +(define hurd + (platform + (target "i586-pc-gnu") + (system "i586-gnu") + (glibc-dynamic-linker "/lib/ld.so.1"))) diff --git a/gnu/platforms/mips.scm b/gnu/platforms/mips.scm index 84a492699d..174657da13 100644 --- a/gnu/platforms/mips.scm +++ b/gnu/platforms/mips.scm @@ -26,4 +26,5 @@ (define mips64-linux (platform (target "mips64el-linux-gnu") (system "mips64el-linux") - (linux-architecture "mips"))) + (linux-architecture "mips") + (glibc-dynamic-linker "/lib/ld.so.1"))) diff --git a/gnu/platforms/powerpc.scm b/gnu/platforms/powerpc.scm index 8fadfe88de..1d0b5cb666 100644 --- a/gnu/platforms/powerpc.scm +++ b/gnu/platforms/powerpc.scm @@ -27,10 +27,12 @@ (define powerpc-linux (platform (target "powerpc-linux-gnu") (system "powerpc-linux") - (linux-architecture "powerpc"))) + (linux-architecture "powerpc") + (glibc-dynamic-linker "/lib/ld.so.1"))) (define powerpc64le-linux (platform (target "powerpc64le-linux-gnu") (system "powerpc64le-linux") - (linux-architecture "powerpc"))) + (linux-architecture "powerpc") + (glibc-dynamic-linker "/lib/ld64.so.2"))) diff --git a/gnu/platforms/riscv.scm b/gnu/platforms/riscv.scm index 29a34402a2..c2b4850e55 100644 --- a/gnu/platforms/riscv.scm +++ b/gnu/platforms/riscv.scm @@ -26,4 +26,5 @@ (define riscv64-linux (platform (target "riscv64-linux-gnu") (system "riscv64-linux") - (linux-architecture "riscv"))) + (linux-architecture "riscv") + (glibc-dynamic-linker "/lib/ld-linux-riscv64-lp64d.so.1"))) diff --git a/gnu/platforms/s390.scm b/gnu/platforms/s390.scm index c8caafbe45..d3b1133974 100644 --- a/gnu/platforms/s390.scm +++ b/gnu/platforms/s390.scm @@ -26,4 +26,5 @@ (define s390x-linux (platform (target "s390x-linux-gnu") (system "s390x-linux") - (linux-architecture "s390"))) + (linux-architecture "s390") + (glibc-dynamic-linker "/lib/ld64.so.1"))) diff --git a/gnu/platforms/x86.scm b/gnu/platforms/x86.scm index 1a5d6a3284..927d359ae8 100644 --- a/gnu/platforms/x86.scm +++ b/gnu/platforms/x86.scm @@ -29,25 +29,30 @@ (define i686-linux (platform (target "i686-linux-gnu") (system "i686-linux") - (linux-architecture "i386"))) + (linux-architecture "i386") + (glibc-dynamic-linker "/lib/ld-linux.so.2"))) (define x86_64-linux (platform (target "x86_64-linux-gnu") (system "x86_64-linux") - (linux-architecture "x86_64"))) + (linux-architecture "x86_64") + (glibc-dynamic-linker "/lib/ld-linux-x86-64.so.2"))) (define i686-mingw (platform (target "i686-w64-mingw32") - (system #f))) + (system #f) + (glibc-dynamic-linker #f))) (define x86_64-mingw (platform (target "x86_64-w64-mingw32") - (system #f))) + (system #f) + (glibc-dynamic-linker #f))) (define hurd (platform (target "i586-pc-gnu") - (system "i586-gnu"))) + (system "i586-gnu") + (glibc-dynamic-linker "/lib/ld.so.1")))