From 3c2942d33d15937fa0f4faccfe3b7184def36361 Mon Sep 17 00:00:00 2001 From: skryvel <120495777+skryvel@users.noreply.github.com> Date: Sat, 14 Sep 2024 17:05:41 -0300 Subject: [PATCH 1/6] build: nix flake As it is this is only meant to help development. Example: nix develop -i -c sh -c 'cargo xtask build-streamer' --- fix-finding-libs.patch | 45 ++++++++++++++ flake.lock | 95 ++++++++++++++++++++++++++++ flake.nix | 137 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 277 insertions(+) create mode 100644 fix-finding-libs.patch create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/fix-finding-libs.patch b/fix-finding-libs.patch new file mode 100644 index 0000000000..6e2600c1a2 --- /dev/null +++ b/fix-finding-libs.patch @@ -0,0 +1,45 @@ +From 1e792a4e7356f070856e4bf5775a07b18c3cc5ee Mon Sep 17 00:00:00 2001 +From: jopejoe1 +Date: Sat, 7 Sep 2024 23:28:25 +0200 +Subject: [PATCH] fix finding libs + +--- + alvr/server_openvr/build.rs | 18 +++--------------- + alvr/session/build.rs | 4 +--- + 2 files changed, 4 insertions(+), 18 deletions(-) + +diff --git a/alvr/server_openvr/build.rs b/alvr/server_openvr/build.rs +index b9bc4bd8..0581de0d 100644 +--- a/alvr/server_openvr/build.rs ++++ b/alvr/server_openvr/build.rs +@@ -1,24 +1,12 @@ +-use std::{env, path::PathBuf}; ++use std::{env, path::{Path, PathBuf}}; + + fn get_ffmpeg_path() -> PathBuf { +- let ffmpeg_path = alvr_filesystem::deps_dir() +- .join(if cfg!(target_os = "linux") { +- "linux" +- } else { +- "windows" +- }) +- .join("ffmpeg"); +- +- if cfg!(target_os = "linux") { +- ffmpeg_path.join("alvr_build") +- } else { +- ffmpeg_path +- } ++ Path::new("@ffmpeg@").to_owned() + } + + #[cfg(all(target_os = "linux", feature = "gpl"))] + fn get_linux_x264_path() -> PathBuf { +- alvr_filesystem::deps_dir().join("linux/x264/alvr_build") ++ Path::new("@x264@").to_owned() + } + + fn main() { +-- +2.46.0 + diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000000..b56c7c4f0c --- /dev/null +++ b/flake.lock @@ -0,0 +1,95 @@ +{ + "nodes": { + "flakeUtils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1739486406, + "narHash": "sha256-b3JGAmrZLF8LK/Ufguac8R/eDJ4RouCOnk9FN/0CLCM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4ef254b3bd20bd0553c903f124e2321d5814a370", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgsStaging": { + "locked": { + "lastModified": 1739470556, + "narHash": "sha256-D67sFmdCo8vLqlQJHxB7eTSjv0+g5LyrWv+H7AJg22c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "496b396e7d429afe3d8fdf16097744d2dadd1051", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "staging", + "repo": "nixpkgs", + "type": "github" + } + }, + "openvr": { + "flake": false, + "locked": { + "lastModified": 1711497237, + "narHash": "sha256-bIKjZ7DvJVmDK386WgXaAFQrS0E1TNEUMhfQp7FNnvk=", + "owner": "ValveSoftware", + "repo": "openvr", + "rev": "ae46a8dd0172580648c8922658a100439115d3eb", + "type": "github" + }, + "original": { + "owner": "ValveSoftware", + "repo": "openvr", + "type": "github" + } + }, + "root": { + "inputs": { + "flakeUtils": "flakeUtils", + "nixpkgs": "nixpkgs", + "nixpkgsStaging": "nixpkgsStaging", + "openvr": "openvr" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000000..8c5db2c369 --- /dev/null +++ b/flake.nix @@ -0,0 +1,137 @@ +{ + description = "Stream VR games from your PC to your headset via Wi-Fi"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/master"; + nixpkgsStaging.url = "github:NixOS/nixpkgs/staging"; + flakeUtils.url = "github:numtide/flake-utils"; # TODO use upstream nix utils + openvr = {url = "github:ValveSoftware/openvr"; flake = false;}; + }; + + outputs = { self, nixpkgs, nixpkgsStaging, flakeUtils, openvr }: + flakeUtils.lib.eachDefaultSystem (system: + with nixpkgs.legacyPackages.${system}; + let + buildPackages = [ + alsa-lib + cargo + libclang + ffmpeg.dev + jack1 + git + llvmPackages.libclang + openssl + pipewire.dev + pkg-config + nixpkgsStaging.legacyPackages.${system}.rustc + vulkan-headers + ]; + + dependencyPackages = [ + brotli + celt + ffmpeg + gccStdenv.cc # g++ for vrcompositor_wrapper + gccStdenv.cc.cc.lib # crti.o and friends + lame + libdrm + libglvnd + libogg + libpng + libtheora + libunwind + libva + libvdpau + libxkbcommon + nasm + openssl + pipewire + soxr + stdenv.cc.cc.lib + vaapiVdpau + vulkan-headers + vulkan-headers + vulkan-loader + wayland + x264 + xorg.libX11 + xorg.libXcursor + xorg.libXi + xorg.libXrandr + xvidcore + ]; + + nvidiaPackages = with cudaPackages; [ + cuda_cudart + cuda_nvcc + libnpp + ]; + + libsPatch = toString (replaceVars + ./fix-finding-libs.patch { + ffmpeg = lib.getDev ffmpeg; + x264 = lib.getDev x264; + }); + + devShell = {stdenv, nvidia}: (mkShell.override { + stdenv = stdenv; + }) { + # LIBCLANG_PATH="${llvmPackages.libclang.lib}"; + LIBCLANG_PATH="${libclang.lib}/lib"; + buildInputs = buildPackages ++ dependencyPackages ++ (lib.optionals nvidia nvidiaPackages) ++ [ + watchexec + ]; + # LIBS_PATCH = writeText "libs.patch" libsPatch; + RUSTFLAGS = map (a: "-C link-arg=${a}") [ + "-Wl,--push-state,--no-as-needed" + "-lEGL" + "-lclang" + "-lva" + "-lpng" + "-lbrotlidec" + "-lwayland-client" + "-lxkbcommon" + "-Wl,--pop-state" + ]; + RUST_BACKTRACE = "1"; # TODO + shellHook = '' + git apply ${libsPatch} + ''; + }; + in + { + # packages.default = pkgs.rustPlatform.buildRustPackage rec { + # pname = "alvr"; + # BINDGEN_EXTRA_CLANG_ARGS = [ + # ''-I"${pkgs.llvmPackages.libclang.lib}/lib/clang/${pkgs.llvmPackages.libclang.version}/include"'' + # "-I ${pkgs.glibc.dev}/include" + # ]; # TODO + # version = "21"; # TODO + # OPENVR_PATH = "${openvr}"; + # doCheck = false; # TODO + # # LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; + # LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; + # postUnpack = '' + # # Deal with submodules which is still annoying in Nix. + # ln -s $OPENVR_PATH $(ls | grep -- -source)/openvr + # ''; + # src = ./.; + # RUST_BACKTRACE = "full"; # TODO + # nativeBuildInputs = buildPackages; + # buildInputs = buildPackages ++ dependencyPackages; + # dontCargoInstall = true; # TODO + # cargoLock = { + # lockFile = ./Cargo.lock; + # outputHashes = { + # "openxr-0.17.1" = "sha256-fG/JEqQQwKP5aerANAt5OeYYDZxcvUKCCaVdWRqHBPU="; + # "settings-schema-0.2.0" = "sha256-luEdAKDTq76dMeo5kA+QDTHpRMFUg3n0qvyQ7DkId0k="; + # }; + # }; + # CARGO_MANIFEST_DIR = ./.; # probably unneeded + # }; + + devShells.default = devShell { stdenv = clangStdenv; nvidia = false; }; + devShells.nvidia = devShell { stdenv = clangStdenv; nvidia = true; }; + } + ); +} From 7f2ec9bb82eadb724c3081d965b27fe6f88544b1 Mon Sep 17 00:00:00 2001 From: Makuru Date: Sat, 1 Nov 2025 21:14:17 +0100 Subject: [PATCH 2/6] Updated dependencies & reformatted flake --- flake.lock | 31 ++----- flake.nix | 266 +++++++++++++++++++++++++++++------------------------ 2 files changed, 154 insertions(+), 143 deletions(-) diff --git a/flake.lock b/flake.lock index b56c7c4f0c..3ee94e5176 100644 --- a/flake.lock +++ b/flake.lock @@ -20,32 +20,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1739486406, - "narHash": "sha256-b3JGAmrZLF8LK/Ufguac8R/eDJ4RouCOnk9FN/0CLCM=", + "lastModified": 1761907660, + "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4ef254b3bd20bd0553c903f124e2321d5814a370", + "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", "type": "github" }, "original": { "owner": "NixOS", - "ref": "master", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgsStaging": { - "locked": { - "lastModified": 1739470556, - "narHash": "sha256-D67sFmdCo8vLqlQJHxB7eTSjv0+g5LyrWv+H7AJg22c=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "496b396e7d429afe3d8fdf16097744d2dadd1051", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "staging", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } @@ -53,11 +37,11 @@ "openvr": { "flake": false, "locked": { - "lastModified": 1711497237, - "narHash": "sha256-bIKjZ7DvJVmDK386WgXaAFQrS0E1TNEUMhfQp7FNnvk=", + "lastModified": 1755298685, + "narHash": "sha256-G+xoFIabSbYEaWATGSzHP3SWkaqQhQQ6kMkYfjBXBUU=", "owner": "ValveSoftware", "repo": "openvr", - "rev": "ae46a8dd0172580648c8922658a100439115d3eb", + "rev": "91825305130f446f82054c1ec3d416321ace0072", "type": "github" }, "original": { @@ -70,7 +54,6 @@ "inputs": { "flakeUtils": "flakeUtils", "nixpkgs": "nixpkgs", - "nixpkgsStaging": "nixpkgsStaging", "openvr": "openvr" } }, diff --git a/flake.nix b/flake.nix index 8c5db2c369..667cd91859 100644 --- a/flake.nix +++ b/flake.nix @@ -2,136 +2,164 @@ description = "Stream VR games from your PC to your headset via Wi-Fi"; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/master"; - nixpkgsStaging.url = "github:NixOS/nixpkgs/staging"; - flakeUtils.url = "github:numtide/flake-utils"; # TODO use upstream nix utils - openvr = {url = "github:ValveSoftware/openvr"; flake = false;}; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + #nixpkgsStaging.url = "github:NixOS/nixpkgs/staging"; + flakeUtils.url = "github:numtide/flake-utils"; # TODO use upstream nix utils + openvr = { + url = "github:ValveSoftware/openvr"; + flake = false; + }; }; - outputs = { self, nixpkgs, nixpkgsStaging, flakeUtils, openvr }: - flakeUtils.lib.eachDefaultSystem (system: + outputs = + { + self, + nixpkgs, + flakeUtils, + openvr, + }: + flakeUtils.lib.eachDefaultSystem ( + system: with nixpkgs.legacyPackages.${system}; - let - buildPackages = [ - alsa-lib - cargo - libclang - ffmpeg.dev - jack1 - git - llvmPackages.libclang - openssl - pipewire.dev - pkg-config - nixpkgsStaging.legacyPackages.${system}.rustc - vulkan-headers - ]; + let + buildPackages = [ + alsa-lib + cargo + libclang + ffmpeg.dev + jack1 + git + llvmPackages.libclang + openssl + pipewire.dev + pkg-config + #nixpkgsStaging.legacyPackages.${system}.rustc + rustc + vulkan-headers + ]; - dependencyPackages = [ - brotli - celt - ffmpeg - gccStdenv.cc # g++ for vrcompositor_wrapper - gccStdenv.cc.cc.lib # crti.o and friends - lame - libdrm - libglvnd - libogg - libpng - libtheora - libunwind - libva - libvdpau - libxkbcommon - nasm - openssl - pipewire - soxr - stdenv.cc.cc.lib - vaapiVdpau - vulkan-headers - vulkan-headers - vulkan-loader - wayland - x264 - xorg.libX11 - xorg.libXcursor - xorg.libXi - xorg.libXrandr - xvidcore - ]; + dependencyPackages = [ + brotli + celt + ffmpeg + gccStdenv.cc # g++ for vrcompositor_wrapper + gccStdenv.cc.cc.lib # crti.o and friends + lame + libdrm + libglvnd + libogg + libpng + libtheora + libunwind + libva + libvdpau + libxkbcommon + nasm + openssl + pipewire + soxr + stdenv.cc.cc.lib + libva-vdpau-driver + vulkan-headers + vulkan-headers + vulkan-loader + wayland + x264 + xorg.libX11 + xorg.libXcursor + xorg.libXi + xorg.libXrandr + xvidcore + ]; - nvidiaPackages = with cudaPackages; [ - cuda_cudart - cuda_nvcc - libnpp - ]; + nvidiaPackages = with cudaPackages; [ + cuda_cudart + cuda_nvcc + libnpp + ]; - libsPatch = toString (replaceVars - ./fix-finding-libs.patch { + libsPatch = toString ( + replaceVars ./fix-finding-libs.patch { ffmpeg = lib.getDev ffmpeg; x264 = lib.getDev x264; - }); + } + ); - devShell = {stdenv, nvidia}: (mkShell.override { + devShell = + { stdenv, nvidia }: + (mkShell.override { stdenv = stdenv; - }) { - # LIBCLANG_PATH="${llvmPackages.libclang.lib}"; - LIBCLANG_PATH="${libclang.lib}/lib"; - buildInputs = buildPackages ++ dependencyPackages ++ (lib.optionals nvidia nvidiaPackages) ++ [ - watchexec - ]; - # LIBS_PATCH = writeText "libs.patch" libsPatch; - RUSTFLAGS = map (a: "-C link-arg=${a}") [ - "-Wl,--push-state,--no-as-needed" - "-lEGL" - "-lclang" - "-lva" - "-lpng" - "-lbrotlidec" - "-lwayland-client" - "-lxkbcommon" - "-Wl,--pop-state" - ]; - RUST_BACKTRACE = "1"; # TODO - shellHook = '' - git apply ${libsPatch} - ''; - }; + }) + { + # LIBCLANG_PATH="${llvmPackages.libclang.lib}"; + LIBCLANG_PATH = "${libclang.lib}/lib"; + buildInputs = + buildPackages + ++ dependencyPackages + ++ (lib.optionals nvidia nvidiaPackages) + ++ [ + watchexec + ]; + # LIBS_PATCH = writeText "libs.patch" libsPatch; + RUSTFLAGS = map (a: "-C link-arg=${a}") [ + "-Wl,--push-state,--no-as-needed" + "-lEGL" + "-lclang" + "-lva" + "-lpng" + "-lbrotlidec" + "-lwayland-client" + "-lxkbcommon" + "-Wl,--pop-state" + ]; + RUST_BACKTRACE = "1"; # TODO + shellHook = '' + git apply ${libsPatch} + ''; + }; in - { - # packages.default = pkgs.rustPlatform.buildRustPackage rec { - # pname = "alvr"; - # BINDGEN_EXTRA_CLANG_ARGS = [ - # ''-I"${pkgs.llvmPackages.libclang.lib}/lib/clang/${pkgs.llvmPackages.libclang.version}/include"'' - # "-I ${pkgs.glibc.dev}/include" - # ]; # TODO - # version = "21"; # TODO - # OPENVR_PATH = "${openvr}"; - # doCheck = false; # TODO - # # LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; - # LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; - # postUnpack = '' - # # Deal with submodules which is still annoying in Nix. - # ln -s $OPENVR_PATH $(ls | grep -- -source)/openvr - # ''; - # src = ./.; - # RUST_BACKTRACE = "full"; # TODO - # nativeBuildInputs = buildPackages; - # buildInputs = buildPackages ++ dependencyPackages; - # dontCargoInstall = true; # TODO - # cargoLock = { - # lockFile = ./Cargo.lock; - # outputHashes = { - # "openxr-0.17.1" = "sha256-fG/JEqQQwKP5aerANAt5OeYYDZxcvUKCCaVdWRqHBPU="; - # "settings-schema-0.2.0" = "sha256-luEdAKDTq76dMeo5kA+QDTHpRMFUg3n0qvyQ7DkId0k="; - # }; - # }; - # CARGO_MANIFEST_DIR = ./.; # probably unneeded - # }; + { + /* + packages.default = pkgs.rustPlatform.buildRustPackage rec { + pname = "alvr"; + + #BINDGEN_EXTRA_CLANG_ARGS = [ + # ''-I"${pkgs.llvmPackages.libclang.lib}/lib/clang/${pkgs.llvmPackages.libclang.version}/include"'' + # "-I ${pkgs.glibc.dev}/include" + #]; # TODO - devShells.default = devShell { stdenv = clangStdenv; nvidia = false; }; - devShells.nvidia = devShell { stdenv = clangStdenv; nvidia = true; }; - } + version = "master"; # TODO + OPENVR_PATH = "${openvr}"; + doCheck = false; # TODO + #LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; + postUnpack = '' + # Deal with submodules which is still annoying in Nix. + ln -s $OPENVR_PATH $(ls | grep -- -source)/openvr + ''; + src = ./.; + RUST_BACKTRACE = "full"; # TODO + nativeBuildInputs = buildPackages; + buildInputs = buildPackages ++ dependencyPackages; + dontCargoInstall = true; # TODO + cargoLock = { + lockFile = ./Cargo.lock; + outputHashes = { + "openxr-0.18.0" = "sha256-v8sY9PROrqzkpuq3laIn2hPaX+DY7Fbca6i/Xiacd1g="; + "settings-schema-0.2.0" = "sha256-luEdAKDTq76dMeo5kA+QDTHpRMFUg3n0qvyQ7DkId0k="; + }; + }; + CARGO_MANIFEST_DIR = ./.; # probably unneeded + }; + */ + formatter = pkgs.nixfmt-tree; + devShells.default = devShell { + stdenv = clangStdenv; + nvidia = false; + }; + devShells.nvidia = devShell { + stdenv = clangStdenv; + nvidia = true; + }; + } ); } From 96e8f88291d124e7f9836621c7dee959acf014f0 Mon Sep 17 00:00:00 2001 From: Makuru Date: Sat, 1 Nov 2025 21:34:19 +0100 Subject: [PATCH 3/6] Fixed Patchfile --- fix-finding-libs.patch | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/fix-finding-libs.patch b/fix-finding-libs.patch index 6e2600c1a2..5330edee68 100644 --- a/fix-finding-libs.patch +++ b/fix-finding-libs.patch @@ -1,15 +1,8 @@ -From 1e792a4e7356f070856e4bf5775a07b18c3cc5ee Mon Sep 17 00:00:00 2001 -From: jopejoe1 -Date: Sat, 7 Sep 2024 23:28:25 +0200 -Subject: [PATCH] fix finding libs - ---- alvr/server_openvr/build.rs | 18 +++--------------- - alvr/session/build.rs | 4 +--- - 2 files changed, 4 insertions(+), 18 deletions(-) + 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/alvr/server_openvr/build.rs b/alvr/server_openvr/build.rs -index b9bc4bd8..0581de0d 100644 +index 11e5a5a2..193201de 100644 --- a/alvr/server_openvr/build.rs +++ b/alvr/server_openvr/build.rs @@ -1,24 +1,12 @@ @@ -36,10 +29,7 @@ index b9bc4bd8..0581de0d 100644 #[cfg(all(target_os = "linux", feature = "gpl"))] fn get_linux_x264_path() -> PathBuf { - alvr_filesystem::deps_dir().join("linux/x264/alvr_build") -+ Path::new("@x264@").to_owned() ++ Path::new("@x264@").to_owned() } fn main() { --- -2.46.0 - From 6d99014b5489f18a290684e4506317ccacf200cb Mon Sep 17 00:00:00 2001 From: Makuru Date: Sun, 2 Nov 2025 02:27:59 +0100 Subject: [PATCH 4/6] Fixed build / run script --- flake.lock | 19 +-------- flake.nix | 111 +++++++++++++++++++++++++++++++++++------------------ 2 files changed, 74 insertions(+), 56 deletions(-) diff --git a/flake.lock b/flake.lock index 3ee94e5176..3ffe393233 100644 --- a/flake.lock +++ b/flake.lock @@ -34,27 +34,10 @@ "type": "github" } }, - "openvr": { - "flake": false, - "locked": { - "lastModified": 1755298685, - "narHash": "sha256-G+xoFIabSbYEaWATGSzHP3SWkaqQhQQ6kMkYfjBXBUU=", - "owner": "ValveSoftware", - "repo": "openvr", - "rev": "91825305130f446f82054c1ec3d416321ace0072", - "type": "github" - }, - "original": { - "owner": "ValveSoftware", - "repo": "openvr", - "type": "github" - } - }, "root": { "inputs": { "flakeUtils": "flakeUtils", - "nixpkgs": "nixpkgs", - "openvr": "openvr" + "nixpkgs": "nixpkgs" } }, "systems": { diff --git a/flake.nix b/flake.nix index 667cd91859..1423c1b8a2 100644 --- a/flake.nix +++ b/flake.nix @@ -2,13 +2,9 @@ description = "Stream VR games from your PC to your headset via Wi-Fi"; inputs = { + self.submodules = true; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - #nixpkgsStaging.url = "github:NixOS/nixpkgs/staging"; flakeUtils.url = "github:numtide/flake-utils"; # TODO use upstream nix utils - openvr = { - url = "github:ValveSoftware/openvr"; - flake = false; - }; }; outputs = @@ -16,7 +12,6 @@ self, nixpkgs, flakeUtils, - openvr, }: flakeUtils.lib.eachDefaultSystem ( system: @@ -26,16 +21,19 @@ alsa-lib cargo libclang + ffmpeg ffmpeg.dev - jack1 + jack2 git llvmPackages.libclang openssl + pipewire pipewire.dev pkg-config - #nixpkgsStaging.legacyPackages.${system}.rustc rustc + rustPlatform.bindgenHook vulkan-headers + vulkan-loader ]; dependencyPackages = [ @@ -70,6 +68,8 @@ xorg.libXi xorg.libXrandr xvidcore + bzip2 + gmp ]; nvidiaPackages = with cudaPackages; [ @@ -91,7 +91,6 @@ stdenv = stdenv; }) { - # LIBCLANG_PATH="${llvmPackages.libclang.lib}"; LIBCLANG_PATH = "${libclang.lib}/lib"; buildInputs = buildPackages @@ -100,47 +99,62 @@ ++ [ watchexec ]; - # LIBS_PATCH = writeText "libs.patch" libsPatch; + NIX_CFLAGS_COMPILE = toString [ + "-lbrotlicommon" + "-lbrotlidec" + "-lcrypto" + "-lpng" + "-lssl" + ]; + RUSTFLAGS = map (a: "-C link-arg=${a}") [ "-Wl,--push-state,--no-as-needed" "-lEGL" - "-lclang" - "-lva" - "-lpng" - "-lbrotlidec" "-lwayland-client" "-lxkbcommon" "-Wl,--pop-state" ]; - RUST_BACKTRACE = "1"; # TODO + RUST_BACKTRACE = "1"; shellHook = '' git apply ${libsPatch} ''; }; in { - /* packages.default = pkgs.rustPlatform.buildRustPackage rec { pname = "alvr"; - - #BINDGEN_EXTRA_CLANG_ARGS = [ - # ''-I"${pkgs.llvmPackages.libclang.lib}/lib/clang/${pkgs.llvmPackages.libclang.version}/include"'' - # "-I ${pkgs.glibc.dev}/include" - #]; # TODO - - version = "master"; # TODO - OPENVR_PATH = "${openvr}"; - doCheck = false; # TODO - #LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; - postUnpack = '' - # Deal with submodules which is still annoying in Nix. - ln -s $OPENVR_PATH $(ls | grep -- -source)/openvr - ''; + LIBCLANG_PATH = "${libclang.lib}/lib"; + env.NIX_CFLAGS_COMPILE = toString [ + "-lbrotlicommon" + "-lbrotlidec" + "-lcrypto" + "-lpng" + "-lssl" + ]; + RUSTFLAGS = map (a: "-C link-args=${a}") [ + "-Wl,--push-state,--no-as-needed" + "-lEGL" + "-lwayland-client" + "-lxkbcommon" + "-Wl,--pop-state" + ]; + cargoBuildFlags = [ + "--exclude alvr_xtask" + "--workspace" + ]; + buildNoDefaultFeatures = true; + patches = [ + (replaceVars ./fix-finding-libs.patch { + ffmpeg = lib.getDev ffmpeg; + x264 = lib.getDev x264; + }) + ]; + version = "21.0.0-master"; # TODO Change to the release + doCheck = false; # TODO Broken right now src = ./.; - RUST_BACKTRACE = "full"; # TODO + RUST_BACKTRACE = "full"; nativeBuildInputs = buildPackages; buildInputs = buildPackages ++ dependencyPackages; - dontCargoInstall = true; # TODO cargoLock = { lockFile = ./Cargo.lock; outputHashes = { @@ -148,18 +162,39 @@ "settings-schema-0.2.0" = "sha256-luEdAKDTq76dMeo5kA+QDTHpRMFUg3n0qvyQ7DkId0k="; }; }; - CARGO_MANIFEST_DIR = ./.; # probably unneeded + postInstall = '' + install -Dm755 ${src}/alvr/xtask/resources/alvr.desktop $out/share/applications/alvr.desktop + install -Dm644 ${src}/resources/ALVR-Icon.svg $out/share/icons/hicolor/scalable/apps/alvr.svg + + # Install SteamVR driver + mkdir -p $out/{libexec,lib/alvr,share} + cp -r ./build/alvr_streamer_linux/lib64/. $out/lib + cp -r ./build/alvr_streamer_linux/libexec/. $out/libexec + cp -r ./build/alvr_streamer_linux/share/. $out/share + ln -s $out/lib $out/lib64 + ''; + postBuild = '' + # Build SteamVR driver ("streamer") + cargo xtask build-streamer --release + ''; + meta = { + description = "Stream VR games from your PC to your headset via Wi-Fi"; + homepage = "https://github.com/alvr-org/ALVR/"; + changelog = "https://github.com/alvr-org/ALVR/releases/tag/v${version}"; + license = lib.licenses.mit; + mainProgram = "alvr_dashboard"; + }; }; - */ formatter = pkgs.nixfmt-tree; devShells.default = devShell { stdenv = clangStdenv; nvidia = false; }; - devShells.nvidia = devShell { - stdenv = clangStdenv; - nvidia = true; - }; + # TODO BROKEN + #devShells.nvidia = devShell { + # stdenv = clangStdenv; + # nvidia = true; + #}; } ); } From 75e7f0c6824c3a71abf6d16a043e7a35fbe28ee3 Mon Sep 17 00:00:00 2001 From: Makuru Date: Mon, 3 Nov 2025 18:24:06 +0100 Subject: [PATCH 5/6] Switched to fenix & start of android --- flake.lock | 39 +++++++++++++++++++++++++++++++ flake.nix | 68 +++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 93 insertions(+), 14 deletions(-) diff --git a/flake.lock b/flake.lock index 3ffe393233..b85169f3d6 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,26 @@ { "nodes": { + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1762065744, + "narHash": "sha256-c04mxJoCb8f6BBrdaREWmdQq+pfp395olXhC+B0G7DI=", + "owner": "nix-community", + "repo": "fenix", + "rev": "e0f24085a4a0da1c32adc308ec4c518ae886ff35", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flakeUtils": { "inputs": { "systems": "systems" @@ -36,10 +57,28 @@ }, "root": { "inputs": { + "fenix": "fenix", "flakeUtils": "flakeUtils", "nixpkgs": "nixpkgs" } }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1762016333, + "narHash": "sha256-PT8hXDYyeRjh9BGyLF/nZWm9TqRwP2EzeKuqUFH0M3w=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "fca718c0f2074bdccf9a996bb37b0fcaff80dc97", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index 1423c1b8a2..b00066456d 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,10 @@ self.submodules = true; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flakeUtils.url = "github:numtide/flake-utils"; # TODO use upstream nix utils + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -12,6 +16,7 @@ self, nixpkgs, flakeUtils, + fenix, }: flakeUtils.lib.eachDefaultSystem ( system: @@ -19,7 +24,6 @@ let buildPackages = [ alsa-lib - cargo libclang ffmpeg ffmpeg.dev @@ -30,10 +34,12 @@ pipewire pipewire.dev pkg-config - rustc + rustToolchain rustPlatform.bindgenHook + llvmPackages.bintools vulkan-headers vulkan-loader + #libGL ]; dependencyPackages = [ @@ -70,6 +76,8 @@ xvidcore bzip2 gmp + jdk + jre ]; nvidiaPackages = with cudaPackages; [ @@ -85,6 +93,28 @@ } ); + androidComposition = androidenv.composeAndroidPackages { + minPlatformVersion = "28"; + maxPlatformVersion = "32"; + abiVersions = [ + "armeabi-v7a" + "arm64-v8a" + "x86-64" + ]; + includeNDK = true; + includeSystemImages = false; + includeEmulator = false; + }; + + rustToolchain = + with fenix.packages.${system}; + combine [ + stable.toolchain + targets."armv7-linux-androideabi".stable.rust-std + targets."aarch64-linux-android".stable.rust-std + targets."x86_64-linux-android".stable.rust-std + ]; + devShell = { stdenv, nvidia }: (mkShell.override { @@ -97,8 +127,12 @@ ++ dependencyPackages ++ (lib.optionals nvidia nvidiaPackages) ++ [ + androidComposition.androidsdk watchexec ]; + JAVA_HOME = "${pkgs.jdk.home}"; + ANDROID_HOME = "${androidComposition.androidsdk}/libexec/android-sdk"; + ANDROID_NDK_ROOT = "${androidComposition.androidsdk}/libexec/android-sdk/ndk-bundle"; NIX_CFLAGS_COMPILE = toString [ "-lbrotlicommon" "-lbrotlidec" @@ -107,12 +141,15 @@ "-lssl" ]; - RUSTFLAGS = map (a: "-C link-arg=${a}") [ - "-Wl,--push-state,--no-as-needed" - "-lEGL" - "-lwayland-client" - "-lxkbcommon" - "-Wl,--pop-state" + RUSTFLAGS = toString [ + "-C link-self-contained=-linker" + (map (a: "-C link-arg=${a}") [ + "-Wl,--push-state,--no-as-needed" + "-lEGL" + "-lwayland-client" + "-lxkbcommon" + "-Wl,--pop-state" + ]) ]; RUST_BACKTRACE = "1"; shellHook = '' @@ -131,12 +168,15 @@ "-lpng" "-lssl" ]; - RUSTFLAGS = map (a: "-C link-args=${a}") [ - "-Wl,--push-state,--no-as-needed" - "-lEGL" - "-lwayland-client" - "-lxkbcommon" - "-Wl,--pop-state" + RUSTFLAGS = toString [ + "-C link-self-contained=-linker" + (map (a: "-C link-args=${a}") [ + "-Wl,--push-state,--no-as-needed" + "-lEGL" + "-lwayland-client" + "-lxkbcommon" + "-Wl,--pop-state" + ]) ]; cargoBuildFlags = [ "--exclude alvr_xtask" From db4288679b17a41883618e4aebc3fc6f311e3a8f Mon Sep 17 00:00:00 2001 From: Makuru Date: Tue, 4 Nov 2025 20:30:02 +0100 Subject: [PATCH 6/6] Working nix feature flag. --- alvr/server_openvr/Cargo.toml | 1 + alvr/server_openvr/build.rs | 14 ++++++++++++++ fix-finding-libs.patch | 35 ----------------------------------- flake.lock | 18 +++++++++--------- flake.nix | 27 +++++---------------------- 5 files changed, 29 insertions(+), 66 deletions(-) delete mode 100644 fix-finding-libs.patch diff --git a/alvr/server_openvr/Cargo.toml b/alvr/server_openvr/Cargo.toml index 498dca0902..e373af6c75 100644 --- a/alvr/server_openvr/Cargo.toml +++ b/alvr/server_openvr/Cargo.toml @@ -11,6 +11,7 @@ crate-type = ["cdylib"] [features] gpl = [] # Enable for FFmpeg support on Windows. Always enabled on Linux +nix = [] [dependencies] alvr_common.workspace = true diff --git a/alvr/server_openvr/build.rs b/alvr/server_openvr/build.rs index 11e5a5a222..1c6ea8d513 100644 --- a/alvr/server_openvr/build.rs +++ b/alvr/server_openvr/build.rs @@ -1,5 +1,19 @@ use std::{env, path::PathBuf}; +#[cfg(feature = "nix")] +fn get_ffmpeg_path() -> PathBuf { + pkg_config::Config::new() + .probe("libavcodec") + .unwrap() + .to_owned() + .include_paths + .pop() + .unwrap() + .parent() + .unwrap() + .to_path_buf() +} +#[cfg(not(feature = "nix"))] fn get_ffmpeg_path() -> PathBuf { let ffmpeg_path = alvr_filesystem::deps_dir() .join(if cfg!(target_os = "linux") { diff --git a/fix-finding-libs.patch b/fix-finding-libs.patch deleted file mode 100644 index 5330edee68..0000000000 --- a/fix-finding-libs.patch +++ /dev/null @@ -1,35 +0,0 @@ - alvr/server_openvr/build.rs | 18 +++--------------- - 1 file changed, 3 insertions(+), 15 deletions(-) - -diff --git a/alvr/server_openvr/build.rs b/alvr/server_openvr/build.rs -index 11e5a5a2..193201de 100644 ---- a/alvr/server_openvr/build.rs -+++ b/alvr/server_openvr/build.rs -@@ -1,24 +1,12 @@ --use std::{env, path::PathBuf}; -+use std::{env, path::{Path, PathBuf}}; - - fn get_ffmpeg_path() -> PathBuf { -- let ffmpeg_path = alvr_filesystem::deps_dir() -- .join(if cfg!(target_os = "linux") { -- "linux" -- } else { -- "windows" -- }) -- .join("ffmpeg"); -- -- if cfg!(target_os = "linux") { -- ffmpeg_path.join("alvr_build") -- } else { -- ffmpeg_path -- } -+ Path::new("@ffmpeg@").to_owned() - } - - #[cfg(all(target_os = "linux", feature = "gpl"))] - fn get_linux_x264_path() -> PathBuf { -- alvr_filesystem::deps_dir().join("linux/x264/alvr_build") -+ Path::new("@x264@").to_owned() - } - - fn main() { diff --git a/flake.lock b/flake.lock index b85169f3d6..a0d8cd9a5b 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1762065744, - "narHash": "sha256-c04mxJoCb8f6BBrdaREWmdQq+pfp395olXhC+B0G7DI=", + "lastModified": 1762238689, + "narHash": "sha256-35sTZMb1Y6mct8cmMPYF50YGETTwfq0xOsFCXtoG6Io=", "owner": "nix-community", "repo": "fenix", - "rev": "e0f24085a4a0da1c32adc308ec4c518ae886ff35", + "rev": "0f94d1e67ea9ef983a9b5caf9c14bc52ae2eac44", "type": "github" }, "original": { @@ -41,11 +41,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1761907660, - "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -65,11 +65,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1762016333, - "narHash": "sha256-PT8hXDYyeRjh9BGyLF/nZWm9TqRwP2EzeKuqUFH0M3w=", + "lastModified": 1762201112, + "narHash": "sha256-Mf3by5z6ptXId0EZ/QVD8md5fyNfgcDIfZbxoxCYItI=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "fca718c0f2074bdccf9a996bb37b0fcaff80dc97", + "rev": "132d3338f4526b5c71046e5dc7ddf800e279daf4", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index b00066456d..2142af39a9 100644 --- a/flake.nix +++ b/flake.nix @@ -36,10 +36,9 @@ pkg-config rustToolchain rustPlatform.bindgenHook - llvmPackages.bintools + llvmPackages.bintools vulkan-headers vulkan-loader - #libGL ]; dependencyPackages = [ @@ -76,8 +75,6 @@ xvidcore bzip2 gmp - jdk - jre ]; nvidiaPackages = with cudaPackages; [ @@ -86,13 +83,6 @@ libnpp ]; - libsPatch = toString ( - replaceVars ./fix-finding-libs.patch { - ffmpeg = lib.getDev ffmpeg; - x264 = lib.getDev x264; - } - ); - androidComposition = androidenv.composeAndroidPackages { minPlatformVersion = "28"; maxPlatformVersion = "32"; @@ -152,9 +142,6 @@ ]) ]; RUST_BACKTRACE = "1"; - shellHook = '' - git apply ${libsPatch} - ''; }; in { @@ -169,7 +156,7 @@ "-lssl" ]; RUSTFLAGS = toString [ - "-C link-self-contained=-linker" + "-C link-self-contained=-linker" (map (a: "-C link-args=${a}") [ "-Wl,--push-state,--no-as-needed" "-lEGL" @@ -179,16 +166,11 @@ ]) ]; cargoBuildFlags = [ - "--exclude alvr_xtask" "--workspace" + "--exclude alvr_xtask" ]; buildNoDefaultFeatures = true; - patches = [ - (replaceVars ./fix-finding-libs.patch { - ffmpeg = lib.getDev ffmpeg; - x264 = lib.getDev x264; - }) - ]; + buildFeatures = [ "nix" ]; version = "21.0.0-master"; # TODO Change to the release doCheck = false; # TODO Broken right now src = ./.; @@ -213,6 +195,7 @@ cp -r ./build/alvr_streamer_linux/share/. $out/share ln -s $out/lib $out/lib64 ''; + # TODO FIX that it needs to run the below command. postBuild = '' # Build SteamVR driver ("streamer") cargo xtask build-streamer --release