【コラム】

OS X ハッキング!

89 configure、何するものぞ

    海上忍  [2004/04/26]

    新製品ではないのだが、つい先日M-AUDIOのUSBオーディオ「sonica」を購入した。そこにオーディオテクニカの「ATH-A500」というヘッドホンを繋いで利用しているのだが、解像度が高いというかダイナミックレンジが広いというか、G4 Cubeに同梱されていたApple Pro Speakerのヘッドホン端子とは大違い。もっと早く買っておけばよかった……。

    さて、今回は「configure」について。当コラムでも、アプリケーションのインストール手順を紹介するときに必ずと言っていいほど登場するスクリプトだが、具体的に説明をしないまま今日に至ってしまった。その反省の意味も込めて、高性能なMP3エンコーダとして著名な「LAME」を例に、その役割と少し高度な利用方法について説明してみよう。

    ソースをコンパイルするときのお約束

    ご存知のとおり、UNIX系OSを対象としたアプリケーションは「ソース」の形式で配布されることが一般的だ。通常、ソースは多数のファイルによって構成されるため、リンクさせるべきライブラリなどコンパイルに必要な情報は「Makefile」というファイルに記述しておき、コンパイル時に支援ツールの「make」に参照させるようにする。ソースが"料理の素材"だとすれば、gccやmakeなどのツールは"包丁やフライパン"、Makefileは"レシピ"にたとえられるだろう。

    しかし、大規模なプログラムともなると、内部にライブラリなど複数の(ある程度独立した)プログラムを抱えることが多く、それに応じて必要なMakefileが増える。将来のバージョンアップを考えると、それぞれのOS専用のMakefileを用意するわけにも行かないため、GNU autoconfやGNU automakeといったユーティリティを利用し、Makefileを自動作成するためのツールをソースコードに添付することがお約束となっている。

    そのツールが「configure」なのだ。configureを実行することにより、使用されるべきコンパイラ、コンパイラに与えるオプション、リンクすべきライブラリ……その他諸々の情報が自動的に収集され、環境に応じたMakefileが作成される。先ほどの比喩に従えば、"レシピ自動生成装置"とでも言えるだろうか。

    configureの使い方

    configureの実行時には「./」を先頭に付けるが、これはカレントディレクトリにある(実行形式の)ファイルを実行するためのもの。configureの1行目には必ず「#! /bin/sh」という文字列が記載されているため、これでシェルスクリプトとして機能する仕組みだ。「sh configure」としても同じだが、「./」のほうがスマートだろう。

    configureが作成されるときには、開発者が用意した"レシピの設計書"に相当するファイル(Makefile.in、configure.in)に従い、多数のオプションが設定される。オプションの数や種類はアプリケーションによって異なるうえ、書式に厳格な定めはないが、ある機能を有効にするときは「--with-**」または「--enable-**」を、無効にするときは「--without-**」または「--disable-**」を接頭語に使うことが一般的だ。どのようなオプションが用意されているかは、以下のように「--help」を指定すれば確認できる。

    $ ./configure --help

    LAMEをチューンアップ

    「--with-**」や「--without-**」以外にも、configureはシェル変数や環境変数の値を参照してMakefileに反映する。たとえば、Cコンパイラであるgccは「CFLAGS」という変数を参照するが、configureの実行時に「CFLAGS=-O3」などとしてオプションを指定すれば、最適化の度合いを調整できるのだ。一般的には適度な最適化を行う「-O2」がデフォルトの設定として用いられるが、場合によっては「-O3」にするとバイナリの処理速度がアップすることもあるため、少しでも速度を稼ぎたいときには有効な手法と言える。

    それでは、MP3エンコーダの「LAME」を例にその手順を説明してみよう。LAME v3.96の場合、オプションを付けずにconfigureを実行すると、OS Xデフォルトの設定(CFLAGS = -O3 -ffast-math -funroll-loops -Wall -fno-common)が適用されるが、以下の要領でOS X版gcc 3.3独自のオプション「-fast」を指定すると、「-O3」を超える最適化が行われる(共有ライブラリを作成するときには「-fPIC」を指定する必要あり)。実際、エンコード速度にも効果が現れているようなので、これからLAMEを導入するときにはお試しいただきたい。

    $ CFLAGS="-mcpu=7450 -fast -fPIC" ./configure

    最適化オプション別のLAME v3.96のエンコード速度

    最適化オプション意味時間Play/CPU
    -O0最適化なし191秒1.6032x
    -O2適度な最適化69秒4.5155x
    なし(-O3)標準の設定67秒4.6582x
    -mcpu=7450 -fast -fPICMac OS X独自の最適化63秒4.9416x
    注 Mac OS X 10.3.3/PowerPC G4 1.2GHz/RAM 640MBの環境で、再生時間約5分のAIFFファイルをソースとして利用した。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン