标题:
在CPAK上使用ARM Compiler6
[打印本页]
作者:
look_w
时间:
2018-1-24 19:57
标题:
在CPAK上使用ARM Compiler6
介绍
ARM® Cortex®-A57与Cortex-A53处理器CPAK提供的64位裸机软件实例,用户可以修改并使用DS-5的ARM Complier 6来重新编译。
ARM Complier 6是基于Clang和LLVM的编译框架,同时提供最佳的ARM架构代码生成。
迁移指南
如果需要更好理解armcc与armclang的差异,请参考
ARM Compiler Migration Guide
。该文档描述了两个编译器之间的命令行差异,以及如何映射新旧编译器的编译开关。文档还包括两个额外的工具已帮助切换编译器:
代码兼容性检查程序
命令行转换包装程序
兼容性检查程序可帮助找出源代码在迁移中的问题,而转换包装程序让用户可以像以往一样自动调用ARMCC等效选项,但同时隐藏armclang的调用。迁移会涉及新的编译器调用和开关,但也可能涉及诸如语法和属性等因编译器不同而已的源代码改动。
在Cortex-A53 CPAK上使用Compiler 6
本文选用Cortex-A53 CPAK中Applications目录下的DecrDataMP_v8用例。这是个双Cluster且每个Cluster单个core的Cortex-A53系统,同时包括保证Cache一致性的CCI-400和连接外设的NIC-400。系统框图如下:
用Linux bash将DS-5的bin/路径添加到相关的环境路径来建立DS-5工作环境。根据安装情况调整如下路径:
$ export PATH=$PATH:/o/tools/linux/ARM/DS5_5.<version>/64bit/bin
其中<version>是所安装的DS-5版本。
注意:最新的DS-5 32bit与64bit版本均已支持ARM Compiler6。
第一步,使用ARM Compiler 6来编辑Makefile,将armcc替换为armclang来编译C文件。汇编文件仍可以使用armasm编译以及armlink来链接。armclang也可以用来编译和链接汇编代码,在此本示例不多作阐述。
Makefile将compiler定义为CC变量,所以CC=armclang。
第二步,接下来重要的改动是目标CPU的说明。armcc中我们使用--cpu的选项,比如用户可以在Makefile中看到--cpu=8-A.64.no_neon。下面命令可以帮助得到所有可能的目标cpulist:
$ armcc --cpu list
第三步,armclang中目标CPU选择使用-target选项。如果选用AArch64,使用 -target aarch64-arm-none-eabi即可。
命令调用和目标CPU选择是armcc到armclang切换的主要区别。
其他选项
CPAK 选用的软件使用--c90来表示C的版本信息,对于armclang, 可以Makefile进行等效的命令修改-xc-std=c90。
另一个问题是--dwarf3选项,armclang仅支持DWARF4。
Makefile也使用了-Ospace选项通过牺牲运行速度来缩小程序占用空间。armclang中此选项改为-Os.
最后的差异与armlink相关。armlink命令需要--force-scanlib来告诉armlink包含ARM的库。根据文档说明,该选项在直接运行armlink时是强制需要的。armlink后加上该标志,编译则成功完成并生成.axf文件。
下表总结了新旧compiler的主要区别:
ARM Compiler 5
ARM Compiler 6
使用armcc
使用armclang
--cpu=8-A.64.no_neon
-target aarch64-arm-none-eabi
--dwarf3
None
-Ospace
-Os
--force_scanlib
创建DS-5 Eclipse工程
我们使用DS-5 Eclipse环境来编译文中示例,下面步骤使用新的Makefile工程:
1。首先打开Eclipse
$ eclipse &
2。等待Eclipse打开,使用菜单File -> New -> Makefile Project with Existing Code创建工程。
3。对话框中输入工程名,浏览至代码所在位置,选择ARM Compiler6作为Toolchain for indexer settings。
4。一旦工程建好,使用工程菜单中Build Project来编译代码。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0