unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: Efraim Flashner <efraim@flashner.co.il>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: Vagrant Cascadian <vagrant@debian.org>,
	55283@debbugs.gnu.org, Maxime Devos <maximedevos@telenet.be>,
	raingloom <raingloom@riseup.net>
Subject: bug#55283: ‘tests/guix-shell-export-manifest.sh’ fails on aarch64-linux
Date: Mon, 9 May 2022 11:44:28 +0300	[thread overview]
Message-ID: <YnjUbBWxpVMnANHc@3900XT> (raw)
In-Reply-To: <87wnevu0x1.fsf@gnu.org>


[-- Attachment #1.1: Type: text/plain, Size: 898 bytes --]

On Mon, May 09, 2022 at 12:14:50AM +0200, Ludovic Courtès wrote:
> Hi!
> 
> Vagrant Cascadian <vagrant@debian.org> skribis:
> 
> > Well, I guess I answered my initial question by reading the error
> > message... guix/cpu.scm ... how did that work before for things like
> > cross-building, where /proc/cpuinfo is *definitely* wrong to get
> > information about the architecture you're building for?
> 
> (guix cpu) is used when passing ‘--tune’, which is used for native
> builds:
> 
>   https://hpc.guix.info/blog/2022/01/tuning-packages-for-a-cpu-micro-architecture/

I have a WIP patch for adding CPU detection for aarch64. Perhaps it'll
help with the issues?

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #1.2: 0005-WIP-guix-cpu-Add-detection-for-aarch64-CPUs.patch --]
[-- Type: text/plain, Size: 4748 bytes --]

From 26894a74e7a1ed861a170239e26d13f1298fe5ac Mon Sep 17 00:00:00 2001
Message-Id: <26894a74e7a1ed861a170239e26d13f1298fe5ac.1644401681.git.efraim@flashner.co.il>
In-Reply-To: <cover.1644401681.git.efraim@flashner.co.il>
References: <cover.1644401681.git.efraim@flashner.co.il>
From: Efraim Flashner <efraim@flashner.co.il>
Date: Wed, 9 Feb 2022 12:07:55 +0200
Subject: [PATCH 5/5] WIP: guix: cpu: Add detection for aarch64 CPUs.

* guix/cpu.scm (current-cpu): Extend existing implementation to also
read cpuinfo from aarch64 machines.
(cpu->gcc-architecture): Add case for aarch64.
---
 guix/cpu.scm | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/guix/cpu.scm b/guix/cpu.scm
index 6d44599822..d4dbd5f6b8 100644
--- a/guix/cpu.scm
+++ b/guix/cpu.scm
@@ -66,25 +66,47 @@ (define (prefix? prefix)
           (match (read-line port)
             ((? eof-object?)
              #f)
+            ;; vendor for x86_64 and i686
             ((? (prefix? "vendor_id") str)
              (match (string-tokenize str)
                (("vendor_id" ":" vendor)
                 (loop vendor family model))))
+            ;; vendor for aarch64 and armhf
+            ((? (prefix? "CPU implementer") str)
+             (match (string-tokenize str)
+               (("CPU" "implementer" ":" vendor)
+                (loop vendor family model))))
+            ;; family for x86_64 and i686
             ((? (prefix? "cpu family") str)
              (match (string-tokenize str)
                (("cpu" "family" ":" family)
                 (loop vendor (string->number family) model))))
+            ;; model for x86_64 and i686
             ((? (prefix? "model") str)
              (match (string-tokenize str)
                (("model" ":" model)
                 (loop vendor family (string->number model)))
                (_
                 (loop vendor family model))))
+            ;; model for aarch64 and armhf
+            ((? (prefix? "CPU part") str)
+             (match (string-tokenize str)
+               (("CPU" "part" ":" model)
+                (loop vendor family (string->number (string-append "#x" (string-drop model 2)))))
+               (_
+                (loop vendor family model))))
+            ;; flags for x86_64 and i686
             ((? (prefix? "flags") str)
              (match (string-tokenize str)
                (("flags" ":" flags ...)
                 (cpu (utsname:machine (uname))
                      vendor family model (list->set flags)))))
+            ;; flags for aarch64 and armhf
+            ((? (prefix? "Features") str)
+             (match (string-tokenize str)
+               (("Features" ":" flags ...)
+                (cpu (utsname:machine (uname))
+                     vendor family model (list->set flags)))))
             (_
              (loop vendor family model))))))))
 
