142 lines
2.7 KiB
Bash
142 lines
2.7 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# FunMC 构建脚本 (Linux/macOS)
|
||
|
|
# 用于构建所有组件
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
||
|
|
|
||
|
|
TARGET="all"
|
||
|
|
RELEASE=false
|
||
|
|
BUNDLE=false
|
||
|
|
|
||
|
|
print_usage() {
|
||
|
|
echo "用法: $0 [选项]"
|
||
|
|
echo ""
|
||
|
|
echo "选项:"
|
||
|
|
echo " -t, --target <target> 构建目标 (all, client, server, relay) [默认: all]"
|
||
|
|
echo " -r, --release 构建发布版本"
|
||
|
|
echo " -b, --bundle 打包客户端安装包"
|
||
|
|
echo " -h, --help 显示帮助信息"
|
||
|
|
}
|
||
|
|
|
||
|
|
while [[ $# -gt 0 ]]; do
|
||
|
|
case $1 in
|
||
|
|
-t|--target)
|
||
|
|
TARGET="$2"
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-r|--release)
|
||
|
|
RELEASE=true
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
-b|--bundle)
|
||
|
|
BUNDLE=true
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
-h|--help)
|
||
|
|
print_usage
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "未知选项: $1"
|
||
|
|
print_usage
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
log_step() {
|
||
|
|
echo -e "\n\033[36m==> $1\033[0m"
|
||
|
|
}
|
||
|
|
|
||
|
|
log_success() {
|
||
|
|
echo -e "\033[32m$1\033[0m"
|
||
|
|
}
|
||
|
|
|
||
|
|
build_server() {
|
||
|
|
log_step "构建主服务端..."
|
||
|
|
cd "$ROOT_DIR/server"
|
||
|
|
|
||
|
|
if $RELEASE; then
|
||
|
|
cargo build --release
|
||
|
|
else
|
||
|
|
cargo build
|
||
|
|
fi
|
||
|
|
|
||
|
|
log_success "主服务端构建完成!"
|
||
|
|
}
|
||
|
|
|
||
|
|
build_relay() {
|
||
|
|
log_step "构建中继服务端..."
|
||
|
|
cd "$ROOT_DIR/relay-server"
|
||
|
|
|
||
|
|
if $RELEASE; then
|
||
|
|
cargo build --release
|
||
|
|
else
|
||
|
|
cargo build
|
||
|
|
fi
|
||
|
|
|
||
|
|
log_success "中继服务端构建完成!"
|
||
|
|
}
|
||
|
|
|
||
|
|
build_client() {
|
||
|
|
log_step "构建客户端..."
|
||
|
|
cd "$ROOT_DIR/client"
|
||
|
|
|
||
|
|
# 安装前端依赖
|
||
|
|
echo "安装前端依赖..."
|
||
|
|
cd ui
|
||
|
|
npm install
|
||
|
|
cd ..
|
||
|
|
|
||
|
|
# 构建 Tauri 应用
|
||
|
|
if $BUNDLE; then
|
||
|
|
if $RELEASE; then
|
||
|
|
cargo tauri build
|
||
|
|
else
|
||
|
|
cargo tauri build --debug
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
if $RELEASE; then
|
||
|
|
cargo build --release
|
||
|
|
else
|
||
|
|
cargo build
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
log_success "客户端构建完成!"
|
||
|
|
}
|
||
|
|
|
||
|
|
echo -e "\033[33mFunMC 构建系统\033[0m"
|
||
|
|
echo "==============="
|
||
|
|
|
||
|
|
case $TARGET in
|
||
|
|
all)
|
||
|
|
build_server
|
||
|
|
build_relay
|
||
|
|
build_client
|
||
|
|
;;
|
||
|
|
client)
|
||
|
|
build_client
|
||
|
|
;;
|
||
|
|
server)
|
||
|
|
build_server
|
||
|
|
;;
|
||
|
|
relay)
|
||
|
|
build_relay
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "无效的构建目标: $TARGET"
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
echo -e "\n\033[32m所有构建完成!\033[0m"
|
||
|
|
|
||
|
|
if $BUNDLE && [[ "$TARGET" == "all" || "$TARGET" == "client" ]]; then
|
||
|
|
echo -e "\n\033[33m客户端安装包位置:\033[0m"
|
||
|
|
echo "$ROOT_DIR/client/target/release/bundle/"
|
||
|
|
fi
|