From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web11.33235.1672658287716569998 for ; Mon, 02 Jan 2023 03:18:09 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=jL71PmTT; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: gua.guo@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1672658289; x=1704194289; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xrGupmIXsroc2AwnqnebscSujRnnqfLnP/+ajqtnKgs=; b=jL71PmTTFV1GdkpD1zockrQrYqnYMI/0SYLYL+Xoh3G/ZBZ3pvaTt5D9 LOfrRCMPL4qo7e49JduUrc8q/kQts+7hkJZZ1SkxTYiyA2FQnb7RPpwQ+ xwewJt3js16PbFzcrYAoIgZwGRm2qyoFSX30se+ZEQRSnyODZWYco9WZ/ btCMagtyxL5QShhKxeRskOroVBMbwPYWX+VP6zfKKp4YmvyEfpeZc1E1R PTnKd51RLE/5QHc+vbVFXhkGgLyBGOVHTDVrL9/gD+Pn0HNoZBR4mIPkj +bC2G4P9AXDFPd26CL9xkz6wwFW5rYsWrzRBW3qSXVC7w8e/p2f42R3nG w==; X-IronPort-AV: E=McAfee;i="6500,9779,10577"; a="407727630" X-IronPort-AV: E=Sophos;i="5.96,293,1665471600"; d="scan'208";a="407727630" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jan 2023 03:18:08 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10577"; a="654471748" X-IronPort-AV: E=Sophos;i="5.96,293,1665471600"; d="scan'208";a="654471748" Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by orsmga002.jf.intel.com with ESMTP; 02 Jan 2023 03:18:07 -0800 From: "Guo, Gua" To: devel@edk2.groups.io Cc: Gua Guo , Michael D Kinney , Sean Brogan , Bret Barkelew , Michael Kubacki Subject: [PATCH v7 1/3] UnitTestFrameworkPkg: Add code coverage support for GCC Date: Mon, 2 Jan 2023 19:18:00 +0800 Message-Id: X-Mailer: git-send-email 2.31.1.windows.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Gua Guo In order to collect code coverage after running executable file, generate *.gcda and *.gcno file that require by lcov tool to generate code coverage report. Cc: Michael D Kinney Cc: Sean Brogan Cc: Bret Barkelew Cc: Michael Kubacki Signed-off-by: Gua Guo --- UnitTestFrameworkPkg/ReadMe.md | 41 +++++++++++++++++++ .../UnitTestFrameworkPkg.ci.yaml | 1 + .../UnitTestFrameworkPkgHost.dsc.inc | 3 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/UnitTestFrameworkPkg/ReadMe.md b/UnitTestFrameworkPkg/ReadMe.md index 9ce04b7f3e..3fa4e1910f 100644 --- a/UnitTestFrameworkPkg/ReadMe.md +++ b/UnitTestFrameworkPkg/ReadMe.md @@ -583,6 +583,47 @@ GTEST_OUTPUT=3Dxml: =0D This mode is used by the test running plugin to aggregate the results for = CI test status reporting in the web view.=0D =0D +### Code Coverage=0D +=0D +Host based Unit Tests will automatically enable coverage data.=0D +=0D +For Windows, This is primarily leverage for pipeline builds, but this can = be leveraged locally using the=0D +OpenCppCoverage windows tool to parse coverage data to cobertura xml forma= t.=0D +=0D +- Windows Prerequisite=0D + ```bash=0D + Download and install https://github.com/OpenCppCoverage/OpenCppCoverage/= releases=0D + python -m pip install --upgrade -r ./pip-requirements.txt=0D + stuart_ci_build -c .pytool/CISettings.py -t NOOPT TOOL_CHAIN_TAG=3DVS20= 19 -p MdeModulePkg=0D + Open Build/coverage.xml=0D + ```=0D +=0D + - How to see code coverage data on IDE Visual Studio=0D + ```=0D + Open Visual Studio VS2019 or above version=0D + Click "Tools" -> "OpenCppCoverage Settings"=0D + Fill your execute file into "Program to run:"=0D + Click "Tools" -> "Run OpenCppCoverage"=0D + ```=0D +=0D +=0D +For Linux, This is primarily leveraged for pipeline builds, but this can b= e leveraged locally using the=0D +lcov linux tool, and parsed using the lcov_cobertura python tool to parse = it to cobertura xml format.=0D +=0D +- Linux Prerequisite=0D + ```bash=0D + sudo apt-get install -y lcov=0D + python -m pip install --upgrade -r ./pip-requirements.txt=0D + stuart_ci_build -c .pytool/CISettings.py -t NOOPT TOOL_CHAIN_TAG=3DGCC5= -p MdeModulePkg=0D + Open Build/coverage.xml=0D + ```=0D + - How to see code coverage data on IDE Visual Studio Code=0D + ```=0D + Download plugin "Coverage Gutters"=0D + Press Hot Key "Ctrl + Shift + P" and click option "Coverage Gutters: D= isplay Coverage"=0D + ```=0D +=0D +=0D ### Important Note=0D =0D This works on both Windows and Linux but is currently limited to x64 archi= tectures. Working on getting others, but we=0D diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkg.ci.yaml b/UnitTestFr= ameworkPkg/UnitTestFrameworkPkg.ci.yaml index 072df6208c..d8f8e024c4 100644 --- a/UnitTestFrameworkPkg/UnitTestFrameworkPkg.ci.yaml +++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkg.ci.yaml @@ -91,6 +91,7 @@ "pytools",=0D "NOFAILURE",=0D "cmockery",=0D + "cobertura",=0D "DHAVE", # build flag for cmocka in the INF=0D "gtest", # file name in GoogleTestLib.inf=0D "corthon", # Contact GitHub account in Readme=0D diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc b/UnitTe= stFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc index 8009337552..7f5dfa30ed 100644 --- a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc +++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc @@ -27,7 +27,8 @@ GCC:*_*_*_CC_FLAGS =3D -D UNIT_TESTING_DEBUG=3D1=0D XCODE:*_*_*_CC_FLAGS =3D -D UNIT_TESTING_DEBUG=3D1=0D !endif=0D -=0D + GCC:*_GCC5_*_CC_FLAGS =3D --coverage=0D + GCC:*_GCC5_*_DLINK_FLAGS =3D --coverage=0D [BuildOptions.common.EDKII.HOST_APPLICATION]=0D #=0D # MSFT=0D --=20 2.31.1.windows.1