#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
DIST_DIR="${PROJECT_DIR}/dist"
SOC_VERSION=""
while [[ $# -gt 0 ]]; do
case $1 in
--soc=*)
SOC_VERSION="${1#*=}"
shift
;;
*)
shift
;;
esac
done
if [ -z "${SOC_VERSION}" ]; then
echo "[ERROR] SoC version not specified. Use --soc=<soc_version>."
exit 1
fi
echo "=== Building ACLNN run package for ${SOC_VERSION} ==="
BUILD_DIR="${PROJECT_DIR}/build"
rm -rf "${BUILD_DIR}"
mkdir -p "${BUILD_DIR}"
mkdir -p "${DIST_DIR}"
cmake -S "${PROJECT_DIR}" -B "${BUILD_DIR}" \
-DCMAKE_BUILD_TYPE=Release \
-DASCEND_COMPUTE_UNIT=${SOC_VERSION}
cmake --build "${BUILD_DIR}" --parallel "$(nproc)"
echo "Building kernel binaries..."
cmake --build "${BUILD_DIR}" --target binary --parallel "$(nproc)" || {
echo "WARNING: Kernel binary build may have errors, continuing with package creation..."
}
cmake --build "${BUILD_DIR}" --target package || {
echo "WARNING: Package build may have errors due to missing kernel binaries..."
}
RUN_PACKAGE=$(find "${DIST_DIR}" -name "*.run" -type f 2>/dev/null | head -1)
if [[ -z "${RUN_PACKAGE}" ]]; then
RUN_PACKAGE=$(find "${BUILD_DIR}" -name "*.run" -type f 2>/dev/null | head -1)
fi
if [[ -z "${RUN_PACKAGE}" ]]; then
echo "ERROR: No run package found"
echo "Please check build errors above"
exit 1
fi
RUN_BASENAME=$(basename "${RUN_PACKAGE}")
VERSION=$(date +%Y%m%d)
RUN_FILENAME="cann_bench_${VERSION}_linux_$(uname -m).run"
if [[ ! "${RUN_BASENAME}" =~ ^cann_bench.*\.run$ ]]; then
cp "${RUN_PACKAGE}" "${DIST_DIR}/${RUN_FILENAME}"
rm -f "${RUN_PACKAGE}"
else
if [[ "${RUN_PACKAGE}" != "${DIST_DIR}/${RUN_FILENAME}" ]]; then
mv "${RUN_PACKAGE}" "${DIST_DIR}/${RUN_FILENAME}"
fi
fi
find "${DIST_DIR}" -name "*.run" -type f ! -name "${RUN_FILENAME}" -delete
find "${DIST_DIR}" -name "*.run.json" -type f -delete
rm -rf "${DIST_DIR}/_CPack_Packages"
echo "=== Run package built successfully ==="
echo "Output: ${DIST_DIR}/${RUN_FILENAME}"