BuildEnvironmentManual.docx
- 文档编号:24674485
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:37
- 大小:144.47KB
BuildEnvironmentManual.docx
《BuildEnvironmentManual.docx》由会员分享,可在线阅读,更多相关《BuildEnvironmentManual.docx(37页珍藏版)》请在冰豆网上搜索。
BuildEnvironmentManual
Build环境使用手册
Version:
0.2.1
2010-4-22
修订历史
版本
日期
作者
审核
说明
0.0.1
2007-12-11
Daniel.Luo
Create
0.02
2008-1-31
Daniel.Luo
增加客户发布及使用内容
0.03
2009-03-10
Mingjianliu
基于MOCOR_W09.11修改
0.04
2009-03-31
Mingjianliu
增加多线程编译,Windowscommand编译
0.05
2009-04-09
Mingjianliu
删除Cygwin相关所有信息
0.06
2009-04-15
Mingjianliu
编译命令增加5.18特别提醒,新建工程部分增加NV,Resource部分的说明
0.07
2009-04-20
Mingjianliu
根据评审结果修改
0.08
2009-04-28
Mingjianliu
增加编译暂停说明;资源编译说明更新,增加编译出错的一个说明
0.09
2009-05-06
Mingjianliu
增加对VC模拟器编译说明,提醒修改工程
0.10
2009-05-30
Mingjianliu
Resource,NV说明更新
0.11
2009-07-08
Mingjianliu
增加通过复制方式创建新工程说明;增加sourceInsight与CC集成说明;增加全局变量和转义宏的实现区分;增加第三方编译选项说明;更新多套资源编译说明
0.12
2009-08-19
Mingjianliu
1.第三方逻辑部分独立成一个文件Makefile.third-partyMakefile.third-party2编译APP需要调用tools\DEBUG_TOOL\BMP2Array工具3.增加分布式编译说明.4.鼠标右键增加命令行快捷方式说明5.DOS下输入命令时用Tab键进行命令自动填充
6.增加动态生成模拟器部分说明
0.13
2009-08-31
Mingjianliu
更新3.2统一编译部分关于:
makefile宏赋制值的特别说明
0.14
2009-09-24
Mingjianliu
更新复制方式创建项目编译脚本部分:
大工程中增加PRODUCT_BASELIB_DIR变量及使用说明;MS_Customize/source/product/config驱动部分根据工程名字自适应;7.2.4项目修改编译选项注意事项更新;更新NV编译选项说明;3.5编译命令最大长度8K限制
0.15
2009-10-10
Mingjianliu
Windows模拟器调整
0.16
2009-10-21
Mingjianliu
提醒:
XoreaxIncrediBuild有Bug,代码路径中不要有括号,即使是单个括号也不可以,否则无法编译.
0.17
2009-12-30
Mingjianliu
多个资源.xls合并使用问题
0.18
2010-02-02
Mingjianliu
1.7.2.2复制方式创建项目编译脚本中对非开放的.a,对应目录只取PRODUCT_BASELIB_DIR的值;
2.6.6分布式编译增加依赖关系,并增加编译细节说明;
3.6.8对FeatureOptions的使用增加了一个错误用法说明
0.19
2010-02-12
Mingjianliu
根据2月11日评审修改
0.20
2010-02-25
Mingjianliu
公共转义宏使用标准make语法生成,不再通过读源文件方式生成;删除6.8
0.21
2010-04-22
Mingjianliu
修改3.2主编译方式关于转义宏部分。
Makefile文件中变量filter-out_macro记录了不需要转义成编译宏的一些makefile变量,其中一些是编译时的命令行参数。
如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉(如果是客户版本,检测SPRD宏时有可能不通过).。
重要声明
版权声明
本文档中的任何内容受《中华人民共和国著作权法》的保护,版权所有©2006,展讯通信有限公司,保留所有权利,但注明引用其他方的内容除外。
商标声明
本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有,但注明属于其他公司拥有的商标除外。
在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。
不作保证声明
展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。
保密声明
本文档(包括任何附件)包含的信息是保密信息。
接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。
目录
1说明6
2运行环境7
2.1编译环境及安装相关软件7
3编译方式8
4目录结构及主要脚本10
4.1Build环境目录结构10
4.2重要脚本11
4.2.1Makefile.rules11
4.2.2Makefile.modules11
4.2.3Makefile.third-party11
4.2.4Makefile.verify11
4.2.5Makefile11
5基本命令12
5.1帮助12
5.2编译参数中projectname与项目编译脚本对应关系12
5.3编译整个项目[update]12
5.4重新编译整个项目[new]13
5.5清除所有编译结果[cleanall]13
5.6清除模块编译结果13
5.7编译模块13
5.8生成可执行文件13
5.9编译FDL/bootloader13
5.10编译NV14
5.11编译MMIResource文件14
5.12编译PC模拟器工程14
6其它命令17
6.1编译Logel工具17
6.2pclint扫描17
6.3编译完成netsend提醒功能17
6.4编译命令的简写17
6.5多线程编译17
6.6分布式编译17
6.7编译出错暂停18
7模块修改及项目定制19
7.1模块修改19
7.1.1模块目录结构调整19
7.1.2添加或删除文件19
7.1.3修改编译选项19
7.1.4新增模块20
7.2项目定制20
7.2.1创建全新的项目编译脚本20
7.2.2复制方式创建项目编译脚本20
7.2.3添加或删除模块20
7.2.4修改项目编译选项21
7.2.5客户发布及使用21
8第三方编译选项说明22
9相关使用技巧23
9.1查看log文件23
9.2makefile编译过程中报错:
Noruletomaketarget`XXX',neededby`yyy'.23
9.3Makefile中全局变量和转义宏的区分23
9.4SourceInsight和ClearCase配置23
9.5鼠标右键命令行快捷方式设置26
9.6DOS下输入命令时用Tab键进行命令自动填充26
1说明
Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具,Build环境可以完成项目全部代码的编译和二进制文件的生成,同时在此环境中可以通过脚本执行的方式产生其他软件以及开发工具,如fdl,bootloader,nv_parameter,resource等。
Build环境的相关命令脚本需要在WindowsCommand环境下进行,因为每个项目工程编译出来的中间依赖文件都独立存放,所以可以通过开启多个WindowsCommand窗口对多个不同的项目进行同时编译。
2运行环境
2.1编译环境及安装相关软件
操作系统:
建议Windows2000professional或windowsXPSP3版本
编译工具:
ADSV1.2(ARMDeveloperSuite)patch848isfullyready
RVDSV2.2(RealviewDevloperSuite)isunderevaluation
MicrosoftVisualC++6.0SP6
ADSpatch版本的查看方法见下图:
其他工具:
MicrosoftExcel2000或者MicrosoftExcel2003或者WPS2005及以上版本
3编译方式
项目的所有模块和工具目前采用两种方式编译。
1.独立的软件和工具编译方式
目前采用独立的makefile编译的软件或者工具模块有:
●fdl1
●fdl2
●bootloader
●nv_parameter
●resource
●logel
●simulator
●pclint
这些模块或功能对应的make/module_name/module_name.mk本身已经是一个完整的makefile文件,make工具可以直接执行。
目前实现方式是在项目的工程文件中,将这些模块的列表对INDEPENDENT赋值,指示这些模块需要单独编译。
采用独立编译的软件模块一般不参与项目主工程的链接。
#independentcompile
INDEPENDENT=fdl1fdl2bootloadernor_fdllogelsimulatorresource
编译方式为:
makePROJECT=projectnameMODULES=bootloader
注意:
独立编译的模块,通过这种方式调用只能执行默认的最终目标。
2.主编译方式
绝大部分的模块都是通过这种编译方式来完成编译的。
这种编译方式使用一致的依赖关系生成方法,统一控制编译的行为。
对应的make/module_name/module_name.mk文件并不是一个完整的makefile文件,一般其中只包含编译需要的宏列表,文件列表,搜索文件路径即可,其他都由框架自动完成。
每个项目工程在编译的时候,会自动将FeatureOptions部分转义成真正的代码中使用的宏传给相应的子模块,在对子模块代码编译的时候,自动附加上这些宏。
转义的规则如下:
●对功能开关型的FeatureOptions,当FeatureOptions为TRUE时转义,为FALSE时不转义
exportNANDBOOT_SUPPORT=TRUE###BootFromNandflashSupport:
#Option1:
TRUE
#Option2:
FALSE
上面的定义会产生转义宏-DNANDBOOT_SUPPORT传递给各个子模块
●2对功能枚举型的FeatureOptions,将FeatureOptions的名字和值拼接起来转义成一个宏,同时对非空的值,同时转义一个FeatureOptions名字的宏。
exportSUBLCD_SIZE=96X64###ResolutionOfMainLCD
#Option1:
NONE#defineSUBLCD_SIZE_NONE
#Option2:
96X64#defineSUBLCD_SIZE_96X64
上面的定义会产生转义宏-DSUBLCD_SIZE_96X64和-DSUBLCD_SIZE传递给各个子模块
转义的宏临时文件存放在如下变量中
C_MACRO(forClanguage)
A_MACRO(forAsseblylanguage)
Makefile文件中变量filter-out_macro记录了不需要转义成编译宏的一些makefile变量,其中一些是编译时的命令行参数。
如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉(如果是客户版本,检测SPRD宏时有可能不通过).。
3.编译的依赖关系
在主编译方式中,系统会自动生成依赖关系文件,这些依赖关系文件存放在MS_Code\build\projectname_builddir\dep下。
注意:
●makefile中的配置文件Makefile.rules没有作为依赖,若其内容改变,需全新编译工程.
●对编译后生成的.a文件及其相应的依赖文件,这些文件默认都有固定的存放位置,没有特别需求,请不要改变,否则有可能造成编译依赖错误,导致出现问题.
4.编译命令最大长度8Kbytes限制
Windows环境最大只支持8Kbytes长度的命令,所以需要控制宏的数量以搜索目录的数量或改进编译方法,防止命令行超长而无法编译.
4目录结构及主要脚本
4.1Build环境目录结构
└─MS_Code
├─build编译结果的输出总目录
│├─8801h_s3b_builddir和具体项目名称对应,自动生成的输出目录
││├─dep编译依赖文件存放目录
││├─img编译最终结果存放目录,包括armbin,fdl,bootloader,
│││resource,nv等
││├─lib客户编译模块.a存放目录
││├─log编译log文件目录,包括编译出错信息、告警信息等
││├─fdl_bootloader编译生成的fdlbootloader文件目录
││├─res编译生成的resource文件目录
││├─pclint编译生成的pclint文件目录
││├─tmp编译生成的临时文件目录
││└─obj模块目标文件存放目录
││└─win自动生成模拟器工程存放目录
│└─sc6600l_sp6601l_builddir
├─chip_drv
├─MS_Ref
├─PS
├─atc
├─common
│├─nv_parameters统一NVproject存放目录
│└─source目标统一main.c存放目录
├─make依据编译选项文件,makefile将自动搜寻该目录并循环|对模块进行编译
│└─aac
│└─aac.mk对应模块的编译脚本
|…
|
├─MS_Customize
│├─config
│├─custom
│└─product区分不同产品驱动配置文件
├─version目标统一版本version.c
├─MS_MMI
├─Third-party第三方软件库文件和头文件存放位置
│└─bt_csr
│├─include
│└─lib
├─lib展讯开放库文件目录存放地和build目录分开
├─fdl_bootloaderfdlbootloader存放目录
Build环境的关键目录如上图所示,所有相关代码和脚本都统一集中在MS_Code目录下,下面将对特殊的目录做些详细的说明:
1)build目录
✧bulild目录及其下的相关内容在程序编译过程中自动生成,对于特定的项目,build目录会生成projectname_builddir目录,并在该目录下自动生成dep、img、lib、log、nv、tmp及obj等目录。
2)make目录
make目录存放和模块对应的编译脚本,子目录和模块呈一一对应关系,各个子目录中存放着和目录名称对应的脚本文件。
一旦有了新添的模块源文件或删减,相关脚本需要进行修改。
同样,如果有了新增的模块,则需要在make目录下建立新的模块子目录。
相关过程在后面会有更详尽的描述。
3)MS_Customize目录
和项目相关的scatterfile文件存放在MS_Customize目录中,需要注意该文件名称需要和项目名称保持一致。
4)version目录
version目录中存放项目相关的version.c文件,目前需要注意该文件名称需要和项目名称保持一致。
4.2重要脚本
在MS_Code目录下存放有Makefile.rules、Makefile.modules、Makefile以及项目的相关make脚本,即项目编译脚本,比如project_8801h_s3b.mk等等,同时在make目录的各个子目录下存放有各个模块的make脚本,即模块编译脚本,比如aac.mk、app.mk等等。
一般情况下开发人员仅维护项目编译脚本即可,Makefile.rules、Makefile.modules和Makefile不需要修改。
针对模块和项目的变化,开发人员需要修改模块编译脚本和增加新的项目编译脚本。
下面将针对Makefile.rules、Makefile.modules和Makefile进行简单的说明,关于模块编译脚本和项目编译脚本将在后面的章节中详细描述。
4.2.1Makefile.rules
Makefile.rules中定义了绝大部分平台无关、模块无关以及项目无关的公共变量,其中包括编译器的指定、公共编译参数CFLAGS、AFLAGS的定义、文件复制、删除、目录创建等系统命令、公共头文件路径、SPRD库路径以及第三方库文件路径等变量的定义。
请根据您的机器上的软件情况进行相应修改。
4.2.2Makefile.modules
Makefile.modules定义了make/bulid系统中的目标依赖关系,一般开发中不需要维护该文件,这里需要指出的是:
目前有部分模块采用了armcc编译器(比如:
mpeg4_codec),对于这部分模块需要在Makefile.modules中申明,具体操作可以参考该文件中已经被申明的相关模块部分。
4.2.3Makefile.third-party
Makefile.third-party将第三方逻辑独立成一个文件,便于维护,这个文件会被include到各工程.mk中.
4.2.4Makefile.verify
Makefile.verify对makefile中的宏的父子关系进行校验,防止出错.
4.2.5Makefile
Makefile是最上层的总控脚本,该脚本直接处理用户的命令,并执行相关的处理,在没有特殊需要的情况下用户不需要维护该文件。
.
5基本命令
Build的所有操作命令都要在WindowsCommand下执行,并且需要在关键脚本的当前路径,即MS_Code目录下完成输入。
示例如下:
您也可以直接执行MS_Code\cmd.exe 即可一次进入这个目录。
5.1帮助
通过命令行工具在项目目录MS_Code下输入命令makehelp可以获得相关的帮助信息,这些相关信息内容可以从下面对于小节中获取更详细的内容,这里不再重复。
5.2编译参数中projectname与项目编译脚本对应关系
在编译项目时,会使用类似makePROJECT=projectname命令,这里projectname必须和项目编译脚本的名称保持一定的对应关系,否则系统会报:
ProjectdefinedMakefileproject_projectname.mkisnotexist!
这样的错误。
如项目编译脚本文件名为project_8801h_s3b.mk,则projectname的内容为8801h_s3b,因此我们可以执行如下的命令来实现编译
makePROJECT=8801h_s3b
5.3编译整个项目[update]
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectname或makePROJECT=projectnameupdate命令,makefile根据已有的依赖关系编译因修改涉及到的相关的模块并在没有错误出现的情况下完成最终的链接,若不存在依赖关系,makefile会在编译文件时自动生成依赖关系。
因为只编译较少的模块文件,可以节省编译时间。
这个命令也会将fdl,bootloader,NV同时编译出来。
5.4重新编译整个项目[new]
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectnamenew,该命令将清除编译过程中生成的全部目标码和库文件,然后对projectname所指定的项目进行整体编译并在没有错误出现的情况下完成最终的链接,编译过程中会自动生成依赖关系。
会这一命令适合在项目进行了较大修改:
比如公共头文件数据结构发生变化、公共接口参数发生变化、文件更新中时间戳混乱或makefile相关脚本被修改等等情况下建议使用这一命令,确保重新对项目进行完全编译得到正确的输出结果。
这个命令也会将fdl,bootloader,NV,Resource同时编译出来。
该命令相当于运行如下3个命令
makePROJECT=projectnamecleanall
makePROJECT=projectnameMODULES=resource
makePROJECT=projectnameupdate
5.5清除所有编译结果[cleanall]
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectnamecleanall,该命令将清除编译过程中生成的全部目标码和库文件。
5.6清除模块编译结果
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectnameMODULES=”module1module2…”clean,该命令将清除指定模块的编译输出结果,其中包含指定模块的目标文件和库文件。
该命令适合在指定模块内部出现重大修改或者模块本身makefile脚本被修改,在进行模块编译前使用。
5.7编译模块
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectnameMODULES=”module1module2…”update,该命令将对指定模块进行编译,但不会编译完成后进行自动链接。
该命令属于模块开发人员最常用的命令,在具体模块开发中需要经常使用该命令来验证模块的编译完整性。
5.8生成可执行文件
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectnameimage可以进行链接生成相关的可执行文件,该命令可以在模块修改并编译完成后进行,也适合第三方库文件更新后进行。
5.9编译FDL/bootloader
通过命令行工具在项目目录MS_Code下输入命令makePROJECT=projectn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BuildEnvironmentManual
![提示](https://static.bdocx.com/images/bang_tan.gif)