展讯平台开发说明.doc_第1页
展讯平台开发说明.doc_第2页
展讯平台开发说明.doc_第3页
展讯平台开发说明.doc_第4页
展讯平台开发说明.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

Spreadtrum Confidential and Proprietary Build环境使用手册环境使用手册 Version 0 2 5 2010 10 14 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 2 of 28 修订历史修订历史 版本日期作 者审 核说 明 0 0 12007 12 11Daniel LuoCreate 0 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 编译命令增加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集成说明 增加全局变量和转义宏的实现区分 增加第 三方编译选项说明 更新多套资源编译说明 0 122009 08 19Mingjianliu 1 第三方逻辑部分独立成一个文件Makefile third partyMakefile third party 2 编译APP 需要调用 tools DEBUG TOOL BMP2Array 工具3 增加分布式编译说 明 4 鼠标右键增加命令行快捷方式说明5 DOS下输入命令 时用Tab键进行命令自动填充 6 增加动态生成模拟器部分说明 0 132009 08 31Mingjianliu 更新 3 2 统一编译部分关于 makefile宏赋制值的特别说 明 0 142009 09 24Mingjianliu 更新复制方式创建项目编译脚本 部分 大工程中增加 PRODUCT BASELIB DIR变量 及使用说明 MS Customize source product config 驱动部分根据工程 名字自适应 7 2 47 2 4 项目修改编译选项注意事项更新 项目修改编译选项注意事项更新 更 新NV编译选项说明 3 5编译命令最大长度编译命令最大长度 8K限制限制 0 152009 10 10Mingjianliu Windows 模拟器 调整 0 162009 10 21Mingjianliu 提醒 Xoreax IncrediBuild 有Bug 代码路径中不要有括 号 即使是单个括号也不可以 否则无法编译 0 172009 12 30Mingjianliu 多个资源 xls 合并使用问题 0 182010 02 02Mingjianliu 1 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 8 0 212010 03 04Mingjianliu增加5 13 生成编译选项 0 222010 04 22Mingjianliu Makefile 文件中 变量 filter out macro 记录了不需要转义 成编译宏的一些makefile变量 其中一些是编译时的命令行参 数 如果项目增加了额外的命令行参数 请考虑是否在转义 宏时将其过滤掉 如果是客户版本 检测SPRD宏时有可能 不通过 删除 全局变量和转义宏区别部分 此内容已在第 三章中说明 0 232010 07 05Mingjianliu 删除 全局变量和转义宏区别部分 此内容已在第三章中说 明 0 242010 09 26Mingjianliu章节调整 增加新的多线程编译方式 增加宏校验出错信息 0 252010 10 14Mingjianliu 根据CRMS00202859 修改 涉及 宏定义中去掉export 增加 modules 文件 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 3 of 28 重要声明重要声明 版权声明版权声明 本文档中的任何内容受 中华人民共和国著作权法 的保护 版权所有版权所有 2006 展讯通信有限公司 保留所有权利展讯通信有限公司 保留所有权利 但 注明引用其他方的内容除外 商标声明商标声明 本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有 但注明属于其他公司拥有的商标除外 在提及其他公 司及其产品时将使用各自公司所拥有的商标 这种使用的目的仅限于引用 不作保证声明不作保证声明 展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证 而且不对特定目的的适销性及适用性或者任何间 接 特殊或连带的损失承担任何责任 保密声明保密声明 本文档 包括任何附件 包含的信息是保密信息 接收人了解其获得的本文档是保密的 除用于规定的目的外不得用于任何目 的 也不得将本文档泄露给任何第三方 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 4 of 28 目目 录录 1说明说明 6 2编译环境及相关软件编译环境及相关软件 7 3Source Code目录结构目录结构 8 4基本编译命令基本编译命令 10 4 1全新编译整个项目 new 10 4 2更新项目 update 11 4 3单独编译模块 11 4 4清除模块编译结果 11 4 5清除所有编译结果 cleanall 11 4 6生成可执行文件 11 4 7编译FDL bootloader 11 4 8编译NV 11 4 9编译MMI Resource 文件 12 4 10编译PC模拟器工程 12 5其它编译命令其它编译命令 15 5 1编译Logel工具 15 5 2pclint 扫描 15 5 3编译完成net send提醒功能 15 5 4编译命令的简写 15 5 5多线程编译 15 5 6分布式编译 16 5 7编译出错暂停 16 5 8生成编译选项 16 6Makefile 工作流程工作流程 17 6 1重要脚本 17 6 2Makefile 执行流程 18 6 3两种编译方式 19 7模块修改及项目定制模块修改及项目定制 21 7 1添加或删除模块 21 7 2修改模块 21 7 3创建新项目 22 7 4修改项目Feature Options 23 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 5 of 28 8第三方编译选项说明第三方编译选项说明 24 9相关使用技巧相关使用技巧 25 9 1查看log文件 25 9 2makefile 报错 No rule to make target XXX needed by yyy 25 9 3makefile 报错 Can t return outside a subroutine at make perl script sprd macro check pl line XXX 25 9 4Source Insight和ClearCase配置 25 9 5鼠标右键命令行快捷方式设置 28 9 6DOS下输入命令时用Tab键进行命令自动填充 28 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 6 of 28 1说明说明 Build环境中实现了项目开发和维护使用的GNU标准应用脚本 基于这些应用脚本和相关make工具 Build环 境可以完成项目全部代码的编译和二进制文件的生成 同时在此环境中可以通过脚本执行的方式产生其他软件以及 开发工具 如 fdl bootloader nv parameter resource等 Build环境的相关命令脚本需要在Windows Command环境下进行 因为每个项目工程编译出来的中间依赖文 件都独立存放 所以可以通过开启多个Windows Command窗口对多个不同的项目进行同时编译 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 7 of 28 2编译环境及相关软件编译环境及相关软件 操作系统 建议 Windows 2000 professional 或 windows XP SP3 版本 编译工具 ADS V1 2 ARM Developer Suite patch848 is fully ready RVDS V3 1 Realview Devloper Suite is under evaluation Microsoft Visual C 6 0 SP6 ADS patch版本的查看方法见下图 其他工具 Microsoft Excel 2000 或者 Microsoft Excel 2003 或者 WPS 2005及以上版本 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 8 of 28 3Source Code目录结构目录结构 Build环境目录结构 MS Code build 编译结果的输出总目录 此目录下内容在编译过程中生成 8801h s3b builddir 与具体项目名称对应 自动生成的输出目录 dep编译依赖文件存放目录 img编译最终结果存放目录 包括arm bin fdl bootloader resource nv等 lib客户编译模块 a存放目录 log编译log文件目录 包括编译出错信息 告警信息等 fdl bootloader编译生成的fdl bootloader文件目录 res编译生成的resource文件目录 pclint编译生成的pclint文件目录 tmp编译生成的临时文件目录 obj模块目标文件存放目录 win自动生成模拟器工程存放目录 sc6600l sp6601l builddir chip drvSource Code MS RefSource Code PS atc common nv parameters统一NV project存放目录 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 bootloaderfdl bootloader 存放目录 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 9 of 28 Build环境的关键目录如上图所示 所有相关代码和脚本都统一集中在MS Code目录下 下面将对特殊的目录 做些详细的说明 1 build目录 bulild目录及其下的相关内容在程序编译过程中自动生成 对于特定的项目 build目录会生成 projectname builddir目录 并在该目录下自动生成dep img lib log nv tmp及obj等目录 2 make目录 make目录存放和模块对应的编译脚本 子目录和模块呈一一对应关系 各个子目录中存放着和目录名称对应 的脚本文件 一旦有了新添的模块源文件或删减 相关脚本需要进行修改 同样 如果有了新增的模块 则 需要在make目录下建立新的模块子目录 相关过程在后面会有更详尽的描述 3 MS Customize目录 和项目相关的scatter file文件存放在MS Customize目录中 需要注意该文件名称需要和项目名称保持一致 4 version目录 version目录中存放项目相关的version c文件 目前需要注意该文件名称需要和项目名称保持一致 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 10 of 28 4基本编译命令基本编译命令 Build的所有操作命令都要在Windows Command 下执行 并且需要在关键脚本的当前路径 即MS Code目录下完 成输入 示例如下 在编译项目时 会使用类似make PROJECT projectname 命令 这里projectname必须和项目编译脚本项目编译脚本的名称保 持一定的对应关系 否则系统会报 Project defined Makefile project projectname mk is not exist 这样的错误 如项目编译脚本文件名为 project 8801h s3b mk 则projectname的内容为8801h s3b 因此我们可 以执行如下的命令来实现编译 make PROJECT 8801h s3b 4 1全新编译整个项目全新编译整个项目 new 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname new 该命令将清除编译过 程中生成的全部目标码和库文件 然后对projectname所指定的项目进行整体编译并在没有错误出现的情况下完成 最终的链接 编译过程中会自动生成依赖关系 会这一命令适合在项目进行了较大修改 比如公共头文件数据结构 发生变化 公共接口参数发生变化 文件更新中时间戳混乱或makefile相关脚本被修改等等情况下建议使用这一命 令 确保重新对项目进行完全编译得到正确的输出结果 这个命令也会将 fdl bootloader NV Resource同时编译 出来 该命令相当于运行如下3个命令 make PROJECT projectname cleanall make PROJECT projectname MODULES resource make PROJECT projectname update Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 11 of 28 4 2更新项目更新项目 update 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname 或 make PROJECT projectname update 命令 makefile根据已有的依赖关系编译因修改涉及到的相关的模块并在没有错 误出现的情况下完成最终的链接 若不存在依赖关系 makefile 会在编译文件时自动生成依赖关系 因为只编译 较少的模块文件 可以节省编译时间 这个命令也会将 fdl bootloader NV 同时编译出来 4 3单独编译模块单独编译模块 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES module1 module2 update 该命令将对指定模块进行编译 但不会编译完成后进行自动链接 该命令属于模块开发人员 最常用的命令 在具体模块开发中需要经常使用该命令来验证模块的编译完整性 4 4清除模块编译结果清除模块编译结果 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES module1 module2 clean 该命令将清除指定模块的编译输出结果 其中包含指定模块的目标文件和库文件 该命令适合 在指定模块内部出现重大修改或者模块本身makefile脚本被修改 在进行模块编译前使用 4 5清除所有编译结果清除所有编译结果 cleanall 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname cleanall 该命令将清除编 译过程中生成的全部目标码和库文件 4 6生成可执行文件生成可执行文件 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname image可以进行链接生成相 关的可执行文件 该命令可以在模块修改并编译完成后进行 也适合第三方库文件更新后进行 4 7编译编译FDL bootloader 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES bootloader 对 bootloader编译 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES fdl1 对fdl1进 行编译 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES fdl2 对fdl2 进行编译 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES nor fdl 对nor fdl 进行编译 输出结果位置 build projectname builddir fdl bootloader 同时会自动将最终的bin文件copy 到 build projectname builddir img 下 方便下载到手机中 您也可以根据工程具体情况用一条命令编译出所有目标 示例如下 make PROJECT rocky 6901 MODULES fdl1 fdl2 bootloader make PROJECT 8801h s3b MODULES nor fdl 4 8编译编译NV 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES nv parameter 对nv parameter编译 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 12 of 28 输出结果位置 build projectname builddir nvm 同时会自动将最终的bin文件复制 到 build projectname builddir img 注意 1 make nv parameter nv parameter mk 是NV的makefile文件 make nv parameter config info nv 为NV 的配置文件 2 如果希望单独修改项目某项NV参数 例如希望修改nv type nvm某项 应该在使用make指令 编译出NV项目文件之后使用NVEDITOR工具编译保存 4 9编译编译MMI Resource 文件文件 通过命令行工具在项目目录MS Code下输入命令make PROJECT projectname MODULES resource 对 Resource编译 输出结果位置 build projectname builddir res 同时会自动将最终的映像文件复制到 build projectname builddir img目录 默认情况下编译Resource 使用了 主工程中的Feature Options 转义宏和 app mk 模块中的宏 如果您的项目资 源编译需要使用其他的模块的宏 请修改resource mk文件 注意 1 当前不能正确支持多个项目工程的资源并行编译 2 编译资源文件需要工具脚本支持 如果环境不完整会导致编译过程停止 3 修改 make perl script ResGen ResView ini 中配置项 CustStrTable 可支持多个字符资源文件 如 CustStrTable 1 cust str table 01 xls 4 10 编译编译PC模拟器工程模拟器工程 编译Win32模拟器工程的步骤 1 通过makefile 自动生成模拟器工程dsw文件 生成模拟器工程时一些配置信息 skin resource sim 文件 MSSimCfg ini SIMTest ini会自动生成 并存放到win bin文件夹下 模拟器 msdev工具 也会从MS MMI 里 Copy 一份到这个文件夹中 使用类似如下的命令可在该工程的build 临时文件夹 的win 下生成对应的所有 dsp dsw 文件 make PROJECT sc6600l sp6601l MODULES simulator 2 编译模拟器 用VC6 打开 win simulator dsw 文件 设置 msdevkernel 为 Active Project 编译完成后 msdevkernel dll 会生成到win bin 目录下 3 运行模拟器 双击win bin 目录下 的 msdev exe即可 功能说明 通过对 MOCOR 平台 makefile 工程文件分析 取得要编译的文件列表 宏 搜索路径等信息后自动生成 对应的 VC dsp 工程文件和一个 simulator dsw 的工作空间文件 执行simulator dsw 就可以编译出模 拟器使用的 dll文件 文件说明 simulator mk make simulator simulator mk Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 13 of 28 指示模拟器需要使用的模块列表 特别指定的编译宏列表 及完成生成模拟器的所有工作 simulator ini make simulator simulator ini 配置文件 用来指示 模拟器工程与make工程在 文件 宏 搜索路径的差异 其中msdevkernel 为总dsp 文件 模拟器工程需要的所有lib文件如第三方 lib文件等都要加到这个工程中 该文件支持代码宏 示例如下 ifdef PLATFORM SC6600L chip drv chip drv source c ivsp drv 6600l c endif simulator ini 说明 ADD INC PATH 用来指示除makefile对应工程的搜索路径外 dsp工程中还需要增加的搜索路径 DEL INC PATH 用来指示在makefile对应工程的搜索路径中需要删除的搜索路径 ADD OPTION 用来指示除makefile对应工程的搜索路径外 dsp工程中还需要增加的编译宏 注意 宏列表需要用 来引起来 如 app USB WEBCAMERA SUPPORT USB LOG DEL OPTION 用来指示在makefile对应工程的编译宏中需要删除的宏 注意 宏列表需要用 来引起来 如 rtos RTOS WIN32 DEBUG MBCS LIB RTOS ENABLE LOG TOOL ADD FILE 用来指示除makefile对应工程的文件外 dsp工程中还需要增加的文件 DEL FILE 用来指示在makefile对应工程的文件中需要删除的文件 如果具体某个模块的值为 则表示这个模块的 所有文件都删除 REPLACE FILE 用来指示在makefile对应工程的文件中路径的替换 使用技巧 部分软件模块实现方式在模拟器和目标硬件环境不一致 可以参考如下样例修改兼容两种平台的编译 1 平台目标硬件端JPG为硬解码 模拟器上怎么办 simulator mk 中 对 macro set 赋值 ifeq strip JPG DEC SUPPORT JPG HW macro set JPG DEC SUPPORT JPG SW endif ifeq strip JPG ENC SUPPORT JPG HW macro set JPG ENC SUPPORT JPG SW endif simulator ini 修改如下 DEL OPTION global if defined JPG DEC SUPPORT JPG HW global JPG DEC SUPPORT JPG HW endif if defined JPG ENC SUPPORT JPG HW global JPG ENC SUPPORT JPG HW endif Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 14 of 28 ADD OPTION global WIN32 DEBUG MBCS LIB THREADX OS RTOS if defined JPG DEC SUPPORT JPG HW global JPG DEC SUPPORT JPG SW endif if defined JPG ENC SUPPORT JPG HW global JPG ENC SUPPORT JPG SW endif 2 目标硬件板上已完成的功能但模拟器上还没有调好 怎么先禁掉该功能 simulator mk 中 对 macro set 赋值 ifeq strip CMMB SUPPORT TRUE macro set CMMB SUPPORT FALSE endif simulator ini 修改如下 DEL OPTION global if defined CMMB SUPPORT global CMMB SUPPORT endif Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 15 of 28 5其它编译命令其它编译命令 5 1编译编译Logel工具工具 通过命令行工具在项目目录MS Code下输入命令make PROJECT 8801h s3b MODULES logel clean update 对logel工具进行编译 注意 编译这个工具需要 perl 5 8 注意 SPRD 客户无法使用该命令 5 2pclint 扫描扫描 通过命令行工具在项目目录MS Code下输入命令make PROJECT 8801h s3b pclint 对全部模块代码进 行pclint 扫描 输入make PROJECT 8801h s3b MODULES app gui ps pclint 对指定的模块代码进行 pclint扫描 5 3编译完成编译完成net send提醒功能提醒功能 通过命令行工具在项目目录MS Code下输入命令 make PROJECT 8801h s3b ip 192 168 0 1 make PROJECT 8801h s3b ip pcname 当代码编译完成时 会自动向指定的IP地址或机器名 发一个 net send 消息 说明该工程编译是否成功 注意 这个命令只在生成 image 后才调用 单独编译某个模块并不 生成 image 时并不会调用 5 4编译命令的简写编译命令的简写 make PROJECT 8801h s3b MODULES app gui ps 可以简写为 make p 8801h s3b m app gui ps make PROJECT 8801h s3b new 可以简写为 make p 8801h s3b new 5 5多线程编译多线程编译 Build环境支持多线程编译 可以充分利用多核CPU 的优势 加快编译速度 必须通过显式的方式指定 开启线程数 make p 8801h s3b new job make p 8801h s3b new job j 表示编译时同时启动线程个数 建议不要超过CPU 核心数 建议不要超过4 示例如下 make p 8801h s3b new job 8 make p 8801h s3b new job 8 j4 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 16 of 28 5 6分布式编译分布式编译 Build环境支持 Xoreax IncrediBuild 分布式编译 可以充分利用网络优势 加快编译速度 只需要在 正常的编译指令后增加ib 1ib 1 即可 make p 8801 s3b new ib 1ib 1 分布式编译支持依赖关系 所以当您执行make p 8801h s3b m app update ib 1 时 会重新编译所 有app模块文件 另外如果您的代码中的文件位置有变动时 编译时请将涉及的模块先使用clean命令清理中间 依赖文件 然后再编译 否则有可能出现找不到相关文件而无法编译的问题 跟Xoreax IncrediBuild工具有关 此命令可能工作不正常 5 7编译出错暂停编译出错暂停 默认情况下 编译出错后将继续编译 并不听停下来 如果您需要makefile 支持编译出错暂停功能 请使用stop参数编译 并赋值为1 命令示例如下 make p 8801h s3b stop 1 new 遇到异常时脚本会调用DOS下的Pause命令 用户敲任意键会继续编译 如果需要强行推出需要敲 Control C 目前停止的方式是调用DOS的 Pause 按任意键会继续编译 如果需要强行推出 需要按 Control C 5 8生成编译选项生成编译选项 MOCOR平台可以通过命令行方式获得宏 搜索路径 文件清单的定义 方便与其他工具集成或调试用 1 获得整个工程的宏获得整个工程的宏 make p 8801h s3b options 2 获得某模块的宏获得某模块的宏 make p 8801h s3b m app options make p 8801h s3b m app mmk options 3 生成的宏定义文件可在如下地址获得 生成的宏定义文件可在如下地址获得 MS Code build builddir options Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 17 of 28 6MAKEFILE 工作流程工作流程 6 1重要脚本重要脚本 在MS Code目录下存放有Makefile rules Makefile modules modules Makefile以及项 目编译脚本 比如project 8801h s3b mk等等 同时在make目录的各个子目录下存放有各个模块的make脚本 即 模块编译脚本 比如aac mk app mk等等 一般情况下开发人员仅维护项目编译脚本即可 Makefile rules Makefile modules和Makefile不需要修改 针对模块和项目的变化 开发人员需要修改模块编译脚本和增加新的项目编译脚本 下面将针对 Makefile rules Makefile modules和Makefile进行简单的说明 关于模块编译脚本和项目编译脚本将在后面的章节 中详细描述 注 modules 文件仅在 maintrunk 版本中存在 在mocor 09a 中 该文件内容包含在 Makefile 文件中 Makefile rules Makefile rules中定义了绝大部分平台无关 模块无关以及项目无关的公共变量及公共函数 其中包括编译器 的指定 公共编译参数CFLAGS AFLAGS的定义 文件复制 删除 目录创建等系统命令 公共头文件路 径 SPRD库路径以及第三方库文件路径等变量的定义 请根据您的机器上的软件情况进行相应修改 Makefile modules Makefile modules定义了真正的编译指令及依赖关系 一般开发中不需要维护该文件 这里需要指出的是 目前有部分模块采用了armcc编译器 比如 mpeg4 codec 对于这部分模块需要在Makefile modules中申明 具体操作可以参考该文件中已经被申明的相关模块部分 对分布式编译 Xoreax IncrediBuild 将 include make perl script modules pl modules modules定义了项目需要编译的开放模块列表 非开放模块列表 参与连接 a 文件列表等 信息 Makefile third party Makefile third party 将第三方逻辑独立成一个文件 便于维护 这个文件会 被 include 到各工程 mk 中 Makefile verify Makefile verify 对makefile中的宏的父子关系进行校验 防止出错 另外转义的编译宏也在这个文件中生 成 Makefile Makefile是最上层的总控脚本 该脚本直接处理用户的命令 并执行相关的处理 在没有特殊需要的情况 下用户不需要维护该文件 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 18 of 28 6 2Makefile 执行流程执行流程 You need to type make PROJECT XXX new in windows command to tell make which project to make We will show a simple pseudo code that describes makefile work flow Makefile include Makefile rules ARM compiler setting Common compiler options setting Bash commands setting public function setting makefile location setting include project PROJECT mk Feature options setting include Makefile verify Parent child relationships of feature options Get public MACRO include Makefile third party Setting third party modules to variable 3RD LIBS include Set variable INDEPENDENT value specified for external makefile EXPORTLIBS value specified for sprd modules list COMPLIBS DBG value specified for modules list of open source LINKLIBLIST value specified for all a list using for armlinking MKLIBLIST foreach comp EXPORTLIBS COMPLIBS DBG if findstring comp INDEPENDENT comp indep comp a image MKLIBLIST 3RD LIBS LINK LINKLIBLIST o BUILD DIR img AXFFILENAME indep MAKE f make mk I BUILD DIR dep a Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 19 of 28 MAKE f Makefile modules I BUILD DIR dep k r R COMPONENT 6 3两种编译方式两种编译方式 从以上的简单流程中可以看出 MOCOR 平台项目的所有模块和工具目前采用两种方式编译 1 独立的软件和工具编译方式 独立的软件和工具编译方式 目前采用独立的makefile编译的软件或者工具模块有 fdl1 fdl2 bootloader nv parameter resource simulator 等 这些模块或功能对应的 make module name module name mk 本身已经是一个完整的makefile文 件 make直接调用执行 方法是将模块名添加到 INDEPENDENT 列表中 采用独立编译的软件模块一般是 实现一定的功能 并不一定有 a 文件生成 此方法对应6 2 中的 indep 目标 independent compile INDEPENDENT fdl1 fdl2 bootloader nor fdl logel simulator resource nv parameter pclint 编译方式为 make PROJECT projectname MODULES bootloader 注意 如果该 makefile 中需要使用总工程中宏信息和公共变量定义 请按如下方式包含文件 以下四行是必 须的 并且要保持如下顺序 include Makefile rules include project PROJECT mk include Makefile verify include Makefile rules 2 主编译方式 主编译方式 绝大部分的模块都是通过这种编译方式来完成编译的 这种编译方式使用一致的依赖关系生成方法 统 一控制编译的行为 对应的 make module name module name mk 文件并不是一个完整的makefile 文件 一般其中只包含编译需要的宏列表 文件列表 搜索文件路径 其他都由框架自动完成 依赖关系文件存放 于MS Code build projectname builddir dep 下 此方法对应6 2 中的 a 目标 每个项目工程在编译的时候 脚本会自动将Feature Options 部分转义成真正的代码中使用的宏传给相应 的子模块 在对子模块代码编译的时候 自动附加上这些宏 转义的规则如下 对功能开关型的 Feature Options 当Feature Options 为TRUE 时转义 为FALSE时不转义 NANDBOOT SUPPORT TRUE Boot From Nandflash Support Option1 TRUE Option2 FALSE 上面的定义会产生转义宏 DNANDBOOT SUPPORT传递给各个子模块 对功能枚举型的 Feature Options 将 Feature Options 的名字和值拼接起来转义成一个宏 同时对 非空的值 同时转义一个Feature Options 名字的宏 SUBLCD SIZE 96X64 Resolution Of Main LCD Option1 NONE define SUBLCD SIZE NONE Option2 96X64 define SUBLCD SIZE 96X64 上面的定义会产生转义宏 DSUBLCD SIZE 96X64和 DSUBLCD SIZE传递给各个子模块 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 20 of 28 转义函数在 Makefile rules 中定义 在 Makefile verify 中调用 转义结果存放在全局变量中 C MACRO for C language A MACRO for Assebly language 注意 Makefile rules 文件中 变量 filter out macro 记录了不需要转义成编译宏的一些makefile变量 其中一 些是编译时的命令行参数 如果项目增加了额外的命令行参数 请考虑是否在转义宏时将其过滤掉 如果是客户版 本 检测SPRD宏时有可能不通过 Build环境使用手册 V1 0 0 Spreadtrum Confidential and Proprietary 21 of 28 7模块修改及项目定制模块修改及项目定制 这里涉及到前面谈到的关键脚本的修改 在大多数情况下开发人员针对模块或者项目的需要只需修改和补充两类的 关键脚本 模块编译脚本模块编译脚本和项目编译脚本项目编译脚本 在此 我们把出现在Build环境中的最小编译单位称为模块 Build系统 中将以MS Code make目录下的各个子目录名称作为约定的模块名称 这些子目录和各自的功能模块之间呈一一 对应的关系 7 1添加或删除模块添加或删除模块 修改 相应 modules文件中变量EXPORTLIBS或者COMPLIBS DBG 添加或删除指定的 模块 EXPORTLIBS audioserviceagc exp aud algorithm bsd custom tone char lib digitalgain dsp codecdtmf tone dv eq exp generic tone layer1 layer1 dsp img proc display l4 mpeg4 codec main ps record rtos sfs scaling transsamplerate daps parser voice vsp spml COMPLIBS DBG app custom drv chip drv gui mmk Ucom ubot upcc version aud dev aud config scp scm atc refbase dc sim mmk sys caf templete caf interface utility isp service nor fdl nv parameter 某个模块应该放在EXPORTLIBS中进行声明或放在COMPLIBS DBG声明 取决于该模块对客户的提供方式 其中在EXPORTLIBS中申明的模块表明这 些模块将采用库文件的方式提供给客户 而COMPLIBS DBG的模块则表明会提供全部的源代码供客户进行开发 对于客户自己新增加的模块 则只能 在COMPLIBS DBG变量中申明 对于nvparameter fdl1 fdl2 bootloader等是一些辅助的文件 只编译出来即可 不需要参与连接 则只需要在对应模块前紧

温馨提示

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

评论

0/150

提交评论