GNU Compiler Collection 4.0.2 Edit

  • パッケージ
    C、C++、JAVA、Objective-C、Fortran95等のパッケージがあります。
    cpp-4.0-doc_4.0.2-2_all.deb       libgcj6-awt_4.0.2-2_sh4.deb
    cpp-4.0_4.0.2-2_sh4.deb           libgcj6-common_4.0.2-2_all.deb
    fastjar_4.0.2-2_sh4.deb           libgcj6-dbg_4.0.2-2_sh4.deb
    fixincludes_4.0.2-2_sh4.deb       libgcj6-dev_4.0.2-2_sh4.deb
    g++-4.0_4.0.2-2_sh4.deb           libgcj6-src_4.0.2-2_all.deb
    gcc-4.0-base_4.0.2-2_sh4.deb      libgcj6_4.0.2-2_sh4.deb
    gcc-4.0-doc_4.0.2-2_all.deb       libgfortran0-dev_4.0.2-2_sh4.deb
    gcc-4.0-locales_4.0.2-2_all.deb   libgfortran0_4.0.2-2_sh4.deb
    gcc-4.0_4.0.2-2_sh4.deb           libmudflap0-dev_4.0.2-2_sh4.deb
    gcj-4.0_4.0.2-2_sh4.deb           libmudflap0_4.0.2-2_sh4.deb
    gfortran-4.0-doc_4.0.2-2_all.deb  libobjc1_4.0.2-2_sh4.deb
    gfortran-4.0_4.0.2-2_sh4.deb      libstdc++6-4.0-dbg_4.0.2-2_sh4.deb
    gij-4.0_4.0.2-2_sh4.deb           libstdc++6-4.0-dev_4.0.2-2_sh4.deb
    gobjc-4.0_4.0.2-2_sh4.deb         libstdc++6-4.0-doc_4.0.2-2_all.deb
    libffi4-dev_4.0.2-2_sh4.deb       libstdc++6-4.0-pic_4.0.2-2_sh4.deb
    libffi4_4.0.2-2_sh4.deb           libstdc++6_4.0.2-2_sh4.deb
    libgcc1_4.0.2-2_sh4.deb           protoize_4.0.2-2_sh4.deb
    libgcj-common_4.0.2-2_all.deb     treelang-4.0_4.0.2-2_sh4.deb
    
  • インストール
    landisk:~# apt-get install dpkg-dev gcc g++ gcj gij libgcj6-dev 
    
    因みにカーネルは今のところgcc-4.0系でビルドできませんので、gcc-3.4系を使用してください。
    landisk:~# apt-get install gcc-3.4 g++-3.4 libncurses5-dev
    
  • gcc -v
    landisk:~# gcc -v 
    Using built-in specs.
    Target: sh4-linux-gnu
    Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,treelang
     --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib
     --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 
     --enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu 
     --enable-libstdcxx-debug --enable-java-gc=boehm  --enable-java-awt=gtk
     --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre  
     --enable-mpfr --disable-werror --enable-checking=release sh4-linux-gnu
    Thread model: posix
    gcc version 4.0.2 (Debian 4.0.2-2)
    

gcj-4.0 (GNU Compiler for the Java) Edit

  • GCC4系になって、Java(gcj)が随分動くようになったようです。
    そこで、ちょっと味見をしてみました。
    (LANDISKで動かしているので遅いですが、結構すごいです。)

  • TestAwt.java
    import java.awt.*;
    public class TestAwt extends Frame{
    
        public TestAwt(){
            super();
            setSize(300,100);
            add(new TextArea("Hello Java World !!"));
            setFont(new Font("Serif", Font.BOLD, 30));
            show();
        }
    
        public static void main(String [] args){
            new TestAwt();
        }
    }
    
    ビルド&実行
    landisk:~# gcj -O3 TestAwt.java -o TestAwt --main=TestAwt
    landisk:~# ./TestAwt 
    
    結果
    TestAwt.png

  • Mandelbrot.java
    import java.awt.*;
    
    public class Mandelbrot extends Frame{
        double x_center = 0.0, y_center = 0.0, width = 4.0;
        int x_size = 200, y_size = 200, it = 100;
    
        public static void main(String arg[]){
    	Mandelbrot f = new Mandelbrot();
    	f.show();
        }
        Mandelbrot(){
    	setSize(x_size, y_size);
        }
        public void paint(Graphics g){
    	double xx, yy, xn, yn, x0, y0, unit;
    	int x, y, c;
    	unit = width/x_size;
    	for(y=0; y<y_size; y++){
    	    y0 = ((y_size/2)-y)*unit + y_center;
    	    for(x=0; x<x_size; x++){
    		x0 = (x-(x_size/2))*unit + x_center;
    		xx = yy = xn = yn = 0.0;
    		c = 0;
    		for(int j=1 ; j<it; j++){
    		    yn = 2*xn*yn + y0;
    		    xn = xx - yy + x0;
    		    xx = xn * xn;
    		    yy = yn * yn;
    		    if(xx+yy > 4.0){
    			c = j;
    			break;
    		    }
    		}
    
    		g.setColor(new Color((c<<5)&0xff, (c<<4)&0xff, (c<<6)&0xff));
    		g.drawLine(x,y,x,y);
    	    }
    	}
        }
    }
    
    ビルド&実行
    landisk:~# gcj -O3 Mandelbrot.java -o Mandelbrot --main=Mandelbrot
    landisk:~# ./Mandelbrot
    
    結果
    タイトルバーと描画領域が重なっており、多少問題は残っていますが、
    GCC4系では、ここまで動くようになっています。

    Mandelbrot.png


