@@ -31,6 +31,34 @@ type MatchComparer interface {
3131 Less (specs.Platform , specs.Platform ) bool
3232}
3333
34+ type platformVersions struct {
35+ major []int
36+ minor []int
37+ }
38+
39+ var arm64variantToVersion = map [string ]platformVersions {
40+ "v8" : {[]int {8 }, []int {0 }},
41+ "v8.0" : {[]int {8 }, []int {0 }},
42+ "v8.1" : {[]int {8 }, []int {1 }},
43+ "v8.2" : {[]int {8 }, []int {2 }},
44+ "v8.3" : {[]int {8 }, []int {3 }},
45+ "v8.4" : {[]int {8 }, []int {4 }},
46+ "v8.5" : {[]int {8 }, []int {5 }},
47+ "v8.6" : {[]int {8 }, []int {6 }},
48+ "v8.7" : {[]int {8 }, []int {7 }},
49+ "v8.8" : {[]int {8 }, []int {8 }},
50+ "v8.9" : {[]int {8 }, []int {9 }},
51+ "v9" : {[]int {9 , 8 }, []int {0 , 5 }},
52+ "v9.0" : {[]int {9 , 8 }, []int {0 , 5 }},
53+ "v9.1" : {[]int {9 , 8 }, []int {1 , 6 }},
54+ "v9.2" : {[]int {9 , 8 }, []int {2 , 7 }},
55+ "v9.3" : {[]int {9 , 8 }, []int {3 , 8 }},
56+ "v9.4" : {[]int {9 , 8 }, []int {4 , 9 }},
57+ "v9.5" : {[]int {9 , 8 }, []int {5 , 9 }},
58+ "v9.6" : {[]int {9 , 8 }, []int {6 , 9 }},
59+ "v9.7" : {[]int {9 , 8 }, []int {7 , 9 }},
60+ }
61+
3462// platformVector returns an (ordered) vector of appropriate specs.Platform
3563// objects to try matching for the given platform object (see platforms.Only).
3664func platformVector (platform specs.Platform ) []specs.Platform {
@@ -73,52 +101,19 @@ func platformVector(platform specs.Platform) []specs.Platform {
73101 variant = "v8"
74102 }
75103
76- majorVariant , minorVariant , hasMinor := strings .Cut (variant , "." )
77- if armMajor , err := strconv .Atoi (strings .TrimPrefix (majorVariant , "v" )); err == nil && armMajor >= 8 {
78- armMinor := 0
79- if len (variant ) == 4 {
80- if minor , err := strconv .Atoi (minorVariant ); err == nil && hasMinor {
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} until v9.4/v8.9
101- armMinor = armMinor + 5
102- if armMinor > 9 {
103- armMinor = 9
104- }
105- armMajor = 8
106- vector = append (vector , specs.Platform {
107- Architecture : platform .Architecture ,
108- OS : platform .OS ,
109- OSVersion : platform .OSVersion ,
110- OSFeatures : platform .OSFeatures ,
111- Variant : "v8." + strconv .Itoa (armMinor ),
112- })
113- }
114-
115- for minor := armMinor - 1 ; minor >= 0 ; minor -- {
116- arm64Variant := "v" + strconv .Itoa (armMajor ) + "." + strconv .Itoa (minor )
104+ vector = []specs.Platform {} // Reset vector, the first variant will be added in loop.
105+ arm64Versions , ok := arm64variantToVersion [variant ]
106+ if ! ok {
107+ break
108+ }
109+ for i , major := range arm64Versions .major {
110+ for minor := arm64Versions .minor [i ]; minor >= 0 ; minor -- {
111+ arm64Variant := "v" + strconv .Itoa (major ) + "." + strconv .Itoa (minor )
117112 if minor == 0 {
118- arm64Variant = "v" + strconv .Itoa (armMajor )
113+ arm64Variant = "v" + strconv .Itoa (major )
119114 }
120115 vector = append (vector , specs.Platform {
121- Architecture : platform . Architecture ,
116+ Architecture : "arm64" ,
122117 OS : platform .OS ,
123118 OSVersion : platform .OSVersion ,
124119 OSFeatures : platform .OSFeatures ,
@@ -129,7 +124,7 @@ func platformVector(platform specs.Platform) []specs.Platform {
129124
130125 // All arm64/v8.x and arm64/v9.x are compatible with arm/v8 (32-bits) and below.
131126 // There's no arm64 v9 variant, so it's normalized to v8.
132- if strings .HasPrefix (variant , "v8. " ) || strings .HasPrefix (variant , "v9. " ) {
127+ if strings .HasPrefix (variant , "v8" ) || strings .HasPrefix (variant , "v9" ) {
133128 variant = "v8"
134129 }
135130 vector = append (vector , platformVector (specs.Platform {
0 commit comments