[Momonga-devel.ja:00728] merging gcc3 to HEAD (Re: GCC3 の今後)
- From: KOMATSU Shinichiro <koma2@xxxxxxxxxxxxxxxxxxxx>
- Date: Wed, 6 Nov 2002 06:48:19 +0900
小松です。大部遅くなりましたが。。。
From: YAMAZAKI Makoto <uomaster@xxxxxxxxx>
Subject: [Momonga-devel.ja:00626] GCC3 の今後
Date: Wed, Oct 23, 2002 at 02:08:41AM JST
> 1) -fomit-frame-pointer -funroll-loops を rpmrc に加えて動作確認
> 2) stack-smashing protect を有効にした gcc(with_ssp を 1) でリビルドして
> 動作確認(rpmrc には -fstack-protector)
>
> が無事終ったら HEAD にマージしようかと思ってます。
現在 gcc-3.2 で (少なくとも %ix86 では)
大部分のパッケージが build できていて、
かつ少なくとも zaki さんが使う範囲においては
特に問題もない、ということなので、
HEAD に merge するいい時期なのではないか、と思います。
もちろん今後 HEAD で zaki さん以外の多くの人がテストしていくうちに
いろいろ問題が見付かってくるかもしれませんが、
逆にテストしないと問題は見付からないわけで、
そういう意味でも HEAD の gcc を 3.2 にすることには賛成します。
ただ、gcc-2.96 も当分残すべきだと思います。
gcc-3.2 だとうまく動作しないとか
そもそも compile できないとかいうものがあるだろうことが考えられるのと、
それ以上に大きな理由として、
gcc-2.96 の libstdc++ があると gcc-3.2 への移行が容易になる、
というのがあります。
gcc-2.96 の libstdc++ に依存してる商用ソフトもあるかもしれませんね。
# 商用ソフト(というか、binary only のやつ)を使うときに
# 一番障害になるのは
# 依存している shared library が存在しないことなので
# (依存している shared library が存在しなければ確実に動かない)、
# 商用ソフトのことを考えるのであれば
# 古い shlib を消すことには慎重になるべきでしょう。
というわけで、gcc-3.2 と共存させるための gcc-2.96 の rpm を
作ってみました。
http://kamuy.c.u-tokyo.ac.jp/~koma2/comp/momonga/tmp/gcc2.96-2.96-0m3test.src.rpm
rawhide の compat-gcc とほとんど同じなのですが、
パッケージ名は gcc2.95.3 に合わせて gcc2.96 としました。
中身の確認、テストなどよろしくお願いします。
gcc-3.2 への移行の手順はこんな感じになるでしょう。
[1] gcc-3.2 と gcc2.96-2.96 を build しておく (install はしない)。
[2] gcc-chill は rpm -e しておく。
[3] でき上がった binary を、全部同時に rpm の command line に指定して install.
# rpm -Uvh gcc* cpp* libstdc++* libgcj* libgcc* libobjc* libf2c*
特に libstdc++ と libstdc++2.96 を同時に install するのは重要で、
これやらないと
libstdc++-libc6.2-2.so.3 is needed by hogehoge
って怒られます。逆に、こうすることによって
groff を始めとした C++ モノを uninstall することなく
gcc-3.2 に移行できます。
[4] (optional) C++ なパケジを順次 rebuild.
この時注意しないといけないのは、
libstdc++ 以外の C++ library (Qt とか) に
依存したパッケージ(KDE一家とか) は、
library を入れ直すと rebuild しないと動かなくなる(はず)
ということです。
これは、gcc-3.2 と gcc-2.96 の C++ ABI に互換性がないためです。
今後の予定ですが、gcc2.96 を commit することに特に反対意見がなければ
commit してしまいます(とりあえず一日ほど様子を見ます)。
ただし、commit する時には今の gcc の CVS repository を
gcc2.96 という名前で copy し[*]、そこに commit することにします。
こうすれば gcc-2.96 (gcc2.96 と紛らわしいな…)の履歴を引き継げるので
diff を取ったりする時に便利でしょう。
で、しばらく (gcc-3.2 を merge するまで) HEAD では .SKIP にしておきます。
それと、merge する時には libgcj を OBSOLETE にしないといけませんね
(gcc2.96 に統合したので)。
[*] CVS でファイル名を変更する時などに repository copy をする
というのは割と一般的なことです。cvs の info など参照。
repository を直接操作することに抵抗がある人もいそうですが、為念。
> 現状では、-fomit-frame-pointer と glibc が conflict (bash 上で sleep 呼ぶと
> SEGV)するので glibc.spec で落すようにしています(%ix86のみ)。%ix86 以外の arch で
> -fomit-frame-pointer つきで glibc 作るとどうなるかも興味があったり。
ちょっと気になったのですが、-fomit-frame-pointer って効果あります?
個人的に、これつけて速くなったとかいう記憶はないので
(プログラムに依存する話だとは思いますが)、
rpmrc で指定しなくてもいいと思うのですが。
> リビルドを PC にがんばってもらって、来月頭位には手元でマージ作業開始、
> 一通りビルドできたら HEADに commit しようかなと思ってます。
commit する日が確定したらアナウンスしてもらえませんか?
結構大きな変更だし、cron で cvs update & omokon してる人とかも
いるかもしれないので。
# gcc-3.2 への移行は手動じゃないと多分コケる。
--
---------------------------------------
東京大学大学院総合文化研究科
広域科学専攻相関基礎科学系
佐々研究室 博士3年
小松 晋一朗
koma2@xxxxxxxxxxxxxxxxxxxx
koma2@xxxxxxxxxxxxxxxxx
http://kamuy.c.u-tokyo.ac.jp/~koma2/
---------------------------------------