シェル環境とソース展開

ホームディレクト

MSYSのシェルを起動すると、/home/(現在のユーザ) が作られます。日本語ユーザ名とかダメってことね。通るかもしれないけど、パス指定が面倒だし、変な挙動になっても困る。

MSYSの環境変数

基本的にWindowsのcmd.exeを引き継いでます。%ComSpec%変えてたらしらん。
いくつかは上書きされます。

HOMEが上記の/home下のディレクトリに。
PATHがWinの\を/に、ドライブ名C:が/cに、パス区切り;が:に置き換わり、さらにPATHの先頭に.:/usr/local/bin:/binが追加。カレント入れちゃうのね…
なおWinで環境変数名がPathでもPATHになるです。

主なのはこれくらい。変えたければ/etc/profileをいじるべし。.profileが機能するかは知らない。シングルユーザでしか使わないしね。

ビルド用のフォルダ

gccbinutilsのビルドをするわけですが、あらかじめソース置き場とビルド場所を決めておきます。
なんでかっていうと。
gccbinutilsはソースとは別のツリーでビルドするのが推奨されています。しかも今回クロスコンパイラとネイティブコンパイラの二種類ビルドするので、
「あっネイティブやるのにクロスのオブジェクトをリンクしちゃった!」「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みたいにバージョンつけたらダメ。LinuxCygwinならシンボリックリンクにするところなんですが、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/に移動します。

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

まったく・かんたん・だー