mpvプレーヤーをMoltenVK対応にする

[主題]
自前ビルドしているmpvを、MoltenVK(vulkan)対応させる手順を述べる。

[背景]
筆者が過去に投稿(月一で更新中)したmpvプレーヤーのコンパイル手順は、MoltenVK(vulkan)対応していない。
ひょんなことから、mpvがvulkan対応で、macOSの場合、MoltenVKというものを使うことを知った。本稿は、mpvプレーヤーをコンパイルするを、MoltenVK(vulkan)対応させるための差分記事である。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Air 2023 15.3inch(Apple Silicon Mac, M2)
macOS Sonoma 14.5
Xcode 15.4
CommandLine Tools for Xcode 15.3.0.0.1

[前提]
この記事に従って、mpvを自前ビルドしていることを前提とする。(Homebrew等のパッケージマネージャーを使っている場合は、対象外である)

[追加されるライブラリ]
以下のライブラリが追加される。

  1. Shaderc
  2. vulkan(Vulkan Loader及びVulkan Header)
  3. MoltenVK

[変更の対象となるライブラリ]
以下のライブラリが変更の対象となる。これ以外はmpvプレーヤーをコンパイルすると共通である。(なので、共通部分は、この記事には書かない)

  1. libplacebo
  2. mpv

[手順]

  1. Shaderc
    バイナリも配布されているが、x86_64用である。よってソースからビルドする。なお、cmakeとPython3がインストールされている必要がある。

    git clone "https://github.com/google/shaderc.git"
    cd shaderc
    ./utils/git-sync-deps
    mkdir -p ../shaderc_build
    cd ../shaderc_build
    cmake -GNinja \
    -DCMAKE_BUILD_TYPE=Release \
    -DSHADERC_SKIP_COPYRIGHT_CHECK=True \
    ../shaderc
    #macOS Ctalina以降向け
    export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
    ninja
    ctest(オプション)
    sudo ninja install
  2. vulkan(Vulkan Loader及びVulkan Header)
    cmakeとPython3、及びninjaがインストールされている必要がある。

    git clone "https://github.com/KhronosGroup/Vulkan-Loader.git"
    git clone "https://github.com/KhronosGroup/Vulkan-Headers.git"
    
    export PKG_CONFIG="pkgconf"
    export CMAKE_GENERATOR="Ninja"
    export MACOSX_DEPLOYMENT_TARGET="14.0"
    
    icddatadirs=(
     "/usr/local/moltenvk/share"
     "/usr/local/share"
    )
    
    cmake \
    -B Vulkan_Build \
    -S Vulkan-Headers \
    -DCMAKE_INSTALL_PREFIX=/usr/local/vulkan \
    -DCMAKE_BUILD_TYPE=Release
    
    sudo cmake --install Vulkan_Build
    
    rm -rf Vulkan_Build
    
    cmake \
    -B Vulkan_Build \
    -S Vulkan-Loader \
    -DCMAKE_INSTALL_PREFIX=/usr/local/vulkan \
    -DCMAKE_INSTALL_LIBDIR=lib \
    -DCMAKE_INSTALL_NAME_DIR=/usr/local/vulkan/lib \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
    -DVULKAN_HEADERS_INSTALL_DIR=/usr/local/vulkan \
    -DFALLBACK_DATA_DIRS="$( IFS=:; echo "${icddatadirs[*]}" )"
    
    cmake --build Vulkan_Build
    sudo cmake --install Vulkan_Build
    
    rm -rf Vulkan_Build
    
    sudo ln -s /usr/local/vulkan/lib/pkgconfig/vulkan.pc /usr/local/lib/pkgconfig/
  3. MoltenVK

    git clone "https://github.com/KhronosGroup/MoltenVK.git"
    cd MoltenVK
    ./fetchDependencies --macos
    
    make macos MVK_CONFIG_LOG_LEVEL=2
    
    sed -i '' "s|./libMoltenVK|/usr/local/moltenvk/lib/libMoltenVK|g" Package/Latest/MoltenVK/dylib/macOS/MoltenVK_icd.json
    cat Package/Latest/MoltenVK/dylib/macOS/MoltenVK_icd.json
    
    sudo rm -rf /usr/local/moltenvk
    sudo mkdir -p /usr/local/moltenvk/lib /usr/local/moltenvk/share/vulkan/icd.d
    
    sudo install -vm755 Package/Latest/MoltenVK/dylib/macOS/libMoltenVK.dylib /usr/local/moltenvk/lib
    sudo install -vm644 Package/Latest/MoltenVK/dylib/macOS/MoltenVK_icd.json /usr/local/moltenvk/share/vulkan/icd.d

以下はmpvプレーヤーをコンパイルすると共通の部分である。くれぐれも、ディスクイメージのマウントと、環境変数の設定を忘れないこと。

  1. libplacebo

    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    cd ${CMPL}/libplacebo
    meson \
    setup \
    --wipe \
    --prefix ${TARGET} \
    -Dbuildtype=release \
    -Db_lto=true \
    -Db_lto_mode=thin \
    -Dvulkan-registry="/usr/local/vulkan/share/vulkan/registry/vk.xml" \
    -Dvulkan=enabled \
    -Dshaderc=enabled \
    -Dxxhash=enabled \
    -Dopengl=disabled \
    -Dd3d11=disabled \
    -Dglslang=disabled \
    -Ddemos=false \
    --default-library=static \
    build
    
    meson compile -C build
    meson install -C build
    
    unset CFLAGS
    unset CPPFLAGS
  2. mpv

    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    cd ${CMPL}/mpv
    meson \
    setup \
    --wipe \
    --prefix ${TARGET} \
    --default-library=static \
    -Dswift-flags="-target arm64-apple-macosx14.0" \
    -Dbuildtype=release \
    -Db_lto=true \
    -Db_lto_mode=thin \
    -Dgl=disabled \
    build
    
    meson compile -C build
    meson install -C build
    
    mkdir -p ~/.local/share/vulkan
    ln -sfn /usr/local/moltenvk/share/vulkan/icd.d ~/.local/share/vulkan/icd.d
    meson compile -C build macos-bundle
    
    unset CFLAGS
    unset CPPFLAGS

参考サイト

以上

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL