[Debian/Coverage] Generage coverage report on debian
authorDongju Chae <dongju.chae@samsung.com>
Mon, 2 Nov 2020 03:20:24 +0000 (12:20 +0900)
committer채동주/On-Device Lab(SR)/Staff Engineer/삼성전자 <dongju.chae@samsung.com>
Tue, 3 Nov 2020 02:52:08 +0000 (11:52 +0900)
This patch enables coverage report generation on debian env.
Because libmrpsim.so does not support Tizen, the way to generate
line coverage also needs to be changed.

Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
debian/rules
packaging/npu-engine.spec
utils/coverage/gcovr_coverage.sh [new file with mode: 0755]
utils/meson.build
utils/model_inspect/meson.build [new file with mode: 0644]
utils/model_inspect/model_inspect.cc [moved from utils/model_inspect.cc with 100% similarity]

index a64f944..3d0da03 100755 (executable)
@@ -31,11 +31,13 @@ override_dh_auto_build:
        ninja -C build
 
 override_dh_auto_test:
-       find build/tests/unittests -maxdepth 1 -type f -perm 0755 -exec basename {} \; |\
-               xargs -I{} sh -c build/tests/unittests/{}
+       cd build/tests/unittests && find . -maxdepth 1 -type f -exec basename {} \; |\
+               xargs -I{} sh -c './{} --gtest_output="xml:{}.xml"'
 
-       find build/tests/apptests -maxdepth 1 -type f -perm 0755 -exec basename {} \; |\
-               xargs -I{} sh -c build/tests/apptests/{}
+       cd build/tests/apptests && find . -maxdepth 1 -type f -exec basename {} \; |\
+               xargs -I{} sh -c './{}'
+
+       python3 tests/count_test_cases.py build/tests/unittests
 
 override_dh_auto_install:
        DESTDIR=$(CURDIR)/debian/tmp ninja -C build install
index 10484f5..a7e93a5 100644 (file)
@@ -24,31 +24,6 @@ BuildRequires:  gtest-devel
 BuildRequires:  pkgconfig(libdrm)
 BuildRequires:  pkgconfig(tinyxml2)
 
-# test coverage dependency
-%if 0%{?test_coverage}
-BuildRequires: gcovr
-%endif
-
-# NPU emulation dependency (used in unittests only)
-%if 0%{?unit_test}
-%define enable_npu_emul true
-BuildRequires: npu-engine-emul
-BuildRequires: npu-engine-testdata > 1.2
-
-# valgrind requires the same arch with host (x86_64)
-%if 0%{?use_valgrind}
-%ifarch x86_64
-BuildRequires: valgrind
-BuildRequires: glibc-debuginfo
-%else
-%undefine use_valgrind
-%endif
-%endif
-
-%else
-%define enable_npu_emul false
-%endif
-
 %global debug_package %{nil}
 %global __debug_install_post %{nil}
 
@@ -60,23 +35,9 @@ This provides in-NPU software control daemon, NPU-Engine.
 cp %{SOURCE1001} .
 %build
 
-# @todo (NYI) build three times for the three different transport plugins for npu-engine
-
-%if 0%{?test_coverage}
-# Disable Optimizations (should unset _FORTIFY_SOURCE to use -O0)
-CFLAGS=`echo $CFLAGS | sed -e "s|-O[1-9]|-O0|g"`
-CFLAGS=`echo $CFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
-CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-O[1-9]|-O0|g"`
-CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-Wp,-D_FORTIFY_SOURCE=[1-9]||g"`
-# also, use the meson's base option, -Db_coverage, instead of --coverage/-fprofile-arcs and -ftest-coverage
-%define enable_test_coverage -Db_coverage=true
-%else
-%define enable_test_coverage -Db_coverage=false
-%endif
-
-meson --buildtype=plain --bindir=%{neexampledir} \
-      --prefix=%{_prefix} --sysconfdir=%{_sysconfdir} --libdir=%{_libdir} --includedir=%{_includedir} \
-      -Denable_npu_emul=%{enable_npu_emul} -Denable_data_manip=true %{enable_test_coverage} \
+meson --buildtype=plain --bindir=%{neexampledir} --prefix=%{_prefix} \
+      --sysconfdir=%{_sysconfdir} --libdir=%{_libdir} --includedir=%{_includedir} \
+      -Denable_npu_emul=false -Denable_data_manip=true \
       build
 ninja -C build %{?_smp_mflags}
 
