view CbC-INSTALL @ 142:c83ff0b5a2ed

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 22 Nov 2018 19:45:33 +0900
parents 65b2ea5f1266
children
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

 * 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 <<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