Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions alvr/vrcompositor_wrapper/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ fn main() {
let target_dir = out_dir.join("../../..");

let sh = Shell::new().unwrap();
// g++ because this build wants __builtin_apply_args and friends
let command = format!("g++ -shared -fPIC $(pkg-config --cflags libdrm) drm-lease-shim.cpp -o {}/alvr_drm_lease_shim.so", target_dir.display());
cmd!(sh, "bash -c {command}").run().unwrap();
}
Expand Down
45 changes: 45 additions & 0 deletions fix-finding-libs.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
From 1e792a4e7356f070856e4bf5775a07b18c3cc5ee Mon Sep 17 00:00:00 2001
From: jopejoe1 <[email protected]>
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

95 changes: 95 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

137 changes: 137 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -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; };
}
);
}