現在の位置
diff プラグインを使用中
- 追加された行はこの色です。
- 削除された行はこの色です。
- ターゲット環境/クロスコンパイラの構築方法/gcc-ppc64 へ行く。
- ターゲット環境/クロスコンパイラの構築方法/gcc-ppc64 の差分を削除
*概要 [#kb585a3e]
**必要なもの [#g08870c0]
-binutils
-gcc
-glibc
-カーネルヘッダ
-gmp,mpfr,mpc
-gcc, texinfo, m4, bison, gawk, rpm2cpio, gperf
--これらは事前にインストールしておくこと
**作業手順概要 [#o203bac7]
+binutilsを作成
+glibcのヘッダだけ作成
+glibc構築用gccの作成(C言語のみ)
+glibcの構築
+glibc構築用gccの作成(C言語のみ)2回目
+glibcの構築
+フルgccの作成(すべての言語)
-glibcとgccはお互いに依存しているので,何回かに分けて無効オプションを外しながら構築を繰り返す必要がある
**注意 [#o4929584]
-configure,makeを行う場合は,必ずソースがおいてあるディレクトリ以外で行うこと
-文中では,ソース中にworkと言うディレクトリを掘り,そこからの相対パス(../configureなど)で実行している
* 1. 環境 [#rfc76f68]
以下の作業はbashで行うこと。cshだとこのままのコマンドでは動かない場合がある。
** 1.1 環境変数の設定 [#cb2f74e9]
.rcの名前でファイル作成
#
# .rc
# cross compile environment
#
CROSS=/opt/gcc/ppc64/4.5.3
export PATH=${CROSS}/bin:${PATH}
export CROSS_HOST_LIB=${CROSS}/host-lib
export PPC64_HOST=powerpc64-unknown-linux-gnu
export PPC64_TARGET=powerpc64-unknown-linux-gnu
上記のファイルを以下のようにして読み込んでおく
source ./.rc
** 1.2 ディレクトリ作成 [#d8bfb618]
${CROSS}以下にインストールを行うものとする
mkdir ${CROSS} -p
* 2. カーネルヘッダの展開 [#zdebdd89]
rpm2cpio kernel-headers-2.6.31.5-127.fc12.ppc.rpm | cpio --extract --make-directories
chmod 755 -R usr
mkdir ${CROSS}/${PPC64_TARGET}/include -p
cp -a usr/include/ ${CROSS}/${PPC64_TARGET}/
-カーネルソース内のヘッダの位置はディストリビューションによってかわるかもしれず
-シンボリックリンクが含まれているので,展開時は上記のようにrpm用コマンドで展開する
-カーネルヘッダ自体はfedoraのものを使用
* 3. binutils作成 [#i10e7bec]
../configure \
--target=${PPC64_TARGET} \
--prefix=${CROSS} \
--enable-64-bit-bfd
make
make install
-&color(Red){追加のファイルコピー};
mkdir ${CROSS}/include -p
cp -v ../include/libiberty.h ${CROSS}/include/
* 4 gmp,mpfr,mpcの導入 [#w38fa94f]
-双方はホスト側の環境に入れる必要がある
--クロスコンパイラ内部で使用するためであり,ターゲットでリンクするためではない
-gmp<-mpfr<-mpcで依存しているため,この順番でインストールする
**gmp [#p589a7f2]
../configure \
--prefix=${CROSS_HOST_LIB}
make
make install
**mpfr [#b45658b7]
../configure \
--prefix=${CROSS_HOST_LIB} \
--with-gmp=${CROSS_HOST_LIB}
make
make install
**mpc [#jac652ff]
../configure \
--prefix=${CROSS_HOST_LIB} \
--with-gmp=${CROSS_HOST_LIB} \
--with-mpfr=${CROSS_HOST_LIB} \
make
make install
**共有ライブラリの削除 [#r4f7c4ed]
-gmp,mpfr,mpc を導入した後,${CROSS_HOST_LIB}/lib/*.so を削除
--gcc が共有ライブラリのリンクに失敗するため
* 5. gcc(glibc作成用)の作成 [#l341c638]
../configure \
--prefix=${CROSS} \
--target=${PPC64_TARGET} \
--without-headers \
--enable-languages=c \
--disable-libmudflap \
--disable-libssp \
--disable-threads \
--disable-shared \
--disable-multilib \
--disable-biarch \
--with-gmp=${CROSS_HOST_LIB} \
--with-mpfr=${CROSS_HOST_LIB} \
--with-mpc=${CROSS_HOST_LIB} \
make all-gcc
make install-gcc
-この時点で出来るgccはかなり不完全
--glibc を使わずに,かつ色々disableしてall-gccでコンパイルしないと通らない
* 6. glibcのヘッダだけを作る [#sf5651f3]
**作成 [#i7db5a6c]
libc_cv_c_cleanup=yes \
libc_cv_forced_unwind=yes \
../configure \
--prefix=${CROSS} \
--host=${PPC64_TARGET} \
--with-headers=${CROSS}/${PPC64_TARGET}/include \
--with-binutils=${CROSS}/${PPC64_TARGET}/bin \
--enable-add-ons \
--disable-sanity-checks \
--disable-versioning \
make install-headers
-makeは単独でたたく必要はなく,"make install-headers"だけでよい
-&color(Red){ファイルが足りないので仕上げ};
--work中のbitsを参照
cp -v bits/stdio_lim.h ${CROSS}/include/bits
mkdir ${CROSS}/include/gnu -p
touch ${CROSS}/include/gnu/stubs.h
--これを忘れると動かない
-最後まで通らなくても一回installする
* 7. glibc作成用GCC その2 [#p5268317]
**注意 [#z442aafc]
-前のステップのファイル追加コピーを忘れていると,エラーになる
--stubs.h等が足りないと言われる
--一度失敗するとファイルをそのあとでコピーしても失敗し続ける
--一度make distcleanすべし
**makeの前に [#ib7bfe3c]
-work の中を全部一回消す
-make distclean では消えきらない場合がある
**make [#fdeb900d]
../configure \
--prefix=${CROSS} \
--target=${PPC64_TARGET} \
--with-headers=${CROSS}/include \
--enable-languages=c \
--disable-libmudflap \
--disable-libssp \
--disable-threads \
--disable-shared \
--disable-multilib \
--disable-biarch \
--with-gmp=${CROSS_HOST_LIB} \
--with-mpfr=${CROSS_HOST_LIB} \
--with-mpc=${CROSS_HOST_LIB} \
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
-libgcc を含むgcc を作る
--まだ不完全
* 8. glibcの作成 [#qe44fa8a]
**makeの前に [#xba9f703]
-work の中を全部一回消す
-make distclean では消えきらない場合がある
** make [#md6f4248]
ac_cv_type_long_double=no \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
../configure --prefix=${CROSS} \
--host=${PPC64_TARGET} \
--with-headers=${CROSS}/${PPC64_TARGET}/include \
--with-tls \
--with-__thread \
--enable-thread \
--enable-add-ons \
--enable-kernel=2.6.18 \
--disable-sanity-checks \
--disable-multilib \
--disable-biarch \
make gnulib=-lgcc
make install
-最後まで通らなくても一回installする
--この段階ではglibcのコアだけ出来ていれば良い
--エラーが出た場合,makeに-iを付けて続行してみる
---'-i'は,エラーを無視して続行
--install 後に${CROSS}/lib 内にcrt*.oやlibc.a が出来ていればなんとかなる可能性が高い
* 9. glibc作成用GCC その3 [#aa629240]
rm ${CROSS}/${PPC64_TARGET}/lib -f -r
../configure \
--prefix=${CROSS} \
--target=${PPC64_TARGET} \
--with-headers=${CROSS}/include \
--with-libs=${CROSS}/lib \
--enable-languages=c \
--with-gmp=${CROSS_HOST_LIB} \
--with-mpfr=${CROSS_HOST_LIB} \
--with-mpc=${CROSS_HOST_LIB} \
--disable-multilib \
--disable-biarch \
make
make install
-glibcのコアができたので,それを使ってgccを作る
-&color(Red){注意:glibcのコンパイルを行った後は,gccのコンパイル前に一度${CROSS}/${PPC64_TARGET}/libを削除すること};
--gccはconfigure時に${CROSS}/lib内のglibcを${CROSS}/${PPC64_TARGET}/libにコピーする
--このコピーを行うかどうかは,${CROSS}/${PPC64_TARGET}のディレクトリが存在しているかどうかに依存している.
--このため,glibcをコンパイルしても,${CROSS}/${PPC64_TARGET}/libを消しておかないと,新しいglibcがgccのコンパイルに使用されない
* 10. glibcの作成 その2 [#a91bc7bd]
-基本的に前回と同じだが,追加で付けていたオプションを外す
**makeの前に [#o99f0e6e]
-work の中を全部一回消す
-make distclean では消えきらない場合がある
** make [#md6f4248]
ac_cv_type_long_double=no \
../configure --prefix=${CROSS} \
--host=${PPC64_TARGET} \
--enable-kernel=2.6.9 \
--disable-sanity-checks \
--disable-multilib \
--disable-biarch \
make
make install
- 鬼斬の Linux システムコール・エミュレータはカーネル 2.6.9 あたりを基準として実装されている
* 11. GCCの作成 [#v137d262]
rm ${CROSS}/${PPC64_TARGET}/lib -f -r
LDFLAGS="-static" \
../configure \
--prefix=${CROSS} \
--enable-languages=c,c++,fortran \
--target=${PPC64_TARGET} \
--enable-threads=posix \
--with-headers=${CROSS}/include \
--with-libs=${CROSS}/lib \
--with-gmp=${CROSS_HOST_LIB} \
--with-mpfr=${CROSS_HOST_LIB} \
--with-mpc=${CROSS_HOST_LIB} \
--disable-multilib \
--disable-biarch \
make
make install
*使用プログラムのバージョンおよび備考 [#sf6b674f]
**20110622 [#i04bb910]
-kernel-headers-2.6.31.5-127.fc12.ppc.rpm
-binutils-2.21
-gcc-4.5.3
-gmp-5.0.2
-mpc-0.8.2
-mpfr-3.0.1
-glibc-2.14
(文責:しおや)