見出し画像

27 Universal binary package

前回の話題でApple Silicon の上でVintageWine電子カルテが動いたというお話をしました。今回はユーザにお届けするパッケージをUniversal binary (Fat binary), すなわち Intel x-86とArm64のどちらでもインストール出来るパッケージを作ったというお話です。

この話に入る前に、Big Surの話をちょっとしましょう。WWDC 2020でBig SurはmacOSでの最大の変革だという話がよく出てきましたあが、macOSのアイコンのデザインが変わったり、サイドバーの間隔が広がったり、よりiPadOSに近づいた感じはしましたが、それがそれほど大きなものにも感じられないでいました。例年私はこの時期は結構大変で、次のバージョンに向かっての準備で自分のメインのマシンを早々に新しいプレリリースにします。そうすると色々動かない物が出てきたりで、診療しながらのマシンなので問題が起きる事もあります。しかし今回は今まで比べるとかなり安定しているのです。Big Surがダウンロード出来るようになってから、今日で2週間が経過しましたが、まだ、アップデートが出ません。それも焦ってAppleも修正バージョンを出さなくて良いほど準備をしていたのでしょう。Intel側と違ってApple Silicon側は全てのコマンド類がUniversal Binaryになっていて、Arm版を動かすまでにかなり大変な準備も必要だったように思います。そこまでやってきた時間の長さなど、Appleにとっては最大の変革だったのかもしれません。

iMac Pro (2017) で Universal Binaryを作る

新しいXcode 12ですが、今のところ Xcode 12 beta と Xcode 12 for macOS Universal Apps beta の二つのパッケージが提供されています。後者の方がUniversal Appsを作れるXcodeなので一段落したところでそのパッケージを使いVintageWineのUniversal Packageを作ることにしました。まずは、前回お話ししたLAN上にあるPostgreSQLサーバと接続するlibpq.aライブラリのUniversal化です。makefileをハックしてtargetをfat化する情報を追加すれば良いのでしょうが、その勉強はちょっと大変、まだ先人方が、その方法をネットに上げてくれていませんので。そこで、Apple Siliconでコンパイルしたlibpq.aとIntelでコンパイルしたlibpq.aのバイナリをlipoコマンドでfat化出来るのを思い出しました。このコマンドはNeXT時代からあったもののようで、NeXTではモトローラからインテルへの移行の時に使い、14年前はmacでパワーPCからインテルへの移行の時も使ったものでした。このようにして作った Universal (Fat) binaryをXcodeのプロジェクトに組み込みリリースパッケージの必要な場所にパッケージ作成の時にコピーするように段取りをしました。これにまつわる作業は、悩むものもいくつかありましたが、一つ一つ解決。メインのプログラムですが、Xcodeのユニバーサル用はdebug modeでは基本的にはホストのCPUのタイプにのみ対応したオブジェクトを吐き、実行できますが、デバッグが終わりreleaseバージョンとしてコンパイルする時はUniversal Binaryを作成してくれます。このようにしてできたファイル達をpackagebuildコマンドに色々なパラメータを与えてパッケージを作成して出来上がりです。パッケージのサイズは20%弱大きくなりますが許せる範囲でした。

この作業がiMac Proの上でも出来るのが嬉しいところです、まあ、今までもiPhoneアプリなど、Arm64のバイナリを作っていたのですから全く新しい事しているわけでは無いですからね。

プログラムの作成は画像の編集とは違い、速さはCPUのマルチスレッドの数で決まりGPUはコンパイルには使われません。iMac Pro、私のマシンは18コアで、1コアあたり二つのスレッドが動きますので、36スレッドが全開でプログラムのファイルをコンパイルしてくれています。Armのアーキテクチャに期待するのは、一部64コアなどというCPUも出てきているとのことなので、2年後くらいにそのような兆しのあるCPUをのせた、iMac Proなり Mac Proが出てきて欲しいですね。自分の頭のCPUはどんどんコアが崩れ落ちている感じですから、せめてコンパイル、テストがさっと終わる、マルチコア Apple Sliconの恩恵に預かりたいおものです。

VintageWineはいつでもApple SiliconのコンピュータをAppleが販売してくれても良い準備は整いましたよ。タイトルの画像はlipoコマンドのdetailed_infoです。

この記事が気に入ったらサポートをしてみませんか?