-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhelpers.go
72 lines (62 loc) · 1.64 KB
/
helpers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package cpu
import (
"fmt"
"runtime"
"strings"
)
func getCPUArchitectureFromString(archNameToCheck string) CPUArchitecture {
archNameToCheck = strings.ToLower(archNameToCheck)
archNameToCheck, _ = normalizeArch(archNameToCheck, "")
for _, cpuArchitecture := range supportedCPUArchitectures {
cpuArchitectureAsLowerCase := strings.ToLower(fmt.Sprintf("%v", cpuArchitecture))
if strings.Index(cpuArchitectureAsLowerCase, archNameToCheck) != -1 {
return cpuArchitecture
}
}
return CPU_Uknown
}
func getCPUArchitecture() CPUArchitecture {
return getCPUArchitectureFromString(runtime.GOARCH)
}
func getCPUArchitectureVariantFromString(archNameToCheck string) CPUArchitectureVariant {
archNameToCheck = strings.ToLower(archNameToCheck)
archNameToCheck, _ = normalizeArch(archNameToCheck, "")
for _, cpuArchitectureV := range supportedCPUArchitectureVariants {
cpuArchitectureVAsLowerCase := strings.ToLower(fmt.Sprintf("%v", cpuArchitectureV))
if strings.Index(cpuArchitectureVAsLowerCase, archNameToCheck) != -1 {
return cpuArchitectureV
}
}
return CPUV_Uknown
}
func normalizeArch(arch, variant string) (string, string) {
arch, variant = strings.ToLower(arch), strings.ToLower(variant)
switch arch {
case "i386":
arch = "386"
variant = ""
case "x86_64", "x86-64":
arch = "amd64"
variant = ""
case "aarch64", "arm64":
arch = "arm64"
switch variant {
case "8", "v8":
variant = ""
}
case "armhf":
arch = "arm"
variant = "v7"
case "armel":
arch = "arm"
variant = "v6"
case "arm":
switch variant {
case "", "7":
variant = "v7"
case "5", "6", "8":
variant = "v" + variant
}
}
return arch, variant
}