* 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 * test gcc はできないので、cc1 をそのまま使います。 % gcc/cc1 -O3 ../cbc-gcc/CbC-examples/conv1.c -O3 は必須。そうでないと正しくコンパイルされません。 % gcc ../cbc-gcc/CbC-examples/conv1.s % ./a.out 0 #0193:720 % ./a.out 1 #0103:719 % ./a.out 2 #0132:470 % ./a.out 3 #0165:720 * 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 $ ../GCC/configure CFLAGS='-g -O0' --prefix=$PWD/INSTALL_DIR --disable-nls --disable-shared --disable-threads --enable-checking=tree,rtl,assert --with-system-zlib --with-newlib --enable-languages=c --enable-version-specific-runtime-libs --disable-libssp --program-prefix=cbc-spu- --target=spu --disable-bootstrap $ make && make install $ cd INSTALL_DIR; ln -s /usr/spu; cd .. で、動作確認のあと $ sudo make prefix=/usr/local/cbc install $ cd /usr/local/cbc; ln -s /usr/spu; cd - PPU $ ../GCC/configure --prefix=$PWD/INSTALL_DIR --host=ppc64-redhat-linux --build=ppc64-redhat-linux --target=ppc64-redhat-linux --program-prefix=cbc- --disable-bootstrap --enable-checking=tree,rtl,assert --disable-nls --enable-shared --enable-thread=posix --enable-languages=c --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --disable-dssi --enable-plugin --with-long-double-128 --with-gnu-as --with-as=/usr/bin/as --with-gnu-ld --with-ld=/usr/bin/ld --with-cpu=default32 $ make && make install 動作確認 $ make prefix=/usr/local/cbc install * 琉球大学総合情報センターの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