CVSスナップショットからのビルド(Xcode編)

(2007/04/30)

 前ページの手順に沿って、Xcode から LinuxSampler の CVS スナップショットをビルドできるようにしてみた。一般的な注意点は前ページと同様。

1. 準備

 libsndfile, libgig, linuxsampler を1つのディレクトリ(以下 $PROJDIR とする。例えば PROJDIR=$HOME/Development/LinuxSampler)の中に展開する。名前はそれぞれ libsndfile, libgig, linuxsampler としておく。必要ならシンボリックリンクを作る。

$ cd $PROJDIR
$ cvs -z3 -d:pserver:anonymous@cvs.linuxsampler.org:/var/cvs/linuxsampler co libgig
$ cvs -z3 -d:pserver:anonymous@cvs.linuxsampler.org:/var/cvs/linuxsampler co linuxsampler
$ curl -o libsndfile-1.0.17.tar.gz http://www.mega-nerd.com/libsndfile/libsndfile-1.0.17.tar.gz
$ tar xvfz libsndfile-1.0.17.tar.gz
$ ln -sf libsndfile-1.0.17 libsndfile

 前ページで説明したように autoconf の準備をする。

$ curl -o pkg-config-0.21.tar.gz http://pkgconfig.freedesktop.org/releases/pkg-config-0.21.tar.gz
$ tar xvfz pkg-config-0.21.tar.gz
$ cd pkg-config-0.21 && ./configure && make && sudo make install
$ cd ..
$ sudo cp libgig/aclocal /usr/local/bin/
$ sudo chmod +x /usr/local/bin/aclocal
$ sudo ln -sf /usr/bin/glibtoolize /usr/local/bin/libtoolize

2. Xcode プロジェクト

 linuxsampler_xpj.tar.gz をダウンロードして展開する。中にある Xcode プロジェクトファイル (LinuxSampler.xcodeproj) とシェルスクリプト (make_wrapper.sh) を $PROJDIR に移す。

$ tar xvfz linuxsampler_xpj.tar.gz
$ mv linuxsampler_xpj/LinuxSampler.xcodeproj ./
$ mv linuxsampler_xpj/make_wrapper.sh ./

 ビルド時のディレクトリ構成は前ページとは少し異なり、次のようになる。

$PROJDIR/
    libgig/
    libsndfile -> libsndfile-1.0.17 
    libsndfile-1.0.17/
    linuxsampler/
    LinuxSampler.xcodeproj/
    make_wrapper.sh
    build/
        Deployment_ppc/  # インストール用ディレクトリ
            bin/
            include/
            lib/
            man/
            share/
        Deployment_i386/
            ...(Deployment_ppc と同様)
        Development/
            ...(Deployment_ppc と同様)
        LinuxSampler.build/
            Deployment_ppc/
                libgig.build/       # libgig のビルド用コピー
                libsndfile.build/   # libsndfile のビルド用コピー
                linuxsampler.build/ # linuxsampler のビルド用コピー
            Deployment_i386/
                ...(Deployment_ppc と同様)
            Development/
                ...(Deployment_ppc と同様)
            LinuxSampler.pbxindex/  # Xcode が使用

 build ディレクトリ以下は、Xcode でビルドする際に作成されるディレクトリである。Deployment_ppc, Deployment_i386, Development は Xcode プロジェクトの3つのビルドコンフィギュレーションの名前に対応する(次節参照)。

 なお、linuxsampler の configure.in の不具合を修正するパッチを作っておいた。configure.patch$PROJDIR ディレクトリ(linuxsampler ディレクトリではなく)に cd して、patch -p0 <configure.patch で修正する。

3. Xcode によるビルド

 LinuxSampler.xcodeproj を開く。"Groups & Files" カラムの "Targets" の中に3つのターゲットがある:libsndfile, libgig, linuxsamplerlibgiglibsndfile に依存し、linuxsamplerlibgig に依存している。また、"Groups & Files" カラム一番上の "LinuxSampler" の info を開くとわかるように、3つのビルドコンフィギュレーション Development, Deployment_ppc, Deployment_i386 がある。

 ビルドの処理内容は、シェルスクリプト make_wrapper.sh に記述されている。

 Xcode の Build > Build Results を選んで、ビルドウィンドウを開く。Active Target を linuxsampler、Active Build Configuration を Deployment_ppc とし、ビルドする。依存関係に従って、libsndfile, libgig, linuxsampler が順にビルドされる。すべて終了すると、$PROJDIR/build/Deployment_ppc/binlinuxsampler ができているはず。

 なお、ADC に Xcode を使って configure ベースのソフトウェアの Universal Binary を作るチュートリアルがある:Building an Open Source Universal Binary。シェルスクリプトベースのターゲットを使っている点では同じだが、このチュートリアルでは PPC 版と i386 版に別々のターゲットを作っている。これでももちろん構わないのだが、PPC 版と i386 版は「コンパイルオプションが違うだけ」で同じものとも言える。また、今回はライブラリ2つと目的プログラム1つを順にビルドする必要があり、これは別々のターゲットにするのが妥当である。そういうわけで、アーキテクチャはビルドコンフィギュレーションの方で区別した。

4. Universal Binary の作成

 ちょっと今回は手抜きで、Universal Binary は手動で作成する。

$ mkdir -p $PROJDIR/build/Deployment_UB
$ cd $PROJDIR/build/Deployment_ppc
$ for i in bin/* lib/*.a; do
> lipo -create $i ../Deployment_i386/$i -output ../Deployment_UB/$i
> done