*GNU Compiler Collection 4.0.2 [#uc224735]
-''パッケージ''~
C、C++、JAVA、Objective-C、Fortran95等のパッケージがあります。~
#pre{{
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
}}

-''インストール''~
#pre{{
landisk:~# apt-get install dpkg-dev gcc g++ gcj gij libgcj6-dev 
}}
因みにカーネルは今のところgcc-4.0系でビルドできませんので、gcc-3.4系を使用してください。~
#pre{{
landisk:~# apt-get install gcc-3.4 g++-3.4 libncurses5-dev
}}
-''gcc -v''~
#pre{{
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) [#t49ecb77]
-''GCC4系になって、Java(gcj)が随分動くようになったようです。''~
そこで、ちょっと味見をしてみました。~
(LANDISKで動かしているので遅いですが、結構すごいです。)~
~
-''TestAwt.java''~
#pre{{
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();
    }
}
}}
ビルド&実行~
#pre{{
landisk:~# gcj -O3 TestAwt.java -o TestAwt --main=TestAwt
landisk:~# ./TestAwt 
}}
結果~
CENTER:
&ref(TestAwt.png,nolink);~
~

-''Mandelbrot.java''~
#pre{{
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));
#pre{{
		g.drawLine(x,y,x,y);
	    }
	}
    }
}
}}
ビルド&実行~
#pre{{
landisk:~# gcj -O3 Mandelbrot.java -o Mandelbrot --main=Mandelbrot
landisk:~# ./Mandelbrot
}}
結果~
タイトルバーと描画領域が重なっており、多少問題は残っていますが、~
GCC4系では、ここまで動くようになっています。~
~
CENTER:
&ref(Mandelbrot.png,nolink);~
~
~
*メモ … gcc-4.0_4.0.2-2のビルド [#id7fe04b]
-ソースおよびpatch~
http://eggplant.ddo.jp/www/download/debian26/source/ に置いています。~
~


-patch~
--sh4-T_REGS.dpatch … http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21623~
#pre{{
: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に加えるには、下記を変更する。~
#pre{{
--- 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(??)も有効にすべきかも。)~
#pre{{
         sh4-*-linux*)	sh_multilibs=&color(red){m1,m2e,m4,m4-single}; ;;
}}
ただし、ビルド時間が4日程度(1オプション追加で約1日)必要なので今回はオミット。~
~
---追記~
GCC_EXTRA_CONFIG="--with-multilib-list=m4,m4-nofpu" ~
を設定するのが本来のやり方みたい。~
~
-debian/rules.patch
#pre{{
# 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 \
         &color(red){sh4-T_REGS \};
%%	&color(red){sh4-linux \}; %%

#	cvs-updates \
}}
-debian/rules.defs~
#pre{{
with_ada := &color(red){no};
with_check := &color(red){no};
}}
-debian/rules.d/binary-gcc.mk~
#pre{{
$(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)

    &color(red){mv $(d)/$(PF)/$(libdir)/libgcc_s.so $(d)/$(gcc_lib_dir)/libgcc_s.so};
    &color(red){#}; rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
    &color(red){#}; ln -sf /$(libdir)/libgcc_s.so.$(GCC_SONAME) $(d)/$(gcc_lib_dir)/libgcc_s.so
}}
-debian/rules.d/binary-gcc-cross.mk … クロスビルドを行う場合~
#pre{{
$(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)

    &color(red){mv $(d)/$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libgcc_s.so $(d)/$(gcc_lib_dir)/libgcc_s.so};
    &color(red){#}; rm -f $(d)/$(PF)/$(libdir)/libgcc_s.so
    &color(red){#}; ln -sf /$(PF)/$(DEB_TARGET_GNU_TYPE)/$(libdir)/libgcc_s.so.$(GCC_SONAME) 省略
}}
*メモ … glibc-2.3.5-8のビルド(gcc-4.0で) [#t13db631]
-ソースおよび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
下記をパッチリストの最終行へ追加
#pre{{
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を追加。~
#pre{{
    echo "LIBGD = no"		>> $(DEB_BUILDDIR)/configparms
    echo "sysconfdir = /etc"	>> $(DEB_BUILDDIR)/configparms
    echo "rootsbindir = /sbin"	>> $(DEB_BUILDDIR)/configparms
    &color(red){echo "CFLAGS-dl-tsd.os        := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod7.os   := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod8.os   := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod9.os   := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod10.os  := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod12.os  := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod14a.os := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){echo "CFLAGS-tst-tlsmod14b.os := -O1" >> $(DEB_BUILDDIR)/configparms};
    &color(red){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のみサポートします。(ビルド時間短縮のためチェックもはずしています。)
#pre{{
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を使用)、このようなパッケージが生成される。~
#pre{{
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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS