#!/bin/bash
set -e
(set -o pipefail) 2>/dev/null && set -o pipefail
readonly HCOM_LOG_TAG="[$(basename ${0})]"
readonly CURRENT_SCRIPT_DIR=$(cd $(dirname ${0}) && pwd)
readonly HCOM_ROOT_DIR=$(dirname ${CURRENT_SCRIPT_DIR})
readonly HCOM_INSTALL_DIR="${HCOM_ROOT_DIR}/dist/hcom"
readonly HCOM_INSTALL_TRACER_DIR="${HCOM_ROOT_DIR}/dist/hcom_3rdparty/hcom_tracer"
readonly HCOM_TRACER_TOOL="${HCOM_ROOT_DIR}/test/hcom/tools/hcom_tracer/build/htracer_cli"
readonly HCOM_COMPONENT_NAME="hcom"
readonly HCOM_BUILD_TIME=$(date "+%Y-%m-%d %Z")
readonly HCOM_BUILD_OS_TYPE=$(uname -s)
readonly HCOM_BUILD_OS_ARCH=$(uname -m)
function show_help() {
echo "Usage: $0 [OPTION]"
echo "Build the project with specified options."
echo "Options:"
echo " -t, --type TYPE Set build type. debug/release"
}
HCOM_BUILD_TYPE="release"
while [[ "$#" -gt 0 ]]; do
case "$1" in
-t|--type) HCOM_BUILD_TYPE="${2,,}"; shift ;;
*) echo "Unknown parameter passed: $1"; show_help; exit 1 ;;
esac
shift
done
[[ ! -d "${HCOM_INSTALL_DIR}" ]] && echo "${HCOM_LOG_TAG} HCOM install directory(${HCOM_INSTALL_DIR}) does not exist." && exit 1
echo "${HCOM_LOG_TAG} HCOM install directory: ${HCOM_INSTALL_DIR}"
[[ -z "${HCOM_PRODUCT_NAME}" ]] && HCOM_PRODUCT_NAME="BeiMing"
[[ -z "${HCOM_PRODUCT_VERSION}" ]] && HCOM_PRODUCT_VERSION="24.4"
[[ -z "${HCOM_COMPONENT_VERSION}" ]] && HCOM_COMPONENT_VERSION="1.0.0"
[[ -z "${HCOM_PACKAGE_PATH}" ]] && HCOM_PACKAGE_PATH="${HCOM_ROOT_DIR}/dist"
[[ -z "${HCOM_BUILD_OS_ARCH}" ]] && HCOM_BUILD_OS_ARCH="aarch64"
HCOM_COMPONENT_COMMIT_ID=""
if [ -d "${HCOM_ROOT_DIR}/.git" ] || (cd "${HCOM_ROOT_DIR}" && git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
HCOM_COMPONENT_COMMIT_ID=$(cd "${HCOM_ROOT_DIR}" && git rev-parse HEAD 2>/dev/null)
fi
cd "${HCOM_PACKAGE_PATH}"
if [[ -z "${OS}" || -z "${HCOM_BUILD_OS_ARCH}" ]]; then
echo "${HCOM_LOG_TAG} env OS or env ARCH is empty!"
HCOM_PACKAGE_NAME="BoostKit-${HCOM_COMPONENT_NAME}_${HCOM_COMPONENT_VERSION}_${HCOM_BUILD_OS_ARCH}"
else
HCOM_PACKAGE_NAME="BoostKit-${HCOM_COMPONENT_NAME}_${HCOM_COMPONENT_VERSION}_${OS}_${HCOM_BUILD_OS_ARCH}"
fi
[[ -n "${HCOM_PACKAGE_NAME}" ]] && rm -rf "${HCOM_PACKAGE_NAME}"
mkdir -p "${HCOM_PACKAGE_NAME}"
rm -rf "${HCOM_INSTALL_DIR}/lib/securec"
cp -r "${HCOM_INSTALL_DIR}" "${HCOM_PACKAGE_NAME}"
HCOM_BUILD_TOOLS_PERF=${HCOM_BUILD_TOOLS_PERF:-off}
if [[ "${HCOM_BUILD_TOOLS_PERF,,}" == "on" && "${HCOM_BUILD_TYPE,,}" == "release" ]]; then
bash "${HCOM_ROOT_DIR}/build/build_tools_perf.sh"
cp "${HCOM_ROOT_DIR}/test/hcom/tools/perf_test/build/hcom_perf" "${HCOM_PACKAGE_NAME}"/hcom/
echo "${HCOM_LOG_TAG} hcom build tools perf success: ${HCOM_BUILD_TOOLS_PERF}"
fi
echo "${HCOM_LOG_TAG} hcom build htracer_cli: ${HCOM_BUILD_HTRACER}"
if [[ "${HCOM_BUILD_HTRACER,,}" == "on" ]]; then
bash "${HCOM_ROOT_DIR}/build/build_htracer_cli.sh"
if [ ! -d "$HCOM_INSTALL_TRACER_DIR" ]; then
mkdir -p "$HCOM_INSTALL_TRACER_DIR"
fi
cp "${HCOM_TRACER_TOOL}" "${HCOM_INSTALL_TRACER_DIR}"/
if [ ! -d "${HCOM_PACKAGE_NAME}/hcom/bin" ]; then
mkdir -p "${HCOM_PACKAGE_NAME}/hcom/bin"
fi
cp -r "${HCOM_TRACER_TOOL}" "${HCOM_PACKAGE_NAME}/hcom/bin"
fi
VERSION_FILE="${HCOM_PACKAGE_PATH}/${HCOM_PACKAGE_NAME}/version.property"
echo "# Copyright: (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
# product info
product_name=@HCOM_PRODUCT_NAME@
product_version=@HCOM_PRODUCT_VERSION@
# component info
component_name=@HCOM_COMPONENT_NAME@
component_version=@HCOM_COMPONENT_VERSION@
component_commit_id=@HCOM_COMPONENT_COMMIT_ID@
# build info
build_time=@HCOM_BUILD_TIME@
build_ostype=@HCOM_BUILD_OS_TYPE@
build_osarch=@HCOM_BUILD_OS_ARCH@
" > "${VERSION_FILE}"
REQUIRED_VARS=("HCOM_PRODUCT_NAME" "HCOM_PRODUCT_VERSION" "HCOM_COMPONENT_NAME" "HCOM_COMPONENT_VERSION"
"HCOM_BUILD_TIME" "HCOM_BUILD_OS_TYPE" "HCOM_BUILD_OS_ARCH")
for var in "${REQUIRED_VARS[@]}"; do
[[ -z "${!var}" ]] && echo "${HCOM_LOG_TAG} missing environment: $var" && exit 1
sed -i "s/@$var@/${!var}/g" "${VERSION_FILE}"
done
chmod 600 "${VERSION_FILE}"
echo "${HCOM_LOG_TAG} generate HCOM version info done"
tar -czf "${HCOM_PACKAGE_NAME}.tar.gz" "${HCOM_PACKAGE_NAME}"
echo "${HCOM_LOG_TAG} make HCOM software package done.(${HCOM_PACKAGE_PATH}/${HCOM_PACKAGE_NAME}.tar.gz)"
if [[ "${HCOM_BUILD_RPM,,}" != "ON" ]]; then
exit 0
fi
mkdir -p ~/rpmbuild/SOURCES/
cp "${HCOM_PACKAGE_PATH}/${HCOM_PACKAGE_NAME}.tar.gz" ~/rpmbuild/SOURCES/
cd "${HCOM_ROOT_DIR}"
base_rpmbuild_cmd="rpmbuild --define \"package_name ${HCOM_PACKAGE_NAME}\" -bb hcom.spec"
[[ "${HCOM_BUILD_JAVA_SDK}" == "ON" ]] && base_rpmbuild_cmd="${base_rpmbuild_cmd} --with java_compile"
echo "Multicast ${HCOM_BUILD_MULTICAST}"
[[ "${HCOM_BUILD_MULTICAST}" == "on" ]] && base_rpmbuild_cmd="${base_rpmbuild_cmd} --define \"_with_multicast 1\""
[[ "${HCOM_BUILD_HTRACER,,}" == "on" ]] && base_rpmbuild_cmd="${base_rpmbuild_cmd} --define \"_with_htracer_cli 1\""
[[ "${HCOM_BUILD_TYPE}" == "debug" ]] && base_rpmbuild_cmd="${base_rpmbuild_cmd} --define \"_build_type debug\""
[[ "${HCOM_BUILD_TYPE}" == "release" && "${HCOM_BUILD_TOOLS_PERF}" == "ON" ]] && base_rpmbuild_cmd="${base_rpmbuild_cmd} --define \"_with_hcom_perf 1\""
eval "$base_rpmbuild_cmd"
cp ~/rpmbuild/RPMS/${HCOM_BUILD_OS_ARCH}/ubs-comm*.rpm "${HCOM_ROOT_DIR}/dist/"