UnixコマンドラインツールをApple Silicon向けにビルドする

主題
Unixコマンドラインツールを、Intel-based Macで、Apple Silicon向けにクロスコンパイルする方法について述べる。

背景
既に知られている通り、Appleは、Apple Siliconと呼ばれるチップを搭載したMacを発表した。開発者は、これに対応する必要に迫られている。筆者も、Unixコマンドラインツールを使ったアプリを作っているため、対応が必要だった。
本稿では、クロスコンパイルを知らなかった筆者が、Apple Silicon搭載Mac用のUnixコマンドラインツールを、Intel-based Macでコンパイルするまでを述べる。

手順

  1. 失敗例
    こちらの記事に、iPhone向けのクロスコンパイル手順が紹介されている。それによると、iPhoneの各機種(CPU)向けの実行ファイル(バイナリ)をまとめたものが作れるとあった。
    応用すれば、Apple Silicon用とIntel用の合体バイナリができると考えたが、やり方がまずかったのか、できなかった。

  2. 単純化
    件の記事の手順を参考にトライ&エラーした。最も単純なケース(Apple Silicon)のみをCFLAGSに与えたら、configureに怒られた。が、これは嬉しい怒られ方で、半分以上成功していた。クロスコンパイルをするなら、host名を指定しろと言われたからである。

    ./configure CFLAGS="-arch arm64"
  3. 成功
    host名を指定すると、クロスコンパイルであることを示す出力が得られた。

    ./configure CFLAGS="-arch arm64" --host=i386-apple-darwin20.1.0
    make
  4. 合体
    通常通りコンパイルしたIntel向けバイナリとの合体は、lipoコマンドを用いる。(以下はcdparanoiaの例)

    cd universal2/
    lipo -create ../arm64/cdparanoia \
    ../x86_64/cdparanoia \
    -output cdparanoia

参考サイト

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL