arm-gcc の変更点


#contents

*ARMクロスコンパイラ構築 [#k3c4bb90]
-Windows版arm-gccを作るのはしんどいので、Linux( ubuntu 11.10 )上で作成。

**ビルドのコツ [#h2da8bcf]
-最初にCだけ作って、あとでC++を作るよろし。


~
~
~
''手順''
----
**Linuxマシンを用意する。ubuntu10.4が今回のターゲット。 [#c6094f52]
-マシンを用意しなくても、VMWare上で実行すればホストOSはWindowsでもよい。


~
-いろいろビルドに必要なパッケージをインストールしておく。

 # apt-get install build-essential
 # apt-get install libtool
 # apt-get install autoconf
 # apt-get install automake
 # apt-get install texinfo
 # apt-get install libmpfr-dev
 # apt-get install libmpc-dev
 # apt-get install libgmp3-dev
 # apt-get install libcloog-ppl-dev
 
 # apt-get install bison
 # apt-get install flex
 # apt-get install zlib1g-dev


-無意識にインストール済みなやつも多いので、もしかしたら、抜けがあるかもしれない。


**作業ディレクトリを掘る [#xff0e146]

 $ mkdir build
 $ cd build

**ソースTARボールを入手する。 [#be699c49]

-wget.shを用意
 #!/bin/sh
 wget -o wget1.log http://aist.ring.gr.jp/archives/GNU/binutils/binutils-2.21.tar.bz2   
 wget -o wget2.log http://aist.ring.gr.jp/archives/GNU/gcc/gcc-4.5.2/gcc-4.5.2.tar.bz2       
 wget -o wget3.log ftp://sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz

-実行
 ./wget.sh

**取得できたら展開 [#z9792e6e]
-extract.sh
 #!/bin/sh
 tar xvfj binutils-2.21.tar.bz2
 tar xvfj gcc-4.5.2.tar.bz2
 tar xvfz newlib-1.18.0.tar.gz

-実行
 ./extract.sh

**では、一気に行こうか。 [#ee0f6836]

-build-all.sh
 #!/bin/sh
 
 echo '# =========================================================='
 echo '# setenv'
 echo '# =========================================================='
 
 BINUTILS=binutils-2.21
 GCC4=gcc-4.5.2
 NEWLIB=newlib-1.18.0
 BUILDTARGET='--target=arm-none-eabi --prefix=/usr/local/arm '
 
 
 #   第一引数がエラー値だったらexitする
 print_error () {
     if [ $1 -ne 0 ]
     then
         exit $1
     fi
 }
 
 export PATH=$PATH:/usr/local/arm/bin
 
 mkdir _binutils
 mkdir _gccbuild
 mkdir _newlib
 
 echo '# =========================================================='
 echo '# _binutils'
 echo '# =========================================================='
 
 cd _binutils
 ../$BINUTILS/configure $BUILDTARGET
 print_error $?
 
 make 
 print_error $?
 
 sudo make install
 
 # 次、gccのC言語のみ。config内容はWindowsのWinARMコマンドラインのhelpから取得
 
 cd ..
 
 
 echo '# =========================================================='
 echo '# _gccbuild'
 echo '# =========================================================='
 
 cd _gccbuild
 
 ../$GCC4/configure $BUILDTARGET \
 --disable-nls --disable-shared --disable-threads \
 --with-gcc --with-gnu-ld --with-gnu-as --enable-languages=c,c++ \
 --enable-interwork --enable-multilib --disable-libssp --disable-libstdcxx-pch \
 --with-dwarf2 --program-prefix=arm-none-eabi- --with-newlib \
 --disable-newlib-supplied-syscalls --disable-libunwind-exceptions \
 --disable-newlib-atexit-dynamic-alloc \
 --disable-zlib
 print_error $?
 
 make LANGUAGES=c all-gcc 
 print_error $?
 
 sudo make LANGUAGES=c install-gcc 
 
 #次はNewlib
 
 cd ..
 
 echo '# =========================================================='
 echo '# _newlib'
 echo '# =========================================================='
 
 cd _newlib
 ../$NEWLIB/configure $BUILDTARGET
 print_error $?
 
 make
 print_error $?
 
 #sudo make install ???あれ?
 sudo PATH=$PATH:/usr/local/arm/bin  make install
 
 #最後に、残りのC++も含める。
 
 cd ..
 
 echo '# =========================================================='
 echo '# gcc ALL'
 echo '# =========================================================='
 
 cd _gccbuild
 make
 print_error $?
 
 sudo make install
 cd ..

-だいたいこんな感じ。
-zlibは -m64でエラーする・・・。--> --disable-zlibでごまかす。

~
-たいていは途中でつまずくので、これを切り出して個別に実行したほうが良いかも。
-gcc,binutils,newlibのバージョンは''旬というもの''があるので、環境変数にしてみました。

~
----
-出来たのは良いけれど、armonをビルドして試してみると、"syscalls.c"のビルドが通らなくなっていた。
-SVC命令が-mthumbでは使えない、というアセンブラメッセージだった。
-もしかしたら、ThumbではSVCが使えないのに、そのようなasm文が落ちる設定になっていたのかも。
-古いbinutilsではノーチェックなのか????
--いや、SVCは使えるはずだ。少なくともThumbでは。
--ただ、SVCの引数は24bitなくて8bitになるらしい。

~
----
-実は、CodeSourcery G++ LiteのDLサイトを良く見たら、Windows/Linux版だけでなく、ソースもDL出来るようになっている。
-ソースをDLしてみた。

arm-2010.09-51-arm-none-eabi% ls
 arm-2010.09-51-arm-none-eabi.sh
 binutils-2010.09-51.tar.bz2
 cloog-2010.09-51.tar.bz2
 coreutils-2010.09-51.tar.bz2
 expat-2010.09-51.tar.bz2
 gcc-2010.09-51.tar.bz2
 gdb-2010.09-51.tar.bz2
 gmp-2010.09-51.tar.bz2
 gnu-2010.09-51-arm-none-eabi.txt
 libelf-2010.09-51.tar.bz2
 libiconv-2010.09-51.tar.bz2
 make-2010.09-51.tar.bz2
 mpc-2010.09-51.tar.bz2
 mpfr-2010.09-51.tar.bz2
 newlib-2010.09-51.tar.bz2
 ppl-2010.09-51.tar.bz2
 zlib-2010.09-51.tar.bz2

-必要物全部入っとるやんけ。
- arm-2010.09-51-arm-none-eabi.sh はビルドスクリプトになっていて、Linux版とWindows版の両方を、(たぶん)GNU/Linux OS上でビルド出来るようになっている。
- Windows版のexeファイルはLinux上のクロスMinGW-gccで作成出来る。便利だ。

-というわけで、''今のところ'' CodeSourcery G++ Liteの成果を使わせていただくのが最も便利で楽勝だ。という結論に達した。

~
~
~
~
---------
*別解:summon-arm-toolchainを使ってLinux上でarm-gcc(elf)を作る。 [#edf69c82]

summon-arm-toolchain
-https://github.com/esden/summon-arm-toolchain/
-上記ページのDOWNLOADリンクをクリックして、zipファイルを取得する。
-展開すると、summon-arm-toolchainというシェルスクリプトが出てくるので、これを、たとえばubuntu11.04上
で走らせる。(もちろんWindows上のVMimageなubuntuでも構わない)
-走らせる前に、なるべくなら、build-essential とか gcc , git , libmpfr-dev , libmpc-dev ,libftdi-dev , texinfo などはインストールしておいたほうが良い。( apt-get install 〜 を使う) 


あとはほぼ自動でダウンロード&クロスビルドを行ってくれる。

-できたブツは ~/sat/ 以下に生成されるようだ。 一応ユーザー権限で全部作成された。(含: OpenOCD , gdb7 etc)

-ものぐさな人には便利かも。(全自動でビルドしてくれるので)