Windows + Visual Studio 2019 で EDK2 の OVMF をビルドする【2.EDK2環境の準備】

#【目標】
『Windows 10 に EDK2環境 を構築し、Visual Studio Community 2019 を
　使って OVMF(OvmfPkg) をビルドする。』


#【前回まで】
ビルドに必要なツール類のインストールと設定は前回で完了しました。
今回は目標の一つ手前になるEDK2環境を準備します。


#【今回の目標】
EDK2環境を準備します。
・GitでEDK2のソースツリーをcloneする
・EDK2のBaseToolsを準備(ビルド)する
・MdeModulePkgをBuildする
ここまでできれば、OVMFのビルドができると思います。
OVMFのビルドは次回とします


#【EDK2のソースツリーの準備】
・コマンドプロンプトを開いて、次の通り入力します
　<B>git clone https://github.com/tianocore/edk2.git C:\EDK2
　cd C:\EDK2
　git submodule update --init</B>
　これで C:\EDK2 にEDK2のソースツリーが準備できました。
![Git-Clone-EDK2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1491958/010d1d45-482b-ae97-816d-9e68204263ea.png)
・EDK2のソースツリーの準備が成功したらコマンドプロンプトは
　閉じてください
　<B>exit</B>
・https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems
　「How to Setup the EDK II Tree」に記載の手順となりますが、
　これだけでは足りません
・https://github.com/tianocore/edk2/blob/master/ReadMe.rst
　「Submodules」の手順も必要となります

引き続きEDK2 BaseToolsの準備(ビルド)をします。

#【EDK2 BaseToolsの準備(ビルド)】
・スタートメニューより<B>「VS2015 x86 Native Tools Command Prompt」</B>を
　開いて、次の通り入力します
　<B>cd C:\EDK2
　edksetup.bat Rebuild</B>
　※実行直後に以下のエラーが出ますが気にしないでください
　　- 「!!! ERROR !!! Cannot find BaseTools Bin Win32!!!」
　　　　見つけられなかったディレクトリは今回のビルドで作成されます。
　※最後のほうで以下の2つのワーニングが出ますが気にしないでください
　　- 「!!! WARNING !!! CLANG_BIN environment variable is not set」
　　　　今後も CLANG は使わないので設定しません
　　- 「!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!」
　　　　今後も CYGWIN は使わないので設定しません
　<B>dir C:\EDK2\BaseTools\Bin\Win32</B>
　※pdbやexeなどが生成できていれば成功です
　　成功していたら「VS2015 x86 Native Tools Command Prompt」は
　　exit で閉じてください
　<B>exit</B>
・<B>VS2015は「x64」ではなく「x86」を開いてください</B>
　EDK2 BaseToolsのC言語で書かれた各モジュールのmakefileは32bit用です
　<B>64bit用のコンパイラを使用するとエラーになります</B>
・VS2019/2017ではなくVS2015としたのは、EDK2のちょっと古いバージョン
　であるUDK2017での情報でVS2015を使用するとありましたので使いました
・https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems
　「Compile Tools」に記載の手順となります

引き続きMdeModulePkgをビルドの準備をします。

#【MdeModulePkgのビルドの準備】
・メモ帳などで <B>C:\EDK2\Conf\target.txt を開いて、以下の3か所を変更</B>します
　- <B>ACTIVE_PLATFORM</B>
　　旧) EmulatorPkg/EmulatorPkg.dsc
　　新) <B>MdeModulePkg/MdeModulePkg.dsc</B>
　- <B>TARGET_ARCH</B>
　　旧) IA32
　　新) <B>X64</B>
　- <B>TOOL_CHAIN_TAG</B>
     　　旧) VS2015x86 (MYTOOLSの場合もある)
     　　新) <B>VS2019</B>
　<B>変更したら C:\EDK2\Conf\target.txt を保存して閉じてください</B>
・上記で MdeModulePkg のビルド設定は完了です。
・https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems
　「Build MdeModulePkg」に記載の手順となります
・https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix
　「Windows systems ToolChain Matrix」も参照してください
　TOOL_CHAIN_TAGの設定方法についての記載です
・Visual Studio 2017の場合、TOOL_CHAIN_TAG は VS2017 になります。
　Visual Studio 2015の場合、VS2015x86 になります。

引き続きEDK2ビルド用コマンドプロンプトの準備をします。

#【EDK2ビルド用コマンドプロンプト】
・スタートメニューより<B>「x64 Native Tools Command Prompt for VS 2019」</B>を
　開いて、次の通り入力します
　<B>chcp 65001</B>
　※使用する文字コードをUTF-8にして以降の日本語文字化けに対処します。
　<B>cd C:\EDK2</B>
　<B>edksetup.bat</B>
　※以下の1つのエラーは気にしないでください
　　- 「!!! ERROR !!! Binary C tools are missing. They are required to be built from BaseTools Source.」
　　　BaseToolsでsplit.exeを生成しなくなったのにチェックしているようです
　※以下の2つのワーニングが出ますが気にしないでください
　　- 「!!! WARNING !!! CLANG_BIN environment variable is not set」
　　　今後も CLANG は使わないので設定しません
　　- 「!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!」
　　　今後も CYGWIN は使わないので設定しません
・<B>そのまま【MdeModulePkgのビルド】へすすみます</B>
・https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems
　「Build」に記載の手順となります

#【MdeModulePkgのビルド】
・引き続き<B>「x64 Native Tools Command Prompt for VS 2019」</B>で
　次の通り入力します
　<B>build</B>
・<B>"Done" が出たらビルドは終了です</B>
　結構待ちます
・以下のように入力して <B>HelloWorld.efi が出来ていたら成功</B>です
　<B>dir C:\EDK2\Build\MdeModule\DEBUG_VS2019\X64\HelloWorld.efi</B>


EDK2環境の準備はここまでです。次回「3.OVMFのビルド」に続きます。
ありがとうございました。