gcov: Enhanced gcov script
1. Add "-s" to specify the path to collect gcno files 2. Add "-a" to specify the path to collect gcda files. 3. Add "-x" for copy-only operation Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
This commit is contained in:
parent
f367ba2842
commit
391aa9b5f3
1 changed files with 68 additions and 16 deletions
|
@ -19,24 +19,57 @@
|
|||
# limitations under the License.
|
||||
#
|
||||
|
||||
ROOT_DIR=$(cd $(dirname $0)/../../; pwd)
|
||||
ROOT_DIR=$(pwd)
|
||||
GCNO_DIR=$ROOT_DIR
|
||||
GCDA_DIR=$ROOT_DIR
|
||||
|
||||
show_help() {
|
||||
echo "Usage: $0 [-d gcov_dir] [-t gcov_tool]"
|
||||
echo " -d gcov_dir: directory to store gcov data and report"
|
||||
echo "Usage: $0 [-t gcov_tool] [-s gcno_dir] [-a gcda_dir] [-x] [gcov_dir]"
|
||||
echo " -t gcov_tool: path to gcov tool, e.g. ./nuttx/tools/gcov.sh -t arm-none-eabi-gcov"
|
||||
echo " -s gcno_dir: directory containing gcno files (relative or absolute path allowed)"
|
||||
echo " -a gcda_dir: directory containing gcda files (relative or absolute path allowed)"
|
||||
echo " -x: only copy *.gcno and *.gcda files"
|
||||
echo " gcov_dir: directory to store gcov data and report (optional)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "d:t:h" opt
|
||||
convert_to_absolute_path() {
|
||||
local dir_path=$1
|
||||
if [ -z "$dir_path" ]; then
|
||||
echo "Error: Directory path is empty."
|
||||
exit 1
|
||||
fi
|
||||
# Convert to absolute path if not already
|
||||
if [ ! "${dir_path:0:1}" = "/" ]; then
|
||||
dir_path=$(realpath "$dir_path" 2>/dev/null)
|
||||
fi
|
||||
echo "$dir_path"
|
||||
}
|
||||
|
||||
while getopts "a:s:t:xh" opt
|
||||
|
||||
do
|
||||
case $opt in
|
||||
d)
|
||||
GCOV_DIR=$OPTARG
|
||||
a)
|
||||
GCDA_DIR=$(convert_to_absolute_path "$OPTARG")
|
||||
if [ ! -d "$GCDA_DIR" ]; then
|
||||
echo "Error: Invalid gcda directory: $OPTARG"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
s)
|
||||
GCNO_DIR=$(convert_to_absolute_path "$OPTARG")
|
||||
if [ ! -d "$GCNO_DIR" ]; then
|
||||
echo "Error: Invalid gcno directory: $OPTARG"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
t)
|
||||
GCOV_TOOL="--gcov-tool $OPTARG"
|
||||
;;
|
||||
x)
|
||||
ONLY_COPY=1
|
||||
;;
|
||||
h)
|
||||
show_help
|
||||
;;
|
||||
|
@ -44,14 +77,41 @@ do
|
|||
show_help
|
||||
;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
if [ $# == 1 ]; then
|
||||
GCOV_DIR=$1
|
||||
# Handle gcov_dir as the last positional argument
|
||||
|
||||
shift $((OPTIND - 1))
|
||||
if [ $# -gt 1 ]; then
|
||||
echo "Error: Too many arguments."
|
||||
show_help
|
||||
fi
|
||||
|
||||
if [ $# -eq 1 ]; then
|
||||
GCOV_DIR=$(convert_to_absolute_path "$1")
|
||||
else
|
||||
GCOV_DIR=${ROOT_DIR}/gcov
|
||||
fi
|
||||
|
||||
mkdir -p ${GCOV_DIR} ${GCOV_DIR}/data
|
||||
cd ${GCOV_DIR}
|
||||
|
||||
# Collect gcno files
|
||||
|
||||
find ${GCNO_DIR}/ -name "*.gcno" -exec cp {} ${GCOV_DIR}/data > /dev/null 2>&1 \;
|
||||
|
||||
# Collect gcda files
|
||||
|
||||
find ${GCDA_DIR}/ -name "*.gcda" -exec cp {} ${GCOV_DIR}/data > /dev/null 2>&1 \;
|
||||
|
||||
# Ensure ONLY_COPY is initialized as an integer
|
||||
ONLY_COPY=${ONLY_COPY:-0}
|
||||
|
||||
if [ "$ONLY_COPY" -eq 1 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$GCOV_TOOL" ]; then
|
||||
echo "Error: -t is a required option."
|
||||
show_help
|
||||
|
@ -64,14 +124,6 @@ if [ $? -ne 0 ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p ${GCOV_DIR} ${GCOV_DIR}/data
|
||||
cd ${GCOV_DIR}
|
||||
|
||||
# Collect gcda/gcno files
|
||||
|
||||
find ${ROOT_DIR}/ -name "*.gcno" -exec cp {} ${GCOV_DIR}/data > /dev/null 2>&1 \;
|
||||
find ${ROOT_DIR}/ -name "*.gcda" -exec cp {} ${GCOV_DIR}/data > /dev/null 2>&1 \;
|
||||
|
||||
files=$(find ${GCOV_DIR}/data -name "*.gcda" 2> /dev/null | wc -l)
|
||||
if [ "$files" == "0" ] ;then
|
||||
echo "gcda file not found in directory ${ROOT_DIR}"
|
||||
|
|
Loading…
Reference in a new issue