@@ -85,74 +46,6 @@ ninja -C build %{?_smp_mflags}
 # Install Core (NPU-Engine)
 DESTDIR=%{buildroot} ninja install -C build %{?_smp_mflags}
 
-# Perform unit tests
-%check
-%if 0%{?unit_test}
-  pushd build/tests
-
-  # Run unittests
-  find unittests -maxdepth 1 -type f -perm 0755 -print0 | while IFS= read -r -d $'\0' unittest_exec; do
-  %if 0%{?use_valgrind}
-    valgrind ./${unittest_exec}
-  %else
-    ./${unittest_exec} --gtest_output="xml:${unittest_exec}.xml"
-  %endif
-  done
-
-  # Run apptests
-  find apptests -maxdepth 1 -type f -perm 0755 -print0 | while IFS= read -r -d $'\0' apptest_exec; do
-  %if 0%{?use_valgrind}
-    valgrind ./${apptest_exec}
-  %else
-    ./${apptest_exec}
-  %endif
-  done
-
-  # Run example_visa with a few sample models (due to performance issues)
-  mkdir -p sample_models_v1
-  mkdir -p sample_models_v2
-  mkdir -p sample_models_v3
-
-  cp -rf /usr/share/npu-engine/testdata/npubinfmt_v1/testcase* sample_models_v1/
-  cp -rf /usr/share/npu-engine/testdata/npubinfmt_v2/testcase* sample_models_v2/
-  cp -rf /usr/share/npu-engine/testdata/npubinfmt_v3/CONV* sample_models_v3/
-
-  ./apptests/apptest_tvn_triv_bulk sample_models_v1 > /dev/null
-  ./apptests/apptest_tvn_triv_bulk sample_models_v2 > /dev/null
-  ./apptests/apptest_tvn_triv2_bulk sample_models_v3 > /dev/null
-  ./apptests/apptest_tvn_triv2_dmabuf sample_models_v3/CONV_I8_013 > /dev/null
-
-  rm -rf sample_models_*
-
-  popd
-
-  python3 tests/count_test_cases.py build/tests/unittests
-
-%endif
-
-# Analyze test coverage
-%if 0%{?test_coverage}
-  # 'lcov' generates the date format with UTC time zone by default. Let's replace UTC with KST
-  TZ='Asia/Seoul'; export TZ
-
-  pushd build
-
-  # Collect coverage statistics using gcovr (excluding some files used only in FastModel)
-  gcovr -r .. --html --html-details \
-    --html-title "NPU SystemService Coverage" \
-    --filter ../src/ --exclude ".*\.h" \
-    --exclude ../src/core/npu/NPUdrvAPI_triv.cc \
-    --exclude ../src/core/npu/NPUdrvAPI_triv2.cc \
-    --exclude ../src/core/npu/NPUdrvAPI_tria.cc \
-    -o index.html
-
-  # Copy the coverage results
-  mkdir -p %{buildroot}%{_datadir}/unittest/
-  mv *.html %{buildroot}%{_datadir}/unittest/
-
-  popd
-%endif
-
 %files
 %manifest npu-engine.manifest
 %defattr(-,root,root,-)
