很多人從事 Android 移植,但連 Android Toolchain 都自行維護者,相對就少多了。筆者過去有幸在「台灣心」計畫中,從事建構於台灣自主 CPU 的軟體開發,嘗試從零到有,將 Android 移植到 Andes NDS32 架構,就涉及到 Toolchain 的更動。而維護 0xdroid 與對應 0xlab 的 GNU Toolchain,不免會迷失於眾多的原始程式碼,只好靜下心慢慢探索,沒想到因此挖掘到頗多「寶物」,本文簡記備忘使用。
Google 工程師 Jing Yu 於 Jan 18, 2010 提交一份修改 "Bring gcc-4.4.0 to up-to-date",讓人摸不著頭緒,不過其對於 GCC 的 architecture 更動,追加了新項目,可參見檔案 gcc-4.4.0/gcc/config/linux-grtev1.h 。以下節錄開頭註解:
/* Definitions for Linux-based GRTE (Google RunTime Environment) version 1.這個以 Linux 為基礎的 GRTE 到底是什麼呢?沒獲得解答,只好在其 gcc spec 檔中探索,以下是相關的描述:
Copyright (C) 2009 Free Software Foundation, Inc.
Contributed by Chris Demetriou.
This file is part of GCC.
/* When GRTE links statically, it needs its NSS and resolver libraries這裡的 libc 看來是獨立的 C Library 實做,比較有趣的是 libnss 的部份。libnss 可透過外部的 module 作擴充,比方說 libnss-ldap 就是 "NSS module for using LDAP as a naming service",而前述 gcc spec 提及當進行靜態編譯時,需要將所需的 module 一併連結,那麼,這系列 libnss_ 開頭的函式庫,顯然就是 GRTE (Google RunTime Environment) 所需的基礎建設。來看看有哪些特別的:
linked in as well. Note that when linking statically, these are
enclosed in a group by LINK_GCC_C_SEQUENCE_SPEC. */
#undef LINUX_GRTE_EXTRA_SPECS
#define LINUX_GRTE_EXTRA_SPECS \
{ "libc", "%{static:%(libc_static);:-lc}" }, \
{ "libc_p", "%{static:%(libc_p_static);:-lc_p}" }, \
{ "libc_static", \
"-lc -lnss_borg -lnss_cache -lnss_dns -lnss_files -lresolv" }, \
{ "libc_p_static", \
"-lc_p -lnss_borg_p -lnss_cache_p -lnss_dns_p -lnss_files_p -lresolv_p" },
- libnss_borg
- libnss_cache
另外,Android Benchmark Suite 2.0.0 已公開釋出,可參見 benchmark.git,值得一書的是,內建了 FDO (Feedback Directed Optimization) 的編譯、測試,與效能評估機制。
0 意見:
Jump to comment form | comments rss | trackback uri