3.PS3用(Powerpc版)のクロスコンパイル環境構築
1 クロスコンパイルに必要なファイルを入手
☆linux-2.6.18.3 言わずと知れたLinuxカーネル
☆glibc-2.4 GNUライブラリー
☆bintuils-2.17 アセンブラ,リンカー,ローダー
☆gcc-4.1.1 GNUコンパイラー
☆zlib-1.2.3 libzライブラリー
近くのミラーサイトより入手するだワン!
2 クロスコンパイル用ディレクトリの作成とファイルの展開
今回の作業は特に断りがない限りrootユーザで作成するだワン!よって間違えると環境が壊れてしまうこともあるだワン!
Linuxのお約束ごとですが,作業に関してはすべて自己責任だワン!。細心の注意を払って作業するだワン!
まずは適当な場所にクロスコンパイル用のディレクトリを作成します。
#mkdir -v /usr/local/ps3
export CROSS=/usr/local/ps3 |
今回は/usr/local/ps3ディレクトリ以下に環境を構築します。
クロスコンパイルに必要なファイルをsourceディレクトリを作成してその中に保存します。
#mkdir -v ${CROSS}/source
#cd ${CROSS}/source
#tar jxvf linux-2.6.18.3.tar.bz2
#tar jxvf binutils-2.17.tar.bz2
#tar jxvf glibc-2.4.tar.bz2
#tar jxvf gcc-4.1.1.tar.bz2
#tar zxvf zlib-1.2.3.tar.gz |
クロスコンパイルで作成したコンパイラーやアセンブラー,リンカー,ローダーを保存するディレクトリを作成します。
| #mkdir -v ${CROSS}/cross-ps3 |
ヘッダーファイルやライブラリー関連を保存するディレクトリを作成します。
| #mkdir -v ${CROSS}/tools-ps3 |
3 環境ファイルの作成
クロスコンパイル環境を使うための環境ファイルを作成します。PS3のプログラムをコンパイルするときにだけ環境を変更できるようにします。
ファイルの内容は以下のとおり
# .ps3rc
# PS3 Cross compile Environment
#
if [ -z ${CROSS} ] ; then
CROSS=/usr/local/ps3
export PATH=${CROSS}/cross-ps3/bin:${PATH}
fi
unset CFLAGS
unset CXXFLAGS
export PS3_HOST=i386-cross-linux-gnu
export PS3_TARGET=powerpc64-unknown-linux-gnu
export PS3_TARGET32=powerpc-unknown-linux-gnu
export BUILD32=-m32
export BUILD64=-m64 |
環境ファイルを読み込んで環境を整えます。
4 PS3用クロスコンパイラーの作成
1 カーネルヘッダーを準備する
これからコンパイルに必要なヘッダーファイルを「tools-ps3」ディレクトリへコピーします。
#cd ${CROSS}/source
#cd linux-2.6.18.3
#make include/linux/version.h
#mkdir -v ${CROSS}/tools-ps3/include
#cp -av include/asm-powerpc ${CROSS}/tools-ps3/include/asm
#cp -av include/{asm-generic,asm-ppc,linux} ${CROSS}/tools-ps3/include/ |
2 binutilsをクロスコンパイル用に準備する
CLFS提供のパッチファイルを当ててPS3用にbinutilsをコンパイルします。
必要なパッチは次のとおり
☆binutils-2.17-posix-1.patch
☆binutils-2.17-genscripts_multilib-1.patch
CLFSのパッチはWARNINGが出るので,WARNINGが出ないように作成しなおしただワン!。気になる方はこちらよりどうぞだワン!
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
#cd ${CROSS}/source/binutils-2.17
#patch -Np1 -i ../binutils-2.17-ps3-1.patch
#mkdir -v ../build-binutils-ps3
#cd ../build-binutils-ps3
#../binutils-2.17/configure --prefix=${CROSS}/cross-ps3 \
> --host=${PS3_HOST} \
> --target=${PS3_TARGET} \
> --with-lib-path=/usr/local/ps3/tools-ps3/lib \
> --disable-nls \
> --enable-shared \
> --enable-64-bit-bfd |
エラーなく終了したらコンパイルし導入します。
#make configure-host
#make -j3
#make install |
最後にlibibertyヘッダーをtools-ps3ディレクトリへコピーします。
| #cp -v ../binutils-2.17/include/libiberty.h ${CROSS}/tools-ps3/include |
3 Glibcのヘッダーファイルを導入する
クロスコンパイルに必要なヘッダーファイルをコンパイルします。
confiureファイルを少し編集する必要があります。
簡略化するためにパッチファイルを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/glibc-2.4
#patch -Np1 -i ../glibc-2.4-ps3-1.patch
#mkdir -v ../build-glibc-ps3
#cd ../build-glibc-ps3 |
NPTLサポートのためのconfig.cacheファイルを作成します。
#echo "libc_cv_forced_unwind=yes" > config.cache
#echo "libc_cv_c_cleanup=yes" >> config.cache
#echo "libc_cv_ppc_machine=yes" >> config.cache |
powerpc64拡張用のconfig.cacheファイルを作成します。ファイルはconfig.cacheに追記します。
#echo "libc_cv_mlong_double_128ibm=yes" >> config.cache
#echo "libc_cv_mlong_double_128=yes" >> config.cache
#echo "libc_cv_powerpc64_tls=yes" >>
config.cache
#echo "libc_cv_initfini_array=yes" >>
config.cache
#echo "libc_cv_gcc___thread=yes" >>
config.cache |
コンパイルをして,ヘッダーファイルを導入します。
#../glibc-2.4/configure --prefix=${CROSS}/tools-ps3 \
> --host=${PS3_TARGET} \
> --build=${PS3_HOST} \
> --disable-sanity-checks \
> --enable-kernel=2.6.0 \
> --with-headers=${CROSS}/tools-ps3/include \
> --cache-file=config.cache \
> --with-binutils=/usr/local/ps3/cross-ps3/${PS3_TARGET}/bin
#make install-headers
#cp -v bits/stdio_lim.h ${CROSS}/tools-ps3/include/bits
#touch /usr/local/ps3/tools-ps3/include/gnu/stubs.h |
4 スタティックなGCCをコンパイルする
次にGCCをスタティックでコンパイルします。
CLFS提供のパッチファイルを当ててPS3用にGCCをスタティック・コンパイルします。
必要なパッチは次のとおり
☆gcc-4.1.1-specs-1.patch
☆gcc-4.1.1-posix-1.patch
☆gcc-4.1.1-cross_search_paths-1.patch
CLFSのパッチはWARNINGが出るので,WARNINGが出ないように作成しなおしただワン!。
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
また,クロスコンパイルするためにいくつかファイルを編集をする必要があります。
上記のパッチと一緒にファイルの修正を行うパッチを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/gcc-4.1.1
#patch -Np1 -i ../gcc-4.1.1-ps3-1.patch
#mkdir -v ../build-gcc-ps3
#cd ../build-gcc-ps3
#../gcc-4.1.1/configure --prefix=${CROSS}/cross-ps3 \
> --host=${PS3_HOST} \
> --target=${PS3_TARGET} \
> --with-local-prefix=${CROSS}/tools-ps3 \
> --disable-nls \
> --disable-shared \
> --disable-threads \
> --enable-languages=c |
コンパイルをして導入します。
#make -j3 all-gcc
#make install-gcc |
5 Powerpc 32ビット版のglibcをコンパイルする
32ビット版のglibcをコンパイルします。Powerpcは32ビットと64ビットの両方をサポートするCPUなので,両方コンパイルします。
例のごとく,CLFS提供のパッチファイルを当てて,32ビット版glibcをコンパイルします。
必要なパッチは次のとおり
☆glibc-2.4-libgcc_eh-1.patch
☆glibc-2.4-localedef_segfault-1.patch
CLFSのパッチはWARNINGが出るので,WARNINGが出ないように作成しなおしただワン!。
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
また,クロスコンパイルするためにいくつかファイルを編集をする必要があります。
上記のパッチと一緒にファイルの修正を行うパッチを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/glibc-2.4
#patch -Np1 -i ../glibc-2.4-ps3-2.patch
#mkdir -v ../build-glibc32-ps3
#cd ../build-glibc32-ps3 |
NPTLサポートのためのconfig.cacheファイルを作成します。
#echo "libc_cv_forced_unwind=yes" > config.cache
#echo "libc_cv_c_cleanup=yes" >> config.cache |
コンパイルして32ビット版のglibcを導入します。
#BUILD_CC="gcc" \
> CC="${PS3_TARGET}-gcc ${BUILD32}" \
> AR=${PS3_TARGET}-ar \
> RANLIB=${PS3_TARGET}-ranlib \
> ../glibc-2.4/configure --prefix=${CROSS}/tools-ps3 \
> --host=${PS3_TARGET32} \
> --build=${PS3_HOST} \
> --disable-profile \
> --enable-add-ons \
> --with-tls \
> --enable-kernel=2.6.0 \
> --with-__thread \
> --with-binutils=${CROSS}/cross-ps3/bin \
> --with-headers=${CROSS}/tools-ps3/include \
> --cache-file=config.cache
#make -j3
#make install |
6 Powerpc 64ビット版のglibcをコンパイルする
ワークディレクトリを作成します。
#mkdir -v ${CROSS}/source/build-glibc64-ps3
#cd ${CROSS}/source/build-glibc64-ps3 |
次にキャッシュファイルと構成パラメータファイルを作成します。NPTLサポートと64ビットライブラリーの場所定義します。
#echo "libc_cv_forced_unwind=yes" > config.cache
#echo "libc_cv_c_cleanup=yes" >> config.cache
#echo "slibdir=${CROSS}/tools-ps3/lib64" >> configparms |
コンパイルして64ビット版のglibcを導入します。
#BUILD_CC="gcc" \
> CC="${PS3_TARGET}-gcc ${BUILD64}" \
> AR=${PS3_TARGET}-ar \
> RANLIB=${PS3_TARGET}-ranlib \
> ../glibc-2.4/configure --prefix=${CROSS}/tools-ps3 \
> --host=${PS3_TARGET} \
> --build=${PS3_HOST} \
> --libdir=${CROSS}/tools-ps3/lib64 \
> --disable-profile \
> --enable-add-ons \
> --with-tls \
> --enable-kernel=2.6.0 \
> --with-__thread \
> --with-binutils=${CROSS}/cross-ps3/bin \
> --with-headers=${CROSS}/tools-ps3/include \
> --cache-file=config.cache
#make -j3
#make install |
7 Powerpc用のGCCをコンパイルする
次にGCCをコンパイルします。
CLFS提供のパッチファイルを当ててPowerpc用にGCCをコンパイルします。
必要なパッチは次のとおり
☆gcc-4.1.1-PR20425-1.patch
以下は作り直したパッチを例に話を進めます。パッチを置くディレクトリは「$CROSS/source」
また,クロスコンパイルするためにいくつかファイルを編集をする必要があります。
上記のパッチと一緒にファイルの修正を行うパッチを作成しただワン!。必要な方はここからどうぞだワン!
#cd ${CROSS}/source/gcc-4.1.1
#patch -Np1 -i ../gcc-4.1.1-ps3-2.patch
#mkdir -v ../build-gccfinal-ps3
#cd ../build-gccfinal-ps3
#../gcc-4.1.1/configure --prefix=${CROSS}/cross-ps3 \
> --host=${PS3_HOST} \
> --target=${PS3_TARGET} \
> --with-local-prefix=${CROSS}/tools-ps3 \
> --disable-nls \
> --enable-shared \
> --enable-languages=c,c++ \
> --enable-__cxa_atexit \
> --enable-c99 \
> --enable-long-long \
> --enable-threads=posix |
コンパイルして導入します。
#make AS_FOR_TARGET=${PS3_TARGET}-as LD_FOR_TARGET=${PS3_TARGET}-ld
#make install |
8 powerpc用のzlibをコンパイルする
圧縮ファイルをサポートするためのライブラリーをコンパイルします。
#cd ${CROSS}/source/zlib-1.2.3
#CC="${PS3_TARGET}-gcc ${BUILD64}" \
>./configure --prefix=${CROSS}/tools-ps3 \
> --shared \
> --libdir=${CROSS}/tools-ps3/lib64
#make all libz.a
#make install
#cp -p libz.a ${CROSS}/tools-ps3/lib64
#${CROSS}/cross-ps3/bin/powerpc64-unknown-linux-gnu-ranlib ${CROSS}/tools-ps3/lib64/libz.a |
ここまででひとまずクロスコンパイル環境構築は終わりだワン!あとは必要に応じて機能を追加していくだワン!
|