diff --git a/pkgs/by-name/wi/wivrn/package.nix b/pkgs/by-name/wi/wivrn/package.nix new file mode 100644 index 000000000000..f795ec72b348 --- /dev/null +++ b/pkgs/by-name/wi/wivrn/package.nix @@ -0,0 +1,149 @@ +{ + config, + lib, + stdenv, + fetchFromGitHub, + fetchFromGitLab, + applyPatches, + autoAddDriverRunpath, + avahi, + boost, + cli11, + cmake, + cudaPackages ? { }, + cudaSupport ? config.cudaSupport, + eigen, + ffmpeg, + freetype, + git, + glm, + glslang, + harfbuzz, + libdrm, + libGL, + libva, + libpulseaudio, + libX11, + libXrandr, + nix-update-script, + nlohmann_json, + onnxruntime, + openxr-loader, + pipewire, + pkg-config, + python3, + shaderc, + spdlog, + systemd, + udev, + vulkan-headers, + vulkan-loader, + vulkan-tools, + x264, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "wivrn"; + version = "0.19"; + + src = fetchFromGitHub { + owner = "wivrn"; + repo = "wivrn"; + rev = "v${finalAttrs.version}"; + hash = "sha256-DYV+JUWjjhLZLq+4Hv7jxOyxDqQut/mU1X0ZFMoNkDI="; + }; + + monado = applyPatches { + src = fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "monado"; + repo = "monado"; + rev = "bcbe19ddd795f182df42051e5495e9727db36c1c"; + hash = "sha256-sh5slHROcuC3Dgenu1+hm8U5lUOW48JUbiluYvc3NiQ="; + }; + + patches = [ + "${finalAttrs.src}/patches/monado/0001-c-multi-disable-dropping-of-old-frames.patch" + "${finalAttrs.src}/patches/monado/0002-ipc-server-Always-listen-to-stdin.patch" + "${finalAttrs.src}/patches/monado/0003-c-multi-Don-t-log-frame-time-diff.patch" + "${finalAttrs.src}/patches/monado/0005-distortion-images.patch" + "${finalAttrs.src}/patches/monado/0008-Use-mipmaps-for-distortion-shader.patch" + "${finalAttrs.src}/patches/monado/0009-convert-to-YCbCr-in-monado.patch" + ]; + }; + + strictDeps = true; + + postUnpack = '' + # Let's make sure our monado source revision matches what is used by WiVRn upstream + ourMonadoRev="${finalAttrs.monado.src.rev}" + theirMonadoRev=$(grep "GIT_TAG" ${finalAttrs.src.name}/CMakeLists.txt | awk '{print $2}') + if [ ! "$theirMonadoRev" == "$ourMonadoRev" ]; then + echo "Our Monado source revision doesn't match CMakeLists.txt." >&2 + echo " theirs: $theirMonadoRev" >&2 + echo " ours: $ourMonadoRev" >&2 + return 1 + fi + ''; + + nativeBuildInputs = [ + cmake + git + glslang + pkg-config + python3 + ] ++ lib.optionals cudaSupport [ autoAddDriverRunpath ]; + + buildInputs = [ + avahi + boost + cli11 + eigen + ffmpeg + freetype + glm + harfbuzz + libdrm + libGL + libva + libX11 + libXrandr + libpulseaudio + nlohmann_json + onnxruntime + openxr-loader + pipewire + shaderc + spdlog + systemd + udev + vulkan-headers + vulkan-loader + vulkan-tools + x264 + ] ++ lib.optionals cudaSupport [ cudaPackages.cudatoolkit ]; + + cmakeFlags = [ + (lib.cmakeBool "WIVRN_USE_VAAPI" true) + (lib.cmakeBool "WIVRN_USE_X264" true) + (lib.cmakeBool "WIVRN_USE_NVENC" cudaSupport) + (lib.cmakeBool "WIVRN_USE_SYSTEMD" true) + (lib.cmakeBool "WIVRN_USE_PIPEWIRE" true) + (lib.cmakeBool "WIVRN_USE_PULSEAUDIO" true) + (lib.cmakeBool "WIVRN_BUILD_CLIENT" false) + (lib.cmakeBool "WIVRN_OPENXR_INSTALL_ABSOLUTE_RUNTIME_PATH" true) + (lib.cmakeBool "FETCHCONTENT_FULLY_DISCONNECTED" true) + (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_MONADO" "${finalAttrs.monado}") + ]; + + passthru.updateScript = nix-update-script { }; + + meta = with lib; { + description = "An OpenXR streaming application to a standalone headset"; + homepage = "https://github.com/Meumeu/WiVRn/"; + changelog = "https://github.com/Meumeu/WiVRn/releases/"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ passivelemon ]; + platforms = platforms.linux; + mainProgram = "wivrn-server"; + }; +})