AliOS-Things構建要素

構建要素

一般而言,一個工程的構建包含如下幾個要素:

img

組件化思想

組件化思想是指是功能模塊可以隨意地剪裁,拼接。實際上此思想的實現就主要依附於構建體系,一個組件存在的標誌就是它有一個對應的 .mk 文件。

由於採用組件化管理思想,爲了讓每個組件相互隔離,獨立配置,每一個組件的目錄下放置一個.mk來存放每個組件各異的操作配置。並且組件間通過依賴來指定關聯。而構建系統所有組件統一的操作機制放在build目錄下的.mk中。這樣可以達到組件間變化隔離,修改靈活的效果

總體流程

總體上構建的過程分爲如下三個步驟:

img

簡言之,第二步中如 config.mk,xx.c_opts,link.opts 就包含了上面所說的要素中除工具鏈鏈外所有所需的信息。所以構建的核心其實就是這些文件的生成和使用。

更詳細的圖示如下:

img

mk文件內容說明

一個模塊的mk文件中基本上描述了這個組件要如何構建,所以非常關鍵,下面部分舉例來說明其主要內容:

img

其中全局是指編譯所有組件時都要用到的設置,局部是指僅在編譯本組件時用到。一個mk文件就是描述了一個組件的配置信息。其實配置的設定都可以在 _CFLAGS 和 _LDFLAGS中指定,包括鏈接使用的鏈接腳本。

具體實現說明

下面按照上面所說的要素來展開說明構建體系的具體實現,相關關鍵代碼等:

工具鏈選擇

img

宿主平臺在aos.py中設置。輔助命令工具在 aos_host_cmd.mk 中設置,目前主要支持 windows 和 linux64 上兩種編譯宿主機平臺。

img

編譯工具鏈的設置,在 aos_target_xx.mk 和 aos_library_xx.mk中會設置。

找到源文件

img

編譯命令通常是 app名@board名,app和board即爲查找所有依賴的兩個入口組件。

依賴查找過程遞歸實現:

img

事實上上面的查找除了找到源文件之外還會解析出mk中定義編譯選項等信息,實際上是在遞歸解析組件的mk文件。爲後面的編譯鏈接步驟做好準備。

config.mk生成

將上面遞歸解析出的mk中的信息存儲在config.mk中:

img

config.mk 其實就是把所有組件 mk 中的信息彙總到一起。而後面產生的opts文件則是針對每個組件把config.mk中信息重新組合到一起產生的一個獨立的文件。

編譯

編譯命令

img

img

img

每個組件的編譯選項產生

img

鏈接

鏈接命令

img

鏈接選項的產生

img

img

二進制及其他處理

統一進行的二進制處理如strip等

img

組件單獨定義的處理

img

img

關鍵宏調用關係梳理

FIND_COMPONENT --找到所有需要的組件 參數:所有基本組件,遞歸調用

PREPROCESS_TEST_COMPONENT  --將所有測試所需的組件也加入到組件中,無參數

PROCESS_COMPONENT --解析每個組件的 mk,參數:所有組件

PROCESS_ONE_COMPONENT  --解析一個組件,參數:某一個組件

WRITE_FILE_CREATE --在config.mk中寫入所有相關信息,包括寫入所有編譯,鏈接選項到opts文件中

轉載

AliOS-Things官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章