隨著汽車軟體開發的複雜程度不斷提升,尤其是智慧網聯汽車和自動駕駛技術的進步,汽車軟體開發的複雜程度不斷攀升。為了滿足日益增長的功能需求和技術挑戰,異構硬體平臺被越來越多地採用,不同的工具鏈也不可避免地被引入到實際的開發流程中。這一趨勢不僅增加了開發過程的技術多樣性,也使得單個專案的編譯過程中會涉及到多種編譯器。
本文主要講解基於靜態程式碼分析工具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,歡迎垂詢北匯資訊。