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/
MacOSXCygwinLinuxgcc等が公開されているのでこれをインストールしてみる。
# 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環境をコンパイルしてみる。