Félix Baylac Jacqué
We had a race condition on cold cache builds. When several nix-gl-host instances were called, they were trying to concurrently build the cache. This lead to some weird errors and busted caches. We introduce a file lock preventing any concurrent access to the cache. We take advantage of this bug to rethink the way we build the cache and do it in a more robust way. Instead of building it in place, we're now building it first in a temporary directory (while making sure to patchelf the DSOs according their final destination). We then move this directory to the actual cache destination iff the cache has been built successfully.
Running OpenGL/Cuda/OpenCL Nix-built binaries on a foreign Linux distro is quite often a challenge. These programs are relying on some host-specific graphics drivers at runtime. These drivers are host-specific, it is obviously impossible to distribute the drivers for each and every hosts setup through a pre-defined generic nix closure.
NixGLHost solves this issue by re-using your host system graphics drivers. It copies them to an isolated environment and inject the said environment to the Nix runtime closure.
Current status: experimental.
How to Use
All you have to do is to wrap your nix-built OpenGL/Cuda program with
For instance, let's say you want to run
nix-built program on your favorite distribution. All you'll have to do is:
Let's nix-build glxgears, living in the glxinfo Nixpkgs derivation then execute it with nixglhost.
cd $thisRepoCheckout PATH=$(nix build --print-out-paths)/bin:$PATH nixglhost $(nix build --print-out-paths .#glxinfo)/bin/glxgears
You can read the INTERNALS.md file to learn how exactly
- [-] Proprietary Nvidia
- NixGL: tries to auto detect the host vendor driver type/version, then download/install it from its Nixpkgs derivation.