汽车异构硬件平台开发如何进行静态代码分析
随着汽车软件开发的复杂程度不断提升,尤其是智能网联汽车和自动驾驶技术的进步,汽车软件开发的复杂程度不断攀升。为了满足日益增长的功能需求和技术挑战,异构硬件平台被越来越多地采用,不同的工具链也不可避免地被引入到实际的开发流程中。这一趋势不仅增加了开发过程的技术多样性,也使得单个项目的编译过程中会涉及到多种编译器。
本文主要讲解基于静态代码分析工具Helix QAC,我们该如何对多编译器工程进行静态分析。
新版本Helix QAC(2024.1+)的分析方式
为了适应这一趋势,Helix QAC在2024年发布的版本中引入了多CCT的功能。CCT(Compiler Compatibility Template),是Helix QAC软件中存储编译器环境配置的文件。根据CCT文件生成的方式,Helix QAC把CCT分为了两种:
- 自动CCT(Auto CCT):在工程同步时,自动生成的CCT;
- 静态CCT(Static CCT):基于CCT生产工具提前生成的CCT;
自动CCT
针对自动CCT方式,多编译器的配置也是自动的,无需我们进行额外的设置,目前Helix QAC支持使用自动CCT的编译器如下表:
Compiler |
Filter |
Command |
ARM Clang |
qa_armclang |
armclang |
Clang C |
qa_clang |
clang,clang-[3-9][.][0-9],clang-[1-9][0-9][.][0-9],clang-[3-9],clang-[1-9][0-9] |
Clang C++ |
qa_clang |
clang++,clang++-[3-9][.][0-9],clang++-[1-9][0-9][.][0-9],clang++-[3-9],clang++-[1-9][0-9] |
Compiler caching tools |
ccache |
ccache,distcc,ccache-motorola,ccache_cc,ccache_cxx |
Embarcadero BCC |
qa_bccclang |
bcc64 |
GNU C |
qa_gnu |
gcc,cc,c++,gcc-[1-9],gcc-[1-9][0-9],gcc-[1-9][.][0-9],gcc-[1-9][0-9][.][0-9] |
GNU C Cross compilers |
qa_gnu |
*-*-gcc,*-*-*-gcc,*-*-*-gcc-[1-9]* |
GNU C++ |
qa_gnu |
g++,g++-[1-9],g++-[1-9][0-9],g++-[1-9][.][0-9],g++-[1-9][0-9][.][0-9] |
GNU C++ Cross compilers |
qa_gnu |
*-*-g++,*-*-*-g++,*-*-*-g++-[1-9]* |
GNU cc1/cc1plus |
qa_gnu_cc1 |
cc1,cc1plus |
Green Hills ARM |
qa_ghs |
cxarm,ccarm,cxarm64,ccarm64,cxthumb,ccthumb,cxtxarm,cctxarm |
Green Hills Integrity |
qa_ghs |
ccint*,cxint* |
Green Hills PPC |
qa_ghs |
cxppc,ccppc,cxtxppc,cctxppc |
Green Hills TriCore |
qa_ghs |
cctri,cxtri |
Green Hills v850 |
qa_ghs |
cx*850,cc*850,cxv850e,ccv850e |
Hexagon Clang |
qa_hexagonclang |
hexagon-clang,hexagon-clang++ |
HighTec Tricore |
qa_hightec |
tricore-c++,tricore-g++,tricore-gcc |
IAR compilers |
qa_icc |
icc* |
Keil ArmCC |
qa_armcc |
armcc |
Microchip MPLAB pic24 |
qa_microchip30 |
pic30-gcc |
Microchip MPLAB xc16 |
qa_microchip16 |
xc16-gcc |
Microchip MPLAB xc32 |
qa_microchip32 |
xc32-gcc,xc32-g++,xc32-c++ |
Microchip MPLAB xc8 |
qa_microchip8 |
xc8 |
Microchip MPLAB xc8-cc |
qa_microchip8cc |
xc8-cc |
QNX |
qa_qnx |
qcc,QCC,q++ |
Renesas |
qa_renesas |
ccrh,ccrl,ccrx,cx |
Renesas ca850 |
qa_renesas_ca850 |
ca850 |
Renesas cc78k0 |
qa_renesas_cc78k0 |
cc78k0,cc78k0r |
Synopsys DesignWare ARC |
qa_metaware |
ccac |
TI CCS |
qa_ti |
armcl,cl[0-9]?*,clpru |
TI CCS Clang |
qa_tiarmclang |
tiarmclang |
Tasking |
qa_tasking |
ctc,cptc,cmcs |
Visual Studio |
qa_mscompile |
cl,clarm,clsh |
Wind River |
qa_windriver |
dplus,dcc |
静态CCT
如果我们采用传统的静态CCT的方式,那么需要我们提前为不同的编译器生成对应的CCT文件,并在HeliX QAC中将这些CCT导入到软件中。
Helix QAC现在支持为一种语言选择多个CCT配置,如下:
在我们完成源码加载后,如果不进行单独配置,那么Helix QAC会使用Default CCT对源码进行解析。如果文件夹内的源码使用的编译器与默认CCT不一样,可以在对应的文件属性中重新选择合适的CCT配置。
老版本Helix QAC的分析方式
由于老版本Helix QAC中无法为文件夹选择不同的CCT,如果要实现多编译器的工程分析,需要借助Helix QAC的CMA工程。
CMA(Cross-Module Analysis),是HeliX QAC提供的一种跨模块分析功能,它允许我们将多个HeliX QAC工程添加到CMA工程中,以进行跨模块的分析,并检查重复定义、不兼容的声明和未使用的变量等问题。
具体到多编译器的工程场景,我们需要为每个编译器建立一个Helix QAC工程,并将使用该编译器的源码及头文件加载到该工程中,然后将这些不同编译器的QAC工程添加到CMA工程中。
显然,Helix QAC的新功能提供了极大便利,来高效支持多编译器。
结语:
通过上述讨论可以看出,随着汽车软件开发复杂度的提升,异构硬件平台的应用已成为必然趋势。多编译器环境的引入不仅是技术发展的自然产物,更是解决日益增长的功能需求和技术挑战的有效途径。在此背景下,Helix QAC 作为一款先进的静态代码分析工具,其新版本中引入的多CCT功能为开发人员提供了强大的支持,该功能不仅简化了多编译器环境下的代码分析过程,还可以极大增强代码的质量和安全性。
如果想试用最新版的Helix QAC,欢迎垂询北汇信息。
本文来自博客园,作者:{北汇信息},转载请注明原文链接:{https://www.cnblogs.com/polelink/}