0
Help us understand the problem. What are the problem?

posted at

MXEのレシピの作成メモ

前に書いた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/配下にパッケージがビルドされる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?