From: "Ludovic Courtès" <ludo@gnu.org>
To: guix-devel@gnu.org
Subject: Re: Use and abuse of ‘computed-origin-method’: the ‘rust-ring’ case
Date: Sun, 15 Dec 2024 14:50:22 +0100 [thread overview]
Message-ID: <87ttb5hx7l.fsf@gnu.org> (raw)
In-Reply-To: <Z16WI0gUKM1APIMo@3900XT> (Efraim Flashner's message of "Sun, 15 Dec 2024 10:41:07 +0200")
Hi!
Efraim Flashner <efraim@flashner.co.il> skribis:
>> Anyway, the ‘computed-origin-method’ hack prevents input rewriting from
>> working as expected because the inputs of that big gexp aren’t visible
>> by just traversing the package graph. That’s a problem.
>
> Are we talking about the inputs used for the computed-origin? (perl,
> nasm, go, etc?)
Yes.
> I'm pretty sure there are 3 options here:
> 1. Stop rebuilding the generated files. This is what we did in the past,
> and it allows rust-ring-0.14 to be used on riscv64-linux. I haven't
> talked with the Debian folks about it but I'm pretty sure this is what
> they currently do. I don't like it because we have instructions on how
> to do the rebuild and it's already implemented. I also really like that
> everything can be regenerated from (nearly) any architecture, which
> makes it a much nicer build than qemu, which needs many cross compilers.
Yeah, we’d rather build from source.
> 2. Use the trivial-build-system instead of a computed-origin-method.
> I'm pretty sure we can use the output of the trivial-build-system (or
> any other package build) as the source for another package. I
> currently think this is the best option.
Yes, that should work.
> 3. Adjust the build.rs file in rust-ring to call a custom shell script
> which will build all the missing files that we would remove in a
> snippet. This is probably best from a "the source is ready to hack on"
> perspective, but it means we're carrying around a custom build script
> with no chance of being upstreamed. It also means that each package
> which uses rust-ring will need to have all the rust-ring build
> dependencies added and it will need to be built each time.
>
> I've attached a patch that I tested locally to build the sources in an
> actual package, and then use that to build rust-ring. I tested it by
> building librsvg. Currently it still requires go itself as using gccgo
> needs gccgo-toolchain.
Nice!
> + (package
> + (name "rust-ring")
> + (version "0.17.8.tar.gz") ; Hack to adjust the output name.
> + (source (origin
> (method git-fetch)
> (uri (git-reference
> (url "https://github.com/briansmith/ring")
> @@ -4147,182 +4148,185 @@ (define rust-ring-0.17-sources
> (file-name (git-file-name "rust-ring" version))
> (sha256
> (base32 "0rqfal81bf4l3dja98cajfjq2jbz1rcx7xdp2r33cxrm5y5psr28"))
[...]
> + (build-system trivial-build-system)
> + (arguments
> + (list
> + #:modules '((guix build utils))
> + #:builder
> + #~(begin
> + (use-modules (guix build utils))
> + (setenv "PATH"
> + (string-join
> + (list (assoc-ref %build-inputs "clang") ; for clang-format
> + (assoc-ref %build-inputs "go")
> + (assoc-ref %build-inputs "gzip")
> + (assoc-ref %build-inputs "nasm")
> + (assoc-ref %build-inputs "perl")
> + (assoc-ref %build-inputs "python-minimal")
> + (assoc-ref %build-inputs "tar"))
You could use #+(this-package-native-input "clang"), etc.
If it works, I’m all for it!
I wonder if another option would be to make a proper package, which
would install the generated headers to $output/include and the generated
.o files to #$output/lib. That package could be among the
‘propagated-inputs’ of ‘rust-ring’. Dunno if that would work though.
Thanks for the quick reply & fix!
Ludo’.
prev parent reply other threads:[~2024-12-15 13:51 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-14 22:37 Use and abuse of ‘computed-origin-method’: the ‘rust-ring’ case Ludovic Courtès
2024-12-15 8:41 ` Efraim Flashner
2024-12-15 13:50 ` Ludovic Courtès [this message]
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=87ttb5hx7l.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=guix-devel@gnu.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).