#!/bin/bash
set -euo pipefail
ROOT_DIR=$(dirname "$(realpath "$0")")
BUILD_DIR="$ROOT_DIR/buildUT"
COVERAGE=true
log() {
echo "[INFO] $*"
}
err() {
echo "[ERROR] $*" >&2
}
extract_dep() {
local archive="$1"
local target_dir="$2"
log "Extracting $archive -> $target_dir"
rm -rf "$target_dir"
mkdir -p "$target_dir"
tar -xzf "$archive" -C "$target_dir" --strip-components=1 || {
err "Failed to extract $archive"
exit 1
}
}
build_securec() {
log "Building securec..."
pushd "$ROOT_DIR/shm_proxy/deps" >/dev/null
rm -rf securec
mkdir securec
make -C huawei_secure_c/src/
find huawei_secure_c/obj/ -name "*.o" | sort | xargs ar rcs huawei_secure_c/lib/libsecurec.a
cp -r huawei_secure_c/lib securec/
cp -r huawei_secure_c/include securec/
popd >/dev/null
}
while [[ $# -gt 0 ]]; do
case $1 in
--no-coverage)
COVERAGE=false
shift
;;
--clean)
log "Cleaning build dir..."
rm -rf "$BUILD_DIR"
shift
;;
*)
err "Unknown option: $1"
echo "Usage: $0 [--no-coverage] [--clean]"
exit 1
;;
esac
done
rm -rf "$BUILD_DIR"
build_securec
dependencies_file="${ROOT_DIR}/dependency.xml"
extract_dep ".deps/googletest_aarch64.tar.gz" "$ROOT_DIR/shm_proxy/deps/googletest"
extract_dep ".deps/mockcpp_aarch64.tar.gz" "$ROOT_DIR/shm_proxy/deps/mockcpp"
if $COVERAGE; then
log "Configuring with COVERAGE=ON..."
cmake -S "$ROOT_DIR" -B "$BUILD_DIR" -DBUILD_TESTS=ON -DCOVERAGE=ON
else
log "Configuring UT build (no coverage)..."
cmake -S "$ROOT_DIR" -B "$BUILD_DIR" -DBUILD_TESTS=ON
fi
log "Building UT..."
cmake --build "$BUILD_DIR" -j"$(nproc)"
log "Running UT..."
cd "$BUILD_DIR"
ctest --output-on-failure
if $COVERAGE; then
log "Generating coverage report..."
cmake --build "$BUILD_DIR" --target coverage
coverageInfo="$BUILD_DIR/test/shm_proxy/coverage.info"
coverageXml="$BUILD_DIR/test/shm_proxy/coverage/test_detail.xml"
coverageHtml="$BUILD_DIR/test/shm_proxy/coverage_html"
REPORT_DIR="$ROOT_DIR/gcover_report"
rm -rf "$REPORT_DIR"
mkdir -p "$REPORT_DIR"
if [[ -f "$coverageInfo" ]]; then
cp "$coverageInfo" "$REPORT_DIR/"
log "Copied coverage info -> $REPORT_DIR/"
else
log "Warning: coverage info not found: $coverageInfo"
fi
if [[ -f "$coverageXml" ]]; then
cp "$coverageXml" "$REPORT_DIR/"
log "Copied XML report -> $REPORT_DIR/"
else
log "Warning: XML report not found: $coverageXml"
fi
if [[ -d "$coverageHtml" ]]; then
cp -r "$coverageHtml/." "$REPORT_DIR/"
log "Copied HTML report -> $REPORT_DIR/"
else
log "Warning: HTML report dir not found: $coverageHtml"
fi
log "Coverage and test report files are ready in $REPORT_DIR"
fi