[Go to BBS]
All articles in a thread
SubjectMinimum SAD/Tk build on MIKO GNYO Linux 4.2
Article No879
Date: 2011/01/14(Fri) 20:43:15
ContributorAkio Morita
% cvs -d :pserver:<Your_Account>@www-acc-theory.kek.jp:/Users/cvs/SAD checkout -P oldsad
% cd oldsad/
% cvs update -j1.6 -j1.4 mk/sad.libtai.mk
% cvs update -j1.5 -j1.4 src/sim/sad_signal.h
% cp /dev/null sad.conf
% echo USE_X11=YES     >>sad.conf
% echo USE_TCLTK=YES   >>sad.conf
% echo USE_GCC=4.4.3   >>sad.conf
% echo FC=gfortran-4.4 >>sad.conf
% echo CC=gcc-4.4      >>sad.conf
% echo CXX=g++-4.4     >>sad.conf
% echo FOPT+=-falign-functions     >>sad.conf
% echo COPT+=-DTRY_SAD_ADDR32      >>sad.conf
% echo COPT+=-DUSE_MMAP_FOR_MALLOC >>sad.conf
% make exe

SubjectRe: Minimum SAD/Tk build on MIKO GNYO Linux 4.2
Article No880
Date: 2011/01/19(Wed) 15:05:30
ContributorAkio Morita
内容解説

> % cvs update -j1.6 -j1.4 mk/sad.libtai.mk
SYS_COPT経由で、コンパイラオプションを 3rd party productへ渡すのはNG
(libtaiは ISO C99では無い&SYS_COPTに -std=c99が含まれている)
生成ABI指定を渡すならCC経由で渡すか、amorita branchの SYS_CC_ABIOPTのように
制御変数を新設すべきところ

> % cvs update -j1.5 -j1.4 src/sim/sad_signal.h
MacOSX 10.6.x対応の変更とされるが、Linuxでは標準ヘッダーで _XOPEN_SOURCEマクロは定義済みなので
マクロの二重定義エラーになる&_XOPEN_SOURCEの設定バージョンが"1"では古すぎる
やるなら、config/Darwin.specで SYS_COPTへ -Dオプションを追加すべきところ

> % cp /dev/null sad.conf
> % echo USE_X11=YES >>sad.conf
> % echo USE_TCLTK=YES >>sad.conf
MAIN trunkでは、script/bench2.sadで Tkinterのロードを要求されるので
明示的にTkinterをリンクしておかないと ./bin/gsで走らせるときに問題が発生する

> % echo USE_GCC=4.4.3 >>sad.conf
> % echo FC=gfortran-4.4 >>sad.conf
> % echo CC=gcc-4.4 >>sad.conf
> % echo CXX=g++-4.4 >>sad.conf
Linuxでは、Fortran環境が標準でインストールされない&標準のコマンド名が統一されて無いようなので
config/Linux.specでサポートしないため、手動設定が必須

> % echo FOPT+=-falign-functions >>sad.conf
sethtb()へ渡す関数はoctet境界に整列している必要があるため
(amorita branchでは、backendデータベースの拡張&sethb API廃止済みのため、この問題は無い)

> % echo COPT+=-DTRY_SAD_ADDR32 >>sad.conf
> % echo COPT+=-DUSE_MMAP_FOR_MALLOC >>sad.conf
x86_64環境の場合、mallocが割り当てる仮想メモリアドレスが、SADの表現可能域に入る保証が無いため必要
実際には、mallocの代わりに 2GBクリップ付きの匿名mmapで代用している
Linux/x86_64固有の拡張を使用しているので、他の64bit Linuxへの移植性は有りません