17
17
package platforms
18
18
19
19
import (
20
+ "fmt"
20
21
"strconv"
21
22
"strings"
22
23
@@ -72,6 +73,57 @@ func platformVector(platform specs.Platform) []specs.Platform {
72
73
if variant == "" {
73
74
variant = "v8"
74
75
}
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
+
75
127
vector = append (vector , platformVector (specs.Platform {
76
128
Architecture : "arm" ,
77
129
OS : platform .OS ,
@@ -87,6 +139,8 @@ func platformVector(platform specs.Platform) []specs.Platform {
87
139
// Only returns a match comparer for a single platform
88
140
// using default resolution logic for the platform.
89
141
//
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}
90
144
// For arm/v8, will also match arm/v7, arm/v6 and arm/v5
91
145
// For arm/v7, will also match arm/v6 and arm/v5
92
146
// For arm/v6, will also match arm/v5
0 commit comments