FreeBSDでpgccを使う

初出:2005/04/09
更新:2005/04/10

まえがき

 FreeBSDではソフトをコンパイルするのにgccを使うが、このgccをIntel Pentiumに最適化させたコンパイラが「pgcc」である。話によれば、pgccでコンパイルすると数パーセントから数十パーセントのパフォーマンスアップが期待できるとのことだ。

 残念なことに、pgccはPortsで提供されていない。そのため、自力でインストールする必要がある。以下にその方法を紹介する。なお、OSの対象はFreeBSD4とする。

<参考サイト>
GCC Home Page
gccの公式サイト(英語)
AMATERAS SPACE
pgccのパッチを配布している
Installing GCC
gccのインストール方法を解説している(公式サイト英語)
ひらちゃんのインストールメモ
pgccのインストール方法を解説している
PentiumGCC FAQ
pgccのFAQ日本語訳
diff/patch Tips
パッチ当てに必要なpatchコマンドの解説

pgccのインストール方法

<手順>

※注意:コンパイル作業をするためには、ディスクに十分な空き容量が必要なため、余裕のあるスライス内で行うべし。

  1. gcc-2.95.3の準備

  2. wget ftp://ftp.iij.ad.jp/pub/gcc/releases/gcc-2.95.3/gcc-2.95.3.tar.gz
    tar zxvf gcc-2.95.3.tar.gz
    cd gcc-2.95.3
  3. pgccパッチの準備

  4. ※カレントディレクトリは「gcc-2.95.3」
    wget http://www.jaist.ac.jp/~amatsus/egcs/src/gcc-2.95.3-pgcc-2.95.3-u4x.diff.bz2
    bunzip2 gcc-2.95.3-pgcc-2.95.3-u4x.diff.bz2
  5. pgccパッチの適用

  6. ※カレントディレクトリは「gcc-2.95.3」
    patch -p1 -E < gcc-2.95.3-pgcc-2.95.3-u4x.diff

    パッチ適用が完了すると以下のようなメッセージが表示される。
    (略)
    Hmm...  The next patch looks like a unified diff to me...
    The text leading up to this was:
    --------------------------
    |diff -urN gcc-2.95.3-old/libiberty/cplus-dem.c gcc-2.95.3/libiberty/cplus-dem.c
    |--- gcc-2.95.3-old/libiberty/cplus-dem.c       Sun May 16 20:44:09 1999
    |+++ gcc-2.95.3/libiberty/cplus-dem.c   Fri Apr 13 15:08:36 2001
    --------------------------
    Patching file libiberty/cplus-dem.c using Plan A...
    Hunk #1 succeeded at 4451.
    done

  7. インストールの準備

  8. ※カレントディレクトリは「gcc-2.95.3」
    mkdir objdir
    cd objdir
    mkdir /usr/local/bin/pgcc
  9. configure作業

  10. ※カレントディレクトリは「objdir」
    ※/configureの前に付けるドットは2つ
    ../configure --bindir=/usr/local/bin/pgcc
  11. make作業

  12. make bootstrap
  13. インストール作業

  14. make install
  15. これでpgccのバイナリが「/usr/local/bin/pgcc」内に作成された。念のためバージョンを確認する。

  16. /usr/local/bin/pgcc/gcc -v

    Reading specs from /usr/local/lib/gcc-lib/i386-unknown-freebsdelf/pgcc-2.95.3/specs
    gcc version pgcc-2.95.3 20010315 (release)
    

  17. コンパイラをccで指定されたときのために、gccのシンボリックリンクを作成しておく。

  18. ※必須作業。忘れないように。
    ln -s /usr/local/bin/pgcc/gcc /usr/local/bin/pgcc/cc

pgccをシームレスに使えるようにする

 このままでは「/usr/local/bin/pgcc/gcc」と指定しないとpgccを使ってコンパイルすることができない。単に「gcc」と指定したらpgccが使われるように設定を変える必要がある。

 その方法は、シェルの設定ファイルを書き換えて「/usr/local/bin/pgcc」へパスを通す。この際気をつけるのが、オリジナルのgccは「/usr/bin」にあるため、それより前に記述することだ。
 シェルの設定ファイルは各ユーザーのホームディレクトリにあるのでそれを開いて書き換える。cshの場合は「.cshrc」だ。

<手順>

  1. 「~/.cshrc」を開く。

  2. パスを書き換える。

  3. .cshrcの例
    set path = (/sbin /bin /usr/sbin /usr/local/bin/pgcc /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

  4. 保存する。

  5. パスの設定を反映させる。

  6. source ~/.cshrc
  7. 念のためrehashする。

  8. rehash
  9. パスが通ったか確認する。

  10. gcc -v
    cc -v

 ユーザーごとではなく、全ユーザーにパスの変更を適用したい場合は、「/etc/csh.cshrc」に記述する。

pgccの最適化を有効にする

 インストールしてパスも通してやっと使えるまでになったが、これだけではpgccの真価を発揮できないかもしれない。通常のgccには最適化オプションとして-O1〜-O3までの3段階あるが、pgccでは-O6まであるのだ。さらにCPUの種類も適切に指定する必要がある。そのための設定を行う。

<手順>

  1. 「/etc/make.conf」を開く。

  2. 最適化オプションとCPUの種類を指定する。

  3. CPUTYPEのところは、Pentium2以降ならば「i686」、単なるPentiumは「i585」にする。
    CFLAGSには最適化オプションとして最高の「-O6」を指定する。

    CPUTYPE=i686
    CFLAGS=-O6 -pipe

  4. 保存する。

pgccでのコンパイルを試してみる

 さっそくPortsから何かインストールしてみてほしい。pgccが使われてmakeされたことを確認しよう。
 作成されたバイナリをviなどのテキストエディタで開き、「pgcc」で検索すると、

^@^@GCC: (GNU) c 2.95.4 20020320 [FreeBSD]^@^@GCC: (GNU) pgcc-2.95.3 20010315 (release)

のような文字列が出てくるはずだ。これでOK。出てこなければ、gccとccにパスがきちんと通ってない可能性が高い。

 ※MySQL4.0とLinuxThreadsの組み合わせでmakeしてみたが、configureでエラーになってしまった。LinuxThreadsはpgccでのmakeに合わないようだ。そのためLinuxThreadsは通常のgccでmakeした。
 また、MySQL4.0はpgccでmakeできるが、最適化オプションを-03まで下げないとmake途中でエラーになった。

戻る


Copyright © 2005 H'Imagine.
All rights reserved.