Or, if you are in trouble with values-Xa.o just installing gcc binaries, values-Xa.o should reside at /usr/ccs/lib/values-Xa.o, which is in the package SUNWarc. Correcting "link-path" will solve your trouble.
[English page] has few information now.
英語版 Free Solaris 7
で、クロスコンパイルによる
gcc-2.8.1 の make ができています。
こちらも合わせて御覧下さい。
From: yamamori (YAMAMORI Takenori) Newsgroups: fj.sys.sun Subject: make gcc on Solaris2 without gcc-binaries-2.5.6 Date: 21 Dec 1996 10:25:48 GMT Lines: 207 Message-ID: <59gdvc$phu@news.kt.rim.or.jp> このグループは初登場です。山森と申します。 SunSPARCstation2 を所有していまして、SunOS4.1.4 と Solaris2.5.1 の両方が ブート可能な状態で使用しています。このたび、Solaris2 上に gcc-binaries の 力を借りずに gcc を make することが出来ましたので、そのことについて 報告します。 長文ですが何らかのお役に立てば幸いです。 (OS 名として、慣習的に SunOS4, Solaris2 と言ういい方を使います) ------- Solaris2 では cc がバンドルされておらず、一般的には gcc-binaries-2.5.6 を 取り寄せ、これを使って gcc の最新版をコンパイルすることが多いと思います。 しかし、せっかく SunOS4 上には gcc があるので、これを使って gcc-binaries の力を借りず、自力で Solaris2 上に gcc を立ち上げることは出来ないかと 考えました。 ------- 最初に考えた方法 互換ライブラリにより、Solaris2 上でも SunOS4 用のバイナリは一応 実行できます。それなら、SunOS4 用の gcc が Solaris2 上で何とか動かないか、 という発想です。つまり、 gcc (ドライバー) ----- SunOS4 用を互換ライブラリで使う /.../gcc-lib/.../.../cpp ----- SunOS4 用を互換ライブラリで使う /.../gcc-lib/.../.../cc1 ----- SunOS4 用を互換ライブラリで使う as ----- /usr/ccs/bin/as を使う ld ----- /usr/ccs/bin/ld を使う ということです。しかし問題があります。 * cpp に渡されるあらかじめ define された定数が、SunOS4 と Solaris2 では 違い、SunOS4 の gcc を流用すると SunOS4 の define になってしまう。 * CPU は同じであるが、アセンブラの書式(疑似命令?)が、SunOS4 と Solaris2 で、若干違うようである。 ということで、この方法も可能性はあると思いますが、別の方法として 素直にクロスコンパイラを作ることにしました。 クロスコンパイラを作るつもりなら、何も SunOS4 からでなくても、 gcc がサポートしている他のプラットフォームからでも、そこに Solaris2 の コードを出力するクロスコンパイラを作れば良いと考えられます。 しかし、SunOS4-->Solaris2 のクロスコンパイラ自体、何かと役立つかも 知れないし、また、クロスコンパイラの make 自体にも興味があるので、 この方法で進めることにしました。 ----------------------------------------------------------------------------- SunOS4 上にクロスコンパイラを作り、それを使って Solaris2 gcc を作成する方法。 山森丈範 Dec. 21 1996 yamamori * まず、クロスアセンブラ等を作成。 SunOS4 上で、binutils-2.7 を、configure --target=sparc-sun-solaris2.5.1 として configure し、make し、インストールする。 /usr/local/sparc-sun-solaris2.5.1/bin の下に、 as,ld,ar 等がインストールされ、それらは /usr/local/bin の下の、 sparc-sun-solaris2.5.1-as sparc-sun-solaris2.5.1-ld sparc-sun-solaris2.5.1-ar 等として、ハードリンクされる。 * Solaris2 インクルードファイルの準備。 マウント、シンボリックリンク等の方法を使い、 solaris2:/usr/include 以下のインクルードファイルが、 sunos4:/usr/local/sparc-sun-solaris2.5.1/include 以下に 見えるようにする。 * Solaris2 ライブラリの準備。 マウント、シンボリックリンク等の方法を使い、 solaris2:/usr/lib 以下のライブラリが、 sunos4:/usr/local/sparc-sun-solaris2.5.1/lib 以下に 見えるようにする。 * クロスコンパイラの作成。 SunOS4 上で、gcc-2.7.2.1 を、configure --target=sparc-sun-solaris2.5.1 で configure する。その後追加として solaris2:/usr/ccs/lib/values-Xa.o のみ、カレントディレクトリにコピーする。 (Solaris2 では、crt*.o がバンドルされていないが、gcc のソースでは、 Solaris2 用に crt*.asm というソースをちゃんと用意してくれている) これで準備が整ったので次のスクリプトで make を行なう。 ----------------------------------- #!/bin/sh -x ( date time make -j3 LANGUAGES=c \ CC=gcc \ CFLAGS='-O2 -pipe -s' \ AS=sparc-sun-solaris2.5.1-as \ LIBGCC1_TEST='' date ) 2>&1 | tee -a stage1-log ----------------------------------- ここで、AS=sparc-sun-solaris2.5.1-as と指定しているのは、 この AS の値は crt*.asm をアセンブルする時に使われ、 これを指定しないと、as (SunOS4ネイティブアセンブラ)が 誤って使われてエラーになってしまうため。 さらに、LIBGCC1_TEST='' として、libgcc1.a のテストを抑制する。 Solaris2 では(SunOS4 でも)libgcc1.a は必要ない(libgcc2.a のみ必要) ということがわかっているが、クロスコンパイラの make 環境では libgcc1.a のテストがエラーになってしまうので、このようにする。 make 中に Solaris2 用の fix-include も行なわれる。ただし、原理的に float.h の fix は正しくは行なわれない。 以上で、make は正常に行なわれ、クロスコンパイラが作成される。 クロスコンパイラなので、このまま(いわゆる stage1)でインストールする。 インストール後、values-Xa.o のみ手作業で /usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.7.2.1 にコピーする。 クロスコンパイラは、コマンド名 sparc-sun-solaris2.5.1-gcc として または、gcc -b sparc-sun-solaris2.5.1 とオプションを付けて実行できる。 * クロスコンパイラの簡単なテスト。 SunOS4 上で、sparc-sun-solaris2.5.1-gcc を実行して簡単なソースを コンパイルしてみる。その時、-v オプションも付けてインクルードファイルや ライブラリ等も正しく Solaris2 用のものが参照されていることを確認する。 クロスコンパイルした結果を Solaris2 上で実行できることを確認する。 * クロスコンパイラを使って Solaris2.5.1 ネイティブコンパイラの作成。 SunOS4 上の新しい作業ディレクトリで、gcc-2.7.2.1 を、 configure --build=sparc-sun-sunos4.1.4 --host=sparc-sun-solaris2.5.1 で configure する。 make は以下のスクリプトで行なう。 ----------------------------------- #!/bin/sh -x ( date time make -j3 LANGUAGES=c \ CC=sparc-sun-solaris2.5.1-gcc \ CFLAGS='-O2 -pipe -s' \ AS=sparc-sun-solaris2.5.1-as \ LIBGCC1_TEST='' GCC_FOR_TARGET=sparc-sun-solaris2.5.1-gcc date ) 2>&1 | tee -a stage1-log ----------------------------------- AS および LIBGCC1_TEST を指定するのはクロスコンパイラ作成の時と同様。 さらに、GCC_FOR_TARGET を指定するのがポイント。 これを指定しないと、make 中で libgcc.a 等を作成する際に、make の過程で 出来たばかりの ./xgcc を起動しようとする。これは Solaris2 用の バイナリであり、SunOS4 上では当然実行出来ずエラーになってしまう。 以上で、make は正常に行なわれ、Solaris2 ネイティブコンパイラが SunOS4 上で作成されたことになる。 * そして Solaris2 へ これで SunOS4 上の作業をひとまず終え、Solaris2 をブートし直す。 作成されたネイティブコンパイラは、そのままインストールしてもいいし、 これを stage1 としてさらに stage2, stage3 を make してもいい。 ただし、float.h の fix-include が正常に行なわれていないので、 もう一度、fix-include し直した方がいい。 また、gcc の再 make 時には LANGUAGES の指定を外し、C++ 等も make する。 (最初に Solaris2 上で不自由しないように、SunOS4 上のクロスコンパイラで あらかじめ GNU make-3.75 等、必要なものを make しておくという 方法も考えられる) さらに、Solaris2 上で binutils-2.7 を make し、それを使って gcc を make し直し、それを使って binutils を make し直す、、 と、こだわることも出来る。 * 考慮事項 * gcc-2.7.2.1/config/sparc/t-sol2 によると、 『crtstuff.c(crtbegin.o, crtend.o のソース)のコンパイル時に -fPIC を付けたいが、GNU as が PIC にまだ対応していないため、 crtstuff.c のコンパイル時に限り、たとえ GNU as がインストール されていても /usr/ccs/bin/as を強制的に使う。ただし、 クロスコンパイル時には(不可能なので)-fPIC をあきらめる』 とあり、確かにクロスコンパイラ make 時の stage1-log を見ると -fPIC は 使われていない。 しかし、binutils-2.7 の as を見る限りでは PIC はサポートされて いるようで、それならば、Makefile を修正して crtstuff.c も -fPIC で コンパイルした方がいいのかも知れない。 また、Solaris2 上でのネイティブ gcc の make 時にも、 /usr/ccs/bin/as を一切使いたくないということであれば、同様に Makefile を 修正して、GNU as のみが使われるようにした方がいいのかも知れない。 * Makefile 中に、OLDCC = cc という行があり、これは libgcc1.a の 作成の場合に使用される。しかし、SunOS4 も Solaris2 も、libgcc1.a は 必要なく、結果的に cc は使われない。しかし、だからと言って、 OLDCC = gcc などと書き換えてはいけない。OLDCC の値と、CC (=gcc) の値が Makefile の別の場所で sh の case 文で比較されていて、これが同じだと、 alloca.o という、空のオブジェクト(実際には不要)が余分にリンク されてしまう。心配なら、OLDCC = xxx (あり得ないコマンド名)とでも すると良い。 * gcc-2.7.2.1, binutils-2.7 等、同じソースに対し異なる configure で 複数の make を行なう場合、ソースを展開したディレクトリはリードオンリー (CD-ROM 状態)にして、別の作業ディレクトリから、 (ソースディレクトリ)/configure とすると良い。(今回、実際にそうした) 以上 ----------------------------------------------------------------------------- ------------------------------- 山森丈範 yamamori ------------------------------- |
英語版 Free Solaris 7
で、クロスコンパイルによる
gcc-2.8.1 の make ができています。
こちらも合わせて御覧下さい。