PPCクロス gcc/binutilsの作り方

目次

  1. はじめに
  2. PPCクロスbinutilsのmake
  3. PPCクロスgccのmake
  4. CVSダウンロードについて
  5. その他
  6. 履歴

はじめに

私が実際にCygwin上でPPCクロスの gcc及びbinutils をmakeした手順メモです。
makeには大量のディスク資源を必要としますので、まずはディスクを空ける ところから始めてください(^^;

PPCクロスbinutilsのmake

binutilsとは、GNUソフトウェアの中の、アセンブラ(gas)、リンカ(gld)、その他、 実行ファイルの生成や解析をサポートするソフトウェア群です。

ftpサイトなどから拾ったアーカイブをmakeする方法は以下です。

  1. GNUサイトやUNIX系雑誌の付録CD-ROMなどからbinutils-2.xx.tar.gzを拾います。
    サイズが大きいので私はUNIX USERなどの付録CD-ROMを利用する場合が多かった のですが、UUが無くなってしまったので、最近は専らCVSダウンロードを使用して います。

  2. Cygwin上で tar xvfz binutils-2.xx.tar.gz としてアーカイブを展開し、展開 されたディレクトリ binutils-2.xx の下に移動します。

  3. ./configure --target=powerpc-powerx-elf --prefix=/usr/local/powerx を実行します。 ほどなくするとMakefile が生成されます。make install時には、 --prefixで指定したディレクトリ下にインストールされます。

  4. make を実行します。終了すると以下の様な実行ファイル群ができあがります。
    binutils/addr2line.exe  binutils/objdump.exe  binutils/strip-new.exe
    binutils/ar.exe         binutils/ranlib.exe   gas/as-new.exe
    binutils/cxxfilt.exe    binutils/readelf.exe  ld/ld-new.exe
    binutils/nm-new.exe     binutils/size.exe
    binutils/objcopy.exe    binutils/strings.exe
    

    ※バージョンによってmakeされるバイナリが異なるようです。

  5. make installを実行します。終了すると、/usr/local/powerx/下に 実行ファイル他、ライブラリやヘッダファイルなどがインストールされます。 実行ファイル名の手前にはpowerpc-powerx-elf-が付いています。これは 恐らくデフォルトprefixである/usr/localにインストールした場合に既存 のネイディブツール群とぶつからないようにする為の措置だと思われます。

RedhatのサイトからCVSダウンロードする 方法は以下です。

  1. cvsコマンドが使える事を確認してください(^^; Cygwinを使用する場合、 インストーラを使用して、特に何もしなければcvsはインストールされます。 Linuxなどでも最近はパッケージインストールされる様です。

  2. サーバにログインし、ソースのcheckoutを実行します。この辺のやりかたについ ては、こちらに書かれて いますので、何かわからなくなったら見ていただくということで。とりあえず、 適当にディレクトリを作成してその下に移動し、

    #!/bin/sh
    cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login
    #passwd : anoncvs
    cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co binutils
    

    という感じでコマンドを実行すると、ダウンロード(checkout)が開始されます。

    Cygwinで実行すると途中でダイアルアップ接続が切れてしまう場合があります。 これはWindowsの仕様だと思われるのですが、DOS窓経由でダイレクトにftp実行 した場合にもこのような現象が起こります。ダイアルアップ接続を時間で切れない ように設定するか、checkout中にIEなどでWebクルーズをして適当な間隔で HTTPなパケットを流してやれば切れないようです。

  3. configureの実行以降は、アーカイブをmakeする場合と同じです。

PPCクロスgccのmake

gccは、GNUソフトウェアの中の、Cコンパイラ、C++コンパイラ、その他言語のコンパイラ を含むコンパイラソフトウェア群です。この中には、コンパイラ本体しか含んでいません ので、アセンブラ、リンカなどはbinutilsのものを使用したり、OS付属のもの使用したり します。

ftpサイトなどから拾ったアーカイブをmakeする方法は以下です。

  1. PPCクロスbinutilsのmakeでインストールした実行ファイル群の置かれたディレクトリ にパスを通します。通さないとconfigureでいくつかエラーするようです。
    ※後にconfigureの実行方法を示しますが、何故か--prefixを指定してもそこから ツールを見つけてくれないので必要なようです。

  2. 最寄のサイトよりnewlib-1.x.xをダウンロードし、 適当なディレクトリにヘッダファイルが一式入ったディレクトリである所の newlib-1.x.x/newlib/libc/include を展開します。 make時にクロスコンパイラが使用する標準ライブラリヘッダとして参照されます。
    ※以下/usr/local/powerx/newlib/include に置いたとして話を進めます。

  3. GNUサイトやUNIX系雑誌の付録CD-ROMなどからgcc-2.95.2.tar.gzや gcc-3.0.3.tar.gzなどを拾います。

  4. Cygwin上で tar xvfz gcc-2.95.2.tar.gz としてアーカイブを展開し、展開 されたディレクトリ gcc-2.95.2 の下に移動します。

  5. ./configure --target=powerpc-powerx-elf --enable-languages=c --prefix=/usr/local/powerx --with-headers=/usr/local/powerx/newlib/include/ を実行します。ほどなくするとMakefileが生成されます。--enable-languagesで、C コンパイラのみビルドするように指定しています。指定を行わなければ、サポート している全言語のコンパイラをビルドしますが、バージョンなどによってビルドに 失敗するものもあるようです。また、--with-headers=で指定するヘッダパスの 最後の'/'は必須ですので注意して下さい。

  6. make を実行します。makeにはかなり時間がかかります(^^;

  7. make installを実行します。実行ファイルおよびライブラリ群は--prefixで指定   したパスにインストールされます。

以上の方法でコンパイラをインストールすると、アセンブラやリンカは /usr/local/powerx/powerpc-powerx-elf/bin/ より探すようになります。 もし実行ファイルをサーチするパスを追加したい場合は、
powerpc-powerx-elf-gcc -B../../ppcbin/ -c foo.c

の様に指定する事で指定したパス内の実行ファイルをサーチするようになります。
-Bコマンドで指定するディレクトリパスの最後は必ず'/'を入れるようにしてくだ さい。これが抜けると 「../../ppcbinld」が見つからない という、いかにもといった感じエラーが出て ずっこけます(^^;

gcc.gnu.orgからCVSダウンロードする 方法は以下です。

  1. cvsコマンドが使用できる事を確認してください(^^;;

  2. サーバにログインし、ソースをcheckoutします。この辺はbinutilsの時と ほぼ同じです。詳細については、 gcc.gnu.orgのページの 「CVS read access」に書かれていますので、何かわからなくなったら見て いただくということで。とりあえず適当にディレクトリを作成して その下に移動し、

    #!/bin/sh
    cvs -z 9 -d :pserver:anoncvs@gcc.gnu.org:/cvs/gcc login
    #{enter "anoncvs" as the password}
    cvs -z 9 -d :pserver:anoncvs@gcc.gnu.org:/cvs/gcc co -rgcc-3_0-branch gcc
    

    という感じでコマンドを実行すると、ダウンロードが開始されます。 この例では3.0-branchをcheckoutしています。他のものをcheckout したい場合は -r の後ろに指定すれば良いみたいです。
    単に co gcc だけなら最新のものがcheckoutできます (2002.4.17現在で「3.2 20020417 (experimental))。

  3. configureの実行以降は、アーカイブをmakeする場合と同じです。

gcc-2.95.xとgcc-3.x.xとでは、va_マクロの処理方法が異なっているため、 実際にコンパイラを使用する際にインストールする必要のあるヘッダファイルも 異なります。この辺の違いを把握した上で、ライブラリのヘッダを使い分ける 必要がある点に注意して下さい。
特に断りが無い限り、本へっぽこページのppcクロスgccは、ヘッダがひとつに まとまっていてなんとなく気分の良い3.x.xを使用しているものとして 読んでもらって構いません。

CVSダウンロードについて

CVSのダウンロードの場合、最新版が得られる代わりに、バグの潜んでいる可能性も 高いということが言えます。ただ、そのバグも直ぐに修正されれば反映されたものを checkoutできるということを考えると、結果的にCVSでソースをゲットする方が、 良いように思います。因みに、binutils-2.10でconfigureがこける現象は最新版では 修正されているようです。
また、変更のあるソースだけが転送されるため、二度目以降のcheckoutは最初のそれ よりもずっと短い時間で終了します。 当然、変更の無かった場合は何も転送されません(^^)。

その他

Interface誌(CQ出版)2002年3月号別冊付録「組み込みLinux活用技法入門」を 大いに参考にさせていただきました。「昨日の事は大昔」の世界なので、 適当にやってるとすぐに追従できなくなりそうだったのが心配でしたが、 これでしばらくは安心かも(^^; この説明通りに実行したがうまくいかないという場合は、自力で解決 して下さい(^^; 説明で足りない点を教えていただけると幸いですm(_'_)m

これとは別にクロス環境からのネイティブ実行ファイルのmake方法を知りたがっています。 よさげな資料(日本語希望(^^;)をご存じの方は御一報いただけると幸いですm(_'_)m

履歴

    2000.05.xx : 初版
    2000.08.20 : binutilsのバージョンを2.10ベースにした。2.10より前のバージョンでは、
                 .bssセクションが重なってリンクされる場合があり、正しく動作しない
                 実行ファイルが生成される事がありましたので、2.10以降のバージョンに
                 移行するのが吉だと思われます。
    2001.03.26 : CVSインターフェースのダウンロード方法を追加した。
                 少しgccの使用方法を正式な作法に近づけた。単に追従してパッチを作成
                 するのが面倒になったというのは秘密(笑)
    2001.03.27 : しょーもない誤記を修正。他気づいた点を変更。
    2001.03.31 : gccの最新バージョンのcvs checkout方法を追記。
    2002.04.21 : ビルドの方法を更新。prefixを使用する技とmake installを行う技を使用する
                 様に変更した。


TOP PREV