*セルフコンパイル環境の準備 [#ff600e62]

-''基本セットの導入''~
#pre{{
landisk:/# apt-get install dpkg-dev binutils gcc g++ make libncurses5-dev
}}
etch版を選択した場合は、gcc-4.0系がインストールされます。~
ついでにkernelビルドに必要なgcc-3.4系もインストールしておきます。~
#pre{{
landisk:/# apt-get install gcc-3.4 g++-3.4
}}
~ 
-''次のデバッグツールが使用可能''
--strace … システムコールのトレーサ~
--gdb … 言わずと知れたソースコードレベルデバッガ~
~
*GNU Compiler Collection 3.4.3[#w1f1fd1a]
-''gcc-3.4''~
--hello.c
#pre{{
#include<stdio.h>
#include<stdlib.h>

main()
{
  printf("Hello world !!\n");
}
}}
--コンパイルと実行
#pre{{
landisk:~# gcc hello.c -o hello
landisk:~# ./hello
Hello world !!
}}
-''g++-3.4''~
--hello.cpp~
#pre{{
#include <iostream>

main()
{
    std::cout << "Hello C++ world !!\n";
}
}}
--コンパイルと実行
#pre{{
landisk:~# g++ hello.cpp -o hello_cpp
landisk:~# ./hello_cpp
Hello C++ world !!
}}
-''gcj-3.4 (GNU Compiler for the Java)''
--インストール~
#pre{{
landisk:~# apt-get install gcj libgcj5-dev
}}

--hello.java
#pre{{
public class hello {
    public static void main(String[] argv) {
        System.out.println("Hello Java World !!");
    }
}
}}
--コンパイルと実行
#pre{{
landisk:~# gcj hello.java -o hello_java --main=hello
landisk:~# ./hello_java
Hello Java World !!
}}
-''その他''~
試していませんが、下記の言語パッケージも使用可能かも!
--Objective-C … gobjc
--Fortran 77 … g77
--Pascal … gpc
*メモ … kernelのセルフビルド [#m7670939]
-''概略''~
kernel2.6では、ソースコード以外のディレクトリでビルドすることが可能になっています。~
ここでは、次のようなディレクトリ構成でカーネルをビルドする例を記します。~
#pre{{
/home/landisk/kernel/linux-2.6.11/      …… カーネルソース
/home/landisk/kernel/build/             …… ビルドディレクトリ
}}

-''ソースコードの取得''~
次の場所等からソースコードを取得します。~
http://eggplant.ddo.jp/www/download/kernel26/~
~
-''展開''~
〜/kernel/linux-2.6.11/....というディレクトリに展開されます。~
#pre{{
landisk:~/kernel$ tar vxfz linux-2.6.11-kogiidena-v0.1.src.tgz
}}
-''build ディレクトリの作成''~
buildディレクトリを作り、そこへ.configファイルを用意します。~
( julian_defconfig があればそれを、なければ landisk_defconfig をコピーしてください。)~
#pre{{
landisk:~/kernel$ mkdir build 
landisk:~/kernel$ cp linux-2.6.11/arch/sh/configs/julian_defconfig build/.config
}}

-''Makefileの修正''~
linux-2.6.11/Makefileの該当行を次のように修正します。
#pre{{
CROSS_COMPILE	?=  
HOSTCC  	= gcc
HOSTCXX  	= g++
}}

