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.
211 lines
5.3 KiB
211 lines
5.3 KiB
#!/bin/bash
|
|
export PROJECT_PATH=$(pwd)
|
|
|
|
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
|
|
|
|
}
|
|
|
|
function do_flash_to_rk3328() {
|
|
scp -r out/${PROJECT_NAME}.tar.gz ${USER}@${IP}:${ROOTFS_APP_DIR}
|
|
#如果存在shutdown.sh,则先执行shutdown.sh
|
|
ssh ${USER}@${IP} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi'
|
|
ssh ${USER}@${IP} "cd ${ROOTFS_APP_DIR} && tar -xvf ${PROJECT_NAME}.tar.gz -C ${ROOTFS_APP_DIR}"
|
|
ssh ${USER}@${IP} "cd ${ROOTFS_APP_DIR} && rm -rf ${PROJECT_NAME}.tar.gz"
|
|
}
|
|
|
|
##############################################################################
|
|
#
|
|
# 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
|
|
|
|
is_build=false
|
|
is_flash=false
|
|
is_reboot=false
|
|
is_envsetup=false
|
|
|
|
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
|
|
;;
|
|
--user)
|
|
shift
|
|
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
|
|
|
|
ROOTFS_APP_DIR="/"
|
|
echo "ROOTFS_APP_DIR=$ROOTFS_APP_DIR" >>${PROJECT_PATH}/build/buildenv
|
|
|
|
if [ "$BUILDFOR" = "pc" ]; then
|
|
do_envsetup_pc
|
|
elif [ "$BUILDFOR" = "rk3328" ]; then
|
|
do_envsetup_rk3328
|
|
else
|
|
echo "unknow build for $BUILDFOR"
|
|
exit 1
|
|
fi
|
|
exit 0
|
|
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)
|
|
fi
|
|
|
|
# 打包
|
|
if [ "$is_packet" = true ]; then
|
|
echo "packet for ${BUILDFOR}"
|
|
cd ${PROJECT_PATH}
|
|
${PROJECT_PATH}/sh/packet_${BUILDFOR}.sh
|
|
fi
|
|
|
|
# 部署
|
|
if [ "$is_flash" = true ]; then
|
|
if [ "$BUILDFOR" = "pc" ]; then
|
|
echo "WARNING:not support flash for pc"
|
|
elif [ "$BUILDFOR" = "rk3328" ]; then
|
|
do_flash_to_rk3328
|
|
else
|
|
echo "unknow build for $BUILDFOR"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# 重启
|
|
if [ "$is_reboot" = true ]; then
|
|
if [ "$BUILDFOR" = "pc" ]; then
|
|
echo "WARNING:not support reboot for pc"
|
|
elif [ "$BUILDFOR" = "rk3328" ]; then
|
|
ssh ${USER}@${IP} "reboot"
|
|
else
|
|
echo "unknow build for $BUILDFOR"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
#ssh_copy_id
|
|
if [ "ssh_copy_id" = true ]; then
|
|
if [ "$BUILDFOR" = "pc" ]; then
|
|
echo "WARNING:not support ssh_copy_id for pc"
|
|
elif [ "$BUILDFOR" = "rk3328" ]; then
|
|
ssh-copy-id ${USER}@${IP}
|
|
else
|
|
echo "unknow build for $BUILDFOR"
|
|
exit 1
|
|
fi
|
|
|
|
fi
|
|
|
|
#ssh_clear_id
|
|
if [ "ssh_clear_id" = true ]; then
|
|
ssh ${USER}@${ip} "rm -rf ~/.ssh/authorized_keys"
|
|
fi
|