12.30.2006

build cross toolchain from source

ref Nelson's notes ,想不到現在cross build 已經簡化很多了。所以也來試試看。

binutils:
README 中沒有說明configure時可以用的option 有哪些,當然,也沒說明cross-build的方法。
在configure中看到
./configure --help
會列出簡略的build option。
但是沒說--enable, --dieable 可以用的option 有哪些..(大概知道要enable, disable哪些東西的人自然就會 知道吧 :p)。
Nelson's Notes中的
  • --target=arm-elf
  • --prefix=/gnutools
只有兩項。還蠻直觀的..試試:
./configure --prefix=/gnutools --target=arm-elf
很順利,產生Makefile,
之後
make all
install path在/gnutools,所以要是root:
sudo make install
到install path (gnutools) 去看,可以看到binutil 已經裝好了。
接著作gcc...
download gcc-core和g++,unpack (g++會unpack到core中)。
看一下README,再看看FAQ,,需要autoconfig,先安裝autoconf。
grep 一下出現arm的地方..
在INSTALL目錄有比較詳細的安裝說明,是html格式的,從index.html開始看起。
  • --target=arm-elf
  • --with-gnu-as:
    說明系統使用gnu assembler,make process會去尋找build時需要的assembler,如果找到的assembler 不是gnu,卻指定了這個option,會產生conflict。
    同理,如果找到的assembler 是gnu,卻沒有指定這個option,也會有conflict。
    assembler 包含在binutility。
  • --with-gnu-ld
    和--with-gnu-as的意思一樣。說明ld的程式版本。
最後一個section 是有關cross的(終於)。
  • --with-headers=dir
    作cross build時,必須要用這個option 指定target使用的hear files所在的位置。如果 prefix/target/sys-include 目錄不存在的話,build process會將這個option 指定的header修正後,copy到gcc 安裝目錄。
  • --with-libs="dir1 dir2 .... dirN"
    說明target 所用的libary 所在位置,build 過程中會將這些library copy到gcc 安裝位置。
  • --with-newlib
    指定使用newlib。
這一段有點問題,build gcc 需不需要先準備好assembler和library ?
可以參考crosstools的script...

做到這裡,開始懷疑這個步驟和自己的觀念...
先暫停一下..

沒有留言: