Windows で MikanOS (その4:MikanLoaderのはじめてのビルド)

お疲れ様です！いつもお世話になっております。！！
なんと4回目になりました！今回もどうぞよろしくお願いいたします！！！

#【前回から】
前回の「その3」では EDK2(UDK2017)環境を構築しました。
今回は "みかん本" の「2.2章 EDK IIでハローワールド(osbook_day02a)」で
記載のある、「MikanLoader」を Windows環境でビルドしたいと思います。

Linux環境とのビルド環境の違いからか、ワーニングやエラーの
出方が変わるようで、 "みかん本" のオリジナルのソースのままでは
ビルドが成功しませんでした。

このあたりも後ほど説明したいと思います。
なお、"みかん本" の "付録B MikanOSの入手"もよく読んでおいて
ください。

#【今回の目標】
・"みかん本" の「2.2章 EDK IIでハローワールド(osbook_day02a)」を
　Windows環境でビルドする。

#【結果】
MikanLoaderパッケージの変更は必要でしたが、
**！ビルドできました！**

#【必要なもの】
・「その3」で記載した「【必要なもの】」一式
・MikanOSのリポジトリにあるソースファイル

#【手順】

<DL><DD>
1. MikanOSのリポジトリにある osbook_day02a タグのソース<BR>
　コードを入手する<BR>
　1) コマンドプロンプトを開く<BR>
　2) カレントディレクトリを C:\WinMikanOS に移動する<BR>
　　- <B>cd C:\WinMikanOS</B><BR>
　3) Gitで MikanOS のソースファイルを clone する<BR>
　　- <B>git clone https://github.com/uchan-nos/mikanos.git</B><BR>
　4) カレントディレクトリを C:\WinMikanOS\mikanos に移動する<BR>
　　- <B>cd C:\WinMikanOS\mikanos</B><BR>
　5) Gitで MikanOS の osbook_day02a タグのソースファイルを<BR>
　　checkoutする<BR>
　　- <B>git checkout osbook_day02a</B><BR>
　6) コマンドプロンプトを閉じる<BR>
　　- <B>exit</B><BR>
<BR>
2. EDK2(UDK2017)に MikanLoaderパッケージ のソースファイルを<BR>
　適用する<BR>
　ウィンドウズ標準のシンボリックリンク機能を使います。<BR>
　1) <B>管理者権限のあるコマンドプロンプトを開く</B><BR>
　2) 管理者権限のあるコマンドプロンプトで以下を入力する<BR>
　　- <B>mklink /d C:\MyWorkspace\MikanLoaderPkg C:\WinMikanOS\mikanos\MikanLoaderPkg</B><BR>
　3) 管理者権限のあるコマンドプロンプトを閉じる<BR>
　　- <B>exit</B><BR>
<BR>
3. EDK2(UDK2017)にある target.txt を MikanLoaderパッケージ<BR>
　用に修正する<BR>
　1) お好みのテキストエディタで <B>C:\MyWorkspace\Conf\target.txt <BR>
　　を開く</B><BR>
　2) 以下の1か所を変更する。<BR>
　　ACTIVE_PLATFORM       = Nt32Pkg/Nt32Pkg.dsc<BR>
　　->  <B>ACTIVE_PLATFORM       = MikanLoaderPkg/MikanLoaderPkg.dsc</B><BR>
　3) <B>C:\MyWorkspace\Conf\target.txt を保存</B>して、テキスト<BR>
　　エディタを終了する<BR>
<BR>
4. このままビルドするとリンクエラーが発生するため(後述)、<BR>
　MikanLoaderパッケージを変更する<BR>
　・<B>C:\MyWorkspace\MikanLoaderPkg\MikanLoaderPkg.dsc</B>  (1か所)<BR>
　　<B>ファイルの末尾に以下の2行を追加</B>する<BR>
　　- <B>[BuildOptions]</B><BR>
　　- <B>  MSFT:*_*_*_CC_FLAGS = /wd4702</B><BR>
<BR>
5. MikanLoaderパッケージをビルドする<BR>
　1) スタートメニュー の Visual Studio 2015 にある、<BR>
　　 <B>「VS2015 x86 Native Tools コマンド プロンプト」を開く</B><BR>
　2) カレントディレクトリを C:\MyWorkspace に移動する<BR>
　　 - <B>cd C:\MyWorkspace</B><BR>
　3) 以下の通り edksetup.bat を実行してビルド環境を準備する<BR>
　　 - <B>edksetup --nt32 X64</B><BR>
　4) 以下の通り build clean を実行する<BR>
　　 - <B>build clean</B><BR>
　5) 以下の通り build を実行して Loader.efi をビルドする<BR>
　　 - <B>build</B><BR>
<BR>
6. MikanLoaderパッケージ がビルドされたか確認する<BR>
　1) Loader.efi がビルドされたか確認する<BR>
　　 - <B>dir C:\MyWorkspace\Build\MikanLoaderX64\DEBUG_VS2015x86\X64\Loader.efi</B><BR>
</DD></DL>


#【紆余曲折】
・MikanLoaderパッケージのオリジナルのソースのままでビルドをすると
　リンクの際にエラーとなります。
　エラーの内容は以下の通りです。
　(1) c:\myworkspace\mdepkg\library\uefiapplicationentrypoint\applicationentrypoint.c(75)
　　　error C2220: 警告をエラーとして扱いました。'executable' ファイルは生成されません。
　(2) c:\myworkspace\mdepkg\library\uefiapplicationentrypoint\applicationentrypoint.c(75)
　　　warning C4702: 制御が渡らないコードです。
　MikanLoaderのMain.cにあるUefiMain()関数にあるwhile (1);による
　無限ループがあるため、コール元の applicationentrypoint.cにある
　_ModuleEntryPoint()関数に戻れないことのワーニング(2)を
　エラーとして扱う(1)ために起きたもので、ビルド環境(設定)の違い
　により出るものと思います。
　EDK2(UDK2017)共通のソースファイルやビルド設定は触りたく
　なかったので、MikanLoaderパッケージ側を変更することで
　対処しました。
　※手順ではコンパイラーの設定変更でリンカー警告となるC4702の
　　ワーニングを抑制しています。


#【次回の目標】
・"みかん本" の「2.5章 メモリマップの取得(osbook_day02b)」を
　Windows環境でビルドする。
にしようと思います。


#【参考とか引用とか】
・パッケージ単位でコンパイラーやリンカーのオプションを
　追加したり、まるごと変更したりする方法
　「3.7 Building the module」
　https://edk2-docs.gitbook.io/edk-ii-module-writer-s-guide/3_module_development/37_building_the_module
・コンパイラーの警告を非表示にする方法
　https://docs.microsoft.com/ja-jp/cpp/build/reference/compiler-option-warning-level?view=msvc-140
・リンカー警告をエラーとして扱うことについて
　https://docs.microsoft.com/ja-jp/cpp/build/reference/wx-treat-linker-warnings-as-errors?view=msvc-140