-''make menuconfig''~
ビルドパラメータをお好みで応じて設定してください。~
(最初は触らないほうが無難ですが・・・)~
#pre{{
landisk:~/kernel$ cd linux-2.6.11
landisk:~/kernel/linux-2.6.11$ make O=~/kernel/build menuconfig
}}
-''make''~
先ほど作成したbuildディレクトリにcdしてmakeします。~
(kernel2.6からmake depは不必要になりました。)~
#pre{{
landisk:~/kernel$ cd ~/kernel/build
landisk:~/kernel/build$ make
}}
-''ビルド終了''~
zImageは、~/kernel/build/arch/sh/boot/zImage にできます。~
カーネルモジュールもこの段階でビルドされています。~
~
-''カーネルmoduleのインストール''~
#pre{{
landisk:~/kernel/build$ su         # suでrootになって、
landisk:~/kernel/build$ make modules_install
}}
*メモ … gcc-3.4_3.4.3-13のビルド [#cedd9ed2]
-ソースおよびpatch~
http://eggplant.ddo.jp/www/download/debian26/source/ に置いています。~
~


-patch~
SH-Linuxのホームページのrpmパッケージから拝借しました。~
--debian/patchs/gcc-3.4.1-PR16665.dpatch~
--debian/patchs/gcc-3.4.1-sh-no-reorder-blocks.dpatch~
--&color(red){debian/patchs/gcc-3.4.3-sh-GCfix.dpatch -- gcj(java)対策パッチ};~
~
-debian/rules.patch
#pre{{
# which patches should be applied?
debian_patches = \
        cvs-updates \
        gcc-version \
        gcc-textdomain \
        rename-info-files \
        libstdc++-pic \
        libstdc++-doclink \
        amd64-specs \
        gccbug \
        gccbug-posix \
        hppa-toplevel hppa-libffi hppa-libjava hppa-libjava-update \
        fastjar-update \
        java-gui-branch \
        boehm-gc-nocheck \
        libltdl \
        m68k-update \
        &color(red){gcc-3.4.1-PR16665 \};
        &color(red){gcc-3.4.1-sh-no-reorder-blocks \};
        &color(red){gcc-3.4.3-sh-GCfix \};
}}
-debian/rules.defs~
#pre{{
with_common_pkgs := &color(red){yes};
with_common_libs := &color(red){yes};
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) $(d)/$(gcc_lib_dir)/libgcc_s.so
}}

-ビルド~
このような依存状態未解決の状態からビルドを開始しました。~
#pre{{
landisk:/share/src2/gcc-3.4/gcc-3.4-3.4.3# dpkg-checkbuilddeps 
dpkg-checkbuilddeps: Unmet build dependencies: gnat-3.3 | gnat-3.4 
g++-3.3 g77-3.3 gobjc-3.3

landisk:/share/src2/gcc-3.4/gcc-3.4-3.4.3# ddpkg-buildpackage -d
}}
約24〜26時間くらいで、このようなパッケージが生成されます。
(この間ノーエラーで生成されました。)
#pre{{
cpp-3.4-doc_3.4.3-13_all.deb      libg2c0-dev_3.4.3-13_sh4.deb
cpp-3.4_3.4.3-13_sh4.deb          libg2c0_3.4.3-13_sh4.deb
fastjar_3.4.3-13_sh4.deb          libgcc1_3.4.3-13_sh4.deb
fixincludes_3.4.3-13_sh4.deb      libgcj-common_3.4.3-13_all.deb
g++-3.4_3.4.3-13_sh4.deb          libgcj5-awt_3.4.3-13_sh4.deb
g77-3.4-doc_3.4.3-13_all.deb      libgcj5-common_3.4.3-13_all.deb
g77-3.4_3.4.3-13_sh4.deb          libgcj5-dev_3.4.3-13_sh4.deb
gcc-3.4-base_3.4.3-13_sh4.deb     libgcj5_3.4.3-13_sh4.deb
gcc-3.4-doc_3.4.3-13_all.deb      libobjc1_3.4.3-13_sh4.deb
gcc-3.4_3.4.3-13_sh4.deb          libstdc++6-dbg_3.4.3-13_sh4.deb
gcj-3.4_3.4.3-13_sh4.deb          libstdc++6-dev_3.4.3-13_sh4.deb
gij-3.4_3.4.3-13_sh4.deb          libstdc++6-doc_3.4.3-13_all.deb
gobjc-3.4_3.4.3-13_sh4.deb        libstdc++6-pic_3.4.3-13_sh4.deb
gpc-2.1-3.4-doc_3.4.3-13_all.deb  libstdc++6_3.4.3-13_sh4.deb
gpc-2.1-3.4_3.4.3-13_sh4.deb      protoize_3.4.3-13_sh4.deb
libffi3-dev_3.4.3-13_sh4.deb      treelang-3.4_3.4.3-13_sh4.deb
libffi3_3.4.3-13_sh4.deb
}}
--補足~
ビルド最終段階のdoxygenにおいて、約2時間以上もコンソール出力が停止するため、~
ハングアップしてるよう感じます。バックでちゃんと動作しているので気長に待ちましょう!~

