This is an automated email from the ASF dual-hosted git repository. dingyu pushed a commit to branch fix-sgx-cov in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-sgx-sdk.git
commit 0156f090b1ea282e4ff26a897ebcbd772050fdc7 Author: Yu Ding <[email protected]> AuthorDate: Tue Dec 29 16:23:11 2020 -0800 cov: fix Makefile and support llvm-cov-12 --- samplecode/sgx-cov/Makefile | 7 +-- samplecode/sgx-cov/Readme.md | 15 ++++- samplecode/sgx-cov/enclave/llvm-gcov | 113 +++++++++++++++++------------------ 3 files changed, 71 insertions(+), 64 deletions(-) diff --git a/samplecode/sgx-cov/Makefile b/samplecode/sgx-cov/Makefile index 8d8e00d..81ee194 100644 --- a/samplecode/sgx-cov/Makefile +++ b/samplecode/sgx-cov/Makefile @@ -160,10 +160,9 @@ enclave: .PHONY: gen_cov_html gen_cov_html: - #lcov --gcov-tool $(PWD)/enclave/llvm-gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --capture --directory ${Target_Dir} -o ./all.tag.info - #lcov --gcov-tool $(PWD)/enclave/llvm-gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --capture --directory ${Target_Dir} -o ./all.tag.info - lcov --gcov-tool gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --capture --directory ${Target_Dir} -o ./all.tag.info - lcov --gcov-tool gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --capture --directory ${Target_Dir} -o ./all.tag.info + lcov --gcov-tool $(PWD)/enclave/llvm-gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --capture --directory ${Target_Dir} -o ./all.tag.info + lcov --gcov-tool $(PWD)/enclave/llvm-gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --capture --directory ${Target_Dir} -o ./all.tag.info + lcov --gcov-tool $(PWD)/enclave/llvm-gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert --extract all.tag.info `find "$$(cd enclave/src; pwd)" -name "*.rs"` -o final.info genhtml --branch-coverage --demangle-cpp --legend ./final.info -o ./html/ --ignore-errors source .PHONY: clean diff --git a/samplecode/sgx-cov/Readme.md b/samplecode/sgx-cov/Readme.md index be4d101..005af3b 100644 --- a/samplecode/sgx-cov/Readme.md +++ b/samplecode/sgx-cov/Readme.md @@ -2,8 +2,19 @@ Prerequisite: -- lcov. Install via `sudo apt-get install lcov` -- gcov <= 7. Install gcc `sudo apt-get install gcc`. If your platform canot install gcov <=7, you can use another platform to analyze the generated `gcno` and `gcda` files. Ubuntu 18.04 has gcc-7 by default. +1. `lcov`. Install via `sudo apt-get install lcov` + +2. Either of `gcov <= 7`, or `llvm-cov >= 11` +- `gcov <= 7`. Install gcc `sudo apt-get install gcc`. +- `llvm-cov >= 11`. You can either install using apt/yum/dnf, or the official LLVM installation script: + +``` +wget https://apt.llvm.org/llvm.sh +chmod +x llvm.sh +sudo ./llvm.sh 11 +``` + +If your platform cannot install either of them, you can use another platform to analyze the generated `gcno` and `gcda` files. Ubuntu 18.04 has gcc-7 by default, and can install llvm 11 using the above script. ## One shot diff --git a/samplecode/sgx-cov/enclave/llvm-gcov b/samplecode/sgx-cov/enclave/llvm-gcov index 647cae9..8fd1738 100755 --- a/samplecode/sgx-cov/enclave/llvm-gcov +++ b/samplecode/sgx-cov/enclave/llvm-gcov @@ -1,58 +1,55 @@ -#!/bin/sh -e -##!/usr/bin/env bash - -#LLVM_COV="" -# -#verlte() { -# [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ] -#} -# -#verlt() { -# [ "$1" = "$2" ] && return 1 || verlte $1 $2 -#} -# -#check_llvm_cov() { -# if [ -z `which $1` ]; -# then -# return -# else -# p=$(which $1) -# verinfo=`${p} --version` -# first_word=$(echo ${verinfo} | awk "{ print \$1 }") -# gcov_ver=$(echo ${verinfo} | awk "{ print \$4 }") -# llvm_cov_ver=$(echo ${verinfo} | awk "{ print \$5 }") -# -# if [ "$first_word" = "gcov" ]; then -# echo "gcov detected, ver = " ${gcov_ver} -# verlt "${gcov_ver}" "8.0.0" && LLVM_COV=$1 || LLVM_COV="" -# return -# elif [ "$first_word" = "LLVM" ]; then -# echo "llvm-cov detected, ver = " ${llvm_cov_ver} -# verlte "11.0.0" "${gcov_ver}" && LLVM_COV=$1 || LLVM_COV="" -# return -# else -# echo "neither llvm-cov or gcov ... skipping" -# return -# fi -# fi -#} -# -## search priority -##for c in "llvm-cov-11" "gcov" "llvm-cov" "gcov-7" -#for c in "gcov-7" -#do -# check_llvm_cov $c -# if [[ ! -z "${LLVM_COV}" ]]; -# then -# break -# fi -#done -# -#if [[ -z "${LLVM_COV}" ]]; -#then -# echo "You need gcov < 8.0, or llvm-cov >= 11.0 to analyze Rust generated gcno/gcda files!" -# exit 1 -#fi - -#${LLVM_COV} gcov $* -llvm-cov-11 gcov $* +#!/usr/bin/env bash + +LLVM_COV="" + +verlte() { + [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ] +} + +verlt() { + [ "$1" = "$2" ] && return 1 || verlte $1 $2 +} + +check_llvm_cov() { + if [ -z `which $1` ]; + then + return + else + p=$(which $1) + verinfo=`${p} --version` + first_word=$(echo ${verinfo} | awk "{ print \$1 }") + gcov_ver=$(echo ${verinfo} | awk "{ print \$4 }") + llvm_cov_ver=$(echo ${verinfo} | awk "{ print \$5 }") + + if [ "$first_word" = "gcov" ]; then + echo "gcov detected, ver = " ${gcov_ver} + verlt "${gcov_ver}" "8.0.0" && LLVM_COV=$1 || LLVM_COV="" + return + elif [ "$first_word" = "LLVM" ]; then + echo "llvm-cov detected, ver = " ${llvm_cov_ver} + verlte "11.0.0" "${gcov_ver}" && LLVM_COV="$1 gcov" || LLVM_COV="" + return + else + echo "neither llvm-cov or gcov ... skipping" + return + fi + fi +} + +# search priority +for c in "llvm-cov-11" "gcov-7" "llvm-cov" "gcov" +do + check_llvm_cov $c + if [[ ! -z "${LLVM_COV}" ]]; + then + break + fi +done + +if [[ -z "${LLVM_COV}" ]]; +then + echo "You need gcov < 8.0, or llvm-cov >= 11.0 to analyze Rust generated gcno/gcda files! See Readme.md for more details." + exit 1 +fi + +${LLVM_COV} $* --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
