#!/bin/bash
BUILD_TEST=${1:-BUILD_TEST}
XPU_TYPE=${2:-NPU}
BUILD_PYTHON=${3:-ON}
BUILD_HCOM=${4:-OFF}
BUILD_ETCD_BACKEND=${5:-OFF}
echo "BUILD_TEST is ${BUILD_TEST}"
echo "XPU_TYPE is ${XPU_TYPE}"
echo "BUILD_PYTHON is ${BUILD_PYTHON}"
echo "BUILD_HCOM is ${BUILD_HCOM}"
echo "BUILD_ETCD_BACKEND is ${BUILD_ETCD_BACKEND}"
set -e
readonly BASH_PATH=$(dirname $(readlink -f "$0"))
CURRENT_DIR=$(pwd)
PROJECT_DIR=${BASH_PATH}/../..
cd ${BASH_PATH}
GIT_COMMIT=`git rev-parse HEAD` || true
if [ $( uname -m | grep -c -i "x86_64" ) -ne 0 ]; then
echo "it is system of x86_64"
ARCH="x86_64"
elif [ $( uname -m | grep -c -i "aarch64" ) -ne 0 ]; then
echo "it is system of aarch64"
ARCH="aarch64"
else
echo "it is not system of x86_64 or aarch64"
exit 1
fi
OS_NAME=$(uname -s | awk '{print tolower($0)}')
ARCH_OS=${ARCH}-${OS_NAME}
PKG_DIR="memfabric_hybrid"
VERSION="$(cat ${PROJECT_DIR}/VERSION | tr -d '[:space:]')"
OUTPUT_DIR=${BASH_PATH}/../../output
rm -rf ${PKG_DIR}
mkdir -p ${PKG_DIR}/"${ARCH_OS}"
mkdir ${PKG_DIR}/include
mkdir ${PKG_DIR}/"${ARCH_OS}"/lib64
mkdir ${PKG_DIR}/"${ARCH_OS}"/wheel
mkdir -p ${PKG_DIR}/include/smem
mkdir -p ${PKG_DIR}/include/hybm
mkdir -p ${PKG_DIR}/include/hcom
if [ "${BUILD_HCOM}" == "ON" ]; then
cp "${PROJECT_DIR}"/output/3rdparty/hcom/lib/libhcom.so ${PKG_DIR}/"${ARCH_OS}"/lib64
cp -v "${PROJECT_DIR}"/build/_deps/hcom-src/dist/hcom_3rdparty/libboundscheck/lib/libboundscheck.so \
${PKG_DIR}/"${ARCH_OS}"/lib64
fi
if [ "${BUILD_ETCD_BACKEND}" == "ON" ]; then
echo "========= package etcd client ============"
cp "${PROJECT_DIR}"/output/etcd/lib64/libetcd_client_v3.so ${PKG_DIR}/"${ARCH_OS}"/lib64
fi
cp -r "${OUTPUT_DIR}"/smem/include/* ${PKG_DIR}/include/smem/
cp "${OUTPUT_DIR}"/smem/lib64/* ${PKG_DIR}/"${ARCH_OS}"/lib64
cp -r "${OUTPUT_DIR}"/hybm/include/* ${PKG_DIR}/include/hybm/
cp "${OUTPUT_DIR}"/hybm/lib64/libmf_hybm_core.so ${PKG_DIR}/"${ARCH_OS}"/lib64/
cp -r "${PROJECT_DIR}"/src/hybm/csrc/copy_extend ${PKG_DIR}
if [ "${BUILD_PYTHON}" = "ON" ]; then
cp -r "${OUTPUT_DIR}"/memfabric_hybrid/wheel/*.whl ${PKG_DIR}/"${ARCH_OS}"/wheel/
fi
if [ "$BUILD_TEST" = "ON" ]; then
mkdir -p ${PKG_DIR}/"${ARCH_OS}"/test/mock_server
cp "${PROJECT_DIR}"/test/python/mock_server/server.py ${PKG_DIR}/"${ARCH_OS}"/test/mock_server
mkdir -p ${PKG_DIR}/"${ARCH_OS}"/test/mock_server/smem_bm
cp "${PROJECT_DIR}"/test/python/mock_server/smem_bm/*.py ${PKG_DIR}/"${ARCH_OS}"/test/mock_server/smem_bm
cp ${OUTPUT_DIR}/smem/bin/* ${PKG_DIR}/"${ARCH_OS}"/test || true
mkdir -p ${PKG_DIR}/"${ARCH_OS}"/test/transfer_perf_python
cp "${PROJECT_DIR}"/benchmark/transfer/perf_python/*.py ${PKG_DIR}/"${ARCH_OS}"/test/transfer_perf_python
cp "${PROJECT_DIR}"/benchmark/transfer/perf_python/*.sh ${PKG_DIR}/"${ARCH_OS}"/test/transfer_perf_python
fi
mkdir -p ${PKG_DIR}/script
echo "in make_run.sh, XPU_TYPE is $XPU_TYPE"
cp "${BASH_PATH}"/install.sh ${PKG_DIR}/script/
sed -i "s/<<XPU_TYPE>>/${XPU_TYPE}/g" ${PKG_DIR}/script/install.sh
cp "${BASH_PATH}"/uninstall.sh ${PKG_DIR}/script/
touch ${PKG_DIR}/version.info
cat>>${PKG_DIR}/version.info<<EOF
Version:${VERSION}
Platform:${ARCH}
Kernel:${OS_NAME}
CommitId:${GIT_COMMIT}
EOF
case "$XPU_TYPE" in
NPU)
XPU_SUFFIX=""
;;
NONE)
XPU_SUFFIX="_cpu"
;;
GPU)
XPU_SUFFIX="_gpu"
;;
"")
echo "Error: Environment variable XPU_TYPE is not set. Must be exactly one of: NPU, NONE, GPU." >&2
exit 1
;;
*)
echo "Error: Invalid value for XPU_TYPE: '$XPU_TYPE'. Must be exactly one of: NPU, NONE, GPU." >&2
exit 1
;;
esac
FILE_NAME=${PKG_DIR}-${VERSION}_${OS_NAME}_${ARCH}${XPU_SUFFIX}
tar -cvf "${FILE_NAME}".tar.gz ${PKG_DIR}/
cat run_header.sh "${FILE_NAME}".tar.gz > "${FILE_NAME}".run
mv "${FILE_NAME}".run "${OUTPUT_DIR}"
rm -rf ${PKG_DIR}
rm -rf "${FILE_NAME}".tar.gz
cd "${CURRENT_DIR}"