unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Efraim Flashner <efraim@flashner.co.il>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: guix-devel@gnu.org
Subject: Re: Packages grow, no longer fit on a 💾
Date: Tue, 17 Jan 2023 10:06:50 +0200	[thread overview]
Message-ID: <Y8ZXGpPkLTC9CKL8@3900XT> (raw)
In-Reply-To: <87tu0s7otg.fsf@inria.fr>

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

On Sat, Jan 14, 2023 at 11:07:23PM +0100, Ludovic Courtès wrote:
> Hello!
> 
> Over the course of a few years, the size of our packages has apparently
> kept growing.  Example:
> 
> --8<---------------cut here---------------start------------->8---
> $ guix time-machine --commit=v1.2.0 -- size emacs 
> store item                                                       total    self
> /gnu/store/118xpdazyylxa1rlc68h9lmh38vhxrb4-llvm-10.0.0            210.8   139.3  16.2%
> /gnu/store/1qmd9achfkm1njzxf8hi86q53pmy9sxk-mesa-20.0.7            369.2   131.3  15.3%
> /gnu/store/d83hc7cqgnhl1vlz1rv4ibkvaqaq2g35-emacs-27.1             859.7   106.2  12.4%
> /gnu/store/18hp7flyb3yid3yp49i6qcdq0sbi5l1n-guile-3.0.2            132.8    53.2   6.2%
> /gnu/store/9lckq1194qcy4a7kv8bihagd58shj7yr-gtk+-3.24.20           723.7    49.0   5.7%
> /gnu/store/qizplwwgqwyq6qmz1i6jlaib5kgzrgwq-icu4c-66.1             110.2    38.1   4.4%
> /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31              38.4    36.7   4.3%
> […]
> total: 859.7 MiB
> $ guix time-machine --commit=v1.3.0 -- size emacs 
> store item                                                       total    self
> /gnu/store/g3idjpqsp2p2d163qfzskxj4k58nrx7f-llvm-11.0.0            220.0   148.6  16.9%
> /gnu/store/jf269s6clr6r57p8v5c3c1qkyra6apq2-mesa-20.2.4            389.1   141.6  16.1%
> /gnu/store/7nlq2v4000pw8vgj3m4vrwz072ib58xh-emacs-27.2             880.5   106.4  12.1%
> /gnu/store/18hp7flyb3yid3yp49i6qcdq0sbi5l1n-guile-3.0.2            132.8    53.2   6.0%
> /gnu/store/czf23hay13pp25yzrb4yq3n4gcri5r70-gtk+-3.24.24           744.3    49.1   5.6%
> /gnu/store/2wqjj3mkqdvsvksndr2hpjpi7qqwi7kr-icu4c-66.1             110.2    38.1   4.3%
> /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31              38.4    36.7   4.2%
> […]
> total: 880.5 MiB
> $ guix time-machine --commit=v1.4.0 -- size emacs 
> store item                                                       total    self
> /gnu/store/i11jmrc90drpx9mc6cyb6s4pjny91qx6-emacs-28.2            1592.7   250.6  15.7%
> /gnu/store/sdzfljm6san79pqiy42yp0nzmkr2bafc-mesa-21.3.8            411.6   169.6  10.6%
> /gnu/store/6pdzpmxg5afzss6dlivq8z84sfa31x22-llvm-11.0.0            221.5   149.5   9.4%
> /gnu/store/lphzb1z0r4kbb453rsvnw7msrxxzp5r7-libgccjit-10.3.0       244.8   128.5   8.1%
> /gnu/store/pfas3c4lhr1jwkj2gl0yx8dg4xjjlp4r-mozjs-91.13.0          261.2    65.4   4.1%
> /gnu/store/hy6abswwv4d89zp464fw52z65fkzr7h5-perl-5.34.0            147.7    58.6   3.7%
> /gnu/store/zyqimpkmpffc24nwwqp46cicj8ss85y5-binutils-2.37          126.0    54.4   3.4%
> /gnu/store/cnfsv9ywaacyafkqdqsv2ry8f01yr7a9-guile-3.0.7            129.1    52.0   3.3%
> /gnu/store/4aq7hw017s9ihpm1rxpwfz28c80569z9-gtk+-3.24.30          1002.2    48.6   3.1%
> /gnu/store/vaxkf8cbc7slgc3ikm5qr3815wih93w8-ghostscript-with-cups-9.54.0   219.1    39.1   2.5%
> /gnu/store/bjycxjjkp1da53ijsa4hfdrz9mcgg55h-icu4c-69.1             110.7    38.0   2.4%
> /gnu/store/ayc9r7162rphy4zjw8ch01pmyh214h82-glibc-2.33              76.6    36.6   2.3%
> […]
> total: 1592.7 MiB
> --8<---------------cut here---------------end--------------->8---
> 
> I think something went wrong here.  :-)
> 
> In particular with Emacs itself (due to JIT + dependency on libgccjit,
> Binutils, etc.?) and with GTK+ (due to mozjs in polkit?).
> 
> And then MESA and LLVM have always been problematically big.
> 
> We should do better.  I mean, it’s just a text editor, isn’t it?

I've made some progress on LLVM and I think I have a working LLVM that
can be used as an input for mesa.

