接著我們需要先安裝 eglibc 的 header , 讓 GCC stage 2 可以正確的使用 Eglibc 的 head file.
前一個步驟 我們已經準備好 eglibc 的 source tree 了 (包含 patch ) .
相同的 , 我也使用在 eglibc source tree 外的方式來進行 make .
首先 , 先產生一個 config.cache & configparms file . 內容如下(Makefile 的一部分) :
modify_patch:
$(Q)if [ ! -e $(PKG_MODIFY_TCH_FILE) ]; then \
if [ ! -e $(VERSION)/config.cache ];then \
cd $(VERSION) ;\
echo -e "\E[1m""\E[32m## Create config.cache file ...\E[0m " ; \
echo "libc_cv_forced_unwind=yes" > config.cache;\
echo "libc_cv_c_cleanup=yes" >> config.cache;\
echo "libc_cv_gnu89_inline=yes" >> config.cache;\
cd - ;\
fi ; \
if [ ! -e $(VERSION)/configparms ];then \
cd $(VERSION) ;\
echo -e "\E[1m""\E[32m## Create configparms file ...\E[0m " ; \
echo "install_root=$(PREFIX)" > configparms ;\
cd - ;\
fi ;\
touch $(PKG_MODIFY_TCH_FILE) ; \
fi
進行 configure. 這時候要注意 BUILD_CC, CC , AR , CXX & RANLIB 的路徑和名稱 ,
我們要使用 gcc stage 1 build 出了的 cross compiler .
BUILD_CC=gcc CC=$(CLFS_TARGET)-gcc AR=$(CLFS_TARGET)-ar \
CXX=$(CLFS_TARGET)-g++ RANLIB=$(CLFS_TARGET)-ranlib \
$(SRC_VERSION)/configure \
--prefix=/usr \
--host=$(CLFS_TARGET) --build=$(CLFS_HOST) \
--disable-profile \
--enable-add-ons \
--with-headers=$(PREFIX)/usr/include \
--without-gd --without-cvs
Configure 結束後 接著進行 make 動作 , 因為我們只需要 header , 所以 指令如下 :
make install-headers install_root=$(PREFIX) install-bootstrap-headers=yes csu/subdir_lib
make 結束後 , 接著我們用手動修改幾個項目 :
A. 複製幾個 .o file 到lib 目錄.
mkdir -p $(PREFIX)/usr/lib ;
cp -f $(VERSION)/csu/crt1.o $(VERSION)/csu/crti.o $(VERSION)/csu/crtn.o $(PREFIX)/usr/lib
B: 用 Cross Compiler 產生空的 libc.so file .
$(TOOLCHAIN_BIN)/$(CLFS_TARGET)-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $(PREFIX)/usr/lib/libc.so
這樣 , Eglibc 的 header 就完成了 .... 下一個步驟 .... 進行 GCC Stage 2 .
沒有留言:
張貼留言