103 lines
3.6 KiB
Nix
103 lines
3.6 KiB
Nix
{
|
||
description = "Blender VoiceVox Plugin Development Environment";
|
||
|
||
inputs = {
|
||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||
flake-utils.url = "github:numtide/flake-utils";
|
||
};
|
||
|
||
outputs =
|
||
{
|
||
self,
|
||
nixpkgs,
|
||
flake-utils,
|
||
}:
|
||
flake-utils.lib.eachDefaultSystem (
|
||
system:
|
||
let
|
||
pkgs = import nixpkgs {
|
||
inherit system;
|
||
config.allowUnfree = true;
|
||
};
|
||
in
|
||
{
|
||
devShells.default = pkgs.mkShell {
|
||
buildInputs = with pkgs; [
|
||
# Python環境
|
||
python311
|
||
python311Packages.pip
|
||
python311Packages.virtualenv
|
||
git
|
||
|
||
# C/C++標準ライブラリ(PyTorchなどに必要)
|
||
stdenv.cc.cc.lib
|
||
zlib
|
||
zstd
|
||
|
||
# ROCm関連(AMD GPU推論に必要)
|
||
rocmPackages.clr
|
||
rocmPackages.rocm-smi
|
||
rocmPackages.rocm-runtime
|
||
];
|
||
|
||
shellHook = ''
|
||
python --version
|
||
blender --version | head -n 1
|
||
|
||
# ROCm環境変数
|
||
export ROCM_PATH="${pkgs.rocmPackages.clr}"
|
||
export HSA_OVERRIDE_GFX_VERSION="11.0.0" # RX 7900 (RDNA 3 / gfx1100)
|
||
|
||
# LD_LIBRARY_PATH: ROCm libraries FIRST (critical for GPU inference)
|
||
export LD_LIBRARY_PATH="${pkgs.rocmPackages.clr}/lib:${pkgs.rocmPackages.rocm-runtime}/lib:${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.zlib}/lib:${pkgs.zstd.out}/lib:$LD_LIBRARY_PATH"
|
||
|
||
# venvのセットアップ
|
||
VENV_DIR="$PWD/.venv"
|
||
if [ ! -d "$VENV_DIR" ]; then
|
||
echo "[Setup] Creating Python virtual environment..."
|
||
python -m venv "$VENV_DIR"
|
||
fi
|
||
|
||
# venvをアクティベート
|
||
source "$VENV_DIR/bin/activate"
|
||
|
||
# PyTorch ROCm版の導入(GPU未認識時のみ)
|
||
if ! python -c "import torch; print(torch.cuda.is_available())" 2>/dev/null | grep -q "True"; then
|
||
echo "[Setup] Installing PyTorch ROCm dependencies..."
|
||
pip install --quiet --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm7.0
|
||
fi
|
||
|
||
# プロジェクト依存(requirements.txt)を同期
|
||
if [ -f "$PWD/requirements.txt" ]; then
|
||
echo "[Setup] Syncing Python dependencies from requirements.txt..."
|
||
pip install --quiet -r "$PWD/requirements.txt"
|
||
fi
|
||
|
||
# OpenCVは壊れやすいので、import失敗時のみheadlessを強制再導入
|
||
if ! python -c "import cv2" >/dev/null 2>&1; then
|
||
echo "[Setup] Repairing OpenCV (opencv-python-headless)..."
|
||
pip install --quiet --force-reinstall --no-cache-dir opencv-python-headless
|
||
fi
|
||
|
||
# Pythonパスにカレントディレクトリを追加
|
||
export PYTHONPATH="$PWD:$PYTHONPATH"
|
||
|
||
# アドオンのインストールパスを環境変数として設定
|
||
export BLENDER_USER_SCRIPTS="$HOME/.config/blender/5.0/scripts"
|
||
export BLENDER_USER_ADDONS="$BLENDER_USER_SCRIPTS/addons"
|
||
|
||
# 環境変数をファイルに保存(サーバープロセス用)
|
||
# CRITICAL: ROCm library paths MUST come first for GPU inference
|
||
cat > "$PWD/.env" << EOF
|
||
LD_LIBRARY_PATH=${pkgs.rocmPackages.clr}/lib:${pkgs.rocmPackages.rocm-runtime}/lib:${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.zlib}/lib:${pkgs.zstd.out}/lib
|
||
ROCM_PATH=${pkgs.rocmPackages.clr}
|
||
HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||
EOF
|
||
|
||
echo "[Setup] Environment ready with GPU support"
|
||
'';
|
||
};
|
||
}
|
||
);
|
||
}
|