Added a 'module' use flag. Reproducible: Always Steps to Reproduce: 1. Have a x64-only system with a x86-only chroot. 2. Install the nvidia-drivers ebuild in the chroot. Actual Results: The module fails to build because of architecture detection mismatch. Expected Results: The x64 module should've been built, or by disabling module (when not needed) installation we can correctly install the nvidia-drivers ebuild. I added a 'module' use flag so I can disable it on my setup, maybe other setups might need this. I run a fully x64 system and made a chroot to run a x86 system. My x64 kernel already has the nvidia module loaded, but I need the nvidia x86 user libraries also installed on my x86 chroot system. My problen was that the ebuild was also trying to compile the module but failed because of architecture detection mismatch... So I added a 'module' use flag so I can disable it. Here's the diff from nvidia-drivers-355.11-r2.ebuild 31c31 < IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools gtk2 gtk3 +X uvm" --- > IUSE="acpi multilib kernel_FreeBSD kernel_linux pax_kernel +tools gtk2 gtk3 +X uvm +module" 83c83 < if use kernel_linux && kernel_is ge 4 3; then --- > if use module && use kernel_linux && kernel_is ge 4 3; then 107c107 < use kernel_linux && check_extra_config --- > use module && use kernel_linux && check_extra_config 115c115 < if use kernel_linux; then --- > if use module && use kernel_linux; then 159c159 < if use kernel_linux; then --- > if use module && use kernel_linux; then 185c185 < if use kernel_FreeBSD; then --- > if use module && use kernel_FreeBSD; then 188c188 < elif use kernel_linux; then --- > elif use module && use kernel_linux; then 237c237 < if use kernel_linux; then --- > if use module && use kernel_linux; then 251c251 < elif use kernel_FreeBSD; then --- > elif use module && use kernel_FreeBSD; then 290c290 < if use kernel_linux; then --- > if use module && use kernel_linux; then 318c318 < if use kernel_linux; then --- > if use module && use kernel_linux; then 440c440 < if use kernel_linux; then --- > if use module && use kernel_linux; then 467c467 < use kernel_linux && linux-mod_pkg_postinst --- > use module && use kernel_linux && linux-mod_pkg_postinst 498c498 < use kernel_linux && linux-mod_pkg_postrm --- > use module && use kernel_linux && linux-mod_pkg_postrm
Created attachment 417072 [details, diff] Add USE=module A patch for nvidia-drivers-355.11-r2.ebuild
Can we go back to the premise for a minute and decide whether to use a chroot for this purpose is the proper way about it?
I didn't want to use multilib, I want a full x64 only system with no pollution and no difficulties to get rid of the x86 binaries, but still wanted to execute x86 binaries which are not x64 ready yet. I think it would be a good idea to open the flexibility of not installing the module under special setup like mine. It could also be helpful when cross compiling a new linux distribution which is destined to be used with another kernel.
We set BUILD_FIXES in pkg_setup() using `uname -m' and it's probably better to just fix that instead.
How about this? --- a/x11-drivers/nvidia-drivers/nvidia-drivers-358.16-r1.ebuild +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-358.16-r1.ebuild @@ -130,7 +130,7 @@ pkg_setup() { # sets the ARCH to x86 but NVIDIA's wrapping Makefile # expects x86_64 or i386 and then converts it to x86 # later on in the build process - BUILD_FIXES="ARCH=$(uname -m | sed -e 's/i.86/i386/')" + BUILD_FIXES="ARCH=$(use x86 && echo i386 || echo x86_64)" fi # set variables to where files are in the package structure
This does not fix the issue on my system, I get the exact same error as before: kernel/nvidia/nv-frontend.c:1:0: error: CPU you selected does not support x86-64 instruction set I'm not sure exactly what "selected" the CPU, I assume this portage link /etc/portage/make.profile -> /usr/portage/profiles/default/linux/x86/13.0 And even though $(use x86 && echo i386 || echo x86_64) selects i386, something still tells to try to use the x86-64 instruction set. Since it is a module that is trying to build, I guess that maybe the x86-64 instruction set selection comes from the kernel source configuration or maybe another uname -m done somewhere else in a configuration script…
Or maybe more logically: i386 is the selected CPU that doesn't support the x86-64 instruction set.
I added USE=driver to 3.61.16. I hope it works for you.
(In reply to Jeroen Roovers from comment #8) > I added USE=driver to 3.61.16. That's 361.16.
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8dac0f9ca4214634fb46ffd8e83cb6857387bc32 commit 8dac0f9ca4214634fb46ffd8e83cb6857387bc32 Author: Jeroen Roovers <jer@gentoo.org> AuthorDate: 2020-07-29 09:19:03 +0000 Commit: Jeroen Roovers <jer@gentoo.org> CommitDate: 2020-07-29 09:21:02 +0000 x11-drivers/nvidia-drivers: Backport USE=driver to 340.* Package-Manager: Portage-3.0.1, Repoman-2.3.23 Bug: https://bugs.gentoo.org/565878 Fixes: 003365dfd596c07c7ab9e51126a99ed438ba1dc1 Signed-off-by: Jeroen Roovers <jer@gentoo.org> .../nvidia-drivers/nvidia-drivers-340.108.ebuild | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)