MXEのレシピの作成メモ

280
NO IMAGE

前に書いたMXEのメモの続き。

MXEが用意しているレシピ、ディストロが配布しているビルド済みパッケージだけだと足りなくなった時のために、自分でMXEのレシピを書いてみた。ざっくりとだが調べたことや書いた事のメモを書いておく。

準備

MXEのGitリポジトリをクローンしてくる。

git clone https://github.com/mxe/mxe.git
cd mxe

レシピのビルドに必要なパッケージは場合によりけりなので、必要なら都度インストールする事にする。(多分MXEにレシピにそこ含めて書く方法があると思うが、今回は割愛)

今回書いたレシピ

とりあえず簡単に書けそうだったのでLV2のレシピを書いてみた。

MXEのレシピは、src配下の.mkファイル群として存在しているので、今回の例ではsrc/lv2.mkを作成した。

PKG             := lv2
$(PKG)_WEBSITE  := http://lv2plug.in/
$(PKG)_IGNORE   :=
$(PKG)_VERSION  := 1.18.2
$(PKG)_CHECKSUM := 4e891fbc744c05855beb5dfa82e822b14917dd66e98f82b8230dbd1c7ab2e05e
$(PKG)_SUBDIR   := $(PKG)-$($(PKG)_VERSION)
$(PKG)_FILE     := $(PKG)-$($(PKG)_VERSION).tar.bz2
$(PKG)_URL      := $($PKG)_WEBSITE)/spec/$($(PKG)_FILE)
$(PKG)_DEPS     := gcc

define $(PKG)_UPDATE
    echo $($(PKG)_VERSION)
endef

define $(PKG)_BUILD
    cd '$(SOURCE_DIR)' && ./waf configure --prefix=$(PREFIX)/$(TARGET) && ./waf && ./waf install
endef

レシピの解説

レシピファイルは主に以下のセクションからなっているようだ。

  • パッケージ情報
  • アップデート確認
  • ビルド

パッケージ情報セクション

  • PKG: パッケージ名。make <パッケージ名>でレシピをビルドする。
  • $(PKG)_WEBSITE: パッケージのウェブサイト。
  • $(PKG)_IGNORE: 後述の$(PKG)_UPDATEで無視されるバージョンを列挙するらしい。
  • $(PKG)_VERSION: パッケージのバージョン
  • $(PKG)_CHECKSUM: パッケージのsha256チェックサム。
  • $(PKG)_SUBDIR: $(PKG)_URL内部(アーカイブ展開後の事?)のサブディレクトリらしい。
  • $(PKG)_FILE: ソースコードのアーカイブファイル名。
  • $(PKG)_URL: アーカイブファイルのURL。ビルド時にこのファイルがダウンロードされる。
  • $(PKG)_DEPS: 依存しているレシピ。

アップデート確認セクション

define $(PKG)_UPDATEendefの中に記述する。

上記のサンプルでは固定値を返しているが、他のレシピを見るとダウンロードページをスクレイピングしてパッケージバージョンを切り出し、アップデートがあるかどうかを確認しているようだ。

ビルドセクション

define $(PKG)_BUILDebdefの間にビルド手順を書いていく。いつものconfigureしてからmakeというレシピもあれば、もっと複雑なレシピもある。

ビルドセクションでは色々なマクロが使えるが、以下はその一例。

  • $(SOURCE_DIR): ソースコードの展開先。
  • $(PREFIX): usrディレクトリ。
  • $(TARGET): x86_64-w64-mingw32.sharedなどビルドのターゲット。

通常は$(PREFIX)/$(TARGET)がインストール先のディレクトリなので、上記の例ではスースコードの展開先に移動した後、waf configureでインストール先ディレクトリをprefixに指定し、ビルドとインストールをそのまま行っている。

ビルドとその結果

settings.mkでビルドのターゲットを指定できる。今回はWindows向けのクロスコンパイル環境が欲しいので、settings.mkに下記の記述を追加する。

MXE_TARGETS := x86_64-w64-mingw32.static x86_64-w64-mingw32.shared

後はmake lv2を実行すれば、usr/配下にパッケージがビルドされる。