Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 05a1f86

Browse filesBrowse files
committed
Moved corePlatform and variantPlatform determination inside a specific method
1 parent 87f06d7 commit 05a1f86
Copy full SHA for 05a1f86

File tree

Expand file treeCollapse file tree

1 file changed

+77
-62
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+77
-62
lines changed

‎arduino/cores/packagemanager/package_manager.go

Copy file name to clipboardExpand all lines: arduino/cores/packagemanager/package_manager.go
+77-62Lines changed: 77 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -280,97 +280,56 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) (
280280
return targetPackage, nil, nil, nil, nil,
281281
fmt.Errorf(tr("unknown platform %s:%s"), targetPackage, fqbn.PlatformArch)
282282
}
283-
platformRelease := pme.GetInstalledPlatformRelease(platform)
284-
if platformRelease == nil {
283+
boardPlatformRelease := pme.GetInstalledPlatformRelease(platform)
284+
if boardPlatformRelease == nil {
285285
return targetPackage, nil, nil, nil, nil,
286286
fmt.Errorf(tr("platform %s is not installed"), platform)
287287
}
288288

289289
// Find board
290-
board := platformRelease.Boards[fqbn.BoardID]
290+
board := boardPlatformRelease.Boards[fqbn.BoardID]
291291
if board == nil {
292-
return targetPackage, platformRelease, nil, nil, nil,
292+
return targetPackage, boardPlatformRelease, nil, nil, nil,
293293
fmt.Errorf(tr("board %s not found"), fqbn.StringWithoutConfig())
294294
}
295295

296296
boardBuildProperties, err := board.GetBuildProperties(fqbn.Configs)
297297
if err != nil {
298-
return targetPackage, platformRelease, board, nil, nil,
298+
return targetPackage, boardPlatformRelease, board, nil, nil,
299299
fmt.Errorf(tr("getting build properties for board %[1]s: %[2]s"), board, err)
300300
}
301301

302-
// Determine the platform used for the build (in case the board refers
302+
// Determine the platform used for the build and the variant (in case the board refers
303303
// to a core contained in another platform)
304-
core := boardBuildProperties.Get("build.core")
305-
referredCore := ""
306-
if split := strings.Split(core, ":"); len(split) > 1 {
307-
core, referredCore = split[1], split[0]
308-
}
309-
variant := boardBuildProperties.Get("build.variant")
310-
referredVariant := ""
311-
if split := strings.Split(variant, ":"); len(split) > 1 {
312-
variant, referredVariant = split[1], split[0]
313-
}
314-
if referredCore != "" && referredVariant != "" && referredCore != referredVariant {
315-
return targetPackage, platformRelease, board, nil, nil,
316-
fmt.Errorf(tr("'build.core' and 'build.variant' refer to different platforms: %[1]s and %[2]s"), core+":"+referredCore, variant+":"+referredVariant)
317-
}
318-
319-
var referredPlatformRelease *cores.PlatformRelease
320-
referredPackageName := referredCore
321-
if referredPackageName == "" {
322-
referredPackageName = referredVariant
323-
}
324-
if referredPackageName != "" {
325-
referredPackage := pme.packages[referredPackageName]
326-
if referredPackage == nil {
327-
return targetPackage, platformRelease, board, nil, nil,
328-
fmt.Errorf(tr("missing package %[1]s referenced by board %[2]s"), referredPackageName, fqbn)
329-
}
330-
referredPlatform := referredPackage.Platforms[fqbn.PlatformArch]
331-
if referredPlatform == nil {
332-
return targetPackage, platformRelease, board, nil, nil,
333-
fmt.Errorf(tr("missing platform %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn)
334-
}
335-
referredPlatformRelease = pme.GetInstalledPlatformRelease(referredPlatform)
336-
if referredPlatformRelease == nil {
337-
return targetPackage, platformRelease, board, nil, nil,
338-
fmt.Errorf(tr("missing platform release %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn)
339-
}
304+
core, corePlatformRelease, variant, variantPlatformRelease, err := pme.determineReferencedPlatformRelease(boardBuildProperties, boardPlatformRelease, fqbn)
305+
if err != nil {
306+
return targetPackage, boardPlatformRelease, board, nil, nil, err
340307
}
341308

342309
// Create the build properties map by overlaying the properties of the
343310
// referenced platform propeties, the board platform properties and the
344311
// board specific properties.
345312
buildProperties := properties.NewMap()
346-
buildPlatformRelease := platformRelease
347-
if referredCore != "" {
348-
buildPlatformRelease = referredPlatformRelease
349-
}
350-
buildProperties.Merge(buildPlatformRelease.Properties)
351-
buildProperties.Merge(platformRelease.Properties)
313+
buildProperties.Merge(variantPlatformRelease.Properties)
314+
buildProperties.Merge(corePlatformRelease.Properties)
315+
buildProperties.Merge(boardPlatformRelease.Properties)
352316
buildProperties.Merge(boardBuildProperties)
353317

354318
// Add runtime build properties
355-
buildProperties.Merge(platformRelease.RuntimeProperties())
356-
buildProperties.SetPath("build.core.path", buildPlatformRelease.InstallDir.Join("cores", core))
357-
buildProperties.SetPath("build.system.path", buildPlatformRelease.InstallDir.Join("system"))
358-
for _, tool := range pme.GetAllInstalledToolsReleases() {
359-
buildProperties.Merge(tool.RuntimeProperties())
360-
}
361-
319+
buildProperties.Merge(boardPlatformRelease.RuntimeProperties())
320+
buildProperties.SetPath("build.core.path", corePlatformRelease.InstallDir.Join("cores", core))
321+
buildProperties.SetPath("build.system.path", corePlatformRelease.InstallDir.Join("system"))
362322
buildProperties.Set("build.variant.path", "")
363323
if variant != "" {
364-
variantPlatformRelease := platformRelease
365-
if referredVariant != "" {
366-
variantPlatformRelease = referredPlatformRelease
367-
}
368324
buildProperties.SetPath("build.variant.path", variantPlatformRelease.InstallDir.Join("variants", variant))
369325
}
370326

371-
requiredTools, err := pme.FindToolsRequiredForBuild(platformRelease, buildPlatformRelease)
327+
for _, tool := range pme.GetAllInstalledToolsReleases() {
328+
buildProperties.Merge(tool.RuntimeProperties())
329+
}
330+
requiredTools, err := pme.FindToolsRequiredForBuild(boardPlatformRelease, corePlatformRelease)
372331
if err != nil {
373-
return targetPackage, platformRelease, board, buildProperties, buildPlatformRelease, err
332+
return targetPackage, boardPlatformRelease, board, buildProperties, corePlatformRelease, err
374333
}
375334
for _, tool := range requiredTools {
376335
buildProperties.Merge(tool.RuntimeProperties())
@@ -399,7 +358,63 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) (
399358

400359
buildProperties.Merge(pme.GetCustomGlobalProperties())
401360

402-
return targetPackage, platformRelease, board, buildProperties, buildPlatformRelease, nil
361+
return targetPackage, boardPlatformRelease, board, buildProperties, corePlatformRelease, nil
362+
}
363+
364+
func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *properties.Map, boardPlatformRelease *cores.PlatformRelease, fqbn *cores.FQBN) (string, *cores.PlatformRelease, string, *cores.PlatformRelease, error) {
365+
core := boardBuildProperties.Get("build.core")
366+
referredCore := ""
367+
if split := strings.Split(core, ":"); len(split) > 1 {
368+
referredCore, core = split[0], split[1]
369+
}
370+
371+
variant := boardBuildProperties.Get("build.variant")
372+
referredVariant := ""
373+
if split := strings.Split(variant, ":"); len(split) > 1 {
374+
referredVariant, variant = split[0], split[1]
375+
}
376+
377+
// core and variant cannot refer to two different platforms
378+
if referredCore != "" && referredVariant != "" && referredCore != referredVariant {
379+
return "", nil, "", nil,
380+
fmt.Errorf(tr("'build.core' and 'build.variant' refer to different platforms: %[1]s and %[2]s"), referredCore+":"+core, referredVariant+":"+variant)
381+
}
382+
383+
// extract the referred platform
384+
var referredPlatformRelease *cores.PlatformRelease
385+
referredPackageName := referredCore
386+
if referredPackageName == "" {
387+
referredPackageName = referredVariant
388+
}
389+
if referredPackageName != "" {
390+
referredPackage := pme.packages[referredPackageName]
391+
if referredPackage == nil {
392+
return "", nil, "", nil,
393+
fmt.Errorf(tr("missing package %[1]s referenced by board %[2]s"), referredPackageName, fqbn)
394+
}
395+
referredPlatform := referredPackage.Platforms[fqbn.PlatformArch]
396+
if referredPlatform == nil {
397+
return "", nil, "", nil,
398+
fmt.Errorf(tr("missing platform %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn)
399+
}
400+
referredPlatformRelease = pme.GetInstalledPlatformRelease(referredPlatform)
401+
if referredPlatformRelease == nil {
402+
return "", nil, "", nil,
403+
fmt.Errorf(tr("missing platform release %[1]s:%[2]s referenced by board %[3]s"), referredPackageName, fqbn.PlatformArch, fqbn)
404+
}
405+
}
406+
407+
corePlatformRelease := boardPlatformRelease
408+
if referredCore != "" {
409+
corePlatformRelease = referredPlatformRelease
410+
}
411+
412+
variantPlatformRelease := boardPlatformRelease
413+
if referredVariant != "" {
414+
variantPlatformRelease = referredPlatformRelease
415+
}
416+
417+
return core, corePlatformRelease, variant, variantPlatformRelease, nil
403418
}
404419

405420
// LoadPackageIndex loads a package index by looking up the local cached file from the specified URL

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.