follow me

CLFS(1.1.0-Sparc64-Pure64)-クロス開発環境構築(2)

x86環境上で、sparc64用のクロスコンパイル環境を構築します。
組み込み系の経験のある方なら馴れた工程だと思いますが、それ以外の方だとあまり見慣れない作業かもしれません。

◆環境変数の設定
まずは環境変数の設定をします。ホスト環境でのビルドフラグの影響を受けないように、CFLAFSのアンセットを実施し、--host、--targetの為の変数を設定します。
$ unset CFLAGS
$ unset CXXFLAGS
$ echo unset CFLAGS >> ~/.bashrc
$ echo unset CXXFLAGS >> ~/.bashrc
$ export CLFS_HOST="$(echo $MACHTYPE | \
    sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
$ export CLFS_TARGET="sparc64-unknown-linux-gnu"
$ echo export CLFS_HOST=\""${CLFS_HOST}\"" >> ~/.bashrc
$ echo export CLFS_TARGET=\""${CLFS_TARGET}\"" >> ~/.bashrc

◆Build Flagsの指定
今回は、UltraSparc2でも動作させることを考えている為、以下設定としていますが、UltraSparc3以上であれば指定が「ultrasparc3」に変わります。
$ export BUILD64="-m64 -mcpu=ultrasparc -mtune=ultrasparc"
$ export GCCTARGET="-mcpu=ultrasparc -mtune=ultrasparc"
$ echo export BUILD64=\""${BUILD64}\"" >> ~/.bashrc
$ echo export GCCTARGET=\""${GCCTARGET}\"" >> ~/.bashrc

◆カーネルヘッダのインストール
$ patch -Np1 -i ../linux-2.6.24.7-elf_spitfire_fix-1.patch
$ install -dv /tools/include
$ make mrproper
$ make ARCH=sparc64 headers_check
$ make ARCH=sparc64 INSTALL_HDR_PATH=dest headers_install
$ cp -rv dest/include/* /tools/include
実施時のログ:5.5-Linux-Headers-2.6.24.7.log

◆File-4.23のビルド
$ ./configure --prefix=/cross-tools
$ make
$ make install
実施時のログ:5.6-File-4.23.log

◆Cross Binutils-2.18のビルド
Texinfoがホストシステムに導入されていないと、エラーが発生するので注意。
CLFSのバージョンチェックには記載されていなかったと思われるが、必要となる模様。。。
エラー内容は別途記載。
$ patch -Np1 -i ../binutils-2.18-posix-1.patch
$ patch -Np1 -i ../binutils-2.18-branch_update-3.patch
$ mkdir -v ../binutils-build
$ cd ../binutils-build
$ AR=ar AS=as ../binutils-2.18/configure --prefix=/cross-tools \
   --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-lib-path=/tools/lib \
   --disable-nls --enable-shared --enable-64-bit-bfd --disable-multilib
$ make configure-host
$ make
$ make install
$ cp -v ../binutils-2.18/include/libiberty.h /tools/include
実施時のログ:5.7-CrossBinutils-2.18.log

◆Cross GCC-4.2.4 - Staticのビルド
ここで、C言語のみのGCCビルドを実施する。(他のC++などは作成しない、次のGCCビルドで作ることになる。)
CLFSでの一回目のGCCビルドで、スタティックなGCCビルドとなります。
$ patch -Np1 -i ../gcc-4.2.4-pure64_specs-1.patch
$ patch -Np1 -i ../gcc-4.2.4-posix-1.patch
$ patch -Np1 -i ../gcc-4.2.4-cross_search_paths-1.patch
$ echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/sparc/linux.h
$ echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/sparc/linux64.h
$ cp -v gcc/Makefile.in{,.orig}
$ sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
    gcc/Makefile.in.orig > gcc/Makefile.in
$ mkdir -v ../gcc-build
$ cd ../gcc-build
$ ../gcc-4.2.4/configure --prefix=/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
    --with-local-prefix=/tools --disable-nls --disable-shared \
    --disable-threads --enable-languages=c
$ make CFLAGS_FOR_TARGET="${GCCTARGET}" all-gcc
$ make install-gcc
実施時のログ:5.8-CrossGCC-4.2.4-Static.log

◆Glibc-2.7のビルド
$ patch -Np1 -i ../glibc-2.7-libgcc_eh-1.patch
$ patch -Np1 -i ../glibc-2.7-localedef_segfault-1.patch
$ mkdir -v ../glibc-build
$ cd ../glibc-build
$ echo "libc_cv_forced_unwind=yes" > config.cache
$ echo "libc_cv_c_cleanup=yes" >> config.cache
$ echo "libc_cv_sparc64_tls=yes" >> config.cache
$ BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc ${BUILD64}" \
    AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" \
    ../glibc-2.7/configure --prefix=/tools \
    --host=${CLFS_TARGET} --build=${CLFS_HOST} \
    --disable-profile --enable-add-ons \
    --with-tls --enable-kernel=2.6.0 --with-__thread \
    --with-binutils=/cross-tools/bin --with-headers=/tools/include \
    --cache-file=config.cache
$ make
$ make install
$ mv -v /tools/include/gnu/stubs{-64,}.h
実施時のログ:5.9-Glibc-2.7.log

◆Cross GCC-4.2.4 - Finalのビルド
このビルドが、クロス開発環境用のGCCのビルドになります。
ここまでは、組み込み開発とかでクロス環境がほしい時に、ちょくちょくやる作業と同じですね。
$ patch -Np1 -i ../gcc-4.2.4-PR31490-1.patch
$ patch -Np1 -i ../gcc-4.2.4-pure64_specs-1.patch
$ patch -Np1 -i ../gcc-4.2.4-posix-1.patch
$ patch -Np1 -i ../gcc-4.2.4-cross_search_paths-1.patch
$ echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/sparc/linux.h
$ echo "
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/sparc/linux64.h
$ cp -v gcc/Makefile.in{,.orig}
$ sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
    gcc/Makefile.in.orig > gcc/Makefile.in
$ mkdir -v ../gcc-build
$ cd ../gcc-build
$ ../gcc-4.2.4/configure --prefix=/cross-tools \
    --target=${CLFS_TARGET} --host=${CLFS_HOST} --disable-multilib \
    --with-local-prefix=/tools --disable-nls --enable-shared \
    --enable-languages=c,c++ --enable-__cxa_atexit \
    --enable-c99 --enable-long-long --enable-threads=posix
$ make AS_FOR_TARGET="${CLFS_TARGET}-as" \
    LD_FOR_TARGET="${CLFS_TARGET}-ld"
$ make install
実施時のログ:5.10-CrossGCC-4.2.4-Final.log
CLFS(1.1.0-Sparc64-Pure64)-クロス開発環境構築(2) | 0 件のコメント | アカウント登録
サイト管理者はコメントに関する責任を負いません。