Message ID | 74f9211b057dcd50bee26f45d240f63f05db55cb.1674053238.git.efraim@flashner.co.il |
---|---|
State | New |
Headers | show |
Series | [bug#60934,CORE-UPDATES] gnu: mesa: Use smaller llvm backend. | expand |
Hi Efraim, On Wed, Jan 18, 2023 at 04:49 PM, Efraim Flashner wrote: > * gnu/packages/gl.scm (mesa)[inputs]: Replace llvm with llvm-for-mesa. > * gnu/packages/llvm.scm (llvm-for-mesa): New variable. > --- > > I wasn't able to tweak this to be able to build a cross compiled mesa. I > was able to build and run glxgears on core-updates with this patch > applied. > Nice! Not sure if you already saw my message on guix-devel https://lists.gnu.org/r/guix-devel/2023-01/msg00218.html but I'll just repeat the summary: looks like latest mesa wants latest llvm (llvm-15 to be exact) for current hardware support. I think this is the summary: https://www.phoronix.com/news/LLVM-15-Branched Have you tried with other versions of llvm? I haven't checked what version of mesa is in core-updates or any pending patches, but I can send an update to the latest version if needed. I also haven't reviewed/tested this patch, but I do use current mesa via another channel where I could try it out with this modification for testing and get back to you. Thanks for working on this! John
On Thu, Jan 19, 2023 at 03:14:46AM +0000, John Kehayias wrote: > Hi Efraim, > > On Wed, Jan 18, 2023 at 04:49 PM, Efraim Flashner wrote: > > > * gnu/packages/gl.scm (mesa)[inputs]: Replace llvm with llvm-for-mesa. > > * gnu/packages/llvm.scm (llvm-for-mesa): New variable. > > --- > > > > I wasn't able to tweak this to be able to build a cross compiled mesa. I > > was able to build and run glxgears on core-updates with this patch > > applied. > > > > Nice! > > Not sure if you already saw my message on guix-devel > https://lists.gnu.org/r/guix-devel/2023-01/msg00218.html but I'll just > repeat the summary: looks like latest mesa wants latest llvm (llvm-15 to > be exact) for current hardware support. I think this is the summary: > https://www.phoronix.com/news/LLVM-15-Branched > > Have you tried with other versions of llvm? > > I haven't checked what version of mesa is in core-updates or any pending > patches, but I can send an update to the latest version if needed. > > I also haven't reviewed/tested this patch, but I do use current mesa via > another channel where I could try it out with this modification for > testing and get back to you. > > Thanks for working on this! > John I was going to start with llvm-15 but currently core-updates only has up to llvm-14 and mesa is currently built there with llvm-13, so that's what I used. I also ran into a number of cross compiling issues while trying to test cross compiling on core-updates so I think I'll try working it on master so it can be more easily tested, and then when it's good I'll commit it to core-updates. I'll also see about a master->core-updates merge. For the next version of the patch I think I'll copy the static libraries to a static output instead of deleting them. I'm not sure exactly where they'd be used, but at least in a different output they won't add to the closure size if we need them and they're available if needed.
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm index dd62fac13e..bce2aead4c 100644 --- a/gnu/packages/gl.scm +++ b/gnu/packages/gl.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016 Nikita <nikita@n0.is> ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net> -;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2017-2019, 2021, 2023 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr> @@ -298,8 +298,7 @@ (define-public mesa libxml2 libxrandr libxvmc - ;; Note: update the 'clang' input of mesa-opencl when bumping this. - llvm + llvm-for-mesa wayland wayland-protocols)) (native-inputs diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index b46cb06443..2296647969 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2017 Roel Janssen <roel@gnu.org> ;;; Copyright © 2018–2022 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2018, 2021, 2022 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2018, 2021-2023 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de> ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com> @@ -1886,6 +1886,53 @@ (define-public emacs-clang-rename ;;; LLVM variants. ;;; +(define-public llvm-for-mesa + ;; Note: update the 'clang' input of mesa-opencl when bumping this. + (let ((base-llvm llvm-13)) + (package + (inherit base-llvm) + ;; If we can separate out the include directory we'd save another 23MB. + (outputs (list "out")) + (version (package-version base-llvm)) + (arguments + (substitute-keyword-arguments (package-arguments base-llvm) + ((#:configure-flags _ ''()) + #~(list + ;; AMDGPU is needed by the vulkan drivers. + #$(string-append "-DLLVM_TARGETS_TO_BUILD=" + (system->llvm-target) ";AMDGPU") + "-DLLVM_BUILD_TOOLS=NO" + "-DLLVM_BUILD_LLVM_DYLIB=YES" + "-DLLVM_LINK_LLVM_DYLIB=YES" + "-DLLVM_ENABLE_RTTI:BOOL=TRUE")) + ((#:phases phases '%standard-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$")))) + ;; We don't need it for this version. + (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" + (((string-append "/tmp/guix-build-llvm-" + #$version ".drv-0/build/lib")) + (string-append out "/lib"))) + (invoke "make" "llvm-config") + (install-file "bin/llvm-config" + (string-append out "/bin"))))))))) + (properties `((hidden? . #t) + ,@(package-properties base-llvm)))))) + (define make-ocaml-llvm ;; Make it a memoizing procedure so its callers below don't end up defining ;; two equal-but-not-eq "ocaml-llvm" packages for the default LLVM.