(ins)efraim@3900XT ~$ du -sch /gnu/store/36kmnxmb1h8pxw0x71wril67fdvjx7ny-llvm-11.0.0/*
3.9M    /gnu/store/36kmnxmb1h8pxw0x71wril67fdvjx7ny-llvm-11.0.0/bin
8.0K    /gnu/store/36kmnxmb1h8pxw0x71wril67fdvjx7ny-llvm-11.0.0/etc
21M     /gnu/store/36kmnxmb1h8pxw0x71wril67fdvjx7ny-llvm-11.0.0/include
67M     /gnu/store/36kmnxmb1h8pxw0x71wril67fdvjx7ny-llvm-11.0.0/lib
16K     /gnu/store/36kmnxmb1h8pxw0x71wril67fdvjx7ny-llvm-11.0.0/share
92M     total

(define llvm-for-mesa
  (package/inherit llvm-11
    ;; If we can separate out the include directory we'd save another 21MB.
    (outputs (list "out"))
    (arguments
     (substitute-keyword-arguments (package-arguments llvm-11)
       ((#:configure-flags cf ''())
        ;; AMDGPU is needed by the vulkan drivers.
        `(list ,(string-append "-DLLVM_TARGETS_TO_BUILD="
                                (system->llvm-target) ";AMDGPU")
               "-DLLVM_BUILD_TOOLS=NO"
               "-DLLVM_BUILD_LLVM_DYLIB=YES"
               "-DLLVM_LINK_LLVM_DYLIB=YES"))
       ((#:phases phases)
        `(modify-phases ,phases
           (add-after 'install 'delete-static-libraries
             (lambda* (#:key outputs #:allow-other-keys)
               (for-each delete-file
                         (find-files (string-append
                                       (assoc-ref outputs "out") "/lib")
                                     "\\.a$"))))
           (replace 'install-opt-viewer
             (lambda* (#:key outputs #:allow-other-keys)
               (let ((out (assoc-ref outputs "out")))
                 (delete-file-recursively
                   (string-append out "/share/opt-viewer")))))
           (add-after 'install 'build-and-install-llvm-config
             (lambda* (#:key outputs #:allow-other-keys)
               (let ((out (assoc-ref outputs "out")))
                 (substitute*
                   "tools/llvm-config/CMakeFiles/llvm-config.dir/link.txt"
                   (("/tmp/guix-build-llvm-11.0.0.drv-0/build/lib")
                    (string-append out "/lib")))
                 (invoke "make" "llvm-config")
                 (install-file "bin/llvm-config"
                               (string-append out "/bin")))))))))))

In addition to what I have below I found that nix has a patch to make
llvm-11 (and the others) use the GNUInstallDirs, so we'd be able to move
the include directory to another output, saving another 21MB, bringing
llvm-for-mesa down to 71MB. Another possibility would be to have
llvm-for-mesa use llvm as an input, and then to use some configure-flags
to tell llvm-for-mesa to use the includes from llvm (the input).


-- 
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 #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2023-01-17  8:07 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-14 22:07 Packages grow, no longer fit on a 💾 Ludovic Courtès
2023-01-15  5:51 ` kiasoc5
2023-01-15  8:07 ` Liliana Marie Prikler
2023-01-16  2:09   ` Maxim Cournoyer
2023-01-16  5:17     ` Liliana Marie Prikler
2023-01-16 13:27       ` Maxim Cournoyer
2023-01-17 16:15     ` Ludovic Courtès
2023-01-15 12:56 ` Akib Azmain Turja
2023-01-15 17:00 ` pelzflorian (Florian Pelz)
2023-01-17 16:25   ` Ludovic Courtès
2023-01-17 23:05     ` zimoun
2023-01-17 23:49       ` zimoun
2023-01-18 21:04         ` Grandfathering store paths considered harmful (was: Packages grow, no longer fit on a 💾) Liliana Marie Prikler
2023-01-19 14:28           ` Grandfathering store paths considered harmful Ludovic Courtès
2023-01-19 18:10             ` Liliana Marie Prikler
2023-01-19 14:14       ` Packages grow, no longer fit on a 💾 Ludovic Courtès
2023-01-20 10:51         ` Simon Tournier
2023-01-20 14:54           ` Maxim Cournoyer
2023-01-18  2:41     ` kiasoc5
2023-01-18  8:43       ` indieterminacy
2023-01-19 14:32       ` Ludovic Courtès
2023-01-20 11:06         ` Simon Tournier
2023-01-17  8:06 ` Efraim Flashner [this message]
2023-01-17 16:18   ` Ludovic Courtès
2023-01-17 21:54     ` John Kehayias
2023-01-19 15:30       ` Katherine Cox-Buday
2023-01-17 15:06 ` Simon Tournier
2023-01-19 14:34   ` Ludovic Courtès
2023-01-18 20:44 ` Paul Jewell via Development of GNU Guix and the GNU System distribution.
2023-01-19 13:04   ` Joshua Branson
2023-01-19 14:37   ` Ludovic Courtès
2023-01-19 16:12     ` Katherine Cox-Buday
2023-01-19 18:07   ` Akib Azmain Turja
2023-01-20 15:30     ` Csepp
2023-01-20 17:34       ` Akib Azmain Turja
2023-01-21 12:29         ` bokr
2023-01-21 15:55           ` Akib Azmain Turja
2023-01-20 12:11   ` Simon Tournier

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=Y8ZXGpPkLTC9CKL8@3900XT \
    --to=efraim@flashner.co.il \
    --cc=guix-devel@gnu.org \
    --cc=ludo@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).