隨著汽車軟件開發(fā)的復(fù)雜程度不斷提升,尤其是智能網(wǎng)聯(lián)汽車和自動駕駛技術(shù)的進(jìn)步,汽車軟件開發(fā)的復(fù)雜程度不斷攀升。為了滿足日益增長的功能需求和技術(shù)挑戰(zhàn),異構(gòu)硬件平臺被越來越多地采用,不同的工具鏈也不可避免地被引入到實際的開發(fā)流程中。這一趨勢不僅增加了開發(fā)過程的技術(shù)多樣性,也使得單個項目的編譯過程中會涉及到多種編譯器。
本文主要講解基于靜態(tài)代碼分析工具Helix QAC,我們該如何對多編譯器工程進(jìn)行靜態(tài)分析。
新版本Helix QAC(2024.1+)的分析方式
為了適應(yīng)這一趨勢,Helix QAC在2024年發(fā)布的版本中引入了多CCT的功能。CCT(Compiler Compatibility Template),是HelixQAC軟件中存儲編譯器環(huán)境配置的文件。根據(jù)CCT文件生成的方式,HelixQAC把CCT分為了兩種:
- 自動CCT(Auto CCT):在工程同步時,自動生成的CCT;
- 靜態(tài)CCT(Static CCT):基于CCT生產(chǎn)工具提前生成的CCT;
自動CCT
針對自動CCT方式,多編譯器的配置也是自動的,無需我們進(jìn)行額外的設(shè)置,目前HelixQAC支持使用自動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 |
靜態(tài)CCT
如果我們采用傳統(tǒng)的靜態(tài)CCT的方式,那么需要我們提前為不同的編譯器生成對應(yīng)的CCT文件,并在HeliXQAC中將這些CCT導(dǎo)入到軟件中。
HelixQAC現(xiàn)在支持為一種語言選擇多個CCT配置,如下:
在我們完成源碼加載后,如果不進(jìn)行單獨配置,那么HelixQAC會使用Default CCT對源碼進(jìn)行解析。如果文件夾內(nèi)的源碼使用的編譯器與默認(rèn)CCT不一樣,可以在對應(yīng)的文件屬性中重新選擇合適的CCT配置。
需要注意的是,我們只能針對文件夾進(jìn)行CCT的選擇,不能針對單個源碼進(jìn)行CCT的配置。而且,對于多CCT的工程,由于這是Helix QAC最新版本才有的功能,因此無法兼容Dashboard,只能將多CCT工程的分析結(jié)果上傳到Validate中。
老版本Helix QAC的分析方式
由于老版本HelixQAC中無法為文件夾選擇不同的CCT,如果要實現(xiàn)多編譯器的工程分析,需要借助HelixQAC的CMA工程。
CMA(Cross-Module Analysis),是HeliXQAC提供的一種跨模塊分析功能,它允許我們將多個HeliXQAC工程添加到CMA工程中,以進(jìn)行跨模塊的分析,并檢查重復(fù)定義、不兼容的聲明和未使用的變量等問題。
具體到多編譯器的工程場景,我們需要為每個編譯器建立一個HelixQAC工程,并將使用該編譯器的源碼及頭文件加載到該工程中,然后將這些不同編譯器的QAC工程添加到CMA工程中。
顯然,Helix QAC的新功能提供了極大便利,來高效支持多編譯器。
結(jié)語:
通過上述討論可以看出,隨著汽車軟件開發(fā)復(fù)雜度的提升,異構(gòu)硬件平臺的應(yīng)用已成為必然趨勢。多編譯器環(huán)境的引入不僅是技術(shù)發(fā)展的自然產(chǎn)物,更是解決日益增長的功能需求和技術(shù)挑戰(zhàn)的有效途徑。在此背景下,Helix QAC 作為一款先進(jìn)的靜態(tài)代碼分析工具,其新版本中引入的多CCT功能為開發(fā)人員提供了強大的支持,該功能不僅簡化了多編譯器環(huán)境下的代碼分析過程,還可以極大增強代碼的質(zhì)量和安全性。
-
編譯器
+關(guān)注
關(guān)注
1文章
1616瀏覽量
49009 -
靜態(tài)測試
+關(guān)注
關(guān)注
0文章
25瀏覽量
6494 -
汽車
+關(guān)注
關(guān)注
13文章
3380瀏覽量
37100
發(fā)布評論請先 登錄
相關(guān)推薦
評論