*メモ … glibc-2.3.5-6のビルド [#y5666edf]
-ソースおよびpatch~
http://eggplant.ddo.jp/www/download/debian26/source/glibc/ に置いています。~
~


-patch~
合計6個の追加パッチが必要です。~
最初の3個はSH-Linuxのホームページ glibc-2.3.3-27.12.src.rpm から拝借しました。~
--debian/patchs/glibc-2.3.2-sh-fpscr_values.dpatch
--debian/patchs/glibc-2.3.3-sh-linux-fcntl_h.dpatch
--debian/patchs/glibc-2.3.3-sh-nptl-multidir.dpach
--debian/patchs/glibc-2.3.4-sh-dl-machine_h.dpatch
--debian/patchs/glibc-2.3.5-sh-wordexp.dpatch
--&color(red){debian/patchs/glibc-2.3.5-sh-lowlevellock.dpatch};
~
~
-debian/patches/00list
下記をパッチリストの最終行へ追加
#pre{{
glibc-2.3.2-sh-fpscr_values
glibc-2.3.3-sh-linux-fcntl_h
glibc-2.3.3-sh-nptl-multidir
glibc-2.3.4-sh-dl-machine_h
glibc-2.3.5-sh-wordexp
&color(red){glibc-2.3.5-sh-lowlevellock};
}}


-debian/rules~
#pre{{
BUILD_CC = &color(red){gcc};
}}


-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-rtld.os := -O -finline-limit=4800 };  &color(orange){←↓改行しない};
&color(red){      --param max-inline-insns-single=4800" >> $(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/linux.mk~
ビルドオプションを少々変更~
#pre{{
nptl_extra_cflags = &color(red){-g0 -O2 -fno-unit-at-a-time};
}}

-debian/sysdeps/sh4.mk~
sh4用ビルド制御ファイルを以下の内容で作成~
(本来はこのファイルに全て記述するのが筋なんだろうけど、、)~
#pre{{
GLIBC_PASSES += nptl
nptl_extra_cflags += -O2 
}}
-ビルド~
--dpkg-dev~
dpkg-dev 1.13.5 以上を導入する必要があります。~
~
--dpkg-checkbuilddeps~
正式には、gcc-4.0が必要ですが、gcc-3.4でビルドを強行します。~
#pre{{
dpkg-checkbuilddeps: Unmet build dependencies: gcc-4.0
}}
--dpkg-buildpackage -d~
約21時間後、このようなパッケージが生成される。~
#pre{{
glibc-doc_2.3.5-6_all.deb    libc6_2.3.5-6_sh4.deb
libc6-dbg_2.3.5-6_sh4.deb    libnss-dns-udeb_2.3.5-6_sh4.udeb
libc6-dev_2.3.5-6_sh4.deb    libnss-files-udeb_2.3.5-6_sh4.udeb
libc6-pic_2.3.5-6_sh4.deb    locales_2.3.5-6_all.deb
libc6-prof_2.3.5-6_sh4.deb   nscd_2.3.5-6_sh4.deb
libc6-udeb_2.3.5-6_sh4.udeb
}}
--補足~
NPTL対応/非対応版glibcの両方を生成しているため、ビルド時間が2倍かかっています。~
NPTL用だけ作成して、さらにLIBの動作テストを省略すると、この4分の1程度になるかも。。。~


~
#counter

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