1、BuildEnvironmentManualBuild环境使用手册Version: 0.2. 12010-4-22 修订历史版本日期作 者审 核说 明0.0.12007-12-11Daniel.LuoCreate0.022008-1-31Daniel.Luo增加客户发布及使用内容0.032009-03-10Mingjianliu基于MOCOR_W09.11修改0.042009-03-31Mingjianliu增加多线程编译,Windows command 编译0.052009-04-09Mingjianliu删除Cygwin 相关所有信息0.062009-04-15Mingjianliu编译命
2、令增加5.18 特别提醒,新建工程部分增加NV,Resource 部分的说明0.072009-04-20Mingjianliu根据评审结果修改0.082009-04-28Mingjianliu增加编译暂停说明;资源编译说明更新,增加编译出错的一个说明0.092009-05-06Mingjianliu增加对VC模拟器编译说明,提醒修改工程0.102009-05-30MingjianliuResource,NV 说明更新0.112009-07-08Mingjianliu增加通过复制方式创建新工程说明;增加 source Insight 与CC集成说明;增加全局变量和转义宏的实现区分;增加第三方编译
3、选项说明;更新多套资源编译说明0.122009-08-19Mingjianliu1.第三方逻辑部分独立成一个文件Makefile.third-partyMakefile.third-party 2 编译APP 需要调用toolsDEBUG_TOOLBMP2Array 工具3. 增加分布式编译说明.4.鼠标右键增加命令行快捷方式说明5. DOS下输入命令时用Tab键进行命令自动填充6增加动态生成模拟器部分说明0.132009-08-31Mingjianliu更新 3.2 统一编译部分关于:makefile宏赋制值的特别说明0.142009-09-24Mingjianliu更新复制方式创建项目编译
4、脚本 部分:大工程中增加 PRODUCT_BASELIB_DIR变量 及使用说明; MS_Customize/source/product/config 驱动部分根据工程名字自适应 ;7.2.4 项目修改编译选项注意事项更新;更新NV编译选项说明;3.5编译命令最大长度 8K限制0.152009-10-10MingjianliuWindows 模拟器 调整0.162009-10-21Mingjianliu提醒:Xoreax IncrediBuild 有Bug,代码路径中不要有括号,即使是单个括号也不可以,否则无法编译.0.172009-12-30Mingjianliu多个资源.xls 合并使用
5、问题0.182010-02-02Mingjianliu1. 7.2.2 复制方式创建项目编译脚本中对非开放的.a ,对应目录只取 PRODUCT_BASELIB_DIR 的值;2. 6.6 分布式编译增加依赖关系,并增加编译细节说明;3. 6.8对 Feature Options 的使用增加了一个错误用法说明0.192010-02-12Mingjianliu根据2月11日评审修改0.202010-02-25Mingjianliu公共转义宏使用标准make语法生成,不再通过读源文件方式生成;删除6.80.212010-04-22Mingjianliu修改3.2 主编译方式关于转义宏部分。 Mak
6、efile 文件中 变量 filter-out_macro 记录了不需要转义成编译宏的一些makefile变量,其中一些是编译时的命令行参数。如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉 (如果是客户版本,检测SPRD宏时有可能不通过).。重要声明版权声明本文档中的任何内容受中华人民共和国著作权法的保护,版权所有 2006, 展讯通信有限公司,保留所有权利,但注明引用其他方的内容除外。商标声明本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有,但注明属于其他公司拥有的商标除外。在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。不作保证声
7、明 展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。保密声明本文档(包括任何附件)包含的信息是保密信息。接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。目 录1 说明 62 运行环境 72.1 编译环境及安装相关软件 73 编译方式 84 目录结构及主要脚本 104.1 Build环境目录结构 104.2 重要脚本 114.2.1 Makefile.rules 114.2.2 Makefile.modules 114.2.3 Makefile.t
8、hird-party 114.2.4 Makefile.verify 114.2.5 Makefile 115 基本命令 125.1 帮助 125.2 编译参数中 projectname 与项目编译脚本对应关系 125.3 编译整个项目update 125.4 重新编译整个项目new 135.5 清除所有编译结果cleanall 135.6 清除模块编译结果 135.7 编译模块 135.8 生成可执行文件 135.9 编译FDL/bootloader 135.10 编译NV 145.11 编译MMI Resource 文件 145.12 编译PC模拟器工程 146 其它命令 176.1 编译
9、Logel工具 176.2 pclint 扫描 176.3 编译完成net send提醒功能 176.4 编译命令的简写 176.5 多线程编译 176.6 分布式编译 176.7 编译出错暂停 187 模块修改及项目定制 197.1 模块修改 197.1.1 模块目录结构调整 197.1.2 添加或删除文件 197.1.3 修改编译选项 197.1.4 新增模块 207.2 项目定制 207.2.1 创建全新的项目编译脚本 207.2.2 复制方式创建项目编译脚本 207.2.3 添加或删除模块 207.2.4 修改项目编译选项 217.2.5 客户发布及使用 218 第三方编译选项说明 2
10、29 相关使用技巧 239.1 查看log文件 239.2 makefile 编译过程中报错: No rule to make target XXX , needed by yyy. 239.3 Makefile 中全局变量和转义宏的区分 239.4 Source Insight和ClearCase配置 239.5 鼠标右键命令行快捷方式设置 269.6 DOS下输入命令时用Tab键进行命令自动填充 261 说明Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具, Build环境可以完成项目全部代码的编译和二进制文件的生成,同时在此环境中可以通过脚
11、本执行的方式产生其他软件以及开发工具,如 fdl, bootloader, nv_parameter,resource等。Build环境的相关命令脚本需要在Windows Command环境下进行,因为每个项目工程编译出来的中间依赖文件都独立存放,所以可以通过开启多个Windows Command窗口对多个不同的项目进行同时编译。2 运行环境2.1 编译环境及安装相关软件操作系统:建议 Windows 2000 professional 或 windows XP SP3 版本编译工具:ADS V1.2 (ARM Developer Suite) patch848 is fully ready
12、RVDS V2.2(Realview Devloper Suite) is under evaluationMicrosoft Visual C+ 6.0 SP6ADS patch版本的查看方法见下图:其他工具:Microsoft Excel 2000 或者 Microsoft Excel 2003 或者 WPS 2005及以上版本 3 编译方式项目的所有模块和工具目前采用两种方式编译。1独立的软件和工具编译方式 目前采用独立的makefile编译的软件或者工具模块有: fdl1 fdl2 bootloader nv_parameter resource logel simulator pcl
13、int这些模块或功能对应的 make/module_name/module_name.mk 本身已经是一个完整的makefile文件,make工具可以直接执行。目前实现方式是在项目的工程文件中,将这些模块的列表对INDEPENDENT 赋值,指示这些模块需要单独编译。采用独立编译的软件模块一般不参与项目主工程的链接。# independent compile INDEPENDENT= fdl1 fdl2 bootloader nor_fdl logel simulator resource编译方式为 :make PROJECT=projectname MODULES=bootloader注意:
14、 独立编译的模块,通过这种方式调用只能执行默认的最终目标。 2主编译方式 绝大部分的模块都是通过这种编译方式来完成编译的。这种编译方式使用一致的依赖关系生成方法,统一控制编译的行为。对应的 make/module_name/module_name.mk 文件并不是一个完整的makefile 文件,一般其中只包含编译需要的宏列表,文件列表,搜索文件路径 即可,其他都由框架自动完成。 每个项目工程在编译的时候,会自动将Feature Options 部分转义成真正的代码中使用的宏传给相应的子模块,在对子模块代码编译的时候,自动附加上这些宏。转义的规则如下: 对功能开关型的 Feature Opti
15、ons ,当Feature Options 为TRUE 时转义,为FALSE时不转义export NANDBOOT_SUPPORT = TRUE # Boot From Nandflash Support: # Option1:TRUE # Option2:FALSE 上面的定义会产生转义宏 -DNANDBOOT_SUPPORT传递给各个子模块 2对功能枚举型的 Feature Options ,将 Feature Options 的名字和值拼接起来转义成一个宏,同时对非空的值,同时转义一个Feature Options 名字的宏。 export SUBLCD_SIZE = 96X64 # R
16、esolution Of Main LCD # Option1:NONE #define SUBLCD_SIZE_NONE# Option2:96X64 #define SUBLCD_SIZE_96X64 上面的定义会产生转义宏-DSUBLCD_SIZE_96X64和-DSUBLCD_SIZE传递给各个子模块 转义的宏临时文件存放在如下变量中C_MACRO ( for C language)A_MACRO (for Assebly language) Makefile 文件中 变量 filter-out_macro 记录了不需要转义成编译宏的一些makefile变量,其中一些是编译时的命令行参
17、数。如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉 (如果是客户版本,检测SPRD宏时有可能不通过).。3. 编译的依赖关系在主编译方式中,系统会自动生成依赖关系文件,这些依赖关系文件存放在MS_Codebuildprojectname_builddirdep 下。 注意: makefile中的配置文件 Makefile.rules 没有作为依赖,若其内容改变,需全新编译工程. 对编译后生成的 .a 文件及其相应的依赖文件,这些文件默认都有固定的存放位置,没有特别需求,请不要改变,否则有可能造成编译依赖错误,导致出现问题.4编译命令最大长度 8Kbytes限制 Windows
18、环境最大只支持8Kbytes长度的命令,所以需要控制宏的数量以搜索目录的数量或改进编译方法,防止命令行超长而无法编译.4 目录结构及主要脚本4.1 Build环境目录结构MS_Code build 编译结果的输出总目录 8801h_s3b_builddir 和具体项目名称对应,自动生成的输出目录 dep 编译依赖文件存放目录 img 编译最终结果存放目录,包括arm bin,fdl,bootloader, resource,nv等 lib 客户编译模块.a存放目录 log 编译log文件目录,包括编译出错信息、告警信息等 fdl_bootloader 编译生成的fdl bootloader文件
19、目录 res 编译生成的resource文件目录 pclint 编译生成的pclint文件目录 tmp 编译生成的临时文件目录 obj 模块目标文件存放目录 win 自动生成模拟器工程存放目录 sc6600l_sp6601l_builddir chip_drv MS_Ref PS atc common nv_parameters 统一NV project存放目录 source 目标统一main.c存放目录 make 依据编译选项文件,makefile将自动搜寻该目录并循环| 对模块进行编译 aac aac.mk 对应模块的编译脚本 | | MS_Customize config custom
20、product 区分不同产品驱动配置文件version 目标统一版本version.cMS_MMI Third-party 第三方软件库文件和头文件存放位置 bt_csr include lib lib 展讯开放库文件目录存放地和build目录分开 fdl_bootloader fdl bootloader 存放目录Build环境的关键目录如上图所示,所有相关代码和脚本都统一集中在MS_Code目录下,下面将对特殊的目录做些详细的说明:1) build目录 bulild目录及其下的相关内容在程序编译过程中自动生成,对于特定的项目,build目录会生成projectname_builddir目录
21、,并在该目录下自动生成dep、img、lib、log、nv、tmp及obj等目录。2) make目录make目录存放和模块对应的编译脚本,子目录和模块呈一一对应关系,各个子目录中存放着和目录名称对应的脚本文件。一旦有了新添的模块源文件或删减,相关脚本需要进行修改。同样,如果有了新增的模块,则需要在make目录下建立新的模块子目录。相关过程在后面会有更详尽的描述。3) MS_Customize目录和项目相关的scatter file文件存放在MS_Customize目录中,需要注意该文件名称需要和项目名称保持一致。4) version目录version目录中存放项目相关的version.c文件,
22、目前需要注意该文件名称需要和项目名称保持一致。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不需要修改。针对模块和项目的变化,开发人员需要修改模块编译脚本和增加新的项目编译脚本。下面将针对M
23、akefile.rules、Makefile.modules和Makefile进行简单的说明,关于模块编译脚本和项目编译脚本将在后面的章节中详细描述。4.2.1 Makefile.rulesMakefile.rules中定义了绝大部分平台无关、模块无关以及项目无关的公共变量,其中包括编译器的指定、公共编译参数CFLAGS、AFLAGS的定义、文件复制、删除、目录创建等系统命令、公共头文件路径、SPRD库路径以及第三方库文件路径等变量的定义。请根据您的机器上的软件情况进行相应修改。4.2.2 Makefile.modulesMakefile.modules定义了make/bulid系统中的目标依
24、赖关系,一般开发中不需要维护该文件,这里需要指出的是:目前有部分模块采用了armcc编译器(比如:mpeg4_codec),对于这部分模块需要在Makefile.modules中申明,具体操作可以参考该文件中已经被申明的相关模块部分。4.2.3 Makefile.third-partyMakefile.third-party 将第三方逻辑独立成一个文件,便于维护,这个文件会 被 include 到各工程.mk 中.4.2.4 Makefile.verifyMakefile.verify 对makefile中的宏的父子关系进行校验,防止出错.4.2.5 MakefileMakefile是最上层的
25、总控脚本,该脚本直接处理用户的命令,并执行相关的处理,在没有特殊需要的情况下用户不需要维护该文件。.5 基本命令Build的所有操作命令都要在Windows Command 下执行,并且需要在关键脚本的当前路径,即MS_Code目录下完成输入。示例如下:您也可以直接执行MS_Codecmd.exe 即可一次进入这个目录。5.1 帮助通过命令行工具在项目目录MS_Code下输入命令make help可以获得相关的帮助信息,这些相关信息内容可以从下面对于小节中获取更详细的内容,这里不再重复。5.2 编译参数中 projectname 与项目编译脚本对应关系在编译项目时,会使用类似make PROJ
26、ECT=projectname 命令,这里projectname必须和项目编译脚本的名称保持一定的对应关系,否则系统会报:Project defined Makefile project_projectname.mk is not exist!这样的错误。如项目编译脚本文件名为 project_8801h_s3b.mk,则projectname的内容为8801h_s3b,因此我们可以执行如下的命令来实现编译 make PROJECT= 8801h_s3b5.3 编译整个项目update通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname 或 make
27、 PROJECT=projectname update 命令,makefile根据已有的依赖关系编译因修改涉及到的相关的模块并在没有错误出现的情况下完成最终的链接,若不存在依赖关系,makefile 会在编译文件时自动生成依赖关系。因为只编译较少的模块文件,可以节省编译时间。这个命令也会将 fdl,bootloader,NV 同时编译出来。5.4 重新编译整个项目new通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname new,该命令将清除编译过程中生成的全部目标码和库文件,然后对projectname所指定的项目进行整体编译并在没有错误出现的情况
28、下完成最终的链接,编译过程中会自动生成依赖关系。会这一命令适合在项目进行了较大修改:比如公共头文件数据结构发生变化、公共接口参数发生变化、文件更新中时间戳混乱或makefile相关脚本被修改等等情况下建议使用这一命令,确保重新对项目进行完全编译得到正确的输出结果。这个命令也会将 fdl,bootloader,NV ,Resource同时编译出来。该命令相当于运行如下3个命令make PROJECT=projectname cleanallmake PROJECT=projectname MODULES=resourcemake PROJECT=projectname update5.5 清除所
29、有编译结果cleanall通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname cleanall,该命令将清除编译过程中生成的全部目标码和库文件。5.6 清除模块编译结果通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=”module1 module2 ” clean,该命令将清除指定模块的编译输出结果,其中包含指定模块的目标文件和库文件。该命令适合在指定模块内部出现重大修改或者模块本身makefile脚本被修改,在进行模块编译前使用。5.7 编译模块通过命令行工具在项目目录MS_Cod
30、e下输入命令make PROJECT=projectname MODULES=”module1 module2 ” update,该命令将对指定模块进行编译,但不会编译完成后进行自动链接。该命令属于模块开发人员最常用的命令,在具体模块开发中需要经常使用该命令来验证模块的编译完整性。5.8 生成可执行文件通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname image可以进行链接生成相关的可执行文件,该命令可以在模块修改并编译完成后进行,也适合第三方库文件更新后进行。5.9 编译FDL/bootloader通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectn
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1