シェル環境とソース展開
ホームディレクトリ
MSYSのシェルを起動すると、/home/(現在のユーザ) が作られます。日本語ユーザ名とかダメってことね。通るかもしれないけど、パス指定が面倒だし、変な挙動になっても困る。
MSYSの環境変数
基本的にWindowsのcmd.exeを引き継いでます。%ComSpec%変えてたらしらん。
いくつかは上書きされます。
HOMEが上記の/home下のディレクトリに。
PATHがWinの\を/に、ドライブ名C:が/cに、パス区切り;が:に置き換わり、さらにPATHの先頭に.:/usr/local/bin:/binが追加。カレント入れちゃうのね…
なおWinで環境変数名がPathでもPATHになるです。
主なのはこれくらい。変えたければ/etc/profileをいじるべし。.profileが機能するかは知らない。シングルユーザでしか使わないしね。
ビルド用のフォルダ
gccやbinutilsのビルドをするわけですが、あらかじめソース置き場とビルド場所を決めておきます。
なんでかっていうと。
gccやbinutilsはソースとは別のツリーでビルドするのが推奨されています。しかも今回クロスコンパイラとネイティブコンパイラの二種類ビルドするので、
「あっネイティブやるのにクロスのオブジェクトをリンクしちゃった!」「configureぶっこいたらソースディレクトリでございました」
などのミスを避けるため、ちゃんと分けておこうという腹。
オブジェクト残しておけば、バージョン変わったときのリビルドが早く済むしね。サイズでかいから残しておくか微妙だけど…
/etc/fstabに以下を追加。
C:\gccbuild /home/ユーザ名/gccbuild
/home/ユーザ名/gccbuild/
src/ ソース
bldXC/ クロスコンパイラビルド
bld64/ ネイティブコンパイラビルド
凝ってもしかたないのでこれでいこうかと。
msysから外しているのは、後でmsysインストール場所を変えるかもしれないためです。いまデフォルトですが、深すぎるし、階層ループしてるしでろくな状態じゃないので。
ソース展開
ソースアーカイブを落としてきて展開、${HOME}/gccbuild/src に置くわけですが、次のようなツリーにします。
gccbuild/src/ gcc46x/ gmp/ mpfr/ mpc/ binutils-2.xx.xx/
gcc46xはgccのリポジトリからチェックアウトしたものですが、その下にgmp, mpfr, mpcのソースをこのディレクトリ名で置きます。するとgccをビルドするときに、ここにあるものを使ってくれます。
gmp-5.0.0みたいにバージョンつけたらダメ。LinuxやCygwinならシンボリックリンクにするところなんですが、MSYSはシンボリックリンクが使えません。
MSYSでln -sとやると問答無用でcp -rになります。つまりコピー。
容量食うのでコピーせず、移動して置くことにします。
Binutils
リリース物は年1回くらい?よくわかりません。
自分は ftp://sourceware.org/pub/binutils/snapshots から落としてます。
バージョンがあやふやなのはイヤなので、binutils-2.21.51.tar.bz2を使いますが、binutils.tar.bz2を落とせば常に同じURLで最新が取れるです。
md5.sumも落としましょう。
当然ですが頻繁に落として人に迷惑かけないように注意。
gccbuild/src/に置いたら、ちゃんと落とせたかチェックして、tarで展開します。
md5sum -c md5.sum 2>&1 | grep OK tar jxvf binutils*.tar.bz2
gccbuild/src/binutils-2.21.51/ ができてその下にソースが展開されて終わり。
gcc
Subversionでリポジトリから、4.6ブランチを取ります。
手でコマンド入力してもいいですが、面倒だし、間違えやすいしなので、次のようなshスクリプト書いて実行しました。
#!/bin/sh #gcc-4_6-branch/ svn checkout svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch gcc46x
これをgccbuild/src/svn-gcc46x.shで作成して実行。
./svn-gcc46x.sh
gmp, mpfr, mpc
前述のように、これらはアーカイブを落として展開、gcc46x/に移動します。
- ftp://ftp.gmplib.org/pub/gmp-5.0.1/gmp-5.0.1.tar.bz2
- http://www.mpfr.org/mpfr-current/mpfr-3.0.1.tar.bz2
- http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
MPCはこれだけでぐぐるとMedia Player Classicがわらわら出てくるので、GMP MPCとかMPC multiprecisionで探しましょう。
さくっと落として展開+移動。
tar jxvf gmp-5.0.1.tar.bz2 tar jxvf mpfr-3.0.1.tar.bz2 tar zxvf mpc-0.9.tar.gz mv gmp-5.0.1 gcc46x/gmp mv mpfr-3.0.1 gcc46x/mpfr mv mpc-0.9 gcc46x/mpc
まったく・かんたん・だー