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等文件清除,再执行构建。

 

你可能感兴趣的:(video,Build,cvs,makefile,编译器,Codec)