Gonk 秘辛之編譯系統

作者:
瀏覽:672

之前的文章大都集中在 Firefox OS 運行時的討論,而今天就讓我來平衡報導一下 Firefox OS 運行前的其中一個工作好了,那就是編譯系統;首先要提到的就是 Firefox OS 利用了來自於 Android 的編譯系統,因此 Gaia 和 Gecko 就必需做適當的配置以加入到編譯系統裡。先來看看 Firefox OS 到底有哪些項目需要被加入呢?有 Gaia\ Rilproxy\ Gecko 和 Gonk-misc 等等,前二項由於是針對 Firefox OS 而設計的,因此可以發現其目錄中直接可以看到 Android.mk  (Android 認定的 makefile 名稱);而 Gecko 又是如何呢?一般人可能直覺上就認為應該是直接把 Android.mk 放入 Gecko 裡吧?哦!不對哦, 正確答案是在 Gonk-misc 這個目錄裡! Why?

Gecko 原本是 Firefox browser 裡的核心,它被用在不同的 OS 上,像是 Windows\Mac OS\Linux 和 Android 等, 因此它有一套自己的編譯系統,以便可以編譯不同的版本給各個平台使用, 為了不破壞 Gecko 原有的編譯系統又要將它加入到 Android 的編譯系統中,因此一個稱為 Gonk-misc 的暗椿就被埋到目錄結構裡了。基本上的方法就是撰寫一份 Android.mk 到 Gonk-misc 目錄裡,使得編譯系統在編譯時,能夠有一個管道用來聯繫進入 Gecko 的編譯系統中,再將 Gecko 編譯完的產物移到相關產出目錄中, 最後 Gecko 就被編譯完成了。

因此如果我們再深入了解一下 Gonk-misc 中的 Android.mk ,你便會看到它如何覆蓋掉相關的 make target 而轉移成 Gecko 的編譯方式 。首先該 Android.mk 宣告了一個叫做 Gecko 的 module 再告訴編譯系統它是一個已經事先編譯完的 module ,因此編譯系統只要負責把相關的檔案拷貝到產出目錄中就行了,接下來再覆蓋掉原本找尋編譯完 module 的 target ,將它改成是編譯 Gecko 的標準步驟再加上把相關編譯後的檔案移至相對應的產出目錄中 ( out/target/product/XXX/system/b2g ),這樣一來就順利的將 Gecko 成功加入到 Android 的編譯系統中。另外為了將 Gecko 編譯成 Firefox OS 的版本,需要設定很多相關的參數,而這些參數已經被集中在 default-gecko-config 這個檔案裡,放進 Gonk-misc 中一起加進原始碼目錄裡了。

最後,為了將 Firefox OS 相關的 modules (例如: Gaia / Gecko / Rilproxy 等) 預設加進 system.img 裡,在 build/target/product 這一個目錄中新增了 b2g.mk 這樣一個檔案,用來將這些 modules 加進 PRODUCT_PACKAGES 的名單中;接下來就將 system.img 下載至手機中,準備開始欣賞 Firefox OS 帶給你的奇妙體驗吧。

Gonk 秘辛之編譯系統