opencode/packages/desktop/scripts/target.ts
2026-07-28 16:55:54 +10:00

72 lines
2.1 KiB
TypeScript

export const SIDECAR_BINARIES: Array<{
rustTarget: string
ocBinary: string
assetExt: string
platform: "darwin" | "linux" | "win32"
arch: "arm64" | "x64"
}> = [
{
rustTarget: "aarch64-apple-darwin",
ocBinary: "opencode-darwin-arm64",
assetExt: "zip",
platform: "darwin",
arch: "arm64",
},
{
rustTarget: "x86_64-apple-darwin",
ocBinary: "opencode-darwin-x64-baseline",
assetExt: "zip",
platform: "darwin",
arch: "x64",
},
{
rustTarget: "aarch64-pc-windows-msvc",
ocBinary: "opencode-windows-arm64",
assetExt: "zip",
platform: "win32",
arch: "arm64",
},
{
rustTarget: "x86_64-pc-windows-msvc",
ocBinary: "opencode-windows-x64-baseline",
assetExt: "zip",
platform: "win32",
arch: "x64",
},
{
rustTarget: "x86_64-unknown-linux-gnu",
ocBinary: "opencode-linux-x64-baseline",
assetExt: "tar.gz",
platform: "linux",
arch: "x64",
},
{
rustTarget: "aarch64-unknown-linux-gnu",
ocBinary: "opencode-linux-arm64",
assetExt: "tar.gz",
platform: "linux",
arch: "arm64",
},
]
export const RUST_TARGET = process.env.RUST_TARGET
function nativeTarget() {
if (process.platform === "darwin") return process.arch === "arm64" ? "aarch64-apple-darwin" : "x86_64-apple-darwin"
if (process.platform === "win32")
return process.arch === "arm64" ? "aarch64-pc-windows-msvc" : "x86_64-pc-windows-msvc"
if (process.platform === "linux")
return process.arch === "arm64" ? "aarch64-unknown-linux-gnu" : "x86_64-unknown-linux-gnu"
throw new Error(`Unsupported platform: ${process.platform}/${process.arch}`)
}
export function getCurrentSidecar(target = RUST_TARGET ?? nativeTarget()) {
const binaryConfig = SIDECAR_BINARIES.find((item) => item.rustTarget === target)
if (!binaryConfig) throw new Error(`Sidecar configuration not available for Rust target '${target}'`)
return binaryConfig
}
export function getServerTarget(target = RUST_TARGET ?? nativeTarget()) {
const current = getCurrentSidecar(target)
return { rustTarget: current.rustTarget, platform: current.platform, arch: current.arch }
}