@@ -192,17 +85,6 @@ This probides utility packages for NPU Engine, including metadata extraction of
 %defattr(-,root,root,-)
 %{neexampledir}/utils/*
 
-%package unittest-coverage
-Summary:  NPU Engine UnitTest Coverage Analysis Result
-%description unittest-coverage
-HTML pages of lcov results of NPU Engine generated during rpmbuild
-%if 0%{?test_coverage}
-%files unittest-coverage
-%manifest npu-engine.manifest
-%defattr(-,root,root,-)
-%{_datadir}/unittest/*
-%endif
-
 %changelog
 * Wed Oct 21 2020 Dongju Chae <dongju.chae@samsung.com>
 - Release of 2.2.4
diff --git a/utils/coverage/gcovr_coverage.sh b/utils/coverage/gcovr_coverage.sh
new file mode 100755 (executable)
index 0000000..69a9ddf
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+##
+# @file   gcovr_coverage.sh
+# @brief  generate the line coverage report from gcovr
+# @see    https://github.sec.samsung.net/AIP/NPU_SystemService
+# @author Dongju Chae <dongju.chae@samsung.com>
+#
+
+export UTIL_HOME=$(readlink -f $0)
+export UTIL_HOME=$(dirname ${UTIL_HOME})
+export SOURCE_ROOT=${UTIL_HOME}/../..
+
+export INSTALL_PREFIX=/opt/trinity
+export PKG_CONFIG_PATH=${INSTALL_PREFIX}/lib/pkgconfig
+
+pushd $UTIL_HOME
+pushd $SOURCE_ROOT
+
+rm -rf build
+
+# 1. build project
+CFLGAS="-g -O0" meson --buildtype=plain --prefix=${INSTALL_PREFIX} --sysconfdir=${INSTALL_PREFIX}/etc --libdir=lib --bindir=bin --includedir=include build -Denable_npu_emul=true -Denable_data_manip=true -Db_coverage=true
+ninja -C build
+
+pushd build
+
+# 2. run unit tests
+
+# 2-1. Without arguments
+find tests/unittests -maxdepth 1 -type f -exec basename {} \; |\
+  xargs -I{} sh -c tests/unittests/{}
+find tests/apptests -maxdepth 1 -type f -exec basename {} \; |\
+  xargs -I{} sh -c tests/apptests/{}
+
+# 2-2. With valid arguments for some apptests
+mkdir -p sample_models_v1
+mkdir -p sample_models_v2
+mkdir -p sample_models_v3
+
+cp -rf ${INSTALL_PREFIX}/share/npu-engine/testdata/npubinfmt_v1/testcase* sample_models_v1/
+cp -rf ${INSTALL_PREFIX}/share/npu-engine/testdata/npubinfmt_v2/testcase* sample_models_v2/
+cp -rf ${INSTALL_PREFIX}/share/npu-engine/testdata/npubinfmt_v3/CONV* sample_models_v3/
+
+./tests/apptests/apptest_tvn_triv_bulk sample_models_v1 > /dev/null
+./tests/apptests/apptest_tvn_triv_bulk sample_models_v2 > /dev/null
+./tests/apptests/apptest_tvn_triv2_bulk sample_models_v3 > /dev/null
+./tests/apptests/apptest_tvn_triv2_dmabuf sample_models_v3/CONV_I8_013 > /dev/null
+
+rm -rf sample_models_*
+
+# 3. run gcovr
+gcovr -r .. --html --html-details \
+  --html-title "NPU SystemService Coverage" \
+  --filter ../src/ --exclude ".*\.h" \
+  --exclude ../src/core/npu/NPUdrvAPI_triv.cc \
+  --exclude ../src/core/npu/NPUdrvAPI_triv2.cc \
+  --exclude ../src/core/npu/NPUdrvAPI_tria.cc \
+  -o index.html
+
+popd
+popd
+
+# 4. extract results
+mv ${SOURCE_ROOT}/build/*.html .
+popd
index 0f7d31b..d1c5885 100644 (file)
@@ -1,7 +1 @@
-utils_model_inspect = executable('model-inspect',
-  ['model_inspect.cc'],
-  include_directories: [ne_host_inc, ne_common_inc],
-  install : true,
-  install_rpath : ne_libdir,
-  install_dir : join_paths(ne_bindir, 'utils')
-)
+subdir('model_inspect')
diff --git a/utils/model_inspect/meson.build b/utils/model_inspect/meson.build
new file mode 100644 (file)
index 0000000..0f7d31b
--- /dev/null
@@ -0,0 +1,7 @@
+utils_model_inspect = executable('model-inspect',
+  ['model_inspect.cc'],
+  include_directories: [ne_host_inc, ne_common_inc],
+  install : true,
+  install_rpath : ne_libdir,
+  install_dir : join_paths(ne_bindir, 'utils')
+)