引き続き
・Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
本の通りにすると、カーネル main.cpp をコンパイラするところで、エラーになってしまいます。
これは、zshシェル(macOS catalina からデフォルトのシェル)の場合、スペースの入った$CPPFLAGS変数がきちんと展開されないためです。
(→サポートページ Issue #60)
そこで、以下のように冒頭に eval を付けるとエラーが回避できるそうです。
次の、リンクでも前々回の osbook_day03a の記事と同じく、Macではリンカのオプションに -z separate-code を追加します。
続いて、ブートローダ $HOME/workspace/mikanos/MikanLoaderPkg/Main.c は、書き換える部分があります。(→@yamoridonさんの記事 参照)
変更したら、ビルドします。
それでは、QEMUで実行してみます。(長いですがコマンドプロンプトの% を除いて1行です。)

しま模様になりました!
・Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
の記事を見ながら実行していきます。
3.5 カーネルからピクセルを描く(osbook_day03c)
3.5 カーネルからピクセルを描く(osbook_day03c)
本の通りにすると、カーネル main.cpp をコンパイラするところで、エラーになってしまいます。
これは、zshシェル(macOS catalina からデフォルトのシェル)の場合、スペースの入った$CPPFLAGS変数がきちんと展開されないためです。
(→サポートページ Issue #60)
% cd $HOME/workspace/mikanos
% git checkout osbook_day03c
% cd kernel
% source $HOME/osbook/devenv/buildenv.sh
% echo $CPPFLAGS
-I/Users/user0/osbook/devenv/x86_64-elf/include/c++/v1 -I/Users/user0/osbook/devenv/x86_64-elf/include -I/Users/user0/osbook/devenv/x86_64-elf/include/freetype2 -I/Users/user0/edk2/MdePkg/Include -I/Users/user0/edk2/MdePkg/Include/X64 -nostdlibinc -D__ELF__ -D_LDBL_EQ_DBL -D_GNU_SOURCE -D_POSIX_TIMERS -DEFIAPI='__attribute__((ms_abi))'
% clang++ $CPPFLAGS -O2 --target=x86_64-elf -fno-exceptions -ffreestanding -c main.cpp
main.cpp:1:10: fatal error: 'cstdint' file not found
#include <cstdint>
^~~~~~~~~
1 error generated.
そこで、以下のように冒頭に eval を付けるとエラーが回避できるそうです。
% eval clang++ $CPPFLAGS -O2 --target=x86_64-elf -fno-exceptions -ffreestanding -c main.cpp
次の、リンクでも前々回の osbook_day03a の記事と同じく、Macではリンカのオプションに -z separate-code を追加します。
% ld.lld $LDFLAGS --entry=KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf -z separate-code main.o
続いて、ブートローダ $HOME/workspace/mikanos/MikanLoaderPkg/Main.c は、書き換える部分があります。(→@yamoridonさんの記事 参照)
typedef void EntryPointType(UINT64, UINT64);を
typedef void __attribute__((sysv_abi)) EntryPointType(UINT64, UINT64);に変更します。
変更したら、ビルドします。
% cd $HOME/edk2
% source edksetup.sh
% build
それでは、QEMUで実行してみます。(長いですがコマンドプロンプトの% を除いて1行です。)
% $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf

しま模様になりました!