devin15/cursor2api-rust
0
1# 参数处理2param(3 [switch]$Static,4 [switch]$Help,5 [ValidateSet("x86_64", "aarch64", "i686")]6 [string]$Architecture7)8 9# 设置错误时停止执行10$ErrorActionPreference = "Stop"11 12# 颜色输出函数13function Write-Info { param($Message) Write-Host "[INFO] $Message" -ForegroundColor Blue }14function Write-Warn { param($Message) Write-Host "[WARN] $Message" -ForegroundColor Yellow }15function Write-Error { param($Message) Write-Host "[ERROR] $Message" -ForegroundColor Red; exit 1 }16 17# 检查必要的工具18function Check-Requirements {19 $tools = @("cargo", "protoc", "npm", "node")20 $missing = @()21 22 foreach ($tool in $tools) {23 if (-not (Get-Command $tool -ErrorAction SilentlyContinue)) {24 $missing += $tool25 }26 }27 28 if ($missing.Count -gt 0) {29 Write-Error "缺少必要工具: $($missing -join ', ')"30 }31}32 33# 帮助信息34function Show-Help {35 Write-Host @"36用法: $(Split-Path $MyInvocation.ScriptName -Leaf) [选项]37 38选项:39 -Static 使用静态链接(默认动态链接)40 -Help 显示此帮助信息41 42不带参数时使用默认配置构建43"@44}45 46# 构建函数47function Build-Target {48 param (49 [string]$Target,50 [string]$RustFlags51 )52 53 Write-Info "正在构建 $Target..."54 55 # 设置环境变量56 $env:RUSTFLAGS = $RustFlags57 58 # 构建59 if ($Target -ne (rustc -Vv | Select-String "host: (.*)" | ForEach-Object { $_.Matches.Groups[1].Value })) {60 cargo build --target $Target --release61 } else {62 cargo build --release63 }64 65 # 移动编译产物到 release 目录66 $binaryName = "cursor-api"67 if ($Static) {68 $binaryName += "-static"69 }70 71 $binaryPath = if ($Target -eq (rustc -Vv | Select-String "host: (.*)" | ForEach-Object { $_.Matches.Groups[1].Value })) {72 "target/release/cursor-api.exe"73 } else {74 "target/$Target/release/cursor-api.exe"75 }76 77 if (Test-Path $binaryPath) {78 Copy-Item $binaryPath "release/$binaryName-$Target.exe"79 Write-Info "完成构建 $Target"80 } else {81 Write-Warn "构建产物未找到: $Target"82 Write-Warn "查找路径: $binaryPath"83 Write-Warn "当前目录内容:"84 Get-ChildItem -Recurse target/85 return $false86 }87 88 return $true89}90 91if ($Help) {92 Show-Help93 exit 094}95 96# 检查依赖97Check-Requirements98 99# 创建 release 目录100New-Item -ItemType Directory -Force -Path release | Out-Null101 102# 设置静态链接标志103$rustFlags = ""104if ($Static) {105 $rustFlags = "-C target-feature=+crt-static"106}107 108# 获取目标架构109$arch = if ($Architecture) {110 $Architecture111} else {112 switch ($env:PROCESSOR_ARCHITECTURE) {113 "AMD64" { "x86_64" }114 "ARM64" { "aarch64" }115 "X86" { "i686" }116 default { Write-Error "不支持的架构: $env:PROCESSOR_ARCHITECTURE" }117 }118}119$target = "$arch-pc-windows-msvc"120 121Write-Info "开始构建..."122if (-not (Build-Target -Target $target -RustFlags $rustFlags)) {123 Write-Error "构建失败"124}125 126Write-Info "构建完成!"