@@ -280,97 +280,56 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) (
280
280
return targetPackage , nil , nil , nil , nil ,
281
281
fmt .Errorf (tr ("unknown platform %s:%s" ), targetPackage , fqbn .PlatformArch )
282
282
}
283
- platformRelease := pme .GetInstalledPlatformRelease (platform )
284
- if platformRelease == nil {
283
+ boardPlatformRelease := pme .GetInstalledPlatformRelease (platform )
284
+ if boardPlatformRelease == nil {
285
285
return targetPackage , nil , nil , nil , nil ,
286
286
fmt .Errorf (tr ("platform %s is not installed" ), platform )
287
287
}
288
288
289
289
// Find board
290
- board := platformRelease .Boards [fqbn .BoardID ]
290
+ board := boardPlatformRelease .Boards [fqbn .BoardID ]
291
291
if board == nil {
292
- return targetPackage , platformRelease , nil , nil , nil ,
292
+ return targetPackage , boardPlatformRelease , nil , nil , nil ,
293
293
fmt .Errorf (tr ("board %s not found" ), fqbn .StringWithoutConfig ())
294
294
}
295
295
296
296
boardBuildProperties , err := board .GetBuildProperties (fqbn .Configs )
297
297
if err != nil {
298
- return targetPackage , platformRelease , board , nil , nil ,
298
+ return targetPackage , boardPlatformRelease , board , nil , nil ,
299
299
fmt .Errorf (tr ("getting build properties for board %[1]s: %[2]s" ), board , err )
300
300
}
301
301
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
303
303
// 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
340
307
}
341
308
342
309
// Create the build properties map by overlaying the properties of the
343
310
// referenced platform propeties, the board platform properties and the
344
311
// board specific properties.
345
312
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 )
352
316
buildProperties .Merge (boardBuildProperties )
353
317
354
318
// 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" ))
362
322
buildProperties .Set ("build.variant.path" , "" )
363
323
if variant != "" {
364
- variantPlatformRelease := platformRelease
365
- if referredVariant != "" {
366
- variantPlatformRelease = referredPlatformRelease
367
- }
368
324
buildProperties .SetPath ("build.variant.path" , variantPlatformRelease .InstallDir .Join ("variants" , variant ))
369
325
}
370
326
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 )
372
331
if err != nil {
373
- return targetPackage , platformRelease , board , buildProperties , buildPlatformRelease , err
332
+ return targetPackage , boardPlatformRelease , board , buildProperties , corePlatformRelease , err
374
333
}
375
334
for _ , tool := range requiredTools {
376
335
buildProperties .Merge (tool .RuntimeProperties ())
@@ -399,7 +358,63 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) (
399
358
400
359
buildProperties .Merge (pme .GetCustomGlobalProperties ())
401
360
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
403
418
}
404
419
405
420
// LoadPackageIndex loads a package index by looking up the local cached file from the specified URL
0 commit comments