ひでみのアイデア帳

くだらないことなんだけど、忘れないために・・・

MicroBlazeクロスコンパイラ

また、随分と開いてしまった。

忙しいながらもぼちぼちと進めているが・・・

本家gccでMicroBlazeのlittle endian化できないかとやってたんだけど、binutilsもいぢらなければいけないのと結果的にlwをlwr化するだけでは出来なかったので断念した。

Xilinxのgccは4.6.2で、本家は4.7.2です。

Xilinxのgccはlittle endian対応なので-mlittle-endianをgccの引数につければ、little endian化されるが本家にはこの引数はない。

つまり、big endianでコンパイルされる。

何が問題かというと、本家gccだとconstant値が逆に読み込まれてしまう現象が発生する。

まぁ、 constant値を読むところの読み込むアドレスを"^3"すればいいだけなんだけど・・・

もちろん、全部で・・・

あと、ELFバイナリがXilinxが little endianで本家はbig endianだった。

出来上がったELFデータがおかしいなぁと、思ったのはこのせいだった。

(もしかしたら、ELFデータがlittle endianされているからかもしれないが・・・)

本家gccをコンパイルするスクリプトを下記に貼り付けておく。

このスクリプトをそのまま実行するといつものようにダウンロードからインストールまで全自動です。

ーーーーここからーーーー

!/bin/bash

#

PROJECT: Build MicroBlaze Cross Compiler

----------------------------------------------------------------------

#

make_microblaze_gcc.

Copyright (C) 2011-2012 H.Ishihara, http://www.aquaxis.com/

#

Permission is hereby granted, free of charge, to any person obtaining

a copy of this software and associated documentation files (the

"Software"), to deal in the Software without restriction, including

without limitation the rights to use, copy, modify, merge, publish,

distribute, sublicense, and/or sell copies of the Software, and to

permit persons to whom the Software is furnished to do so, subject to

the following conditions:

#

The above copyright notice and this permission notice shall be

included in all copies or substantial portions of the Software.

#

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#

For further information please contact.

  http://www.aquaxis.com/

  info(at)aquaxis.com or hidemi(at)sweetcafe.jp

#

v1.00 2011/02/14 Create from Hidemi

v1.01 2011/06/23 Change MPFR Version 3.0.0 -> 3.0.1

v1.02 2012/01/20 Revision UP

v1.03 2012/10/14 Change GCC Version 4.7.2

#

インストール先ディレクトリ

export PREFIX=/usr/microblaze

各ソースのバージョン

export BINUTILS_VERSION=2.22

export GMP_VERSION=5.0.5

export MPFR_VERSION=3.1.1

export MPC_VERSION=1.0.1

export GCC_VERSION=4.7.2

export NEWLIB_VERSION=1.20.0

mkdir $PREFIX

mkdir $PREFIX/src

mkdir $PREFIX/tmp

mkdir $PREFIX/tmp/binutils-build

mkdir $PREFIX/tmp/gcc-build

ソースコードのダウンロードと解凍

cd $PREFIX/src

wget http://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.bz2

wget ftp://ftp.gmplib.org/pub/gmp-$GMP_VERSION/gmp-$GMP_VERSION.tar.bz2

wget http://www.mpfr.org/mpfr-current/mpfr-$MPFR_VERSION.tar.bz2

wget http://www.multiprecision.org/mpc/download/mpc-$MPC_VERSION.tar.gz

wget ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.bz2

wget ftp://sources.redhat.com/pub/newlib/newlib-$NEWLIB_VERSION.tar.gz

tar xjvf binutils-$BINUTILS_VERSION.tar.bz2

tar xjvf gmp-$GMP_VERSION.tar.bz2

tar xjvf mpfr-$MPFR_VERSION.tar.bz2

tar xzvf mpc-$MPC_VERSION.tar.gz

tar xjvf gcc-$GCC_VERSION.tar.bz2

tar xzvf newlib-$NEWLIB_VERSION.tar.gz

binutils構築

cd $PREFIX/tmp/binutils-build

$PREFIX/src/binutils-$BINUTILS_VERSION/configure  --prefix=$PREFIX --target=microblaze

make

make install

export PATH=$PREFIX/bin/:$PATH

export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH

GMP/MPFR/MPCの構築

cd $PREFIX/src/gmp-$GMP_VERSION

./configure --prefix=$PREFIX

make

make check

make install

cd $PREFIX/src/mpfr-$MPFR_VERSION

./configure --prefix=$PREFIX --with-gmp=$PREFIX

make

make check

make install

cd $PREFIX/src/mpc-$MPC_VERSION

./configure --prefix=$PREFIX --with-gmp=$PREFIX

make

make check

make install

GCCの構築

cd $PREFIX/src/gcc-$GCC_VERSION

ln -s $PREFIX/src/newlib-$NEWLIB_VERSION/newlib .

ln -s $PREFIX/src/newlib-$NEWLIB_VERSION/libgloss .

cd $PREFIX/tmp/gcc-build

$PREFIX/src/gcc-$GCC_VERSION/configure --prefix=$PREFIX --target=microblaze --disable-nls --with-gnu-as --with-gnu-ld --enable-languages="c,c++" --with-headers=$PREFIX/src/newlib-$NEWLIB_VERSION/newlib/libc/include --with-newlib --with-libgloss --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX

make all

make install

ln -s $PREFIX/microblaze/lib/libnosys.a $PREFIX/microblaze/lib/libxil.a

ーーーーここまでーーーー