mtk的make过程详细解释.doc_第1页
mtk的make过程详细解释.doc_第2页
mtk的make过程详细解释.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Make.bat实际上只起引导作用,其只有一行批处理语句perl make2.pl %*,于是运行该批处理文件后控制权转给了perl脚本make2.pl。在这个perl脚本中解析了用户输入的命令行参数,设置变量,准备make时需要的临时配置文件,随后根据生成的可运行映像是PC模拟版还是ARM版而分别调用不同的构建过程。Pc模拟版的构建通过调用如下命令实现。system($msdev MoDIS.dsw /MAKE $argu - Win32 $modisDir/OUT $MoDISLogDir$argu.log)在这里$msdev就是VC的msdev,通过VC的工程文件MoDIS.dsw和后面的参数进行具体的构建过程。熟悉VC工程的朋友应该比较清楚,因此就不再具体解释了。之后将只以ARM版为主来讲解整个工程的构建过程。ARM版的构建通过调用如下命令实现。system($makeCmd -f$makeFolder$myMF -r -RCUSTOMER=$custom PROJECT=$project $action)在这里$makeCmd是toolsmake.exe,即GNU的make,$makeFolder$myMF是make Gsm2.mak,$action是new、update、remake等。变量CUSTOMER和PROJECT分别是客户名和项目名,在构建过程中将根据此两个变量的值选定项目相关的配置文件,从而实现客户化的定制。通过给make指定ARM版的核心Makefile文件Gsm2.mak,开始了 ARM版的构建过程。Gsm2.mak文件中包含了Option.mak这个配置用的Makefile文件,另外还包含了一些以.tmp和.bld为后缀的由perl脚本 make2.pl生成的临时配置文件。这些临时配置文件主要是一些action如clean、remake等所需的变量设置,及客户化和版本号等的一些信息。Gsm2.mak控制了new、update、remake等动作的过程。具体分别如下所示。new : cleanall cmmgen mmi_feature_check asngen codegen asnregen operator_check_lite updateupdate : cleanlog cleanbin mcddll_update codegen resgen cksysdrv remakeremake : cleanlog cleanbin genverno libs $(BIN_FILE) done上面的构建过程的几个步骤中,最重要的两个步骤是libs、$(BIN_FILE) 。libs调用ARM版的编译器和连接器将各个模块目录下的C文件编译链接为独立的库。$(BIN_FILE)这个步骤将各个模块编译链接得到的库和 mtk_lib目录下的库一起链接起来得到一个映像文件,然后使用ADS的工具fromelf将映像文件生成以变量BIN_FILE命名的二进制文件,该文件可以下载到硬件板上运行。libs这个步骤如下所示。libs: cleanlib startbuildlibs $(COMPLIBLIST)libs中真正进行编译链接的步骤是$(COMPLIBLIST),要生成的库由变量COMPLIBLIST列出,在ARM版中,变量 COMPLIBLIST从变量COMPLIST得到。变量COMPLIST是在Option.mak及其包含的Makefile文件中赋值的。因有很多库需要编译链接,变量COMPLIBLIST展开后包含多个步骤,而这些步骤都是重复不变的,因此在定义步骤$(COMPLIBLIST)的构建过程时使用%.lib代替。%.lib这个步骤先清除了之前的一些依赖关系文件,将一些变量的设置写入compbld.tmp这个临时文件中,然后给make指定Makefile文件comp.mak,完成库的编译和链接,如下所示。%.lib:if /I %OS% EQU WINDOWS_NT (if /I $(BM_NEW) EQU TRUE (toolsmake.exe -fmakecomp.mak -k -r -R $(strip $(CMD_ARGU) COMPONENT=$* $(strip $(COMPLOGDIR)$*.log 2&1)else (toolsmake.exe -fmakecomp.mak -r -R $(strip $(CMD_ARGU) COMPONENT=$* $(strip $(COMPLOGDIR)$*.log 2&1) ) else (if /I $(BM_NEW) EQU TRUE (toolsmake.exe -fmakecomp.mak -k -r -R $(strip $(CMD_ARGU) COMPONENT=$* $(strip $(COMPLOGDIR)$*.log) else (toolsmake.exe -fmakecomp.mak -r -R $(strip $(CMD_ARGU) COMPONENT=$* $(strip $(COMPLOGDIR)$*.log) )上面的命令语句中,参数-k是指有错误也要继续编译,-r和-R是指没有GNU make的默认规则和变量。COMPONENT=$*把当前要生成的库赋给变量COMPONENT。要注意%.lib匹配了所有要生成的库,但这个步骤一次只生成一个模块的库,这个步骤对所有匹配到的库都会执行一次。comp.mak这个Makefile文件控制了模块的编译链接过程。在这个文件中,首先将当前模块要生成的库(由变量COMPONENT传入)设置给了变量TARGLIB。之后从.lis文件中得到SRC_LIST和CPPSRC_LIST两个源文件列表,设定要编译的C文件、C+文件、汇编文件等的列表,和要链接的中间目标文件的列表。将.inc、.def、.pth文件中的头文件路径、C文件路径、编译链接参数等赋值给相应的变量。将平台相关(如6223、6225)的编译参数加上,确定使用ARM编译器还是thumb编译器,是否支持ARM指令和thumb指令的interwork模式。最后进入库的编译链接过程。库的编译链接由update_lib步骤完成,这个步骤直接依赖了$(TARGLIB)。目标$(TARGLIB)是由所有按照.c.obj、.s.obj、%.obj: %.cpp等规则编译得到的中间目标文件链接得到的。其主要过程如下所示。$(TARGLIB):.if exist $(FIXPATH)$(CUS_MTK_LIB)$(COMPONENT).lib (copy /z $(FIXPATH)$(CUS_MTK_LIB)$(COMPONENT).lib $(subst /,$(TARGLIB) &($(LIB) -r $(TARGLIB) $(COMPOBJS_DIR)/*.obj) else ($(LIB) -create $(TARGLIB) $(COMPOBJS_DIR)/*.obj).Option.mak是整个工程构建过程中的总控配置文件,在这个文件中还包含了_.mak和REL_CR_MMI_.mak这两个项目相关的配置文件,用户自定义的配置文件U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论