-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompile.sh
101 lines (84 loc) · 2.6 KB
/
compile.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
# 设置工作目录变量
WORK_DIR="./openwrt" # OpenWrt 源码目录
BRANCH="master" # 使用的分支
# 打印分隔符函数
print_step() {
echo -e "\n=== $1 ===\n"
}
# 判断是否传入了 -c 参数(强制编译)
FORCE_COMPILE=false # 默认为不强制编译
while getopts ":c" opt; do
case ${opt} in
c )
FORCE_COMPILE=true # 如果有 -c 参数,则设置为强制编译
;;
\? )
echo "无效的选项: $OPTARG" 1>&2 # 错误提示
;;
esac
done
# 保存当前目录
ORIGINAL_DIR=$(pwd)
# 进入工作目录
print_step "进入工作目录 $WORK_DIR"
cd "$WORK_DIR" || { echo "进入目录 $WORK_DIR 失败"; exit 1; }
# 拉取最新代码
print_step "检查远程仓库最新代码"
git fetch origin $BRANCH # 拉取远程仓库最新代码
LOCAL=$(git rev-parse HEAD) # 获取本地代码版本
REMOTE=$(git rev-parse origin/$BRANCH) # 获取远程仓库代码版本
# 检查本地和远程代码是否一致,或者是否强制编译
if [ "$LOCAL" != "$REMOTE" ] || [ "$FORCE_COMPILE" = true ]; then
# 如果检测到强制编译参数或代码有更新
if [ "$FORCE_COMPILE" = true ]; then
print_step "检测到强制编译选项,即使代码是最新的,也开始重新编译"
else
print_step "源码已更新,开始重新编译"
fi
# 开始计时
start=$(date +%s)
# 拉取最新代码并重新编译
print_step "拉取最新代码"
if ! git pull origin $BRANCH; then
echo "从 origin/$BRANCH 拉取最新代码失败。"
exit 1
fi
print_step "更新 feeds"
if ! ./scripts/feeds update -a; then
echo "更新 feeds 失败。"
exit 1
fi
print_step "安装 feeds"
if ! ./scripts/feeds install -a; then
echo "安装 feeds 失败。"
exit 1
fi
print_step "下载 packages"
if ! make -j$(nproc) download; then
echo "下载 packages 失败。"
exit 1
fi
# 新增:运行 make defconfig
if ! make defconfig; then
echo "执行 make defconfig 失败。"
exit 1
fi
print_step "开始编译"
if ! make -j$(nproc --ignore=1); then
echo "编译失败。"
exit 1
fi
# 结束计时
end=$(date +%s)
# 输出编译总耗时
print_step "编译完成"
echo "总编译时间: $((end-start)) 秒"
echo "$(date): 编译完成"
else
# 如果本地代码与远程代码一致,且未传入强制编译参数
print_step "源码已是最新,无需重新编译"
fi
# 返回原目录
print_step "返回原目录 $ORIGINAL_DIR"
cd "$ORIGINAL_DIR"