2
csrc/cmake/scripts/custom/help.info
Normal file
2
csrc/cmake/scripts/custom/help.info
Normal file
@@ -0,0 +1,2 @@
|
||||
--install-path Install operator package to specific dir path
|
||||
--install-for-all Allow other users to use the operator package
|
||||
344
csrc/cmake/scripts/custom/install.sh
Normal file
344
csrc/cmake/scripts/custom/install.sh
Normal file
@@ -0,0 +1,344 @@
|
||||
#!/bin/bash
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
# Copyright (c) 2025 Huawei Technologies Co., Ltd.
|
||||
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
|
||||
# CANN Open Software License Agreement Version 2.0 (the "License").
|
||||
# Please refer to the License for details. You may not use this file except in compliance with the License.
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
||||
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See LICENSE in the root of the software repository for the full text of the License.
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
vendor_name=customize
|
||||
targetdir=/usr/local/Ascend/opp
|
||||
target_custom=0
|
||||
|
||||
sourcedir=$PWD/packages
|
||||
vendordir=vendors/$vendor_name
|
||||
|
||||
QUIET="y"
|
||||
INSTALL_FOR_ALL="n"
|
||||
|
||||
|
||||
while true
|
||||
do
|
||||
case $1 in
|
||||
--quiet)
|
||||
QUIET="y"
|
||||
shift
|
||||
;;
|
||||
--install-path=*)
|
||||
INSTALL_PATH=$(echo $1 | cut -d"=" -f2-)
|
||||
INSTALL_PATH=${INSTALL_PATH%*/}
|
||||
shift
|
||||
;;
|
||||
--install-for-all)
|
||||
INSTALL_FOR_ALL="y"
|
||||
shift
|
||||
;;
|
||||
--*)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
log() {
|
||||
cur_date=`date +"%Y-%m-%d %H:%M:%S"`
|
||||
echo "[ops_custom] [$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 [[ "${ASCEND_CUSTOM_OPP_PATH}" == *:* ]]; then
|
||||
log "[ERROR] environment variable ASCEND_CUSTOM_OPP_PATH=${ASCEND_CUSTOM_OPP_PATH} is set and \
|
||||
has multiple path in it (colon inside), which will cause the custom op installed incorrectly. \
|
||||
Please use the --install-path option to specify an installation path instead."
|
||||
exit 1
|
||||
fi
|
||||
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
|
||||
|
||||
if [ ! -x $targetdir ] || [ ! -w $targetdir ] || [ ! -r $targetdir ];then
|
||||
log "[WARNING] The directory $targetdir does not have sufficient permissions. \
|
||||
Please check and modify the folder permissions (e.g., using chmod), \
|
||||
or use the --install-path option to specify an installation path and \
|
||||
change the environment variable ASCEND_CUSTOM_OPP_PATH to the specified path."
|
||||
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
|
||||
echo
|
||||
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" = o ]; then
|
||||
break;
|
||||
elif [ "$orn" = r ]; then
|
||||
[ -d "${targetdir}/$vendordir/$1/" ] && rm -rf "${targetdir}/$vendordir/$1"/*
|
||||
break;
|
||||
else
|
||||
log "[ERROR] input error, please input again!"
|
||||
fi
|
||||
done
|
||||
else
|
||||
[ -d "${targetdir}/$vendordir/$1/" ] && rm -rf "${targetdir}/$vendordir/$1"/*
|
||||
fi
|
||||
fi
|
||||
log "[INFO] replace or merge old ops $1 files ......"
|
||||
fi
|
||||
|
||||
log "[INFO] 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
|
||||
log "[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 "[INFO] 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"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
chmod u+w ${targetdir}/vendors
|
||||
|
||||
log "[INFO] upgrade framework"
|
||||
upgrade framework
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade op proto"
|
||||
upgrade op_proto
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade op impl"
|
||||
delete_optiling_file op_impl
|
||||
upgrade op_impl
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade op api"
|
||||
upgrade op_api
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade version.info"
|
||||
upgrade_file version.info
|
||||
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}\nexport LD_LIBRARY_PATH=${_ASCEND_CUSTOM_OPP_PATH}/op_api/lib/:\${LD_LIBRARY_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
|
||||
_ASCEND_CUSTOM_OPP_PATH=${targetdir}/${vendordir}
|
||||
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
|
||||
log "[ERROR] 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
|
||||
if test $INSTALL_FOR_ALL = "y"; then
|
||||
chmod 755 ${config_file}
|
||||
fi
|
||||
log "[INFO] using requirements: when custom module install finished or before you run the custom module, \
|
||||
execute the command [ export LD_LIBRARY_PATH=${_ASCEND_CUSTOM_OPP_PATH}/op_api/lib/:\${LD_LIBRARY_PATH} ] to set the environment path"
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
echo "SUCCESS"
|
||||
exit 0
|
||||
153
csrc/cmake/scripts/custom/upgrade.sh
Normal file
153
csrc/cmake/scripts/custom/upgrade.sh
Normal file
@@ -0,0 +1,153 @@
|
||||
#!/bin/bash
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
# Copyright (c) 2025 Huawei Technologies Co., Ltd.
|
||||
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
|
||||
# CANN Open Software License Agreement Version 2.0 (the "License").
|
||||
# Please refer to the License for details. You may not use this file except in compliance with the License.
|
||||
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
||||
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See LICENSE in the root of the software repository for the full text of the License.
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
vendor_name=customize
|
||||
targetdir=/usr/local/Ascend/opp
|
||||
target_custom=0
|
||||
|
||||
sourcedir=$PWD/packages
|
||||
vendordir=vendors/$vendor_name
|
||||
|
||||
log() {
|
||||
cur_date=`date +"%Y-%m-%d %H:%M:%S"`
|
||||
echo "[ops_custom] [$cur_date] "$1
|
||||
}
|
||||
|
||||
if [[ "x${ASCEND_OPP_PATH}" == "x" ]];then
|
||||
log "[ERROR] env ASCEND_OPP_PATH no exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
targetdir=${ASCEND_OPP_PATH}
|
||||
|
||||
if [ ! -d $targetdir ];then
|
||||
log "[ERROR] $targetdir no exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -x $targetdir ] || [ ! -w $targetdir ] || [ ! -r $targetdir ];then
|
||||
log "[WARNING] The directory $targetdir does not have sufficient permissions. \
|
||||
Please check and modify the folder permissions (e.g., using chmod), \
|
||||
or use the --install-path option to specify an installation path and \
|
||||
change the environment variable ASCEND_CUSTOM_OPP_PATH to the specified path."
|
||||
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
|
||||
vendor_installed_dir=$(ls "$targetdir/vendors" 2> /dev/null)
|
||||
for i in $vendor_installed_dir;do
|
||||
vendor_installed_file=$(ls "$vendor_installed_dir/$vendor_name/$i" 2> /dev/null)
|
||||
if [ "$i" = "$vendor_name" ] && [ "$vendor_installed_file" != "" ]; then
|
||||
echo "[INFO]: $vendor_name custom opp package has been installed on the path $vendor_installed_dir, \
|
||||
you want to Overlay Installation , please enter:[o]; \
|
||||
or replace directory installation , please enter: [r]; \
|
||||
or not install , please enter:[n]."
|
||||
fi
|
||||
while true
|
||||
do
|
||||
read mrn
|
||||
if [ "$mrn" = o ]; then
|
||||
break
|
||||
elif [ "$mrn" = r ]; then
|
||||
[ -n "$vendor_installed_file" ] && rm -rf "$vendor_installed_file"
|
||||
break
|
||||
elif [ "$mrn" = n ]; then
|
||||
return 0
|
||||
else
|
||||
log "[WARNING]: Input error, please input m or r or n to choose!"
|
||||
fi
|
||||
done
|
||||
done
|
||||
log "[INFO] replace old ops $1 files ......"
|
||||
fi
|
||||
|
||||
log "copy new ops $1 files ......"
|
||||
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_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
|
||||
}
|
||||
|
||||
log "[INFO] copy uninstall sh success"
|
||||
|
||||
log "[INFO] upgrade framework"
|
||||
upgrade framework
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade op proto"
|
||||
upgrade op_proto
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade op impl"
|
||||
upgrade op_impl
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade op api"
|
||||
upgrade op_api
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "[INFO] upgrade version.info"
|
||||
upgrade_file version.info
|
||||
if [ $? -ne 0 ];then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
config_file=${targetdir}/vendors/config.ini
|
||||
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
|
||||
|
||||
echo "SUCCESS"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user