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.4.1
Xcode 15.3
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. 			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
    			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
    			meson compile -C build macos-bundle
    			
    			unset CFLAGS
    			unset CPPFLAGS
    		

以上

参考サイト

この投稿へのコメント

コメントはありません。

コメントを残す

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

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

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

トラックバック URL