Skip to content

Commit 05a1f86

Browse files
committed
Moved corePlatform and variantPlatform determination inside a specific method
1 parent 87f06d7 commit 05a1f86

File tree

1 file changed

+77
-62
lines changed

1 file changed

+77
-62
lines changed

Diff for: arduino/cores/packagemanager/package_manager.go

+77-62
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)