ARM用クロスコンパイラのビルド(Windows8+Cygwin)
更新版はコチラへ
ARM用のGCCをWindows8上でビルドしてみたので備忘録として。
◆Cygwinのインストール
setup.exeをダウンロードしてきて実行。
◆関連ソースを入手
①GCCコンパイラ
②binutils(アセンブラやリンカーなど)
③Newlib(組み込み向け標準ライブラリ)
GCC4.5以降は以下の演算ライブラリが必要らしいので入手。
④任意精度計算ライブラリ(GMP)
⑥複素数演算ライブラリ(MPC)
今回入手したファイル(バージョン)は以下の通りです。
ダウンロードしたソースを展開します。(何処へ展開するかはご自由に)
$ mkdir -p /usr/local/src/gnu
$ cd /usr/local/src/gnu
$ tar zxvf ~/Download/gcc-4.7.3.tar.gz
:
$ tar vxvf ~/Download/gmp-5.1.2.tar.bz2
◆ビルド
$export LANG=C この定義が無いとエラーが発生しました。
$export TARGET=arm-eabi
$export PREFIX=/usr/local/gnu
①binutilsのビルド
$ mkdir -p ~/tools/build-binutils-2.23.2
$ cd ~/tools/build-binutils-2.23.2
$ /usr/local/src/gnu/build-binutils-2.23.2/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib
$ make all
$ make install
②インストールしたbinutilsへのパスを通します。
$ export PATH=/usr/local/gnu/bin:$PATH
③GMPのビルド
$ mkdir -p ~/tools/gmp-5.1.2
$ cd ~/tools/gmp-5.1.2
$ /usr/local/src/gnu/gmp-5.1.2/configure --prefix=$PREFIX
$ make all
$ make install
$ /usr/local/src/gnu/mpc-1.0.1/configure --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX --enable-static --disable-shared
ARM用のGCCをWindows8上でビルドしてみたので備忘録として。
◆Cygwinのインストール
setup.exeをダウンロードしてきて実行。
ドライブ直下が吉ですのでディフォルトのままで。 |
適当なフォルダを指定 |
通常のブロードバンド環境ならディフォルトでOK |
わざわざ海外サーバを選ぶ必要はないでしょ。 |
Devel以下を一括でインストールしてしまいます。 GCCのビルドには不要なものもインストールされてしまいますが、何が必須なのか良く分からないもので・・・ あとは「次へ」だけで無事にインストール完了 |
◆関連ソースを入手
①GCCコンパイラ
②binutils(アセンブラやリンカーなど)
③Newlib(組み込み向け標準ライブラリ)
GCC4.5以降は以下の演算ライブラリが必要らしいので入手。
④任意精度計算ライブラリ(GMP)
⑥複素数演算ライブラリ(MPC)
今回入手したファイル(バージョン)は以下の通りです。
ダウンロードしたソースを展開します。(何処へ展開するかはご自由に)
$ mkdir -p /usr/local/src/gnu
$ cd /usr/local/src/gnu
$ tar zxvf ~/Download/gcc-4.7.3.tar.gz
:
$ tar vxvf ~/Download/gmp-5.1.2.tar.bz2
$export LANG=C この定義が無いとエラーが発生しました。
$export TARGET=arm-eabi
$export PREFIX=/usr/local/gnu
①binutilsのビルド
$ mkdir -p ~/tools/build-binutils-2.23.2
$ cd ~/tools/build-binutils-2.23.2
$ /usr/local/src/gnu/build-binutils-2.23.2/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib
$ make all
$ make install
②インストールしたbinutilsへのパスを通します。
$ export PATH=/usr/local/gnu/bin:$PATH
$ mkdir -p ~/tools/gmp-5.1.2
$ cd ~/tools/gmp-5.1.2
$ /usr/local/src/gnu/gmp-5.1.2/configure --prefix=$PREFIX
$ make all
$ make install
④MPFRのビルド
$ mkdir -p ~/tools/mpfr-3.1.2
$ cd ~/tools/mpfr-3.1.2
$ cd ~/tools/mpfr-3.1.2
$ /usr/local/src/gnu/mpfr-3.1.2/configure --prefix=$PREFIX --with-gmp=$PREFIX
$ make all
$ make install
⑤MPCのビルド
$ mkdir -p ~/tools/mpc-1.0.1
$ cd ~/tools/mpc-1.0.1
$ cd ~/tools/mpc-1.0.1
$ make all
$ make install
⑥GCCのビルド1パス目(Newlibのビルドに必要)
$ mkdir -p ~/tools/gcc-4.7.3
$ cd ~/tools/gcc-4.7.3
$ /usr/local/src/gnu/gcc-4.7.3/configure --prefix=$PREFIX --target=$TARGET --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --with-headers=/usr/local/src/gnu/newlib-2.0.0/newlib/libc/include --with-gmp=/usr/local/gnu --with-mpfr=$PREFIX --with-mpc=$PREFIX
$ cd ~/tools/gcc-4.7.3
$ /usr/local/src/gnu/gcc-4.7.3/configure --prefix=$PREFIX --target=$TARGET --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --with-headers=/usr/local/src/gnu/newlib-2.0.0/newlib/libc/include --with-gmp=/usr/local/gnu --with-mpfr=$PREFIX --with-mpc=$PREFIX
$ make all-gcc
$ make install-gcc
⑦Newlibのビルド
$ mkdir -p ~/tools/newlib-2.0.0
$ cd ~/tools/newlib-2.0.0
$ /usr/local/src/gnu/newlib-2.0.0/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib
$ cd ~/tools/newlib-2.0.0
$ /usr/local/src/gnu/newlib-2.0.0/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib
$ make all
$ make install
⑧GCCのビルド2パス目
$ cd ~/tools/gcc-4.7.3
$ make all
$ make all
$ make install
Finish!
「⑥GCCのビルド1パス目(Newlibのビルドに必要)」にて、
返信削除$ cd /usr/local/src/gnu/gcc-4.7.3
の後に、
$ mkdir build
などでサブディレクトを作ってその中でビルドする必要があります。
$ cd build
$ ../configure hoge hoge hoge
$make all-gcc
$make install-gcc
v4.3以降は、ソースディレクトのトップ以外のディレクトリでビルドしないと以下のエラーになる仕様だそうです。
⑧の手順も同様です。
エラー
---
Makefile:make[2]: Entering directory `/usr/local/src/gnu/gcc-4.7.3/arm-eabi/libgcc'
161: ../.././gcc/libgcc.mvars: No such file or directory
make[2]: *** No rule to make target `../.././gcc/libgcc.mvars'. Stop.
make[2]: Leaving directory `/usr/local/src/gnu/gcc-4.7.3/arm-eabi/libgcc'
make[1Makefile:10055: recipe for target `all-target-libgcc' failed
]: *** [all-target-libgcc] Error 2
make[1]: Leaving directory `/usr/local/src/gnu/gcc-4.7.3'
makeMakefile:870: recipe for target `all' failed
: *** [all] Error 2
---
匿名さん
削除御免なさいm(--)m
ビルド手順の記述を手抜きしていました。
実際に行った手順に訂正しました。
dygwin起動時に毎回一通りの設定をしなければコンパイルすることができません。設定を保存して起動してすぐコンパイルできる方法はありませんか?
返信削除環境変数設定を自動化してしまえばOKです。
削除具体的には、export hogehogeをcygwinのホームディレクトリにある、.bashrcの中に記述して保存します。
cygwinを再起動するか、$source ~/.bashrc を実行すると反映されます。
無知ですみません。.bashrcとは.bashrc_historyのことでしょうか。.bashrcというファイルがなくて困っています。
削除.bashrcファイルが無い場合は、nanoやvimなどのテキストエディタで
返信削除export hogehoge1
export hogehoge2
…
と列記したファイルを新規作成されればOKですよ!
Cygwin Setup - Select Packages の Libs 内にある gmp, mpfr, mpc 関連パッケージ(devel も、ただし、doc は不要)入れたら、gmp, mpfr, mpc のビルドは不要だよ。
返信削除探すの面倒だから、Search ボックス使えば良いさ。
binutils-2.23.2がビルド出来ません。
返信削除申し訳ありませんが、最新のcygwinで検証頂けると嬉しいです。
今度の休みにでも試してみますね。
削除お返事ありがとうございます。
返信削除Cygwinでクロスコンパイルは情報が少なくて…
期待しています。
最新のCygwin2.1.0上で、binutils2.25、gcc5.2のクロスコンパイラをビルドしてみましたがエラー無く完了しました。
削除本記事とほぼ同じ手順ですが、若干簡略化しましたので、近日中に具体的な手順をアップいたしますので参考にしてみてください。
記事をアップしましたのでご参考まで
削除