汽車異構硬體平臺開發如何進行靜態程式碼分析

北汇信息發表於2024-10-10

隨著汽車軟體開發的複雜程度不斷提升,尤其是智慧網聯汽車和自動駕駛技術的進步,汽車軟體開發的複雜程度不斷攀升。為了滿足日益增長的功能需求和技術挑戰,異構硬體平臺被越來越多地採用,不同的工具鏈也不可避免地被引入到實際的開發流程中。這一趨勢不僅增加了開發過程的技術多樣性,也使得單個專案的編譯過程中會涉及到多種編譯器。

本文主要講解基於靜態程式碼分析工具Helix QAC,我們該如何對多編譯器工程進行靜態分析。

新版本Helix QAC(2024.1+)的分析方式

為了適應這一趨勢,Helix QAC在2024年釋出的版本中引入了多CCT的功能。CCT(Compiler Compatibility Template),是Helix QAC軟體中儲存編譯器環境配置的檔案。根據CCT檔案生成的方式,Helix QAC把CCT分為了兩種:

  1. 自動CCT(Auto CCT):在工程同步時,自動生成的CCT;
  2. 靜態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配置。

需要注意的是,我們只能針對資料夾進行CCT的選擇,不能針對單個原始碼進行CCT的配置。而且,對於多CCT的工程,由於這是Helix QAC最新版本才有的功能,因此無法相容Dashboard,只能將多CCT工程的分析結果上傳到Validate中。

老版本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,歡迎垂詢北匯資訊。

相關文章