第7回 IT初心者勉強会 アセンブラ大会に参加しました。色々なCPUのアセンブリ言語を比較していて、とても楽しかったです。
そこで使われていたクロスコンパイラをWindows用にビルドしたので配布します。MSYS用です。MSYSはgccを動かすのに特化しており、Cygwinより手軽です。インストール方法はこちらを参照してください。
ダウンロード
インストール
/usr/localに展開するだけで完了です。以下にPowerPCのインストール例を示します。他のアーキテクチャのインストール方法も同様です。
$ mkdir /usr/local $ tar xvJf gcc-4.6.1-msys-cross-powerpc-elf.tar.xz -C /usr/local
※ 既に/usr/localが存在する場合、mkdirは不要です。
使い方
配布バイナリにはlibcが含まれていないため、実行ファイルを出力する際には -nostdlib オプションを付けてください。出力ファイルを指定しないと a.out というファイル名で出力されます。
以下にPowerPCでの使用例を示します。他のアーキテクチャも同様です。
$ powerpc-elf-gcc -nostdlib hello.c $ file a.out a.out: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
ビルド手順
バイナリを使うだけなら必要ないのですが、参考までに配布物のビルド手順を書いておきます。
- 勉強会のサンプルではlibcを使っていないため、newlibは省略しています。
- gccのバージョンを4.6.1に上げました。
依存ライブラリ
まずgcc-4.6.1の依存ライブラリをビルドします。
- gmp-5.0.2.tar.bz2
$ tar xvjf gmp-5.0.2.tar.bz2 $ cd gmp-5.0.2 $ ./configure $ make $ make install
- mpfr-3.0.1.tar.xz
$ tar xvJf mpfr-3.0.1.tar.xz $ cd mpfr-3.0.1 $ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure $ make $ make install
- mpc-0.9.tar.gz
$ tar xvzf mpc-0.9.tar.gz $ cd mpc-0.9 $ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure $ make $ make install
binutils/gcc
binutilsとgccは各アーキテクチャでソースを共用するため、ソースの外でビルドします。このようにすれば、ソースの展開は1回で済みます。
$ tar xvjf binutils-2.21.1.tar.bz2 $ tar xvjf gcc-core-4.6.1.tar.bz2
以下にPowerPC用クロスコンパイラのビルド手順を示します。
$ mkdir powerpc-elf $ cd powerpc-elf $ mkdir binutils $ cd binutils $ ../../binutils-2.21.1/configure --target=powerpc-elf $ make $ make install $ cd .. $ mkdir gcc $ cd gcc $ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ../../gcc-4.6.1/configure --target=powerpc-elf $ CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make all-target-libgcc $ make install-gcc $ make install-target-libgcc
他のアーキテクチャはtargetを変えるだけで手順は同様です。ただしMSYSではMIPSのlibgccがメモリ不足でビルドできなかったため、配布バイナリにはNetBSDでビルドしたものを入れています。
アーカイブ
配布バイナリの作成では、make installを一時ディレクトリに対して行いアーカイブしています。
$ cd powerpc-elf/binutils $ make prefix=/opt install $ cd ../gcc $ make prefix=/opt install-gcc $ make prefix=/opt install-target-libgcc $ cd /opt $ find . -name "*.exe" | xargs strip $ tar cvJf gcc-4.6.1-msys-cross-powerpc-elf.tar.xz *
このようにして作成したバイナリを配布しています。