#!/bin/bash # Copyright (c) Huawei Technologies Co., Ltd. 2023-2024. All rights reserved. vendor_name=customize targetdir=/usr/local/Ascend/opp target_custom=0 sourcedir=$PWD/packages vendordir=vendors/$vendor_name QUIET="y" while true do case $1 in --quiet) QUIET="y" shift ;; --install-path=*) INSTALL_PATH=$(echo $1 | cut -d"=" -f2-) INSTALL_PATH=${INSTALL_PATH%*/} shift ;; --*) shift ;; *) break ;; esac done log() { cur_date=`date +"%Y-%m-%d %H:%M:%S"` echo "[runtime] [$cur_date] "$1 } if [ -n "${INSTALL_PATH}" ]; then if [[ ! "${INSTALL_PATH}" = /* ]]; then log "[ERROR] use absolute path for --install-path argument" exit 1 fi if [ ! -d ${INSTALL_PATH} ]; then mkdir ${INSTALL_PATH} >> /dev/null 2>&1 if [ $? -ne 0 ]; then log "[ERROR] create ${INSTALL_PATH} failed" exit 1 fi fi targetdir=${INSTALL_PATH} elif [ -n "${ASCEND_CUSTOM_OPP_PATH}" ]; then if [ ! -d ${ASCEND_CUSTOM_OPP_PATH} ]; then mkdir -p ${ASCEND_CUSTOM_OPP_PATH} >> /dev/null 2>&1 if [ $? -ne 0 ]; then log "[ERROR] create ${ASCEND_CUSTOM_OPP_PATH} failed" fi fi targetdir=${ASCEND_CUSTOM_OPP_PATH} else if [ "x${ASCEND_OPP_PATH}" == "x" ]; then log "[ERROR] env ASCEND_OPP_PATH no exist" exit 1 fi targetdir="${ASCEND_OPP_PATH}" fi if [ ! -d $targetdir ];then log "[ERROR] $targetdir no exist" exit 1 fi upgrade() { if [ ! -d ${sourcedir}/$vendordir/$1 ]; then log "[INFO] no need to upgrade ops $1 files" return 0 fi if [ ! -d ${targetdir}/$vendordir/$1 ];then log "[INFO] create ${targetdir}/$vendordir/$1." mkdir -p ${targetdir}/$vendordir/$1 if [ $? -ne 0 ];then log "[ERROR] create ${targetdir}/$vendordir/$1 failed" return 1 fi else has_same_file=-1 for file_a in ${sourcedir}/$vendordir/$1/*; do file_b=${file_a##*/}; if [ "ls ${targetdir}/$vendordir/$1" = "" ]; then log "[INFO] ${targetdir}/$vendordir/$1 is empty !!" return 1 fi grep -q $file_b <<<`ls ${targetdir}/$vendordir/$1`; if [[ $? -eq 0 ]]; then echo -n "${file_b} " has_same_file=0 fi done if [ 0 -eq $has_same_file ]; then if test $QUIET = "n"; then echo "[INFO]: has old version in ${targetdir}/$vendordir/$1, \ you want to Overlay Installation , please enter:[o]; \ or replace directory installation , please enter: [r]; \ or not install , please enter:[n]." while true do read orn if [ "$orn" = n ]; then return 0 elif [ "$orn" = m ]; then break; elif [ "$0rn" = r ]; then [ -n "${targetdir}/$vendordir/$1/" ] && rm -rf "${targetdir}/$vendordir/$1"/* break; else echo "[ERROR] input error, please input again!" fi done fi fi log "[INFO] replace or merge old ops $1 files .g....." fi log "copy new ops $1 files ......" if [ -d ${targetdir}/$vendordir/$1/ ]; then chmod -R +w "$targetdir/$vendordir/$1/" >/dev/null 2>&1 fi cp -rf ${sourcedir}/$vendordir/$1/* $targetdir/$vendordir/$1/ if [ $? -ne 0 ];then log "[ERROR] copy new $1 files failed" return 1 fi return 0 } upgrade_proto() { if [ ! -f ${sourcedir}/$vendordir/custom.proto ]; then log "[INFO] no need to upgrade custom.proto files" return 0 fi if [ ! -d ${targetdir}/$vendordir/framework/caffe ];then log "[INFO] create ${targetdir}/$vendordir/framework/caffe." mkdir -p ${targetdir}/$vendordir/framework/caffe if [ $? -ne 0 ];then log "[ERROR] create ${targetdir}/$vendordir/framework/caffe failed" return 1 fi else if [ -f ${targetdir}/$vendordir/framework/caffe/custom.proto ]; then # 有老版本,判断是否要覆盖式安装 if test $QUIET = "n"; then echo "[INFO] ${targetdir}/$vendordir/framework/caffe has old version"\ "custom.proto file. Do you want to replace? [y/n] " while true do read yn if [ "$yn" = n ]; then return 0 elif [ "$yn" = y ]; then break; else echo "[ERROR] input error, please input again!" fi done fi fi log "[INFO] replace old caffe.proto files ......" fi chmod -R +w "$targetdir/$vendordir/framework/caffe/" >/dev/null 2>&1 cp -rf ${sourcedir}/$vendordir/custom.proto ${targetdir}/$vendordir/framework/caffe/ if [ $? -ne 0 ];then log "[ERROR] copy new custom.proto failed" return 1 fi log "[INFO] copy custom.proto success" return 0 } upgrade_file() { if [ ! -e ${sourcedir}/$vendordir/$1 ]; then log "[INFO] no need to upgrade ops $1 file" return 0 fi log "copy new $1 files ......" cp -f ${sourcedir}/$vendordir/$1 $targetdir/$vendordir/$1 if [ $? -ne 0 ];then log "[ERROR] copy new $1 file failed" return 1 fi return 0 } delete_optiling_file() { if [ ! -d ${targetdir}/vendors ];then log "[INFO] $1 not exist, no need to uninstall" return 0 fi sys_info=$(uname -m) if [ ! -d ${sourcedir}/$vendordir/$1/ai_core/tbe/op_tiling/lib/linux/${sys_info} ];then rm -rf ${sourcedir}/$vendordir/$1/ai_core/tbe/op_tiling/liboptiling.so fi return 0 } log "[INFO] copy uninstall sh success" if [ ! -d ${targetdir}/vendors ];then log "[INFO] create ${targetdir}/vendors." mkdir -p ${targetdir}/vendors if [ $? -ne 0 ];then log "[ERROR] create ${targetdir}/vendors failed" return 1 fi fi chmod u+w ${targetdir}/vendors echo "[ops_custom]upgrade framework" upgrade framework if [ $? -ne 0 ];then exit 1 fi echo "[ops_custom]upgrade op proto" upgrade op_proto if [ $? -ne 0 ];then exit 1 fi echo "[ops_custom]upgrade version.info" upgrade_file version.info if [ $? -ne 0 ];then exit 1 fi echo "[ops_custom]upgrade op impl" delete_optiling_file op_impl upgrade op_impl if [ $? -ne 0 ];then exit 1 fi echo "[ops_custom]upgrade op api" upgrade op_api if [ $? -ne 0 ];then exit 1 fi upgrade_proto if [ $? -ne 0 ];then exit 1 fi # set the set_env.bash if [ -n "${INSTALL_PATH}" ] && [ -d ${INSTALL_PATH} ]; then _ASCEND_CUSTOM_OPP_PATH=${targetdir}/${vendordir} bin_path="${_ASCEND_CUSTOM_OPP_PATH}/bin" set_env_variable="#!/bin/bash\nexport ASCEND_CUSTOM_OPP_PATH=${_ASCEND_CUSTOM_OPP_PATH}:\${ASCEND_CUSTOM_OPP_PATH}" if [ ! -d ${bin_path} ]; then mkdir -p ${bin_path} >> /dev/null 2>&1 if [ $? -ne 0 ]; then log "[ERROR] create ${bin_path} failed" exit 1 fi fi echo -e ${set_env_variable} > ${bin_path}/set_env.bash if [ $? -ne 0 ]; then log "[ERROR] write ASCEND_CUSTOM_OPP_PATH to set_env.bash failed" exit 1 else log "[INFO] using requirements: when custom module install finished or before you run the custom module, \ execute the command [ source ${bin_path}/set_env.bash ] to set the environment path" fi else config_file=${targetdir}/vendors/config.ini if [ ! -f ${config_file} ]; then touch ${config_file} chmod 640 ${config_file} echo "load_priority=$vendor_name" > ${config_file} if [ $? -ne 0 ];then echo "echo load_priority failed" exit 1 fi else found_vendors="$(grep -w "load_priority" "$config_file" | cut --only-delimited -d"=" -f2-)" found_vendor=$(echo $found_vendors | sed "s/$vendor_name//g" | tr ',' ' ') vendor=$(echo $found_vendor | tr -s ' ' ',') if [ "$vendor" != "" ]; then sed -i "/load_priority=$found_vendors/s@load_priority=$found_vendors@load_priority=$vendor_name,$vendor@g" "$config_file" fi fi fi chmod u-w ${targetdir}/vendors if [ -d ${targetdir}/$vendordir/op_impl/cpu/aicpu_kernel/impl/ ]; then chmod -R 440 ${targetdir}/$vendordir/op_impl/cpu/aicpu_kernel/impl/* >/dev/null 2>&1 fi if [ -f ${targetdir}/ascend_install.info ]; then chmod -R 440 ${targetdir}/ascend_install.info fi if [ -f ${targetdir}/scene.info ]; then chmod -R 440 ${targetdir}/scene.info fi if [ -f ${targetdir}/version.info ]; then chmod -R 440 ${targetdir}/version.info fi echo "SUCCESS" exit 0