#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
MERGE_BUILD_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
if [[ "${1:-}" == "clean" ]]; then
chmod +x "${SCRIPT_DIR}/clean.sh"
bash "${SCRIPT_DIR}/clean.sh"
exit 0
fi
SDK_VERSION="${SDK_VERSION:-$(sed -n 's/^version:[[:space:]]*//p' "${MERGE_BUILD_DIR}/../ci/config/config.ini" 2>/dev/null)}"
SDK_VERSION="${SDK_VERSION:-dev}"
ASCEND_SET_ENV="/usr/local/Ascend/ascend-toolkit/set_env.sh"
if [ ! -f "${ASCEND_SET_ENV}" ]; then
echo "[ERROR] CANN environment script not found: ${ASCEND_SET_ENV}" >&2
echo "[ERROR] Please install CANN and source set_env.sh before building." >&2
exit 1
fi
: "${LD_LIBRARY_PATH:=}"
: "${PYTHONPATH:=}"
: "${PATH:=}"
source "${ASCEND_SET_ENV}"
export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:$LD_LIBRARY_PATH
FETCH_ARGS=()
if [[ "${1:-}" == "test" ]]; then
FETCH_ARGS+=(--with-test-deps)
fi
chmod +x "${SCRIPT_DIR}/fetch_deps.sh"
bash "${SCRIPT_DIR}/fetch_deps.sh" "${FETCH_ARGS[@]}"
ACC_SDK_ROOT_DIR="${MERGE_BUILD_DIR}/AccSDK"
if [ ! -f "${ACC_SDK_ROOT_DIR}/opensource.tar.gz" ]; then
echo "[ERROR] opensource.tar.gz not found in ${ACC_SDK_ROOT_DIR}" >&2
exit 1
fi
if [ ! -d "${ACC_SDK_ROOT_DIR}/opensource/FFmpeg" ]; then
echo "[INFO] Extracting opensource.tar.gz..."
tar -zxf "${ACC_SDK_ROOT_DIR}/opensource.tar.gz" -C "${ACC_SDK_ROOT_DIR}"
fi
ACC_BUILD_DIR="${ACC_SDK_ROOT_DIR}/build_script"
cd "${ACC_BUILD_DIR}" || { echo "[ERROR] Cannot enter directory ${ACC_BUILD_DIR}"; exit 1; }
chmod +x build.sh
if [[ "${1:-}" == "test" ]]; then
cd "${MERGE_BUILD_DIR}"
if ! command -v lcov >/dev/null 2>&1; then
if [ ! -d "${MERGE_BUILD_DIR}/lcov-2.0" ]; then
echo "[INFO] Downloading lcov..."
wget -q https://github.com/linux-test-project/lcov/releases/download/v2.0/lcov-2.0.tar.gz
tar -xzf lcov-2.0.tar.gz
fi
cd lcov-2.0
make install
fi
cd "${ACC_BUILD_DIR}"
export LD_LIBRARY_PATH="${ACC_SDK_ROOT_DIR}/opensource/FFmpeg/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="${ACC_SDK_ROOT_DIR}/opensource/libjpeg-turbo/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="${ACC_SDK_ROOT_DIR}/opensource/soxr/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="${ACC_SDK_ROOT_DIR}/output/lib:${LD_LIBRARY_PATH}"
./build.sh test || exit 1
export GTEST_HOME="${ACC_SDK_ROOT_DIR}/acc_data/3rdparty/gtest/googletest/build/googletest"
export LD_LIBRARY_PATH="${ACC_SDK_ROOT_DIR}/acc_data/3rdparty/gtest/googletest/build/lib/:${LD_LIBRARY_PATH}"
cd ../build
make test || TEST_RC=$?
cat ./Testing/Temporary/LastTest.log
if [ -n "${TEST_RC:-}" ]; then
exit $TEST_RC
fi
cd ../build_script && bash gen_report.sh && python3 testcases_xml_report.py ../test coverage-report
else
./build.sh || exit 1
fi
MULTI_SDK_ROOT_DIR="${MERGE_BUILD_DIR}/MultimodalSDK"
MULTI_BUILD_DIR="${MULTI_SDK_ROOT_DIR}/build_script"
cd "${MULTI_BUILD_DIR}" || { echo "[ERROR] Cannot enter directory ${MULTI_BUILD_DIR}"; exit 1; }
export PYTHONPATH=${MULTI_SDK_ROOT_DIR}/source/:${PYTHONPATH:-}
export LD_LIBRARY_PATH=/opt/python3.11.4/lib/python3.11/site-packages/torch/lib/:$LD_LIBRARY_PATH
chmod +x build.sh
if [[ "${1:-}" == "test" ]]; then
./build.sh test || exit 1
else
./build.sh --version "${SDK_VERSION}" || exit 1
fi
PACKAGE_DIR="${MERGE_BUILD_DIR}/makeself"
PATCH_FILE="${MERGE_BUILD_DIR}/makeself_patch/makeself-2.5.0.patch"
cd "${PACKAGE_DIR}" || { echo "[ERROR] Cannot enter directory ${PACKAGE_DIR}"; exit 1; }
if [ -f ".mmsdk_patched" ] || grep -q 'PACKAGE_LOG_NAME=makeself' makeself-header.sh; then
echo "[INFO] makeself patch already applied, skipping"
else
if [ ! -f "${PATCH_FILE}" ]; then
echo "[ERROR] makeself patch not found: ${PATCH_FILE}" >&2
exit 1
fi
patch -p1 < "${PATCH_FILE}" || { echo "[ERROR] Patch failed"; exit 1; }
touch .mmsdk_patched
fi
cd "${SCRIPT_DIR}" || { echo "[ERROR] Cannot enter directory ${SCRIPT_DIR}"; exit 1; }
export SDK_VERSION
chmod +x package.sh
./package.sh || { echo "[ERROR] Packaging failed"; exit 1; }
echo "Packaging completed successfully!"