You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

228 lines
5.4 KiB

#!/bin/bash
<<BLOCK
function do_envsetup_pc() {
#构造编译脚本
echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh
echo "-DCMAKE_C_COMPILER=gcc \\" >>${PROJECT_PATH}/build/build.sh
echo "-DCMAKE_CXX_COMPILER=g++ \\" >>${PROJECT_PATH}/build/build.sh
chmod +x ${PROJECT_PATH}/build/build.sh
}
function do_envsetup_rk3328() {
# 下载交叉编译工具
cd ${PROJECT_PATH}/build
wget -c "ftp://zftpuser:zftpzwsd@192.168.1.2/zwsd/gnu_gcc_release/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz"
tar -xvf "gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz"
# 构造编译脚本
echo "cmake ../ \\" >${PROJECT_PATH}/build/build.sh
echo "-DCMAKE_C_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \\" >>${PROJECT_PATH}/build/build.sh
echo "-DCMAKE_CXX_COMPILER=${PROJECT_PATH}/build/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \\" >>${PROJECT_PATH}/build/build.sh
chmod +x ${PROJECT_PATH}/build/build.sh
}
BLOCK
function do_flash_to_targetboard() {
scp -r out/${PROJECT_NAME}.tar.gz ${TARGET_USER}@${IP}:/
#如果存在shutdown.sh,则先执行shutdown.sh
ssh ${TARGET_USER}@${IP} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi'
ssh ${TARGET_USER}@${IP} "cd / && tar -xvf app.tar.gz -C /"
ssh ${TARGET_USER}@${IP} "cd / && rm -rf app.tar.gz"
}
function do_flashapp_to_targetboard() {
# 杀死目标程序
ssh ${TARGET_USER}@${IP} "killall app.out"
# 拷贝目标程序
scp -r ${PROJECT_PATH}/build/app/app.out ${TARGET_USER}@${IP}:/app/
}
function do_flashwebapp_to_targetboard() {
ssh ${TARGET_USER}@${IP} "rm -rf /webapp"
scp -r ${PROJECT_PATH}/webapp ${TARGET_USER}@${IP}:/app/webapp
}
##############################################################################
#
# Main:
#
##############################################################################
#
# iflytool.sh envsetup rk3328
#
# iflytool.sh --ip 192.168.8.100 build
# iflytool.sh --ip 192.168.8.100 --user root build <packet> <flash> <reboot>
# iflytool.sh --ip 192.168.8.100 --user root ssh_copy_id ssh_clear_id
#
# 解析指令判断指令是否是 envsetup iflytool.sh envsetup rk3328
set -e
is_build=false
is_flash=false
is_reboot=false
is_envsetup=false
export PROJECT_PATH=$(pwd)
for i in "$@"; do
case $i in
envsetup)
shift # past argument=value
BUILDFOR=$1
is_envsetup=true
shift
;;
build)
is_build=true
shift
;;
flash)
is_flash=true
shift
;;
reboot)
is_reboot=true
shift
;;
packet)
is_packet=true
shift
;;
ssh_copy_id)
is_ssh_copy_id=true
shift
;;
ssh_clear_id)
is_ssh_clear_id=true
shift
;;
flashapp)
is_flashapp=true
shift
;;
flashwebapp)
is_flashwebapp=true
shift
;;
--user)
shift
TARGET_USER=$1
shift
;;
--ip)
shift
IP=$1
shift
;;
*)
# unknown option
;;
esac
done
# 判断是否是envsetup
if [ "$is_envsetup" = true ]; then
echo "envsetup $BUILDFOR"
echo "mkdir -p ${PROJECT_PATH}/build"
mkdir -p ${PROJECT_PATH}/build
# 构造环境变量
echo "BUILDFOR=$BUILDFOR" >${PROJECT_PATH}/build/buildenv
#从CmakeLists.txt中读取项目名称 project(app)
PROJECT_NAME=$(grep "project(" ${PROJECT_PATH}/CMakeLists.txt)
PROJECT_NAME=${STR#*\(}
PROJECT_NAME=${PROJECT_NAME%\)*}
#从字符串中 project(app)解析出app
STR="project(app)"
PROJECT_NAME=${STR#*\(}
PROJECT_NAME=${PROJECT_NAME%\)*}
echo "PROJECT_NAME=$PROJECT_NAME" >>${PROJECT_PATH}/build/buildenv
${PROJECT_PATH}/sh/envsetup_${BUILDFOR}.sh
echo "envsetup success !"
exit 0
fi
# 如果没有指定用户名,则默认用户名为 root
if [ -z "$TARGET_USER" ]; then
TARGET_USER=root
fi
#如果flash 则默认编译打包
if [ "$is_flash" = true ]; then
is_build=true
is_packet=true
fi
#如果打包,则默认编译
if [ "$is_packet" = true ]; then
is_build=true
fi
#如果部署则默认需要IP
if [ "$is_flash" = true ] || [ "$is_reboot" = true ]; then
if [ -z "$IP" ]; then
echo "please input ip"
exit 1
fi
fi
# 检查build目录是否存在
if [ ! -d "${PROJECT_PATH}/build" ]; then
echo "build directory not exist, please run envsetup first"
exit 1
fi
# 初始化环境变量
source ${PROJECT_PATH}/build/buildenv
# 编译
if [ "$is_build" = true ]; then
echo "build"
cd ${PROJECT_PATH}/build
# 根据当前电脑线程数,调用make
./build.sh && make -j$(nproc) install
fi
# 打包
if [ "$is_packet" = true ]; then
echo "packet for ${BUILDFOR}"
cd ${PROJECT_PATH}
${PROJECT_PATH}/sh/packet.sh
fi
# 部署
if [ "$is_flash" = true ]; then
do_flash_to_targetboard
fi
# flashapp
if [ "$is_flashapp" = true ]; then
do_flashapp_to_targetboard
fi
# flashwebapp
if [ "$is_flashwebapp" = true ]; then
do_flashwebapp_to_targetboard
fi
# 重启
if [ "$is_reboot" = true ]; then
ssh ${TARGET_USER}@${IP} "reboot"
fi
#ssh_copy_id
if [ "$is_ssh_copy_id" = true ]; then
ssh-copy-id ${TARGET_USER}@${IP}
fi
#ssh_clear_id
if [ "$is_ssh_clear_id" = true ]; then
ssh ${TARGET_USER}@${ip} "rm -rf ~/.ssh/authorized_keys"
fi