@@ -192,6 +214,54 @@ (define (cpu->gcc-architecture cpu)
          ;; TODO: Recognize CENTAUR/CYRIX/NSC?
 
          "x86_64"))
+    ("aarch64"
+     (pk (cpu-architecture cpu)(cpu-vendor cpu)(cpu-family cpu) (cpu-model cpu)(cpu-flags cpu))
+     ;; Currently returns ("aarch64" #f #f #f #<<set> vhash: #<vhash 329666c0 9 pairs> insert: #<procedure %insert (t-5ce36f5c768e728-317 t-5ce36f5c768e728-319)> ref: #<procedure vhash-assoc (key vhash #:optional equal? hash)>>)
+     ;; Transcribed from GCC's list of aarch64 processors in aarch64-cores.def
+     (match (cpu-vendor cpu)
+       ("0x41"
+        (match (cpu-model cpu)
+          ((or #xd02 #xd04 #xd03 #xd07 #xd08 #xd09)
+           "armv8-a")
+          ((or #xd05 #xd0a #xd0b #xd0e #xd0d #xd41 #xd42 #xd4b #xd46 #xd43 #xd44 #xd41 #xd0c #xd4a)
+           "armv8.2-a")
+          (#xd40
+           "armv8.4-a")
+          (#xd15
+           "armv8-r")
+          ((or #xd46 #xd47 #xd48)
+           "armv9-a")))
+       ("0x42"
+        "armv8.1-a")
+       ("0x43"
+        (match (cpu-model cpu)
+          ((or #x0a0 #x0a1 #x0a2 #x0a3)
+           "armv8-a")
+          ((or #x0b0 #x0b1 #x0b2 #x0b3 #x0b4 #x0b5)
+           "armv8.2-a")
+          (#x0b8
+           "armv8.3-a")))
+       ("0x46"
+        "armv8.2-a")
+       ("0x48"
+        "armv8.2-a")
+       ("0x50"
+        "armv8-a")
+       ("0x51"
+        (match (cpu-model cpu)
+          (#xC00
+           "armv8-a")
+          (#x516
+           "armv8.1-a")
+          (#xC01
+           "armv8.4-a")))
+       ("0x53"
+        "armv8-a")
+       ("0x68"
+        "armv8-a")
+       (_
+        "armv8-a"))
+     "armv8-a")
     (architecture
      ;; TODO: AArch64.
      architecture)))
-- 
2.34.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-05-09  8:50 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-05 22:50 bug#55283: ‘tests/guix-shell-export-manifest.sh’ fails on aarch64-linux Ludovic Courtès
2022-05-06  0:28 ` raingloom
2022-05-06 20:43   ` Vagrant Cascadian
2022-05-06 21:12   ` Maxime Devos
2022-05-06 22:13     ` Vagrant Cascadian
2022-05-07  0:14       ` Vagrant Cascadian
2022-05-07  0:45         ` Vagrant Cascadian
2022-05-08 22:14         ` Ludovic Courtès
2022-05-09  8:44           ` Efraim Flashner [this message]
2022-05-09  8:57             ` Efraim Flashner
2022-05-09 10:03             ` Maxime Devos
2022-05-09 14:17               ` Efraim Flashner
2022-05-10 15:40                 ` Ludovic Courtès
2022-05-10 15:43                   ` Ludovic Courtès
2022-05-10 15:55                     ` Efraim Flashner
2022-05-10 15:50                   ` Efraim Flashner
2022-05-12  8:09                     ` Ludovic Courtès
2022-05-09 12:04 ` Sébastien Lerique
2022-05-09 12:32   ` Sébastien Lerique
2022-05-17 12:29 ` Efraim Flashner
2022-05-17 15:01   ` Pavel Shlyak
2022-05-17 16:38     ` Pavel Shlyak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YnjUbBWxpVMnANHc@3900XT \
    --to=efraim@flashner.co.il \
    --cc=55283@debbugs.gnu.org \
    --cc=ludo@gnu.org \
    --cc=maximedevos@telenet.be \
    --cc=raingloom@riseup.net \
    --cc=vagrant@debian.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).