Helix移植(四)Helix的裁減

    所謂裁減,就是根據實際需求,去掉不用的功能,以達到減少體積的目的。通常,經過裁減的目標版本要比全版本的體積小,但是功能有所減少。Helix提供了豐富的裁減方式。首先,helix採用了插件體系,所以第一種簡單的方法是在發佈程序中去掉不用的插件。比如,不需要bmp圖片格 式支持,可以去掉bmpfformat.so、bmprend.so文件,不需要作任何修改。其次,helix提供了豐富的宏定義來控制某些特性支持。比如,HELIX_FEATURE_VIDEO宏定義了是否支持視頻,如果您打算用helix開發音樂播放器,不需要支持視頻播放,就可以不定義這個宏。

    刪除不使用的插件來達到裁減的目的,沒有什麼需要深入探討的,我們需要做的就是了解各個動態庫的用途,然後決定是否包含在發佈程序中。

    下面我們探討一下helix中的宏定義。helix中的宏定義大概分爲三類:一類是定義目標平臺,比如_ARM、_LITTLE_ENDIAN;另一類是定義目標操作系統,比如_LINUX、_UNIX;還有一類就是就是定義系統特性,比如HELIX_FEATURE_VIDEO、HELIX_FEATURE_VIDEO_CODEC_RV20。這些宏是在哪裏定義的呢?我們在代碼目錄下可以找到形如xxx_xxx_ribodefs.h這樣的文件,可以看到裏面有很多宏定義,編譯時就用到了這中間的宏定義。如果我們要去掉某個模塊的宏定義,只要修改該頭文件,然後在重新make該模塊即可。如果我們需要對所有模塊增加或去除宏定義呢?一個笨方法就是找出所有的xxx_xxx_ribodefs.h這樣的頭文件,一個個修改,然後重新編譯。簡單的方法就是找出xxx_xxx_ribodefs.h頭文件是如何產生的,然後從源頭上修改。從CVS庫checkout源代碼,沒有進行編譯之前,makefile文件及宏定義文件都是沒有的。ribosome構建系統是根據build目錄下的umakecf和umakepf兩個子目錄中定義的cf和pf文件生成Makefile和宏定義的。

    cf文件中定義了編譯器和編譯選項,所以通常與編譯器相關的宏定義在cf中,比如:

project.AddDefines("ARM_COTULLA", "ARM_WMMX")

就是增加ARM_COTULLA和ARM_WMMX兩個宏定義,對應的

project.RemoveDefines("ARM_WMMX")

就是移除ARM_WMMX宏定義。構建系統使用哪個cf文件呢?它是根據環境變量SYSTEM_ID找到同名的cf文件的。cf文件還可以遞歸包含其它的cf文件。

    pf文件定義了更多的編譯選項,也可以包含其它的pf文件。構建系統又是如何選擇pf文件的呢?記得在進行build之前,需要選擇profile麼,ribosome構建系統就是根據profile查找對應的pf文件的。

    好了,到了這裏,我們知道了這些宏定義的原始位置,通常修改pf文件中的宏定義就可以達到裁減的目的。記得在修改了pf文件後,需要做一個make realclean,將原來的Makefile, xxx_xxx_ribodefs.h等文件清除,再執行構建。

 

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