GNU Compiler Collection 4.0.2 †
- インストール
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) †
- 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
結果
- 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系では、ここまで動くようになっています。
メモ … gcc-4.0_4.0.2-2のビルド †
- 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で) †
- 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
Counter: 7442,
today: 6,
yesterday: 0
|