72 lines
2.1 KiB
TypeScript
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 }
|
|
}
|