FrontPage 差分 一覧 ソース 検索 ヘルプ ログイン

Solaris10 for SPARC Ver.03 〜開発環境構築編〜

Solaris10 for SPARC Ver.03 〜開発環境構築編〜

[カテゴリ:Solaris]

Solarisははるか昔から64bitOSだったわけだけど、gcc3以降はSun純正コンパイラに頼らなくても64bit開発環境を用意することができるようになっているのでその方向で。

32bit/64bitが混在できるのがSolaris for SPARCのいいところなわけだけど、当然のごとく32bit libraryは32bitバイナリでしか、64bit libraryは64bitバイナリでしか動かないので、同じPATHに32bitと64bitのlibraryが混在しているとえらいことになる。

これを回避するため、基本的に自前でbuildするappsは64bitのみとする。32bitのlibraryを作成した場合には、/usr/local 以下にはインストールしない。例えばGCC3はご丁寧に32bit libraryと64bit libraryの両方をbuildしてくれるけど、こいつを --prefix=/usr/local とかでインストールすると泣きを見るので覚えておこう。


Solarisにはコンパイラが付属していないので、開発環境を構築するための開発環境を用意しないといけない。make, ld, as, ar, m4あたりは /usr/ccs/bin に転がっているので、ここにPATHを通しておけばいいのだけど、コンパイラだけはない。ないったらない。

