複天一流:どんな手を使ってでも問題解決を図るブログ

宮本武蔵の五輪書の教えに従い、どんな手を使ってでも問題解決を図るブログです(特に、科学、数学、工学の問題についてですが)

Nanosaur(ゲーム)のソースコードをコンパイルする

PowerMacとNanosaur2

Hackintoshの野望のおかげで、いろいろなことが勉強できている。Intel-macが消滅した今の状況と、その昔power-macが消滅したときとを比較していて思い出したのが、とある古いゲームである。これについて、新たな動きがあったことが今回わかったのだ。

PowerMacが全盛の頃、無料のゲームがOSX(今のmacOS)にいくつか付属していた。ヘリコプターをつかった「Chopper」というゲーム、そして恐竜の3Dゲーム「Nanosaur2」である。どちらも最終面をクリアして遊び尽くしたが、Intel-macにはどちらもバンドルされなかった。続編を期待していたので非常にがっかりした記憶がある。「Nanosaur2」というタイトルから明らかなように、このゲームには前編があるのは確実である。当時、期待して調べてみたら、それはもっともっと古いMac OS 9のゲームであったことがわかった。

そもそもOS 9の失敗こそが、一度は追い出した創業者のSteve JobsAppleへ連れ戻すきっかけとなったわけであり、OS9といえば「失敗作」の代表のようなものである、また当時の私にはとても高価だったので手も足も出なかった。そんな事情があって、OS9macintoshはもっていなかった(いまでももってない)。だから、Nanosaurで遊ぶのは夢のまた夢という状況が続いていた。

ところが、今回Intel-macの消滅とPower-macの消滅を比較するために、いろいろ調べていたら、あのNanosaurがフリーウェアとなって復活しているという情報が入ってきたのである。しかも、作者本人がgithubソースコードを公開し、コンパイルすればIntel-macで遊べるように改良されているという!

Nanosaur2もPowerPCからIntel CPUに改良されたソースコードが公開されているという。これはやってみない手はない。ということで、手始めにNanosaurのコンパイルに挑戦してみることにした。

Nanosaur for macOS

このゲームはPangea softwareのリリースであり、そのHPからNanosaurについての情報を得ることができる。 https://www.pangeasoft.net/nano/index.html

ソースコードに付属のドキュメントファイルより

バイナリファイルもダウンロードできるが、今回はソースコードからのビルドが目的である。まず、Nanosaurの作者であるJorio氏のgithubページからソースコードをダウンドーロドする。githubの使い方もようやく慣れてきたこともあり、httpを介してzipを持ってくるのではなく、gitでファイル転送してみた。githubにあるbuildme.mdを読むと、

git clone --recurse-submodules https://github.com/jorio/Nanosaur
cd Nanosaur
python3 build.py

で全てやってくれるはずである。コンパイルの作業は「途中まで」順調であった。しかし、最後にエラーが出て止まってしまった。Xcode12+が必要だというのだ。

現在のXcodeの最新バージョンは15である。しかし、私が持っているマシンはYosemite->Mojaveなので、Xcode 11までしか動かない。一応、私もApple Developerに登録してあるので、古いバージョンをダウンロードすることは可能である。ところが、サイト内をうろついてみてもなかなかそれらしきダウンロードページを見つけることができなかい。仕方ないので、Xcode15をダウンロードしている最中に「中断ボタン」を押し、URLに含まれる15を12に変更してリロードしてみた。するとまんまとXcode12.xipがダウンロードできた。

具体的には、Apple developerのアカウントにログインした後に、最新のXcode

https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_15.2/Xcode_15.2.xip

からダウンロードできるが、これを

https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_12/Xcode_12.xip

とやるのである!

クリックすると展開が始まるが、Mojaveで開くと件の「進入禁止マーク」が出て動かせない。Catalinaマシンにコピーして展開しようと思ったが、よくよく確認するとCatalinaにはすでにXcode12がインストールしてあった(笑)。xipは展開にも時間がかかるので、上書きはやめて素直にプレインストールされているXcode12を利用することにした。

Nanosaurをソースコードからビルドする際には、SDL2というライブラリも必要になる。これはNanosaurのbuild.mdに説明があるので、その指示通りにダウンロードし、ソースコードの中にあるexternというフォルダーにコピーすれば良い。

Mojaveではコンパイルの部分に関しては成功していたので、Catalinaでも簡単にコンパイルは終わると思っていた。ところが思いもしないエラーがでた。cmakeがC/C++コンパイラーを見つけられない、というのである。

Mojaveではcmakeはキチンと動き、コンパイルは最終段階まで進んだ。最後のところでXcodeのバージョンが合わないから、という理由で失敗した。ところがCatalinaではそこに至る前にエラーが出てしまっている。一体全体なにが起きているのであろうか?

cmake?

cmakeというコマンドは初めて見た。調べてみるとC++ソースコードを扱う際の「便利ツール」といったところのようである。コードの開発者には必須のツールらしく、とくにmacOSのアプリを開発するときにはよく利用されるようだ。とはいえ、使ったことのない私にとっては、CとC++のコンパイラーが設定されてない、という状況はどうやって改善するのか、まったくの五里霧中である。

たとえば、Nanosaurのコンパイルで必要な次のコマンドを叩くとエラーが出てしまう。

$ cmake -G Xcode -S . -B build

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CmakeLists.txt:24 (project):
   No CMAKE_C_COMPILER could be found.
CMake Error at CmakeLists.txt:24 (project):
   No CMAKE_CXX_COMPILER could be found.

-- Configureing incomplete, errors occurred!

こんな感じである。

ググってみると、どうやらXcodeの設定が未完成なのが原因らしい。確かに、CatalinaではあまりXcodeはいじってない(MojaveではChromiumをソースコンパイルしたことがある)。この問題は、次のコマンドで解決できた。

$ sudo xcode-select --reset

詳しい意味はわからないが、私の今の目的はNanosaurのコンパイルである。アプリができればそれでいいのである。

こうして、Nanosaurを含むdmgファイルが生成され、見事にNanosaurがCatalinaで動くようになったのである。出来上がったバイナリはMojaveにコピーしてもちゃんと動く!

ソースコードパッケージに含まれていたメインキャラクターの画像データ

古いゲームが動いて楽しい、というのもあるが、このソースコードを分析すれば、macOSでゲームをどのようにプログラムすればよいかを学ぶための、良いお手本になる!少しずつ勉強していこう。cmakeの意味もいずれはわかるようになるだろう。

Nanosaur2のコンパイル

こちらも同じようにやればコンパイルできるはずであるが、現在gitのところでエラーが出てしまって止まっている。たぶん、ソースの提供部分にあるバグではないかと思うのだが、まだはっきりはわからない。git cloneでソースをダウンロードしているのだが、最後に「RPCが失敗した」といって死んでいる。

error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
fatal: the remote end hung up unexpectedly
fatal: early EOF
....

こんな具合である。通信エラーだろうか?