62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package core
|
|
|
|
import (
|
|
"path/filepath"
|
|
"runtime"
|
|
)
|
|
|
|
// binaryNames maps GOOS -> GOARCH -> mihomo release asset base name.
|
|
// Mirrors core_manager.py's platform_map (core_manager.py:38-55). Unlike the
|
|
// Python version, no separate arch-normalization table is needed since
|
|
// runtime.GOARCH already reports "amd64"/"386"/"arm64"/"arm".
|
|
var binaryNames = map[string]map[string]string{
|
|
"windows": {
|
|
"amd64": "mihomo-windows-amd64",
|
|
"386": "mihomo-windows-386",
|
|
"arm64": "mihomo-windows-arm64",
|
|
"arm": "mihomo-windows-arm32v7",
|
|
},
|
|
"linux": {
|
|
"amd64": "mihomo-linux-amd64",
|
|
"386": "mihomo-linux-386",
|
|
"arm64": "mihomo-linux-arm64",
|
|
"arm": "mihomo-linux-armv7",
|
|
},
|
|
"darwin": {
|
|
"amd64": "mihomo-darwin-amd64",
|
|
"arm64": "mihomo-darwin-arm64",
|
|
},
|
|
}
|
|
|
|
// platformInfo returns (system, arch, binaryNameBase), or ok=false if the
|
|
// current platform/arch combination is unsupported.
|
|
func platformInfo() (system, arch, binaryName string, ok bool) {
|
|
system = runtime.GOOS
|
|
arch = runtime.GOARCH
|
|
|
|
archs, systemSupported := binaryNames[system]
|
|
if !systemSupported {
|
|
return "", "", "", false
|
|
}
|
|
name, archSupported := archs[arch]
|
|
if !archSupported {
|
|
return "", "", "", false
|
|
}
|
|
return system, arch, name, true
|
|
}
|
|
|
|
// binaryPath returns the local path where the mihomo executable for the
|
|
// current platform is (or will be) stored.
|
|
func binaryPath(binDir string) string {
|
|
system, arch, _, ok := platformInfo()
|
|
if !ok {
|
|
system, arch = runtime.GOOS, runtime.GOARCH
|
|
}
|
|
suffix := "-" + system + "-" + arch
|
|
name := "mihomo" + suffix
|
|
if system == "windows" {
|
|
name += ".exe"
|
|
}
|
|
return filepath.Join(binDir, name)
|
|
}
|