@@ -75,6 +75,7 @@ type PlatformRelease struct {
7575 PluggableDiscoveryAware bool `json:"-"` // true if the Platform supports pluggable discovery (no compatibility layer required)
7676 Monitors map [string ]* MonitorDependency `json:"-"`
7777 MonitorsDevRecipes map [string ]string `json:"-"`
78+ Compatible bool `json:"-"` // true if at all ToolDependencies are available for the current OS/ARCH.
7879}
7980
8081// BoardManifest contains information about a board. These metadata are usually
@@ -229,6 +230,21 @@ func (platform *Platform) GetLatestRelease() *PlatformRelease {
229230 return platform .FindReleaseWithVersion (latestVersion )
230231}
231232
233+ // GetLatestCompatibleRelease returns the latest compatible release of this platform, or nil if no
234+ // compatible releases are available.
235+ func (platform * Platform ) GetLatestCompatibleRelease () * PlatformRelease {
236+ var maximum * PlatformRelease
237+ for _ , release := range platform .Releases {
238+ if ! release .IsCompatible () {
239+ continue
240+ }
241+ if maximum == nil || release .Version .GreaterThan (maximum .Version ) {
242+ maximum = release
243+ }
244+ }
245+ return maximum
246+ }
247+
232248// GetAllReleases returns all the releases of this platform, or an empty
233249// slice if no releases are available
234250func (platform * Platform ) GetAllReleases () []* PlatformRelease {
@@ -249,6 +265,18 @@ func (platform *Platform) GetAllReleasesVersions() []*semver.Version {
249265 return versions
250266}
251267
268+ // GetAllCompatibleReleasesVersions returns all the version numbers in this Platform Package that contains compatible tools.
269+ func (platform * Platform ) GetAllCompatibleReleasesVersions () []* semver.Version {
270+ versions := []* semver.Version {}
271+ for _ , release := range platform .Releases {
272+ if ! release .IsCompatible () {
273+ continue
274+ }
275+ versions = append (versions , release .Version )
276+ }
277+ return versions
278+ }
279+
252280// latestReleaseVersion obtains latest version number, or nil if no release available
253281func (platform * Platform ) latestReleaseVersion () * semver.Version {
254282 // TODO: Cache latest version using a field in Platform
@@ -266,6 +294,18 @@ func (platform *Platform) latestReleaseVersion() *semver.Version {
266294 return max
267295}
268296
297+ // latestCompatibleReleaseVersion obtains latest version number, for platforms that contains compatible tools, or nil if no release available
298+ func (platform * Platform ) latestCompatibleReleaseVersion () * semver.Version {
299+ versions := platform .GetAllCompatibleReleasesVersions ()
300+ var maxVer * semver.Version
301+ for _ , v := range versions {
302+ if maxVer == nil || v .GreaterThan (maxVer ) {
303+ maxVer = v
304+ }
305+ }
306+ return maxVer
307+ }
308+
269309// GetAllInstalled returns all installed PlatformRelease
270310func (platform * Platform ) GetAllInstalled () []* PlatformRelease {
271311 res := []* PlatformRelease {}
@@ -422,3 +462,9 @@ func (release *PlatformRelease) HasMetadata() bool {
422462 installedJSONPath := release .InstallDir .Join ("installed.json" )
423463 return installedJSONPath .Exist ()
424464}
465+
466+ // IsCompatible returns true if all the tools dependencies of a PlatformRelease
467+ // are available in the current OS/ARCH.
468+ func (release * PlatformRelease ) IsCompatible () bool {
469+ return release .Compatible
470+ }
0 commit comments