Lynx-EyEDの電音鍵盤 新館

制御とか数学とか駄文とか

Mac OS X Lionにしたらarm-elf-gccの野良ビルドができなくなったので再挑戦

昨日のネタの補足です。とほほ。
昨日はSnow Leopardでコンパイルして上手くいってたのですが、Lionにしてからconfigureさえ通らない顛末に。

たぶん、ARM以外のクロスコンパイラでも参考にはなるんじゃないかなとか

gccがクロスコンパイラをコンパイル出来なくなる。
理由はi686-apple-darwin10-gccからx86_64-apple-darwin11-gccとなっていて今までのconfigureが通らないからのようです。(詳しい理由はよく解ってません)

(ytsuboi氏から情報提供頂きました!)XcodeはLionからCコンパイラgccではなくllvmに変更になったそうです。原因はコレでしょう。


プギャーm9^Д^)m9^Д^)m9^Д^)知らんかったw
gccの整備

まず、Lionを導入したらXcodeApp Storeから購入(フリーのバージョンでOK)、macportsをターミナルからアップロードします。

$ sudo port -d selfupdate

で、gcc-4.6をmacports経由でインストールする

$ sudo port install gcc46

(めっちゃ待つ)
終わったら、シンボリックリンクを貼る

$ cd /opt/local/bin
$  ln -s gcc-mp-4.6 gcc
$  ln -s g++-mp-4.6 g++

何がしたいかというと、Xcodeが/usr/binにインストールしたgcc-4.2でコンパイルすると失敗するので仕事をさせたくないため。
ここで、.bash_profileを追記(でも必要ないかも)

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export CFLAGS="-I/opt/local/include -O2"
export LDFLAGS="-L/opt/local/lib"

ここまで終わったら、ターミナルを一回閉じで、もう一回開く。(或は.bashを通す)

$ which gcc

とやって

/opt/local/bin/gcc

と出れば成功。
ここまでの作業をすると、(Mac OSX用の)gcc-4.6とそれに付随しているgmp,mpfr,mpcの準備が完了している。


以下、Snow Leopardの時と同じ作業をする。
■arm-elf-gcc野良ビルド
【用意したもの】
Mac OSXではMacPortsがパッケージを提供するので、なるべくそちらを使った。
他にtarボールで準備したもの

  • gcc-4.6.1.tar.bz2
  • newlib-1.19.0.bz2
  • binutils-2.21.tar.bz2

作業フォルダはどこでも良いので、

~/ARMProj

で行った。

$ cd binutils-2.21
$ mkdir build
$ cd build
$ ../configure --target=arm-elf --prefix=/usr/local/lynxeyed/arm-elf --enable-multilib --with-gmp= --with-mpfr
$ make
$ sudo make install

【newlibの解凍】

$ tar xvf newlib-1.19.0.tar.bz2

【次にgccのコンパイルを行う】

$ cd ~/ARMProj/
$ tar xvf gcc-4.6.1.tar.bz2
$ cd gcc-4.6.1
$ ln -s ../newlib-1.19.0/newlib .
$ mkdir build
$ cd build
$ ../configure --target=arm-elf --prefix=/usr/local/lynxeyed/arm-elf --with-float=soft --disable-shared --with-newlib --enable-languages=c,c++ --enable-multilib --with-gmp --with-mpfr --with-mpc --with-system-zlib CFLAGS_FOR_TARGET="-Os -mthumb -msoft-float" --with-gnu-ld --with-gnu-as
$ make
$ sudo make install 

ついでに.bash_profileにPATHを通しておく

export PATH=/usr/local/lynxeyed/arm-elf/bin:$PATH

これでarm-elf-gcc-4.6.1がLionでも野良ビルドできた。

$ arm-elf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-elf-gcc
COLLECT_LTO_WRAPPER=/usr/local/lynxeyed/arm-elf/libexec/gcc/arm-elf/4.6.1/lto-wrapper
Target: arm-elf
Configured with: ../configure --target=arm-elf --prefix=/usr/local/lynxeyed/arm-elf --with-float=soft --disable-shared --with-newlib --enable-languages=c,c++ --enable-multilib --with-gmp --with-mpfr --with-mpc --disable-nls --with-system-zlib 'CFLAGS_FOR_TARGET=-Os -mthumb -msoft-float' --with-gnu-ld --with-gnu-as
Thread model: single
gcc version 4.6.1 (GCC) 


おしまい。