unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Maxime Devos <maximedevos@telenet.be>
To: guix-devel@gnu.org
Subject: Packaging rust crates without compiling dependencies again for every dependent (wasting build time)
Date: Sat, 30 Apr 2022 11:29:25 +0200	[thread overview]
Message-ID: <5150e37c32f636a50574359fb0d1a3fbfc836367.camel@telenet.be> (raw)

[-- Attachment #1: Type: text/plain, Size: 1947 bytes --]

Hi various distributions packaging rust things (^),

Currently, most (all?) distributions seem to package ‘source-only
crates’, which when ‘compiled’, just copy some source code to a
location.  This works, but the downside is that if both a package X and
a package Y depends on rust-Z, then rust-Z will effectively be compiled
twice: when building X, but also when building Y.

This seems a waste of compilation time to me, so I've been writing a
build tool ‘antioxidant’ (*) for the distribution Guix that avoids
double compilation, at
<https://notabug.org/maximed/cargoless-rust-experiments>).

To avoid the double compilation things, antioxidant calls the
underlying rustc by itself instead of cargo, and it reads and
interprets Cargo.toml by itself instead of letting cargo do that.

Currently, it's rather Guix-specific, but in principle it should be
possible to turn it in some binary 'antioxidant' that could be used on
other distributions as well if someone is interested in that, e.g.
something like

$ # (not implemented yet!)
$ antioxidant configure --prefix=$HOME/extra-software -Lcrate=/usr/lib/crates -L/usr/lib -Lcrate=$HOME/extra-software/lib/crates --features=x,y,z
$ antioxidant make
$ antioxidant make check
$ antioxidant make install DESTDIR=... # this does not install source code, only the compiled crates

(*) A ‘build system’, in Guix terminology.

Currently, it can succesfully compile 'hexyl', 'sniffglue' and all
their dependencies.  I'm working on addressing limitations that
prevent antioxidant from compiling other binaries (currently trying
to make 'agate' and all its dependencies compile).

Greetings,
Maxime.

(^) If you are reading this from guix-devel@: some of the distributions I
intend to contact have a no-crossposting policy, so I'm first sending this to
guix-devel@, then sending some mails to individual distributions with a link
to this e-mail.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

             reply	other threads:[~2022-04-30  9:30 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-30  9:29 Maxime Devos [this message]
2022-05-09 10:02 ` Packaging rust crates without compiling dependencies again for every dependent (wasting build time) Efraim Flashner
2022-05-09 10:08   ` Maxime Devos

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=5150e37c32f636a50574359fb0d1a3fbfc836367.camel@telenet.be \
    --to=maximedevos@telenet.be \
    --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).