Pure Dataのexternalを作ってみた(Apple Silicon対応版バイナリを作る)

何年か前の夏休みにPure Dataのexternalオブジェクトを作るチュートリアル記事を書きました。以下の2篇です。

marui.hatenablog.com

marui.hatenablog.com

その当時はIntelチップ搭載のMacに向けて書きましたが、もう最近のmacOSは32 bitをサポートしていませんし、Apple Siliconマシンの方が多くなってきたのではないかと思います。

そこで、上記記事の前編に書いたビルド方法を以下のようにアップデートしました。もう32 bitサポートは切ってもいいのかもしれませんが、念のため、32 bitと64 bitのIntelチップ、64 bitのApple Siliconの3つに対応したバイナリが生成されるようになっています。Pdのバージョンも現時点で最新のPd-0.54-0にしました。主な変更は-arch arm64が追加されたところです。

% cc -I/Applications/Pd-0.54-0.app/Contents/Resources/src -fPIC -arch i386 -arch x86_64 -arch arm64 -c -o singen~.o singen~.c
% cc -dynamic -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -arch arm64 -o singen~.pd_darwin singen~.o

実行すると「もうサポートしていないi386用バイナリを作ろうとしている」という警告が表示されたりしますが、気にしないでOKです。本当に3アーキテクチャに対応したバイナリになっているかをfileコマンドで調べてみます。

% file singen~.pd_darwin 
singen~.pd_darwin: Mach-O universal binary with 3 architectures: [i386:Mach-O bundle i386] [x86_64:Mach-O 64-bit bundle x86_64] [arm64:Mach-O 64-bit bundle arm64]
singen~.pd_darwin (for architecture i386):      Mach-O bundle i386
singen~.pd_darwin (for architecture x86_64):    Mach-O 64-bit bundle x86_64
singen~.pd_darwin (for architecture arm64):     Mach-O 64-bit bundle arm64

ちゃんとバンドルできてますね!