で、パッケージを持ってくるしかないのだけど、SunFreeware.comあたりからgccのパッケージを持ってくるか、Sun純正のコンパイラの体験版を借用させてもらうかあたりの選択肢がある。今回は後者で。SunStudio9の体験版を使わせてもらうことにする < 買えよ(ぉ

SunStudioの入手方法とインストール方法については割愛。SunのOfficial Documentは日本語版も用意されているのでそれを読め。


GCCのbuildにはGNUのmakeが必要なので、まずはこいつをbuildする。ま、GNUのS/Wなのでインストールはおまじない通り。

 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/ccs/bin:/opt/SUNWspro/bin
 CC=cc
 CFLAGS=-O -xtarget=ultra2 -xarch=v9a -s
 LDFLAGS=-s

な環境で ./configure;make;make install すればよろしい。/usr/ccs/bin と /opt/SUNWspro/bin にPATHを通すのを忘れないように。/usr/ucb には通さないほうがいい。あと、インストールされた /usr/local/bin/make は/usr/local/bin/gmake にrenameしておこう。趣味の問題だけど。


で、GCC3をbuildする。めんどっちいので成功したパターンのみメモとして残しておく。Solaris10+SunStudio9でGCC3.4.3を64bitでbuildする場合。

環境変数

 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/ccs/bin:/opt/SUNWspro/bin
 CC=cc -xc99=%none -xtarget=ultra2 -xarch=v9a
 CFLAGS=-O -s
 LDFLAGS=-s
 CONFIG_SHELL=/bin/ksh

configure option

 /usr/local/src/gcc3/343/gcc-3.4.3/configure \
  --prefix=/opt/gcc343suncc --enable-languages=c \
  sparc64-sun-solaris2.10

これで、configure, gmake, gmake install でいける。configure scriptを実行する場合は必ずfull pathで指定すること。../gcc-3.4.3/configure とかやると install にへくる。あと、-xc99=%none を指定しなかった場合は

 Compiler or options invalid for pre-UNIX 03 X/Open applications and pre-2001 POSIX applications

とゆーエラーでコケてしまう。わりとFAQらしいので、多分3.4.4では治るんじゃないかと思われ。


ほんで、このbuildしたGCC3.4.3で再度GCCをbuildする。とりあえず /opt/gcc343suncc を /opt/gcc としてSymLinkをはっておいて、環境変数をがらりと切り替える。

 PATH=/opt/gcc/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/ccs/bin
 CC=gcc
 CFLAGS=-mtune=ultrasparc -O -pipe -s
 LDFLAGS=-s
 CONFIG_SHELL=/bin/ksh

ほんで、configure option

 /usr/local/src/gcc3/343/gcc-3.4.3/configure \
  --prefix=/opt/gcc343 --enable-languages=c,c++ \
  sparc64-sun-solaris2.10

インストールが終わったら /opt/gcc のSymLinkを /opt/gcc343 に切り替えておこう。ついでに、GNU make もこれを使ってrebuildしておく。


できあがったgccは64bitバイナリなので、何も考えずにこいつでbuildすると、64bitバイナリができあがる。32bitでbuildしたいときは -m32 とゆーオプションが必要。


んで、最後に環境変数を考える。ま、PATHとかCCとかCFLAGSとかについては、最後にGCCをbuildしたときと同じままで問題ないのだけど、LD_LIBRARYがアレげ。基本的にSolarisの場合はsearch pathにOS標準のものしか入っていないため、変更しておかないと不幸になる。

今回の場合は、/usr/local/lib には64bit libraryしか入れないとゆー条件なので、crle(1)を使って、以下のように設定しておけばいい。

 # crle -l /lib:/usr/lib:/usr/ccs/lib:/opt/gcc/lib
 # crle -64 -l /usr/local/lib:/lib/sparcv9:/usr/lib/sparcv9:/usr/ccs/lib/sparcv9:/opt/gcc/lib/sparcv9

だいたいこんな感じで、Sol10で64bitで生活できるようになる。………のだけど、これだけだとわりと困るのがperlの存在。

Solaris10をEntireでインストールすると、perl5.8.4もインストールされるのだけど、このperlは当然のようにSun WorkShopでコンパイルされている。んで、perlってなモジュール関連コンパイルする際に、この"perl本体をbuildしたコンパイル環境"をそのまま使おうとするので、いろいろとややこしいのだね。

めんどっちいのはイヤなので、perlもさっくりbuildしてしまおうとゆーお話。


以下perlに関する記述は全てobsolete.日記に詳細書いたのでがんばれ。

基本的にはアーカイブとってきてConfigureしてmake dependしてmakeしてmake installするだけなのだけど、このConfigureがわりとひっかかる。特に64bit。

いろいろいろいろ試した結果、現状のSolaris10とperl-5.8.4の組み合わせではsh Configure -des によるお手軽configureは不可能であることがほぼ確定した。

基本的には

 sh Configure -Dcc=gcc \
  -Doptimize='-mtune=ultrasparc -O' \
  -Darchname=sun4-solaris-64int -Duse64bitint -Duseshrplib \
  -Dlibpth='/usr/local/lib /usr/lib/sparcv9 /usr/ccs/lib/sparcv9 /opt/gcc/lib/sparcv9'

でいけるはずなのだけど、まずは64bit方面でひっかかる。-Duse64bitallのチェックをしにいった際に、/usr/ccs/bin/as に -xarch=generic64 とか食わせようとしてヘクる。

 You may also choose to try maximal 64-bitness.  It means using as much
 64-bitness as possible on the platform.  This in turn means even more
 binary incompatibilities.  On the other hand, your platform may not
 have any more 64-bitness available than what you already have chosen.
 
 If this doesn't make any sense to you, just accept the default 'y'.
 (The default has been chosen based on your configuration.)
 Try to use maximal 64-bit support, if available? [y]

には [n] を返答しないとダメ。あとはlibcの走査PATHが決めうちになってしまっているので

 Your (shared) C library seems to be in /lib/libc.so.
 
 If the guess above is wrong (which it might be if you're using a strange
 compiler, or your machine supports multiple models), you can override it here.
 
 Where is your C library? [/lib/libc.so]

には手動で [/lib/sparcv9/libc.so] を入力してやる。

この2点以外は空enterでずんどこ答えてやれば問題なし。Configure scriptの最後に make depend するかどうか聞いてくるので [y] を返答し、あとは make して make install しとけ。