Skip to content

Commit 51a4916

Browse files
committed
Improve arm64 comparing
Signed-off-by: Chongyi Zheng <[email protected]>
1 parent b5783e6 commit 51a4916

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

compare.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package platforms
1818

1919
import (
20+
"fmt"
2021
"strconv"
2122
"strings"
2223

@@ -72,6 +73,57 @@ func platformVector(platform specs.Platform) []specs.Platform {
7273
if variant == "" {
7374
variant = "v8"
7475
}
76+
77+
if armMajor, err := strconv.Atoi(strings.TrimPrefix(variant[:2], "v")); err == nil && armMajor >= 8 {
78+
armMinor := 0
79+
if len(variant) == 4 {
80+
if minor, err := strconv.Atoi(variant[3:]); err == nil && variant[2] == '.' {
81+
armMinor = minor
82+
}
83+
}
84+
85+
if armMajor == 9 {
86+
for minor := armMinor - 1; minor >= 0; minor-- {
87+
arm64Variant := "v" + strconv.Itoa(armMajor) + "." + strconv.Itoa(minor)
88+
if minor == 0 {
89+
arm64Variant = "v" + strconv.Itoa(armMajor)
90+
}
91+
vector = append(vector, specs.Platform{
92+
Architecture: platform.Architecture,
93+
OS: platform.OS,
94+
OSVersion: platform.OSVersion,
95+
OSFeatures: platform.OSFeatures,
96+
Variant: arm64Variant,
97+
})
98+
}
99+
100+
// v9.0 diverged from v8.5, meaning that v9.x is compatible with v8.{x+5}
101+
armMinor := armMinor + 5
102+
vector = append(vector, specs.Platform{
103+
Architecture: platform.Architecture,
104+
OS: platform.OS,
105+
OSVersion: platform.OSVersion,
106+
OSFeatures: platform.OSFeatures,
107+
Variant: "v8." + strconv.Itoa(armMinor),
108+
})
109+
}
110+
111+
for minor := armMinor - 1; minor >= 0; minor-- {
112+
arm64Variant := "v" + strconv.Itoa(armMajor) + "." + strconv.Itoa(minor)
113+
if minor == 0 {
114+
arm64Variant = "v" + strconv.Itoa(armMajor)
115+
}
116+
fmt.Println(117, variant, armMajor, armMinor, arm64Variant)
117+
vector = append(vector, specs.Platform{
118+
Architecture: platform.Architecture,
119+
OS: platform.OS,
120+
OSVersion: platform.OSVersion,
121+
OSFeatures: platform.OSFeatures,
122+
Variant: arm64Variant,
123+
})
124+
}
125+
}
126+
75127
vector = append(vector, platformVector(specs.Platform{
76128
Architecture: "arm",
77129
OS: platform.OS,
@@ -87,6 +139,8 @@ func platformVector(platform specs.Platform) []specs.Platform {
87139
// Only returns a match comparer for a single platform
88140
// using default resolution logic for the platform.
89141
//
142+
// For arm64/v9.x, will also match arm64/v9.{0..x-1} and arm64/v8.{0..x+5}
143+
// For arm64/v8.x, will also match arm64/v8.{0..x-1}
90144
// For arm/v8, will also match arm/v7, arm/v6 and arm/v5
91145
// For arm/v7, will also match arm/v6 and arm/v5
92146
// For arm/v6, will also match arm/v5

0 commit comments

Comments
 (0)