Subject: [bug#61959] [PATCH 0/7] Add some Asahi Linux packages

From: Roman Scherer <[email-masked]>
Date: Sun, 05 Mar 2023 12:15:58 +0100

Hi Ricardo & Winter,

I didn't receive Winter's email and just saw it in the web interface
after I sent v2 of the patch series. Should I be subscribed to the whole
guix-patches mailing list as well to receive them? I'm new to the email
based workflow and sometimes still a bit lost.

I will address the feedback I got from Winter and send a v3.

@Winter, I will address your comments. You are right about the order of
libdrm, it should come before mesa-asahi.

> The next step would be to support building a Linux with Rust
> modules. I'm waiting for some patches from the Rust team to do this.

About this next step. The Asahi Linux team has a version of the Linux
kernel that contains a GPU kernel module written in Rust. To build this
module I used customize-linux and added the rust and the
rust-bindgen-cli packages to its native inputs.

This is what I currently did:

```
(define (make-asahi-linux name config)
  (let* ((version "6.2-rc3-6")
         (base (customize-linux
                #:linux linux-libre-arm64-generic
                #:name name
                #:source (origin
                           (method url-fetch)
                           (uri (string-append "https://github.com/AsahiLinux/linux/archive/"
                                               "asahi-" version ".tar.gz"))
                           (sha256
                            (base32 "0bk4grzcizk48hhalyyaa4alk5069z102vx5ddw12jfqzsrdfccn"))))))
    (package
      (inherit base)
      (version version)
      (arguments
       (substitute-keyword-arguments (package-arguments base)
         ((#:phases phases '%standard-phases)
          #~(modify-phases #$phases
              (add-before 'configure 'configure-rust
                (lambda* (#:key inputs #:allow-other-keys)
                  (setenv "LIBCLANG_PATH"
                          (string-append (assoc-ref inputs "clang") "/lib"))
                  (setenv "RUST_LIB_SRC"
                          (string-append (assoc-ref inputs "rust-src")
                                         "/lib/rustlib/src/rust/library"))))
              (replace 'configure
                (lambda* (#:key inputs #:allow-other-keys)
                  (copy-file #$config ".config")
                  (chmod ".config" #o644)))))))
      (native-inputs
       `(("clang" ,clang)
         ("llvm" ,llvm)
         ("python" ,python)
         ("rust" ,(replace-jemalloc (@@ (gnu packages rust) rust-1.62)))
         ("rust-bindgen-cli" ,(replace-jemalloc rust-bindgen-cli))
         ("rust-src" ,rust-src-1.62)
         ("zstd" ,zstd)
         ,@(package-native-inputs base)))
      (home-page "https://asahilinux.org")
      (synopsis "Linux on Apple Silicon")
      (description "Asahi Linux is a project and community with the goal of porting Linux
to Apple Silicon Macs, starting with the 2020 M1 Mac Mini, MacBook
Air, and MacBook Pro."))))

(define-public asahi-linux
  (make-asahi-linux "asahi-linux" (local-file "kernel.config")))

(define-public asahi-linux-edge
  (make-asahi-linux "asahi-linux-edge" (local-file "kernel.edge.config")))
```

However, rust-bindgen-cli isn't yet packaged, and the version I used
previously (0.59.2) somehow disappeared from crates.io. They now only
have versions > 0.61.0 available, which I plan to package.

The rust team is updating many packages at the moment, so my plan was to
wait until those made it into the main branch.

I think the differences of package/inherit vs (inherit) aren't very
clear to me. I'm guess I should use package/inherit to be able to use
input transformations. Is that correct?

Roman

Roman Scherer <[email-masked]> writes:

> [[PGP Signed Part:Undecided]]
>
> Hi Ricardo,
>
> I updated the patch series and sent v2 of it.
>
> Thanks for your review!
>
> Roman
>
> Ricardo Wurmus <[email-masked]> writes:
>
>> Thank you for the patches.
>>
>> Here a couple of comments:
>>
>> * Please do not use Github archive URLs like
>>   "https://github.com/AsahiLinux/m1n1/archive/v….tar.gz".  These are
>>   automatically generated and have changed in the past, leading to
>>   different hashes.  In the interest of reproducibility please use
>>   “git-fetch” with plain commit hashes instead.
>>
>> * Please use G-expressions instead of simple quoting with (assoc-ref
>>   outputs "out").  Instead of this:
>>
>> --8<---------------cut here---------------start------------->8---
>>     (arguments
>>      `(#:phases
>>        (modify-phases %standard-phases
>>          (replace 'configure
>>            (lambda _
>>              (setenv "RELEASE" "1")))
>>          (replace 'install
>>            (lambda* (#:key outputs #:allow-other-keys)
>>              (let ((dir (string-append (assoc-ref outputs "out") "/libexec/")))
>>                (mkdir-p dir)
>>                (copy-file "build/m1n1.bin" (string-append dir "m1n1.bin")))))
>>          ;; There are no tests
>>          (delete 'check))))
>> --8<---------------cut here---------------end--------------->8---
>>
>>
>>   Please do this:
>>
>> --8<---------------cut here---------------start------------->8---
>>     (arguments
>>      (list
>>       ;; There are no tests
>>       #:tests? #false
>>       #:phases
>>       #~(modify-phases %standard-phases
>>          (replace 'configure
>>            (lambda _
>>              (setenv "RELEASE" "1")))
>>          (replace 'install
>>            (lambda _
>>              (let ((dir (string-append #$output "/libexec/")))
>>                (mkdir-p dir)
>>                (copy-file "build/m1n1.bin" (string-append dir "m1n1.bin"))))))))
>> --8<---------------cut here---------------end--------------->8---
>>
>>   This also applies to “asahi-fwextract”.
>>
>> * The string labels for inputs are a deprecated style.  Please use plain
>>   lists of package variables.  If you want to modify an inherited list
>>   of inputs such as in “asahi-mesa” please use “modify-inputs”.
>>
>> * In “asahi-fwextract” the build phase “'remove-vendor” should be a
>>   source snippet instead.
>>
>> * Please use pyproject-build-system instead of python-build-system.  The
>>   pyproject-build-system is going to be the default in the future, and
>>   it would be good to use it already to address any incompatibilities
>>   early.
>>
>> Could you please send a new version of this patch set?  Thanks again!
>
> [[End of PGP Signed Part]]