メモ … gcc-4.0_4.0.2-2のビルド Edit

  • patch
    • sh4-T_REGS.dpatch … http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21623
      :ADDPATCH target:
      2005-09-30  Kaz Kojima  <kkojima@xxx.xxx.xxx>
      
      	* config/sh/sh.c (sh_register_move_cost): Add case for moving
      	from T_REGS to FP register class.
      
      diff -up ORIG/gcc/gcc/config/sh/sh.c TMP/gcc/gcc/config/sh/sh.c
      --- ORIG/gcc/gcc/config/sh/sh.c	2005-09-07 06:16:56.000000000 +0900
      +++ TMP/gcc/gcc/config/sh/sh.c	2005-09-30 07:06:35.000000000 +0900
      @@ -9491,6 +9491,9 @@ sh_register_move_cost (enum machine_mode
             && REGCLASS_HAS_FP_REG (dstclass))
           return 4;
       
      +  if (REGCLASS_HAS_FP_REG (dstclass) && srcclass == T_REGS)
      +    return ((TARGET_HARD_SH4 && !optimize_size) ? 10 : 7);
      +
         if ((REGCLASS_HAS_FP_REG (dstclass) && srcclass == MAC_REGS)
             || (dstclass == MAC_REGS && REGCLASS_HAS_FP_REG (srcclass)))
           return 9;
      
  • debian/patchs/sh4-linux.dpatch … ビルド時間短縮のため未適用
    本パッチなしでは、カーネルビルドに必要な-m4-nofpuが無効化されたgccが生成される。
    • m4-nofpuに加えるには、下記を変更する。
      --- gcc-4.0.2/gcc/config.gcc~   2005-08-09 19:57:04.000000000 +0900
      +++ gcc-4.0.2/gcc/config.gcc    2005-11-27 16:14:54.000000000 +0900
      @@ -1881,6 +1881,7 @@ sh-*-symbianelf* | sh[12346l]*-*-symbian
              sh_multilibs=${with_multilib_list}
              if test x${sh_multilibs} = x ; then
                      case ${target} in
      +               sh4-*-linux*)   sh_multilibs=m4,m4-nofpu ;;
                      sh[1234]*)      sh_multilibs=${sh_cpu_target} ;;
                      sh64* | sh5*)   sh_multilibs=m5-32media,m5-32media-nofpu, 省略
                      sh-superh-*)    sh_multilibs=m4,m4-single,m4-single-only,m4-nofpu ;;
      
      SH1〜SH4のバイナリに対応させるならば下記を。
      ただし、ビルド時間が4日程度(1オプション追加で約1日)必要です。
      (本来ならは、-m4-single(単制度浮動少数)、-m4-single-only(??)も有効にすべきかも。)
               sh4-*-linux*)	sh_multilibs=m1,m2e,m4,m4-single ;;
      
      ただし、ビルド時間が4日程度(1オプション追加で約1日)必要なので今回はオミット。

    • 追記
      GCC_EXTRA_CONFIG="--with-multilib-list=m4,m4-nofpu"
      を設定するのが本来のやり方みたい。

  • debian/rules.patch
    # which patches should be applied?
    debian_patches = \
    	gcc-version \
    	gcc-textdomain \
    	rename-info-files \
    	libstdc++-pic \
    	libstdc++-doclink \
    	amd64-specs \
    	gccbug \
    	gccbug-posix \
    	boehm-gc-nocheck \
    	acats-expect \
    	fastjar-version \
    	libstdc++-doxygen \
    	pr19769 \
             sh4-T_REGS \
    	sh4-linux \ 
    
    #	cvs-updates \
    
  • debian/rules.defs
    with_ada := no
    with_check := no
    
  • debian/rules.d/binary-gcc.mk
    $(binary_stamp)-gcc: $(install_dependencies)
        dh_testdir
        dh_testroot
        mv $(install_stamp) $(install_stamp)-tmp
    
        rm -rf $(d_gcc)
        dh_installdirs -p$(p_gcc) $(dirs_gcc)
    
        mv $(d)/$(PF)/$(libdir)/libgcc_s.so $(d)/$(gcc_lib_dir)/libgcc_s.so
        # rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
        # ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
    
  • debian/rules.d/binary-gcc-cross.mk … クロスビルドを行う場合
    $(binary_stamp)-gcc: $(install_dependencies)
        dh_testdir
        dh_testroot
        mv $(install_stamp) $(install_stamp)-tmp
    
        rm -rf $(d_gcc)
        dh_installdirs -p$(p_gcc) $(dirs_gcc)
    
        mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libgcc_s.so $(d)/$(gcc_lib_dir)/libgcc_s.so
        # rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
        # ln -sf /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libgcc_s.so.$(GCC_SONAME) 省略
    

