Browse Source

修改编译脚本

master
zhaohe 3 years ago
parent
commit
a5b22b821a
  1. 1
      env/startup.sh
  2. 45
      sh/deploy_rk3328.sh
  3. 20
      sh/envsetup_pc.sh
  4. 24
      sh/envsetup_rk3328.sh
  5. 211
      sh/iflytool.sh
  6. 0
      sh/packet_rk3328.sh
  7. 12
      sh/ssh-clear-id.sh
  8. 17
      sh/ssh-copy-id.sh

1
env/startup.sh

@ -1,2 +1,3 @@
#!/bin/bash #!/bin/bash
cd /app
./app.out & ./app.out &

45
sh/deploy_rk3328.sh

@ -1,45 +0,0 @@
#!/bin/bash
PROJECT_NAME=app
ROOTFS_APP_DIR=/
export PROJECT_PATH=$(pwd)
set -e
set -x
# 从命令行读取参数,目标IP,是否重启 $0 --ip <ip> --reboot
while [ "$1" != "" ]; do
case $1 in
--ip)
shift
ip=$1
;;
--reboot)
shift
reboot=$1
;;
esac
shift
done
# 如果IP为空,提示使用方法
if [ -z "$ip" ]; then
echo "Usage: $0 --ip <ip> --reboot <true|false>"
exit 1
fi
scp -r out/${PROJECT_NAME}.tar.gz root@${ip}:${ROOTFS_APP_DIR}
#如果存在shutdown.sh,则先执行shutdown.sh
ssh root@${ip} 'if [ -f "/${PROJECT_NAME}/shutdown.sh" ];then /${PROJECT_NAME}/shutdown.sh;fi'
ssh root@${ip} "cd ${ROOTFS_APP_DIR} && tar -xvf ${PROJECT_NAME}.tar.gz -C ${ROOTFS_APP_DIR}"
ssh root@${ip} "cd ${ROOTFS_APP_DIR} && rm -rf ${PROJECT_NAME}.tar.gz"
if [ "$reboot" = "true" ]; then
echo "reboot";
ssh root@${ip} "reboot"
fi
echo "deploy success"

20
sh/envsetup_pc.sh

@ -1,20 +0,0 @@
#!/bin/bash
export PROJECT_PATH=`pwd`
#!/bin/bash
set -e #如果某条指令执行出错,则会退出脚本
# set -v #打印正在指令的指令
set -x
# 创建编译目录
# echo "创建编译目录"
echo "mkdir -p ${PROJECT_PATH}/build"
mkdir -p ${PROJECT_PATH}/build
#构造编译脚本
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

24
sh/envsetup_rk3328.sh

@ -1,24 +0,0 @@
#!/bin/bash
export PROJECT_PATH=`pwd`
#!/bin/bash
set -e #如果某条指令执行出错,则会退出脚本
# set -v #打印正在指令的指令
set -x
# 创建编译目录
# echo "创建编译目录"
echo "mkdir -p ${PROJECT_PATH}/build"
mkdir -p ${PROJECT_PATH}/build
# 下载编译工具
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

211
sh/iflytool.sh

@ -0,0 +1,211 @@
#!/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

0
sh/packet_rk3328.sh

12
sh/ssh-clear-id.sh

@ -1,12 +0,0 @@
#!/bin/bash
set -e #如果某条指令执行出错,则会退出脚本
if [ $# -eq 0 ]; then
echo "Usage: $0 <ip>"
exit 1
fi
# 清除目标主机的ssh-key
ip=$1
ssh root@${ip} "rm -rf ~/.ssh/authorized_keys"

17
sh/ssh-copy-id.sh

@ -1,17 +0,0 @@
#!/bin/bash
set -e #如果某条指令执行出错,则会退出脚本
if [ $# -eq 0 ]; then
echo "Usage: $0 <ip>"
exit 1
fi
# 检查ssh-key是否存在,不存在则退出
if [ ! -f ~/.ssh/id_rsa.pub ]; then
echo "ssh-key not found, please run ssh-keygen first"
exit 1
fi
ip=$1
ssh-copy-id root@${ip}
Loading…
Cancel
Save