Windows で MikanOS (その2:VisualStudio2017(2015))

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


#【前回から】
前回の「その1」では VMware で"みかん本" の「1.1章 ハローワールド」を
動作させましたが、ソースコードのコンパイルやリンクは行っていません
でした。
今回は Visual Studio Community 2017 をインストールしてコンパイルと
リンクをしみたいと思います。

なぜ Visual Studio Community 2017 にしたかというと、
・"みかん本"を先に読み進める場合には、UEFI開発キット EDK2 の
　環境構築が必要となりますが、推奨されるVisual Studio は 2015 と
　なっています。
・そこで、Visual Studio Express 2015 for Windows 10 のインストールを
　試しましたが、インストール中に一部のパッケージが破損している
　趣旨のメッセージが表示されたためインストールをやめました。
　※破損のメッセージが出るパッケージはスキップしてインストールを
　　完了させましたが、このまま使い続けるのは若干不安でした。
　　この現象が起きたのは2021/05/10ころのお話で、 Microsoft が
　　何らかの対応をするかもしれないです。
・上記のことがあり Visual Studio Community 2017 を使うことにしました
　が、インストールの際に「C++によるデスクトップ開発」の構成として
　「デスクトップ用 VC++ 2015.3 v14.00 (v140) ツールセット」を追加する
　ことができるため、 Visual Studio 2015 相当になるから結果オーライ！
というのが理由です。

また、今後の読み進めをするうえで "みかん本" のソースコードや
パッケージファイルも必要になると思いますので、Gitもインストール
してちょっとだけ使ってみたいと思います。


#【今回の目標】
・"みかん本" の「1.9章 C言語でハローワールド」を
　Visual Studio Community 2017(に含まれる2015) でコンパイル/リンクする。
・Gitをインストールしてちょっとだけ使ってみる。

#【結果】
**！今回も動作しました！**
仮想環境だけでなく実機でも動作することを確認しました。

#【必要なもの】
・通称"みかん本"(『ゼロからのOS自作入門』)
・Windows 10が動作しているPC
・VMware Workstation 16 Player (以降「VMware」と略します)
・仮想マシンハードディスクイメージ変換(convert)ツール NHC
　https://euee.web.fc2.com/tool/nhc.html
・Microsoft Visual Studio Community 2017
・Windows版のGit
　http://git-scm.com/download/win

#【手順】
1. Windows 10が動作しているPC に <B>Visual Studio Community 2017 を<BR>
インストール</B>する<BR>
※詳細なインストール手順は省略しますが、基本の構成については<BR>
　<B>「C++によるデスクトップ開発」を選択</B>し、インストールの詳細で<BR>
　<B>「デスクトップ用 VC++ 2015.3 v14.00 (v140) ツールセット」を<BR>
　追加</B>しましょう。<BR>
<BR>
2. <B>Windows版のGitをインストール</B>する<BR>
※こちらも詳細なインストール方法は省略します。<BR>
　デフォルトの設定でよいと思います。<BR>
<BR>
3. "みかん本"の<B>「1.9章 C言語でハローワールド」にある hello.c を<BR>
準備</B>する<BR>
※本章とあわせて<B>「付録A 開発環境のインストール」(の特に序盤)も<BR>
　よく読みましょう。</B><BR>
フォルダ構成が "みかん本" の内容とは異なりますので、ここでは<BR>
コマンドプロンプトを起動して以下のように入力します。<BR>
　1) cd /d c:\WinMikanOS<BR>
　2) ren osbook _osbook<BR>
　3) git clone https://github.com/uchan-nos/mikanos-build.git osbook<BR>
　4) robocopy _osbook osbook *.* /s /move<BR>
　5) exit<BR>
　※2)、4)は前回の「その1」のデータが残っているとGitのcloneに失敗<BR>
　　するための対策です。<BR>
これで <B>C:\WinMikanOS\osbook\day01\c\hello.c</B> が準備できます。<BR>
<BR>
4. コンパイル・リンクを行う<BR>
以下の操作を行います<BR>
　1) 「スタートメニュー」 - 「Visual Studio 2015」 - <BR>
　　 <B>「VS2015 x64 Native Tools コマンド プロンプト」</B> を起動する<BR>
　2) カレントディレクトリをソースファイルのあるディレクトリに<BR>
　　 移動する<BR>
　　 - <B>cd /d C:\WinMikanOS\osbook\day01\c</B><BR>
　3) 以下の内容で<B>コンパイルする</B><BR>
　　 - **cl.exe /Fo.\hello.o /c /GS- /Gs32768 /D UNICODE /O1b2s /GL /Gy /EHs-c- /GR- /GF .\hello.c**<BR>
　4) hello.o が生成されたか確認する<BR>
　　 - dir hello.o<BR>
　5) hello.o が生成されていたら、以下の内容で<B>リンクする</B><BR>
　 　- **link.exe /OUT:.\hello.efi /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /ENTRY:EfiMain /SUBSYSTEM:EFI_APPLICATION /SAFESEH:NO /BASE:0 /DRIVER .\hello.o**<BR>
　6) hello.efi が生成されたか確認する<BR>
　　 - dir hello.efi<BR>
<BR>
5. 4.で生成された hello.efi を使って VMware で動作確認する。<BR>
※仮想マシンそのものは前回のものを使用し、仮想ディスクのみを<BR>
　今回作成したファイルを適用するようにしてください。<BR>
　<B>前回との違いは、今回生成した hello.efi を BOOTX64.EFI にリネームして、<BR>
　仮想ディスクの \EFI\BOOT にコピーするところ</B>です。<BR>

#【コンパイラ・リンカのオプションについて】
手順のコンパイラ オプションやリンカー オプションを選択した
理由ですが、正直なところ具体的な根拠はありません(滝汗)
実は先にWindows環境でEDK2を構築して "みかん本" の「2.2章 EDKIIで
ハローワールド(osbook_day02a)」を進めた際、EDK2のビルドで使われる
オプションを~~パクった~~参考としただけなのです。
動いてよかったというのが正直なところだったりします。
・コンパイラ オプションに関する説明はこちらです。
　https://docs.microsoft.com/ja-jp/cpp/build/reference/compiler-options-listed-alphabetically?view=msvc-140
・リンカー オプションに関する説明はこちらです。
　https://docs.microsoft.com/ja-jp/cpp/build/reference/linker-options?view=msvc-140


#【紆余曲折】
・コンパイル時にとりあえず cl hello.c とだけやって叱られました。
・今回の動作確認そのものは2時間くらいでできたのですが、
　記事を書くのに結構時間がかかりました(汗)

#【次回の目標】
"みかん本" の「2.1章 EDK II入門」を Windows環境に構築する。
にしようと思います。

#【参考とか引用とか】
・Microsoftさん、ありがとうございます。