メモ … glibc-2.3.5-8のビルド(gcc-4.0で) Edit

  • ソースおよびpatch
    http://eggplant.ddo.jp/www/download/debian26/source/ に置いています。

  • patch
    合計6個の追加パッチが必要です。
    最初の2個はSH-Linuxのホームページ glibc-2.3.3-27.12.src.rpm から拝借しました。
    • debian/patchs/glibc-2.3.3-sh-nptl-multidir.dpach
    • debian/patchs/glibc-2.3.3-sh-linux-fcntl_h.dpatch
    • debian/patchs/glibc-2.3.4-sh-dl-machine_h.dpatch
    • debian/patchs/glibc-2.3.5-sh-wordexp.dpatch
    • debian/patchs/glibc-2.3.5-sh-lowlevellock.dpatch … ntpl対策パッチ
    • debian/patchs/glibc-2.3.5-sh-memset.dpatch

  • debian/patches/00list 下記をパッチリストの最終行へ追加
    glibc-2.3.3-sh-nptl-multidir
    glibc-2.3.3-sh-linux-fcntl_h
    glibc-2.3.4-sh-dl-machine_h
    glibc-2.3.5-sh-wordexp
    glibc-2.3.5-sh-lowlevellock
    glibc-2.3.5-sh-memset
    
  • debian/rules.d/build.mk
    configparamsを追加。
        echo "LIBGD = no"		>> $(DEB_BUILDDIR)/configparms
        echo "sysconfdir = /etc"	>> $(DEB_BUILDDIR)/configparms
        echo "rootsbindir = /sbin"	>> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-dl-tsd.os        := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod7.os   := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod8.os   := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod9.os   := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod10.os  := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod12.os  := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod14a.os := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "CFLAGS-tst-tlsmod14b.os := -O1" >> $(DEB_BUILDDIR)/configparms
        echo "no-z-defs=yes"                  >> $(DEB_BUILDDIR)/configparms
    ifneq ($(call xx,slibdir),)
         echo "slibdir = $(call xx,slibdir)" >> $(DEB_BUILDDIR)/configparms
    endif
    
  • debian/sysdeps/sh4.mk
    nptlのみサポートします。(ビルド時間短縮のためチェックもはずしています。)
    CC = gcc
    BUILD_CC = gcc
    RUN_TESTSUITE = no
    
    # build libc with nptl instead of linuxthreads                                  
    libc_MIN_KERNEL_SUPPORTED = 2.6.0
    libc_add-ons = nptl $(add-ons)
    libc_extra_cflags = -O3
    libc_extra_config_options := $(extra_config_options) --with-tls --with-__thread
    
    # build libc both linuxthreads and nptl                   
    #BUILD_CFLAGS = -O3 -g 
    #HOST_CFLAGS = -pipe -O3 -fstrict-aliasing -g $(call xx,extra_cflags) 
    #nptl_extra_cflags = -g0 -O3
    #GLIBC_PASSES += nptl
    
  • ビルド
    約3.5時間後(distccを使用)、このようなパッケージが生成される。
    glibc-doc_2.3.5-8_all.deb    libc6_2.3.5-8_sh4.deb
    libc6-dbg_2.3.5-8_sh4.deb    libnss-dns-udeb_2.3.5-8_sh4.udeb
    libc6-dev_2.3.5-8_sh4.deb    libnss-files-udeb_2.3.5-8_sh4.udeb
    libc6-pic_2.3.5-8_sh4.deb    locales_2.3.5-8_all.deb
    libc6-prof_2.3.5-8_sh4.deb   nscd_2.3.5-8_sh4.deb
    libc6-udeb_2.3.5-8_sh4.udeb
    


Counter: 7319, today: 2, yesterday: 0

添付ファイル: fileMandelbrot.png 281件 [詳細] fileTestAwt.png 281件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-10-25 (日) 10:20:49 (5289d)