view CbC-INSTALL @ 44:a14cd9f25ac4

merge.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Mon, 25 Jan 2010 17:27:45 +0900
parents 59194914942b
children d645ac0f55d6
line wrap: on
line source


 * 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 <<EOF
  	#include<stdio.h>
  	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