Message ID | 77ec80a001bb04229289f1e3efff7633c94c71dc.1626343320.git.efraim@flashner.co.il |
---|---|
State | New |
Headers | show |
Series | [bug#49569] gnu: Add make-single-arch-llvm procedure. | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
cbaines/issue | success | View issue |
Hi, Efraim Flashner <efraim@flashner.co.il> skribis: > * gnu/packages/llvm.scm (make-single-arch-llvm): New procedure. > (llvm-native-12, llvm-native): New variables. > --- > > Using this copy of llvm for packages like mesa will reduce the closure > of those packages. I don't suppose it would work as well for compilers > like rust which use LLVM for compiling and targeting different > architectures. > > This drops the size of llvm-12 from 167M to 111M. That’s less impressive than I would have thought. For Mesa perhaps we could maybe have a variant that’s even more stripped? The downside of this is that we risk having several LLVM copies on typical installations. Thoughts? Thanks, Ludo’.
On Mon, Jul 26, 2021 at 06:47:14PM +0200, Ludovic Courtès wrote: > Hi, > > Efraim Flashner <efraim@flashner.co.il> skribis: > > > * gnu/packages/llvm.scm (make-single-arch-llvm): New procedure. > > (llvm-native-12, llvm-native): New variables. > > --- > > > > Using this copy of llvm for packages like mesa will reduce the closure > > of those packages. I don't suppose it would work as well for compilers > > like rust which use LLVM for compiling and targeting different > > architectures. > > > > This drops the size of llvm-12 from 167M to 111M. > > That’s less impressive than I would have thought. > > For Mesa perhaps we could maybe have a variant that’s even more > stripped? > > The downside of this is that we risk having several LLVM copies on > typical installations. > > Thoughts? > > Thanks, > Ludo’. I think you're mostly shocked by the large numbers, it is a drop of 33%. It turns out that llvm-julia uses something similar to only target one arch, so the idea's there somewhere. We could probably add it in there too for dlang. Icecat/icedove/mozjs-78 should be OK to switch. And xf86-video-vmware already has mesa as an input and could likely use a special llvm-for-mesa version. I can look at mesa and see which libraries from llvm it links to and see about just building those. A first look shows 50 llvm libraries from mesa and about 150 from llvm@11, with the 4 libraries being libOSMesa libvulkan_radeon libxatracker libXvMCnouveau
Hello, Em quinta-feira, 15 de julho de 2021, às 07:04:52 -03, Efraim Flashner escreveu: > * gnu/packages/llvm.scm (make-single-arch-llvm): New procedure. > (llvm-native-12, llvm-native): New variables. > --- > > Using this copy of llvm for packages like mesa will reduce the closure > of those packages. I don't suppose it would work as well for compilers > like rust which use LLVM for compiling and targeting different > architectures. > > This drops the size of llvm-12 from 167M to 111M. I don’t have an opinion on the issue that Ludo’ raised, just one comment about the code below. > gnu/packages/llvm.scm | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm > index 575c63c713..35cecdfd84 100644 > --- a/gnu/packages/llvm.scm > +++ b/gnu/packages/llvm.scm > @@ -1347,3 +1347,27 @@ LLVM.")))) > (define-public ocaml-llvm-9 (make-ocaml-llvm llvm-9)) > (define-public ocaml-llvm-10 (make-ocaml-llvm llvm-10)) > (define-public ocaml-llvm-11 (make-ocaml-llvm llvm-11)) > + > +(define* (make-single-arch-llvm llvm #:optional (system (or (%current-target-system) > + (%current-system)))) > + (package > + (inherit llvm) > + (name (string-append "llvm-for-" (string-downcase > + (system->llvm-target system)))) ‘system->llvm-target’ needs a Nix system identifier but ‘%current-target-system’ contains a GNU triplet, so the above won’t work when cross-compiling for armhf-linux – whose GNU triplet is “arm-unknown-linux-gnueabihf”. I suggest changing the default value of ‘system’ to (or (and=> (%current-target-system) gnu-triplet->nix-system) (%current-system)) which is the default argument for ‘system->llvm-target’. If I can add a shameless plug, patch 2 of my “Target check fixes and cleanups” series¹ adds a helper procedure with the code above. :-) > + (arguments > + (substitute-keyword-arguments (package-arguments llvm) > + ((#:configure-flags cf) > + `(cons* ,(string-append "-DLLVM_TARGETS_TO_BUILD=" > + (system->llvm-target system)) Same problem here.
Efraim Flashner <efraim@flashner.co.il> skribis: > On Mon, Jul 26, 2021 at 06:47:14PM +0200, Ludovic Courtès wrote: >> Hi, >> >> Efraim Flashner <efraim@flashner.co.il> skribis: >> >> > * gnu/packages/llvm.scm (make-single-arch-llvm): New procedure. >> > (llvm-native-12, llvm-native): New variables. >> > --- >> > >> > Using this copy of llvm for packages like mesa will reduce the closure >> > of those packages. I don't suppose it would work as well for compilers >> > like rust which use LLVM for compiling and targeting different >> > architectures. >> > >> > This drops the size of llvm-12 from 167M to 111M. >> >> That’s less impressive than I would have thought. [...] > I think you're mostly shocked by the large numbers, it is a drop of 33%. > > It turns out that llvm-julia uses something similar to only target one > arch, so the idea's there somewhere. We could probably add it in there > too for dlang. Icecat/icedove/mozjs-78 should be OK to switch. And > xf86-video-vmware already has mesa as an input and could likely use a > special llvm-for-mesa version. OK, maybe that’d be an improvement, and indeed, 33% is not negligible. > I can look at mesa and see which libraries from llvm it links to and see > about just building those. A first look shows 50 llvm libraries from > mesa and about 150 from llvm@11, with the 4 libraries being > libOSMesa libvulkan_radeon libxatracker libXvMCnouveau Makes sense. Does Mesa require some special GPU compiler backend in addition to the native backend? Thanks, Ludo’.
I think we can drop this with llvm-for-mesa in core-updates.
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index 575c63c713..35cecdfd84 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -1347,3 +1347,27 @@ LLVM.")))) (define-public ocaml-llvm-9 (make-ocaml-llvm llvm-9)) (define-public ocaml-llvm-10 (make-ocaml-llvm llvm-10)) (define-public ocaml-llvm-11 (make-ocaml-llvm llvm-11)) + +(define* (make-single-arch-llvm llvm #:optional (system (or (%current-target-system) + (%current-system)))) + (package + (inherit llvm) + (name (string-append "llvm-for-" (string-downcase + (system->llvm-target system)))) + (arguments + (substitute-keyword-arguments (package-arguments llvm) + ((#:configure-flags cf) + `(cons* ,(string-append "-DLLVM_TARGETS_TO_BUILD=" + (system->llvm-target system)) + ,cf)))) + (synopsis "Compiler with support for a single architecture"))) + +(define-public llvm-native-12 + (package + (inherit (make-single-arch-llvm llvm-12)) + (name "llvm-native"))) + +(define-public llvm-native + (package + (inherit (make-single-arch-llvm llvm)) + (name "llvm-native")))