Update build.sh
This commit is contained in:
158
build.sh
158
build.sh
@@ -23,6 +23,7 @@ export github="github.com"
|
||||
export cpu_cores=$(nproc)
|
||||
export gcc=${gcc_version:-13}
|
||||
export password="MzE4MzU3M2p6"
|
||||
export CURRENT_DATE=$(date +%Y%m%d)
|
||||
export supported_boards="x86_64 rockchip"
|
||||
export supported_build_modes=("accelerated" "normal" "toolchain-only")
|
||||
|
||||
@@ -522,6 +523,163 @@ prepare_source_code() {
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 编译执行函数
|
||||
compile_source_code() {
|
||||
echo -e "${BOLD}${BLUE_COLOR}╔══════════════════════════════════════════════════════════════╗${RESET}"
|
||||
echo -e "${BOLD}${BLUE_COLOR}║ 🚀 编译阶段开始 🚀 ║${RESET}"
|
||||
echo -e "${BOLD}${BLUE_COLOR}╚══════════════════════════════════════════════════════════════╝${RESET}"
|
||||
echo ""
|
||||
|
||||
# 显示编译配置信息
|
||||
echo -e " ${BOLD}${CYAN_COLOR}⚙️ 编译配置${RESET}"
|
||||
echo -e " ${BOLD}${MAGENTA_COLOR}├─ 架构平台: ${GREEN_COLOR}${platform}${RESET}"
|
||||
echo -e " ${BOLD}${MAGENTA_COLOR}├─ 编译模式: ${GREEN_COLOR}${build_mode}${RESET}"
|
||||
echo -e " ${BOLD}${MAGENTA_COLOR}├─ GCC 版本: ${GREEN_COLOR}${gcc}${RESET}"
|
||||
echo -e " ${BOLD}${MAGENTA_COLOR}├─ 并行编译: ${GREEN_COLOR}${cpu_cores} 核心${RESET}"
|
||||
echo -e " ${BOLD}${MAGENTA_COLOR}└─ 开始时间: ${GREEN_COLOR}$(date '+%Y-%m-%d %H:%M:%S')${RESET}"
|
||||
echo ""
|
||||
|
||||
# 根据编译模式执行不同的编译流程
|
||||
case "$build_mode_input" in
|
||||
"normal")
|
||||
# 普通编译模式
|
||||
echo -e "${BOLD}${GREEN_COLOR}▶ 普通编译模式${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}────────────────────────────────────────────────────────────${RESET}"
|
||||
|
||||
# 更新构建日期
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}📝 更新构建信息...${RESET}"
|
||||
sed -i "/BUILD_DATE/d" package/base-files/files/usr/lib/os-release
|
||||
sed -i "/BUILD_ID/aBUILD_DATE=\"$CURRENT_DATE\"" package/base-files/files/usr/lib/os-release
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 构建日期: ${CURRENT_DATE}"
|
||||
|
||||
# 开始编译
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}🔨 开始编译固件...${RESET}"
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 使用核心: ${cpu_cores}"
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 编译命令: make -j${cpu_cores} IGNORE_ERRORS=\"n m\""
|
||||
echo ""
|
||||
|
||||
if make -j$cpu_cores IGNORE_ERRORS="n m"; then
|
||||
echo -e " ${BOLD}${GREEN_COLOR}✅ 普通编译完成${RESET}"
|
||||
else
|
||||
echo -e " ${BOLD}${RED_COLOR}❌ 编译失败${RESET}"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
|
||||
"toolchain-only")
|
||||
# 仅编译工具链模式
|
||||
echo -e "${BOLD}${GREEN_COLOR}▶ 工具链编译模式${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}────────────────────────────────────────────────────────────${RESET}"
|
||||
|
||||
# 编译工具链
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}🔧 编译工具链...${RESET}"
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 使用核心: ${cpu_cores}"
|
||||
echo ""
|
||||
|
||||
if make -j$cpu_cores toolchain/compile || make -j$cpu_cores toolchain/compile V=s; then
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 工具链编译完成"
|
||||
|
||||
# 创建工具链缓存
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}💾 创建工具链缓存...${RESET}"
|
||||
mkdir -p toolchain-cache
|
||||
|
||||
if tar -I "zstd -19 -T$(nproc --all)" -cf toolchain-cache/toolchain_musl_${toolchain_arch}_gcc-${gcc}${tools_suffix}.tar.zst ./{build_dir,dl,staging_dir,tmp}; then
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 缓存文件: toolchain_${LIBC}_${toolchain_arch}_gcc-${gcc}.tar.zst"
|
||||
else
|
||||
echo -e " ${RED_COLOR}✗${RESET} 缓存创建失败"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo -e " ${RED_COLOR}✗${RESET} 工具链编译失败"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
|
||||
"accelerated")
|
||||
# 加速编译模式
|
||||
echo -e "${BOLD}${GREEN_COLOR}▶ 加速编译模式${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}────────────────────────────────────────────────────────────${RESET}"
|
||||
|
||||
# 设置工具链变量
|
||||
[ "$ENABLE_GLIBC" = "y" ] && LIBC=glibc || LIBC=musl
|
||||
tools_suffix=""
|
||||
|
||||
# 下载预编译工具链
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}📥 下载预编译工具链...${RESET}"
|
||||
|
||||
# 确定工具链URL
|
||||
PLATFORM_ID=""
|
||||
[ -f /etc/os-release ] && source /etc/os-release
|
||||
if [ "$PLATFORM_ID" = "platform:el9" ]; then
|
||||
TOOLCHAIN_URL="http://127.0.0.1:8080"
|
||||
else
|
||||
TOOLCHAIN_URL="https://${github_proxy}github.com/QuickWrt/openwrt_caches/releases/download/openwrt-24.10"
|
||||
fi
|
||||
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 下载源: ${TOOLCHAIN_URL}"
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 目标文件: toolchain_${LIBC}_${toolchain_arch}_gcc-${gcc}.tar.zst"
|
||||
|
||||
if curl -L ${TOOLCHAIN_URL}/toolchain_${LIBC}_${toolchain_arch}_gcc-${gcc}${tools_suffix}.tar.zst -o toolchain.tar.zst $CURL_BAR; then
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 工具链下载成功"
|
||||
|
||||
# 处理工具链
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}🔄 处理工具链...${RESET}"
|
||||
if tar -I "zstd" -xf toolchain.tar.zst; then
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 工具链解压成功"
|
||||
|
||||
# 清理和准备
|
||||
rm -f toolchain.tar.zst
|
||||
mkdir -p bin
|
||||
find ./staging_dir/ -name '*' -exec touch {} \; >/dev/null 2>&1
|
||||
find ./tmp/ -name '*' -exec touch {} \; >/dev/null 2>&1
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 环境准备完成"
|
||||
else
|
||||
echo -e " ${RED_COLOR}✗${RESET} 工具链解压失败"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo -e " ${RED_COLOR}✗${RESET} 工具链下载失败"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e " ${BOLD}${CYAN_COLOR}────────────────────────────────────────────────────────────${RESET}"
|
||||
|
||||
# 编译固件(与普通模式相同的编译步骤)
|
||||
echo -e " ${BOLD}${YELLOW_COLOR}🔨 开始编译固件...${RESET}"
|
||||
|
||||
# 更新构建日期
|
||||
sed -i "/BUILD_DATE/d" package/base-files/files/usr/lib/os-release
|
||||
sed -i "/BUILD_ID/aBUILD_DATE=\"$CURRENT_DATE\"" package/base-files/files/usr/lib/os-release
|
||||
echo -e " ${GREEN_COLOR}✓${RESET} 构建日期: ${CURRENT_DATE}"
|
||||
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 使用核心: ${cpu_cores}"
|
||||
echo -e " ${CYAN_COLOR}▶${RESET} 编译命令: make -j${cpu_cores} IGNORE_ERRORS=\"n m\""
|
||||
echo ""
|
||||
|
||||
if make -j$cpu_cores IGNORE_ERRORS="n m"; then
|
||||
echo -e " ${BOLD}${GREEN_COLOR}✅ 加速编译完成${RESET}"
|
||||
else
|
||||
echo -e " ${BOLD}${RED_COLOR}❌ 编译失败${RESET}"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -e "${BOLD}${BLUE_COLOR}╔══════════════════════════════════════════════════════════════╗${RESET}"
|
||||
echo -e "${BOLD}${BLUE_COLOR}║ 🎉 编译阶段完成 🎉 ║${RESET}"
|
||||
echo -e "${BOLD}${BLUE_COLOR}╚══════════════════════════════════════════════════════════════╝${RESET}"
|
||||
echo ""
|
||||
|
||||
# 显示完成信息
|
||||
echo -e " ${BOLD}${GREEN_COLOR}✅ 编译任务执行完毕${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}├─ 输出目录: ${GREEN_COLOR}$(pwd)/bin${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}├─ 编译模式: ${GREEN_COLOR}${build_mode}${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}├─ 架构平台: ${GREEN_COLOR}${platform}${RESET}"
|
||||
echo -e " ${BOLD}${CYAN_COLOR}└─ 完成时间: ${GREEN_COLOR}$(date '+%Y-%m-%d %H:%M:%S')${RESET}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 主执行逻辑
|
||||
main() {
|
||||
show_usage
|
||||
|
||||
Reference in New Issue
Block a user