From 302f5b54881b4505a6a04530f720f9aa5bdc4d4b Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 29 Dec 2024 09:56:52 +0000 Subject: [PATCH] mesa: fix cross compilation this follows the same pattern as used for mesa's `intel-clc` build helper: 1. build `mesa-clc` for the build machine. 2. provide the native `mesa-clc` when cross-compiling mesa. the meson changes for this have been upstreamed into the next release: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32719 --- .../libraries/mesa/cross_clc.patch | 90 +++++++++++++++++++ pkgs/development/libraries/mesa/default.nix | 6 ++ 2 files changed, 96 insertions(+) create mode 100644 pkgs/development/libraries/mesa/cross_clc.patch diff --git a/pkgs/development/libraries/mesa/cross_clc.patch b/pkgs/development/libraries/mesa/cross_clc.patch new file mode 100644 index 000000000000..cb29e57ec349 --- /dev/null +++ b/pkgs/development/libraries/mesa/cross_clc.patch @@ -0,0 +1,90 @@ +commit f063e9f74b45f34e4ac570a90901253bf8e64efd +Author: Mary Guillemard +Date: 2024-12-02 09:11:35 +0100 + + meson: Add mesa-clc and install-mesa-clc options + + Due to the cross build issues in current meson, we adds new options to + allow mesa_clc and vtn_bindgen to be installed or searched on the + system. + + Signed-off-by: Mary Guillemard + Reviewed-by: Alyssa Rosenzweig + Reviewed-by: Boris Brezillon + Part-of: + +diff --git a/meson.build b/meson.build +index de9c9af53a1..e37325ec176 100644 +--- a/meson.build ++++ b/meson.build +@@ -808,7 +808,7 @@ if with_gallium_rusticl or with_nouveau_vk or with_tools.contains('etnaviv') + endif + + with_clover_spirv = with_gallium_clover and get_option('opencl-spirv') +-with_clc = with_microsoft_clc or with_intel_clc or with_gallium_asahi or with_asahi_vk or with_gallium_rusticl or with_clover_spirv ++with_clc = get_option('mesa-clc') != 'auto' or with_microsoft_clc or with_intel_clc or with_gallium_asahi or with_asahi_vk or with_gallium_rusticl + + dep_clc = null_dep + if with_gallium_clover or with_clc +diff --git a/meson_options.txt b/meson_options.txt +index 79ee65e6094..8f22b36e5fb 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -744,3 +744,20 @@ option( + 'none', 'dri2' + ], + ) ++ ++option( ++ 'mesa-clc', ++ type : 'combo', ++ value : 'auto', ++ choices : [ ++ 'enabled', 'system', 'auto' ++ ], ++ description : 'Build the mesa-clc compiler or use a system version.' ++) ++ ++option( ++ 'install-mesa-clc', ++ type : 'boolean', ++ value : false, ++ description : 'Install the mesa-clc compiler (if needed for cross builds).' ++) +diff --git a/src/compiler/clc/meson.build b/src/compiler/clc/meson.build +index 74767d08de2..4875d71ca21 100644 +--- a/src/compiler/clc/meson.build ++++ b/src/compiler/clc/meson.build +@@ -117,15 +117,20 @@ idep_mesaclc = declare_dependency( + link_args : _idep_mesaclc_link_args, + ) + +-prog_mesa_clc = executable( +- 'mesa_clc', +- ['mesa_clc.c'], +- include_directories : [inc_include, inc_src], +- c_args : [pre_args, no_override_init_args], +- link_args : [ld_args_build_id], +- dependencies : [idep_mesaclc, dep_llvm, dep_spirv_tools, idep_getopt], +- # If we can run host binaries directly, just build mesa_clc for the host. +- # Most commonly this happens when doing a cross compile from an x86_64 build +- # machine to an x86 host +- native : not meson.can_run_host_binaries(), +-) ++if get_option('mesa-clc') == 'system' ++ prog_mesa_clc = find_program('mesa_clc', native : true) ++else ++ prog_mesa_clc = executable( ++ 'mesa_clc', ++ ['mesa_clc.c'], ++ include_directories : [inc_include, inc_src], ++ c_args : [pre_args, no_override_init_args], ++ link_args : [ld_args_build_id], ++ dependencies : [idep_mesaclc, dep_llvm, dep_spirv_tools, idep_getopt], ++ # If we can run host binaries directly, just build mesa_clc for the host. ++ # Most commonly this happens when doing a cross compile from an x86_64 build ++ # machine to an x86 host ++ native : not meson.can_run_host_binaries(), ++ install : get_option('install-mesa-clc'), ++ ) ++endif diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 37b96d30e867..633770b6862c 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -138,6 +138,9 @@ in stdenv.mkDerivation { patches = [ ./opencl.patch + # cherry-picked from https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32719 + # safe to remove for versions > 24.3.2 + ./cross_clc.patch ]; postPatch = '' @@ -204,6 +207,7 @@ in stdenv.mkDerivation { # Enable Intel RT stuff when available (lib.mesonBool "install-intel-clc" true) + (lib.mesonBool "install-mesa-clc" true) (lib.mesonEnable "intel-rt" stdenv.hostPlatform.isx86_64) (lib.mesonOption "clang-libdir" "${lib.getLib llvmPackages.clang-unwrapped}/lib") @@ -222,6 +226,7 @@ in stdenv.mkDerivation { (lib.mesonOption "video-codecs" "all") ] ++ lib.optionals needNativeCLC [ (lib.mesonOption "intel-clc" "system") + (lib.mesonOption "mesa-clc" "system") ]; strictDeps = true; @@ -333,6 +338,7 @@ in stdenv.mkDerivation { echo $opencl/lib/libRusticlOpenCL.so > $opencl/etc/OpenCL/vendors/rusticl.icd moveToOutput bin/intel_clc $driversdev + moveToOutput bin/mesa_clc $driversdev moveToOutput lib/gallium-pipe $opencl moveToOutput "lib/lib*OpenCL*" $opencl moveToOutput "lib/libOSMesa*" $osmesa