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を導入したらXcodeをApp 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ボールで準備したもの
作業フォルダはどこでも良いので、
~/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)
おしまい。