* CbC on GCCのインストール方法 まずはMercurialリポジトリから取得 hg clone ssh://one@firefly.cr/hg/CbC/GCC cbc-gcc ビルド用ディレクトリへ mkdir build-gcc; cd build-gcc コンフィギュア 一般的には以下のconfigureでビルドできる ../cbc-gcc/configure CFLAGS="-g3 -O0" --prefix=$PWD/INSTALL_DIR --disable-nls \ --disable-bootstrap --enable-languages=c \ --enable-checking=tree,rtl,assert,types -g3: gdbでmacroの展開を可能にする -O0: gdbでトレースしやすいように、最適化をカット --prefix: インストールするベースディレクトリ --enbale-checking: デバグ用の指定、browse_treeやdebug_rtx、assertもこれでonになる --disable-bootstrap: 通常、GCCは3回ビルドされる。それを最初の1回だけに限定 --disable-nls: gettextのl10nをoffにしよう --enable-language: 使用する言語 c|c++|ada ... もちろんCbCはcだけ これもcbcを使えるようにしたい ビルド make && make install * PowerPC Macでのインストール 最新のlibgmp, libmpfrをインストール [gmp] ./configure --enable-cxx --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 make && make install [mpfr] ./configure --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 make && make install [CbC on GCC] ../cbc-gcc/configure CFLAGS="-g3 -O0" --with-gmp=/usr/local --with-mpfr=/usr/local --prefix=$PWD/INSTALL_DIR \ --disable-nls --disable-bootstrap --enable-languages=c \ --enable-checking=tree,rtl,assert,types make && make install もちろんインストール場所によってprefixは変更しよう * PS3でのビルド SPU ../CbConGCC/configure --prefix=/usr/local/spu-cbc \ --build=powerpc --target=spu --program-prefix=spu- \ --disable-bootstrap --enable-checking=tree,rtl,assert \ --disable-nls --disable-shared --disable-threads \ --enable-languages=c --with-system-zlib --with-newlib \ --enable-version-specific-runtime-libs --disable-libssp \ --with-gnu-as -with-as=/usr/bin/spu-as --with-gnu-ld \ --with-ld=/usr/bin/spu-ld PPU binutils $ tar xzvf binutils-...tar.gz $ mkdir binutils_4ps3 $ cd binutils_4ps3 $ ../binutils../configure --prefix=$PWD/INSTALL_DIR > --target=ppc64-yellowdog-linux $ make install $ cd .. cross gcc $ mkdir gcc_4ps3 $ PATH=$PWD/../binutils_4ps3/INSTALL_DIR/bin:$PATH $ ../CbConGCC/configure --prefix=$PWD/INSTALL_DIR > --enable-language=c --target=ppc64-yellowdog-linux > --with-newlib --with-included-gettext --enable-shared > --enable-threads $ make * 琉球大学総合情報センターのSolarisサーバでのビルド (sparc) なぜかデフォルトのgccが自分のライブラリすら見てくれないのでパスを指定 export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/gcc:$HOME/opt/lib export LIBRARY_PATH=/usr/local/lib:/usr/local/lib/gcc:$HOME/opt/lib gmpのインストール ./configure --prefix=$HOME/opt \ --build=sparc-sun-solaris \ --host=sparc-sun-solaris make make check make install libmpfrのインストール ./configure --prefix=$HOME/opt/ \ --with-gmp=$HOME/opt --build=sparc-sun-solaris \ --host=sparc-sun-solaris make make check make install # sparc-sun-solaris2.10の方がいいかもしれない CbCをインストール ../CbCGCC/configure --prefix=$PWD/INSTALL_DIR --disable-nls \ --disable-bootstrap --enable-languages=c \ --with-gmp=$HOME/opt --with-mpfr=$HOME/opt \ --build=sparc-sun-solaris2.10 --target=sparc-sun-solaris2.10 \ --host=sparc-sun-solaris2.10 --enable-shared \ --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld make make install ビルドは可能。 ただし、実行は不能 goto cs();すら動かない config/sparc/sparc.cのoutput_sibcall()でエラーが出る gdbがインストールされてないので詳細は未調査 もしかしてsibcallってあまり実装されてないんじゃ… ___________________________________________________________ PS3用のクロスコンパイラの作成 ----------------------------------------------------------- PS3でのGCCのビルドはメモリが少なすぎるためか、insn-*.cのコンパイルに膨 大な時間がかかってしまう。 なので別のマシンからPS3をターゲットとしたクロスコンパイラを作成する。 ただしこれはCbConGCCの開発のためと考えた方が良い。実際にCbC言語を使っ たプログラムをPS3で開発する際はちゃんとPS3上にノンクロスコンパイラを作 成しよう。時間はかかるがビルドは可能。 * 必要なもの o binutilsのソース o gccのソース o ターゲットマシンのlib*.{a,so}類 o ターゲットマシンの.hファイル ~/PS3CROSSにクロスコンパイラ環境を整えるとする ~/PS3CROSS/cross-tools: クロスコンパイルに使うツールのインストール先 ~/PS3CROSS/sources: ソース置き場、出来上がったら消してもいいよ ~/PS3CROSS/target-env: ターゲット環境(libやinclude)が入ったディレクトリ * 準備 $ CROSS=$HOME/PS3CROSS $ cd $CROSS $ mkdir sources cross-tools target-env $ cd sources $ wget ... binutilsとかgccのソースをダウンロード * binutilsのビルド $ tar xvf binutils..tar.gz $ mkdir PS3-binutils-build; cd !#1 $ ../binutils-.../configure --prefix=$CROSS/cross-tools \ --with-lib-path=$CROSS/target-env \ --hosti686-pc-linux-gnu --build=i686-pc-linux-gnu \ --target=ppc64-redhat-linux --enable-64-bit-bfd \ --disable-nls --enable-shared --with-sysroot $ make && make install * ターゲットマシンの環境をコピーする $ cd $CROSS/target-env $ mkdir include lib lib64 $ ln -s . usr ## 必要なライブラリはすべてコピー $ cd lib $ rsync -avl 'charles.cr:/lib/libc[.-_]*' ./ $ rsync -avl 'charles.cr:/usr/lib/libc[.-_]*' ./ $ rsync -avl 'charles.cr:/usr/lib/crt*' ./ $ rsync -avl 'charles.cr:/lib/ld*' ./ $ cd ../lib64 $ ..... ## ヘッダは軽いので全部コピー $ cd ../include $ rsync -avl 'charles.cr:/usr/include/*' ./ * GCCのビルド $ cd $CROSS/sources $ mkdir PS3-gcc-build; cd !#1 $ ../.../configure --prefix=$CROSS/cross-tools --host=i686-pc-linux-gnu --target=ppc64-redhat-linux --with-sysroot=$CROSS/target-env --disable-nls --disable-shared --disable-threads --enable-languages=c --without-headers --disable-bootstrap $ make all-gcc $ make ## エラーで終わるけど気にするな $ make install-gcc $ make install-target-libgcc * テスト $ cat >test.c < int main(int argc, char **argv) { int a=0; int i; for (i=0; i<10; i++) { a = i; } printf("hello world\n"); printf("a = %d\n", a); return a; } EOF $ $CROSS/cross-tools/bin/gcc -m32 test.c -o test32 $ $CROSS/cross-tools/bin/gcc -m64 test.c -o test64 $ file test32 test64 test32: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped test64: ELF 64-bit MSB executable, 64-bit PowerPC or cisco 7500, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped $ scp test{32,64} PS3Machine: PS3Machine $ ./test32