ARMのgcc環境を構築する4
pizzafactory-gnu-toolsのインストール
https://sourceforge.jp/projects/pf3gnuchains/releases/30715
を教えていただいたので、arm-elfをMacOSXにインストールする。
seiryu$ arm-elf-gcc -v dyld: Library not loaded: /usr/lib/libiconv.2.dylib Referenced from: /Users/seiryu/Projects/Chumby/tools/pizza/bin/arm-elf-gcc Reason: Incompatible library version: arm-elf-gcc requires version 7.0.0 or later, but libiconv.2.dylib provides version 5.0.0 Trace/BPT trap seiryu$
gccが動かない。libiconvのバージョンが古い?
Libiconvのインストール
http://homepage.mac.com/matsuan_tamachan/software/LibIconv.html
ftp://ftp.gnu.org/gnu/libiconv
を参考にlibiconv-1.20.tar.gzをインストールしてみる。
seiryu$ ./configure --prefix=/usr seiryu$ make seiryu$ sudo make install
特に問題なくインストール完了。
seiryu$ make depend rm -f Makefile.depend arm-elf-gcc -S -mcpu=arm9tdmi -Wa -mbig-endian -O2 -DAZ9360MB -DGDB_STUB -I. -I../../include -I../../config/armv4/az9360mb -I../../config/armv4 -I../../kernel ../../config/armv4/makeoffset.c dyld: lazy symbol binding failed: Symbol not found: _getrlimit$UNIX2003 Referenced from: /Users/seiryu/Projects/Chumby/tools/pizza/bin/../libexec/gcc/arm-elf/3.4.3/cc1 Expected in: /usr/lib/libSystem.B.dylib dyld: Symbol not found: _getrlimit$UNIX2003 Referenced from: /Users/seiryu/Projects/Chumby/tools/pizza/bin/../libexec/gcc/arm-elf/3.4.3/cc1 Expected in: /usr/lib/libSystem.B.dylib arm-elf-gcc: Internal error: Trace/BPT trap (program cc1) Please submit a full bug report. See <URL:http://gcc.gnu.org/bugs.html> for instructions. make: *** [makeoffset.s] Error 1 seiryu$
やはり別のエラーが出る。MacOSX10.4.11ppcを使っているのだが、toolchainの作成環境とOSのバージョン違いが原因の気がしてきた...
とりあえずここでいったんやめて別の手を考える。
gnuarmのインストール
http://www.gnuarm.com/
でMacOSX、Cygwin、Linuxのgcc等が公開されているのでこれをインストールしてみる。
# MacOSX版はちょっとバージョンが古いが...
seiryu$ arm-elf-gcc -v Reading specs from /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/specs Configured with: ../gcc-3.3.2/configure --target=arm-elf --prefix=/fake_root/usr/local/ --enable-interwork --enable-multilib --enable-languages=c,c++ --with-newlib --with-headers=../newlib-1.12.0/newlib/libc/include Thread model: single gcc version 3.3.2
問題なし。
seiryu$ make depend rm -f Makefile.depend arm-elf-gcc -S -mcpu=arm9tdmi -Wa -mbig-endian -O2 -DAZ9360MB -DGDB_STUB -I. -I../../include -I../../config/armv4/az9360mb -I../../config/armv4 -I../../kernel ../../config/armv4/makeoffset.c cc1: error: unrecognized option `-Wa' make: *** [makeoffset.s] Error 1
Waオプションがわからないようなので、とりあえず削除してみる。
(jsp143/config/armv4/az9360mb/Makefile.config)
seiryu$ make depend 〜〜 略 〜〜 arm-elf-gcc -mcpu=arm9tdmi -mbig-endian -O2 -DAZ9360MB -DGDB_STUB -I. -I../../include -I../../config/armv4/az9360mb -I../../config/armv4 -nostdlib -mcpu=arm9tdmi -N -mbig-endian -Wl,-Ttext,0x0000003c -T ../../config/armv4/az9360mb/ns9360.ld -o jsp \ start.o sample1.o timer.o serial.o logtask.o log_output.o vasyslog.o t_perror.o strerror.o kernel_cfg.o libkernel.a -lgcc /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/../../../../arm-elf/bin/ld: /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_udivsi3.o): compiled for a little endian system and target is big endian File in wrong format: failed to merge target specific data of file /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_udivsi3.o) /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/../../../../arm-elf/bin/ld: /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_umodsi3.o): compiled for a little endian system and target is big endian File in wrong format: failed to merge target specific data of file /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_umodsi3.o) /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/../../../../arm-elf/bin/ld: /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_dvmd_tls.o): compiled for a little endian system and target is big endian File in wrong format: failed to merge target specific data of file /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_dvmd_tls.o) collect2: ld returned 1 exit status make: *** [jsp] Error 1
libgcc.a等とターゲットのエンディアンが違う?
gcc環境もエンディアンごとにそろえないといけないのね...
とりあえず今日はここまで。
次の予定
・gnuarm.comのCygwin版バイナリを試してみる。
・gnuarm.comかpizzafactory-gnu-toolsの実績のあるバージョンでgcc環境をコンパイルしてみる。
・Cygwinで一からgcc環境をコンパイルしてみる。