gnu: mesa: Use symlinks instead of hard links.
This reduces the nar size (as shown by 'guix size') by 124 MiB, from 169 MiB to 45 MiB (almost divided by 4!). * gnu/packages/gl.scm (mesa)[arguments]: Add #:modules. Add 'symlinks-instead-of-hard-links' phase.
This commit is contained in:
parent
acc2dab7f2
commit
dcc00f54c6
|
@ -305,6 +305,10 @@ also known as DXTn or DXTC) for Mesa.")
|
||||||
"--enable-llvm")) ; default is x86/x86_64 only
|
"--enable-llvm")) ; default is x86/x86_64 only
|
||||||
(_
|
(_
|
||||||
'("--with-dri-drivers=nouveau,r200,radeon,swrast"))))
|
'("--with-dri-drivers=nouveau,r200,radeon,swrast"))))
|
||||||
|
#:modules ((ice-9 match)
|
||||||
|
(srfi srfi-1)
|
||||||
|
(guix build utils)
|
||||||
|
(guix build gnu-build-system))
|
||||||
#:phases
|
#:phases
|
||||||
(modify-phases %standard-phases
|
(modify-phases %standard-phases
|
||||||
(add-after
|
(add-after
|
||||||
|
@ -339,6 +343,41 @@ also known as DXTn or DXTC) for Mesa.")
|
||||||
;; egl_gallium support.
|
;; egl_gallium support.
|
||||||
(("\"gbm_dri\\.so")
|
(("\"gbm_dri\\.so")
|
||||||
(string-append "\"" out "/lib/dri/gbm_dri.so")))
|
(string-append "\"" out "/lib/dri/gbm_dri.so")))
|
||||||
|
#t)))
|
||||||
|
(add-after 'install 'symlinks-instead-of-hard-links
|
||||||
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
|
;; All the drivers and gallium targets create hard links upon
|
||||||
|
;; installation (search for "hardlink each megadriver instance"
|
||||||
|
;; in the makefiles). This is no good for us since we'd produce
|
||||||
|
;; nars that contain several copies of these files. Thus, turn
|
||||||
|
;; them into symlinks, which saves ~124 MiB.
|
||||||
|
(let* ((out (assoc-ref outputs "out"))
|
||||||
|
(lib (string-append out "/lib"))
|
||||||
|
(files (find-files lib
|
||||||
|
(lambda (file stat)
|
||||||
|
(and (string-contains file ".so")
|
||||||
|
(eq? 'regular
|
||||||
|
(stat:type stat))))))
|
||||||
|
(inodes (map (compose stat:ino stat) files)))
|
||||||
|
(for-each (lambda (inode)
|
||||||
|
(match (filter-map (match-lambda
|
||||||
|
((file ino)
|
||||||
|
(and (= ino inode) file)))
|
||||||
|
(zip files inodes))
|
||||||
|
((_)
|
||||||
|
#f)
|
||||||
|
((reference others ..1)
|
||||||
|
(format #t "creating ~a symlinks to '~a'~%"
|
||||||
|
(length others) reference)
|
||||||
|
(for-each delete-file others)
|
||||||
|
(for-each (lambda (file)
|
||||||
|
(if (string=? (dirname file)
|
||||||
|
(dirname reference))
|
||||||
|
(symlink (basename reference)
|
||||||
|
file)
|
||||||
|
(symlink reference file)))
|
||||||
|
others))))
|
||||||
|
(delete-duplicates inodes))
|
||||||
#t))))))
|
#t))))))
|
||||||
(home-page "https://mesa3d.org/")
|
(home-page "https://mesa3d.org/")
|
||||||
(synopsis "OpenGL implementation")
|
(synopsis "OpenGL implementation")
|
||||||
|
|
Loading…
Reference in New Issue