2001/01/19    CERNLIB on MacOS X

準備ができたので、いよいよ CERNLIB に挑戦。
 

[0] お膳立て

コンパイル環境は、

        MacOS X PB
        make-3.78-1-bin.tar.gz
        gcc-2-macox-with-g77.tar.gz
        Libc-149-bin.tar.gz
        Libcomapt-14-1-bin.tar.gz
        libdl-cctools-6-1-bin.tar.gz
        lesstif-08102000.tar.gz

である。いぜん LinuxPPC の場合もそうであったように、MacOS X の標準開発環境に含まれる make-3.79 では、strip に null string を入れることが許されず、make がこけてしまう。やむなく make-3.78 を入れた。Motif は lesstif を使う。

ソースには、本来は、MacOS X 用の #ifdef を用意すべきであるが、面倒なので、基本的に LinuxPPC のものを流用する。それでも MacOS X 用にいくつか patch が必要であった。それについては以下にでてくるパッチを参照。

# cd /
# ln -s ~/sandbox/mypkg/src/cernlib cern
# cd /cern
# for i in `ls <somewhere>/src_*.tar.gz`; do tar -zxvf $i; done
# ln -s 2000 new
# ln -s 2000 pro
# mkdir -p 2000/work
# chown fujiik:jlc 2000/work
# chown fujiik:jlc 2000
# cd src
# patch -p1 -s < <somewhere>/cernlib-2000-macosx.patch
g77 についての注意
g77-0.5.20  以前にあった問題であるが、今回使った g77 が 0.5.25 であるにもかかわらず、complex statement function がある場合、最適化をすると間違ったコードを吐き、テストが全滅した(mathlib の D704 とか F010CH など)。複素数を使うルーチンは安全のため -O0 を使う。どうも、これは g77 の問題というより gcc の back end の問題のようである(apple customized back end には古い bug が残っている?)。

mclibs/jetset で -O0 でないとテストが無限ループに入る問題もある。最適化フラッグは最初のものが有効になるので -O0 -O2 の順でないと最適化を OFF にできない(-O2 -O0 で最適化を OFF にしたつもりがはまった)。
 

[1] コンパイル

準備ができたらあとは、おきまりの手順で作業する。
$ export CVSCOSRC=/cern/2000/src
$ cd /cern/2000/work
$ mkdir ../{bin,logs}
$ cp $CVSCOSRC/scripts/cernlib ../bin
$ $CVSCOSRC/config/imake_boot
$ make tree HAVE_MOTIF='YES' >& ../logs/tree.log &
$ tail -f ../logs/tree.log
^C

$ pushd packlib/kuip/programs/kuipc
$ make
$ make install.bin
$ popd
$ make HAVE_MOTIF='YES' >& ../logs/make.log &
$ tail -f ../logs/make.log

$ cd packlib
$ make install.bin HAVE_MOTIF='YES' >& ../../logs/packlib.bin.log &
$ tail -f ../../logs/packlib.bin.log

$ cd ../pawlib
$ make install.bin HAVE_MOTIF='YES' >& ../../logs/pawlib.bin.log &
$ tail -f ../../logs/pawlib.bin.log

$ cd ../graflib
$ make install.bin HAVE_MOTIF='YES' >& ../../logs/graflib.bin.log &
$ tail -f ../../logs/graflib.bin.log

$ cd ../scripts
$ make install.bin HAVE_MOTIF='YES' >& ../../logs/scripts.bin.log &
$ tail -f ../../logs/scripts.bin.log

$ cd ..
$ make install.include CERN_INCLUDEDIR=/cern/new/include >& ../logs/install.include.log &
$ tail -f ../logs/install.include.log

$ su
# tar -zxvf <somewhere>/patchy-4.15-bin.tar.gz -C /
# exit
$ cd patchy
$ PATH=.:$PATH make install.bin HAVE_MOTIF='YES' >& ../../logs/patchy.bin.log &
$ tail -f ../../logs/patchy.bin.log

てな具合で clean make できるはずである。ただし、マシンのメモリーが少ないと、mclibs/pythia/pysigh.F あたりのコンパイルに無限に時間がかかるので、これだけ個別に -O0 でコンパイルする必要があるかも。
 

[2] テスト

$ cd ../packlib
$ make test >& ../../logs/packlib.test.log &
$ tail -f ../../logs/packlib.test.log

        ALL TESTS PASSED!

$ cd ../mathlib
$ make test >& ../../logs/mathlib.test.log &
$ tail -f ../../logs/mathlib.test.log

        ALL BUT TEST C327 PASSED!

$ cd ../graflib/higz/examples
$ make higzex
$ ./higzex

        OK!

$ cd ../../../../src/pawlib/paw/demo
$ paw all.kumac
...
go
...
        OK!
 

$ cd ../../../../work/mclibs
$ make test >& ../../logs/mclibs.test.log &
$ tail -f ../../logs/mclibs.test.log

        ALL TESTS PASSED!
        but remember you remove lepto63 from testlibdir.

$ cd ../phtools
$ make test >& ../../logs/phtools.test.log &
$ tail -f ../../logs/phtools.test.log

        ALL TESTS PASSED!

$ cd ../geant321
$ make test >& ../../logs/geant321.test.log &
$ tail -f ../../logs/geant321.test.log

        ALL TESTS PASSED!

mathlib の C327 の問題は追求していない。時間がとれ次第追求。いずれにせよ、Aqua の中で Paw の test が動き
PAW TEST on UNIX/MACOSX
....
You have a good version of PAW
と表示する様は感動的ではあった。
 

[3] Aftermath

# cd ~/sandbox/mypkg/src/cernlib
# chown -R root:wheel 2000
# mkdir 2000/tgz
# tar -zcvf 2000/tgz/cernlib-2000-bin.tar.gz 2000/bin
# tar -zcvf 2000/tgz/cernlib-2000-lib.tar.gz 2000/lib
# tar -zcvf 2000/tgz/cernlib-2000-include.tar.gz 2000/include
# tar -zcvf 2000/tgz/cernlib-2000-share.tar.gz 2000/share

 

今までにコンパイルしたもののソースおよびパッチは macosx/src に、またバイナリーの tar ball は macosx/tgz または macosx/darwin.tgz にそれぞれ置いてある。いつものように使う場合は自己責任で。
 


Back to Keisuke Fujii's MkLinux/LinuxPPC Life