x265ビルド VC2017版
なんか要望があったのでVC2017でのビルド方法。とはいっても、ほとんど何も変わらないのだが…。
以下のスクリプトで8bit/10bit multilibのx265をPGOビルドできる。
準備
Visual Studio Community 2017
CMake (Win32 Installer をダウンロード)
Mercurial (MSI installer かInno Setup installerのどちらかを)
nasm
適当なy4mファイル (ffmpegとかで自分で作るか、このあたりから適当に bus_cif.y4mとかで)
ffmpegでy4mを作る場合、
ffmpeg.exe -y -i <ソース動画> -an -pix_fmt yuv420p -f yuv4mpegpipe -frame 120 <出力.y4m>
とかで作れば良いと思う。
とりあえず、上記をすべてインストールする。cmake/hg/nasmにはパスを通しておき、コマンドプロンプトで
が反応あるかどうかを確認する。
ビルド実行
これで終わり。
以下のスクリプトで8bit/10bit multilibのx265をPGOビルドできる。
準備
Visual Studio Community 2017
CMake (Win32 Installer をダウンロード)
Mercurial (MSI installer かInno Setup installerのどちらかを)
nasm
適当なy4mファイル (ffmpegとかで自分で作るか、このあたりから適当に bus_cif.y4mとかで)
ffmpegでy4mを作る場合、
ffmpeg.exe -y -i <ソース動画> -an -pix_fmt yuv420p -f yuv4mpegpipe -frame 120 <出力.y4m>
とかで作れば良いと思う。
とりあえず、上記をすべてインストールする。cmake/hg/nasmにはパスを通しておき、コマンドプロンプトで
cmake
hg
nasm
が反応あるかどうかを確認する。
ビルド実行
md <x265をビルドするフォルダ>
cd /d <x265をビルドするフォルダ>
set TEST_MOVIE=<y4mファイルへのパス>
rem x265のソースをダウンロード
hg clone https://bitbucket.org/multicoreware/x265
rem PGOを有効
set LTCG_OPTION=PGInstrument
rem 無効にする場合はこちら
rem set LTCG_OPTION=true
rem ここではx64ビルド
md x265\build\vc15-x86_64
cd x265\build\vc15-x86_64
set CMAKE_VS_TYPE=Visual Studio 15 2017 Win64
set ARCH_VC=x64
rem x86ビルド用
rem md x265\build\vc15-x86
rem cd x265\build\vc15-x86
rem set CMAKE_VS_TYPE=Visual Studio 15 2017
rem set ARCH_VC=Win32
rem コンパイルオプション
rem PGOビルドには、/GLが必要
rem その他のオプションは適当 (必要ないかもしれない)
set VC_OPTIONS=/GL /MP /MT /Ox /Ob2 /Oi /Ot /Oy /GT /GF /Gy /fp:fast /D NDEBUG
rem PGOは/LTCG (リンク時コード生成) の一種なので
rem /INCREMENTAL:NOとしないとリンク中に警告が表示される
rem /LARGEADDRESSAWAREはx86ビルド用 (x64では単に無視される)
set VC_LINKER_EXE_OPTIONS=/INCREMENTAL:NO /LARGEADDRESSAWARE /OPT:REF /OPT:ICF
set VC_LINKER_MODULE_OPTIONS=/INCREMENTAL:NO
set VC_LINKER_SHARED_OPTIONS=/INCREMENTAL:NO
rem VC2017の環境設定を呼ぶ
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
call "%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build\vcvarsall.bat" %ARCH_VC%
mkdir 10bit
mkdir 8bit
rem 10bit用のライブラリをビルド
cd "10bit"
cmake -D STATIC_LINK_CRT:BOOL=ON ^
-D ENABLE_SHARED:BOOL=OFF ^
-D CMAKE_CXX_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_C_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_EXE_OPTIONS%" ^
-D CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_MODULE_OPTIONS%" ^
-D HIGH_BIT_DEPTH:BOOL=ON ^
-D EXPORT_C_API:BOOL=OFF ^
-D ENABLE_CLI:BOOL=OFF ^
-G "%CMAKE_VS_TYPE%" ..\..\..\source
pause
MSBuild /property:Configuration="Release";WholeProgramOptimization=%LTCG_OPTION% x265.sln
copy /y Release\x265-static.lib ..\8bit\x265-static-main10.lib
rem 8bit用のライブラリをビルド
cd "..\8bit"
cmake -D STATIC_LINK_CRT:BOOL=ON ^
-D ENABLE_SHARED:BOOL=OFF ^
-D CMAKE_CXX_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_C_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_EXE_OPTIONS%" ^
-D CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_MODULE_OPTIONS%" ^
-D EXTRA_LIB:STRING="x265-static-main10.lib" ^
-D LINKED_10BIT:BOOL=ON ^
-G "%CMAKE_VS_TYPE%" ..\..\..\source
rem 情報収集用の実行ファイルを作成 (PGInstrument)
MSBuild /p:Configuration=Release;WholeProgramOptimization=%LTCG_OPTION% x265.sln
rem PGOビルドをしない場合はこれで終了
if "%LTCG_OPTION%" == "true" goto FINISH
rem 情報収集用にx265を実行(8bit)
release\x265.exe --crf 23 --preset medium -o nul "%TEST_MOVIE%"
release\x265.exe --crf 23 --preset slow --amp --weightb -o nul "%TEST_MOVIE%"
rem 情報収集用にx265を実行(10bit)
release\x265.exe --crf 23 --input-depth 8 --output-depth 10 --preset medium -o nul "%TEST_MOVIE%"
release\x265.exe --crf 23 --input-depth 8 --output-depth 10 --preset slow --amp --weightb -o nul "%TEST_MOVIE%"
rem 作成されたプロファイルをもとに
rem 最適化された実行ファイルを作成 (PGOptimize)
MSBuild /p:Configuration=Release;WholeProgramOptimization=PGOptimize x265.sln
:FINISH
rem これで終了
rem 8bit\release\x265.exeが最適化された実行ファイル
これで終わり。