{ pkgs ? import { }, }: pkgs.mkShell { name = "platform-rust"; buildInputs = with pkgs; [ # do not install, use system rust toolchain # that is installed by rustup. Easier in nixos. #rustc #cargo #rustfmt #clippy #rust-analyzer # Build dependencies pkg-config openssl cmake gcc gnumake openssl.dev # for lance protobuf # image processing libiconv # sqlx postgresql sqlite git # wasm wasm-pack binaryen python3 # for ort stdenv.cc.cc.lib ]; nativeBuildInputs = with pkgs; [ pkg-config cmake ]; # Environment variables shellHook = '' echo "Rust toolchain:" echo " rustc: $(rustc --version)" echo " cargo: $(cargo --version)" echo "" # Set up environment variables for builds export PKG_CONFIG_PATH="${pkgs.openssl.dev}/lib/pkgconfig:${pkgs.postgresql}/lib/pkgconfig:$PKG_CONFIG_PATH" export OPENSSL_DIR="${pkgs.openssl.dev}" export OPENSSL_LIB_DIR="${pkgs.openssl.out}/lib" export OPENSSL_INCLUDE_DIR="${pkgs.openssl.dev}/include" export CUDA_PATH=${pkgs.cudatoolkit} export LD_LIBRARY_PATH=${pkgs.linuxPackages.nvidia_x11}/lib:${pkgs.ncurses5}/lib export EXTRA_LDFLAGS="-L/lib -L${pkgs.linuxPackages.nvidia_x11}/lib" export EXTRA_CCFLAGS="-I/usr/include" # Not sure which of these are necessary... # For DuckDB export CMAKE_PREFIX_PATH="${pkgs.cmake}/bin:$CMAKE_PREFIX_PATH" # For lance export PROTOC="${pkgs.protobuf}/bin/protoc" export PROTOBUF_LOCATION="${pkgs.protobuf}" # For ONNX Runtime ${pkgs.lib.optionalString pkgs.stdenv.isLinux '' export LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib:$LD_LIBRARY_PATH" ''} # sqlx export SQLITE3_LIB_DIR="${pkgs.sqlite.out}/lib" export PG_CONFIG="${pkgs.postgresql}/bin/pg_config" ''; }