Linux

5ad40523 :Anonymous 2009-09-26 23:27
>>ad8b1621
今まで dietlibc → uClibc → glibc の順でコンパイルしてたけど、uClibcは要らないようだ。
そのためにglibcのconfigureをいじる必要があるけど(コンパイルのチェックとnptl/sysdeps/pthreadのunwind support。exit 1をtrue 1とかテキトーに変更)。
真っ当にconfigureを通すにはuClibc(uClibcでいけるんだから古いglibcでもいいはず)のlibc.aとcrt?.oがあればいいみたい。

glibcまでの手順。
ar as ld gcc cc1 make busybox(coreutils+find+sed+grep+awk)はstaticなもの、あるいは動作に必要なライブラリとともにあるものとする。
strip ranlibは何もしないシェルスクリプトで対応(ranlibはbinutilsに入っているスクリプトの方がいいかも)。

linux-2.6.30.5: make include/linux/version.h
: cp -r include/asm-generic /usr/include
: cp -r include/linux /usr/include
: cp -r arch/x86/include/asm /usr/include
tcc-0.9.25: make libtcc1.a; cp -i libtcc1.a /usr/lib/libgcc.a
dietlibc-0.32: make && make install
binutils-2.19.1: (dietlibc用のパッチ当て、/opt/diet/include/strings.hの void bcopy 関数をコメントアウト)
: mkdir bfd/sys; cp ../glibc-2.10.1/sysdeps/unix/sysv/linux/i386/sys/user.h bfd/sys
: CC="/opt/diet/bin/diet gcc -nostdinc" ./configure --disable-nls && make && make install
(cd /usr/include; ln -s ../../opt/diet/include/* .) #一旦ヘッダーを/usr/includeへ。gccコンパイル後削除
gcc-3.4.6: (/opt/diet/include/strings.hのコメントアウトを戻す)
: CC="/opt/diet/bin/diet gcc" ./configure --disale-nls --disable-shared && make && make install
(cd /usr/include; for i in *; do test -L $i && rm $i; done) #dietlibcなヘッダーはもう/usr/includeには要らない、削除
(rm /usr/lib/libgcc.a) #本物をコンパイルしたのでもう要らない
再びdietlibc-0.32: make dyn && make install
gawk-3.1.6: CC="/opt/diet/bin/diet-dyn gcc" ./configure && make && make install
(cd $(dirname `gcc -print-libgcc-file-name`; ln -s libgcc.a libgcc_eh.a) #Linux from Scratchによればlibgcc.aのシンボリックリンクでいいそうだ。glibcのコンパイル時に要求されるので
glibc-2.10.1: ../glibc-2.10.1/configure --prefix=/usr --enable-add-ons && make && make install

gawkがdiet-dynでコンパイルできたのが大きいな。
いままではuClibcでコンパイルしてたから、ライブラリまわりがごっちゃになったけどこれならすっきり。

tcc+uClibcな環境では不要なarとmakeのバイナリが必須なのがアレでナニだけど、ままいい感じ。
Powered by shinGETsu.