From 87b47899842429fc36422925dc4476ac94583490 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 1 Aug 2022 18:53:28 +0200 Subject: [PATCH 1/3] Bugfix: do not overwrite board properies during compile Fix #1614 --- legacy/builder/setup_build_properties.go | 3 +-- legacy/builder/target_board_resolver.go | 5 ++--- legacy/builder/types/context.go | 19 ++++++++++--------- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/legacy/builder/setup_build_properties.go b/legacy/builder/setup_build_properties.go index 309a371752a..029ebb5860e 100644 --- a/legacy/builder/setup_build_properties.go +++ b/legacy/builder/setup_build_properties.go @@ -36,12 +36,11 @@ func (s *SetupBuildProperties) Run(ctx *types.Context) error { targetPlatform := ctx.TargetPlatform actualPlatform := ctx.ActualPlatform - targetBoard := ctx.TargetBoard buildProperties := properties.NewMap() buildProperties.Merge(actualPlatform.Properties) buildProperties.Merge(targetPlatform.Properties) - buildProperties.Merge(targetBoard.Properties) + buildProperties.Merge(ctx.TargetBoardBuildProperties) if ctx.BuildPath != nil { buildProperties.SetPath("build.path", ctx.BuildPath) diff --git a/legacy/builder/target_board_resolver.go b/legacy/builder/target_board_resolver.go index 6e1f2f7d5d0..4e212cbeb97 100644 --- a/legacy/builder/target_board_resolver.go +++ b/legacy/builder/target_board_resolver.go @@ -30,9 +30,7 @@ func (s *TargetBoardResolver) Run(ctx *types.Context) error { return fmt.Errorf("%s: %w", tr("Error resolving FQBN"), err) } - targetBoard.Properties = buildProperties // FIXME.... - - core := targetBoard.Properties.Get("build.core") + core := buildProperties.Get("build.core") if core == "" { core = "arduino" } @@ -46,6 +44,7 @@ func (s *TargetBoardResolver) Run(ctx *types.Context) error { ctx.BuildCore = core ctx.TargetBoard = targetBoard + ctx.TargetBoardBuildProperties = buildProperties ctx.TargetPlatform = targetPlatform ctx.TargetPackage = targetPackage ctx.ActualPlatform = actualPlatform diff --git a/legacy/builder/types/context.go b/legacy/builder/types/context.go index cba808bfccb..b311c9ae088 100644 --- a/legacy/builder/types/context.go +++ b/legacy/builder/types/context.go @@ -82,15 +82,16 @@ type Context struct { BuildOptionsJson string BuildOptionsJsonPrevious string - PackageManager *packagemanager.PackageManager - Hardware cores.Packages - AllTools []*cores.ToolRelease - RequiredTools []*cores.ToolRelease - TargetBoard *cores.Board - TargetPackage *cores.Package - TargetPlatform *cores.PlatformRelease - ActualPlatform *cores.PlatformRelease - USBVidPid string + PackageManager *packagemanager.PackageManager + Hardware cores.Packages + AllTools []*cores.ToolRelease + RequiredTools []*cores.ToolRelease + TargetBoard *cores.Board + TargetBoardBuildProperties *properties.Map + TargetPackage *cores.Package + TargetPlatform *cores.PlatformRelease + ActualPlatform *cores.PlatformRelease + USBVidPid string PlatformKeyRewrites PlatforKeysRewrite HardwareRewriteResults map[*cores.PlatformRelease][]PlatforKeyRewrite From ba162f9bd76300b1397f86cffd79c176f52f0ea3 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 1 Aug 2022 19:18:25 +0200 Subject: [PATCH 2/3] Removed AddBuildPropertyIfMissinc 'legacy' (inlined in other functions) --- .../add_build_board_property_if_missing.go | 47 ------------------- legacy/builder/container_setup.go | 1 - legacy/builder/target_board_resolver.go | 8 ++++ ...dd_build_board_property_if_missing_test.go | 12 ++--- .../test/target_board_resolver_test.go | 24 ++++++---- 5 files changed, 29 insertions(+), 63 deletions(-) delete mode 100644 legacy/builder/add_build_board_property_if_missing.go diff --git a/legacy/builder/add_build_board_property_if_missing.go b/legacy/builder/add_build_board_property_if_missing.go deleted file mode 100644 index 69791318222..00000000000 --- a/legacy/builder/add_build_board_property_if_missing.go +++ /dev/null @@ -1,47 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package builder - -import ( - "strings" - - "github.com/arduino/arduino-cli/legacy/builder/constants" - "github.com/arduino/arduino-cli/legacy/builder/types" -) - -type AddBuildBoardPropertyIfMissing struct{} - -func (*AddBuildBoardPropertyIfMissing) Run(ctx *types.Context) error { - packages := ctx.Hardware - - for _, aPackage := range packages { - for _, platform := range aPackage.Platforms { - for _, platformRelease := range platform.Releases { - for _, board := range platformRelease.Boards { - if board.Properties.Get("build.board") == "" { - board.Properties.Set("build.board", strings.ToUpper(platform.Architecture+"_"+board.BoardID)) - ctx.Info(tr("Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s", - aPackage.Name+":"+platform.Architecture+":"+board.BoardID, - "'build.board'", - board.Properties.Get(constants.BUILD_PROPERTIES_BUILD_BOARD))) - } - } - } - } - } - - return nil -} diff --git a/legacy/builder/container_setup.go b/legacy/builder/container_setup.go index 8bd4a157f2f..1d9e829fd7c 100644 --- a/legacy/builder/container_setup.go +++ b/legacy/builder/container_setup.go @@ -36,7 +36,6 @@ func (s *ContainerSetupHardwareToolsLibsSketchAndProps) Run(ctx *types.Context) &RewriteHardwareKeys{}, &TargetBoardResolver{}, &ToolsLoader{}, - &AddBuildBoardPropertyIfMissing{}, &LibrariesLoader{}, } diff --git a/legacy/builder/target_board_resolver.go b/legacy/builder/target_board_resolver.go index 4e212cbeb97..3a6393b2fd6 100644 --- a/legacy/builder/target_board_resolver.go +++ b/legacy/builder/target_board_resolver.go @@ -42,6 +42,14 @@ func (s *TargetBoardResolver) Run(ctx *types.Context) error { ctx.Info(tr("Using core '%[1]s' from platform in folder: %[2]s", core, actualPlatform.InstallDir)) } + if buildProperties.Get("build.board") == "" { + architecture := targetBoard.PlatformRelease.Platform.Architecture + defaultBuildBoard := strings.ToUpper(architecture + "_" + targetBoard.BoardID) + buildProperties.Set("build.board", defaultBuildBoard) + ctx.Info(tr("Warning: Board %[1]s doesn't define a %[2]s preference. Auto-set to: %[3]s", + targetBoard.String(), "'build.board'", defaultBuildBoard)) + } + ctx.BuildCore = core ctx.TargetBoard = targetBoard ctx.TargetBoardBuildProperties = buildProperties diff --git a/legacy/builder/test/add_build_board_property_if_missing_test.go b/legacy/builder/test/add_build_board_property_if_missing_test.go index 97dc8b8c5fb..35f522627e0 100644 --- a/legacy/builder/test/add_build_board_property_if_missing_test.go +++ b/legacy/builder/test/add_build_board_property_if_missing_test.go @@ -44,7 +44,6 @@ func TestAddBuildBoardPropertyIfMissing(t *testing.T) { commands := []types.Command{ &builder.HardwareLoader{}, &builder.TargetBoardResolver{}, - &builder.AddBuildBoardPropertyIfMissing{}, } for _, command := range commands { @@ -60,8 +59,9 @@ func TestAddBuildBoardPropertyIfMissing(t *testing.T) { require.Equal(t, "avr", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "mymega", targetBoard.BoardID) - require.Equal(t, "atmega2560", targetBoard.Properties.Get("build.mcu")) - require.Equal(t, "AVR_MYMEGA2560", targetBoard.Properties.Get("build.board")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "atmega2560", targetBoardBuildProperties.Get("build.mcu")) + require.Equal(t, "AVR_MYMEGA2560", targetBoardBuildProperties.Get("build.board")) } func TestAddBuildBoardPropertyIfMissingNotMissing(t *testing.T) { @@ -76,7 +76,6 @@ func TestAddBuildBoardPropertyIfMissingNotMissing(t *testing.T) { commands := []types.Command{ &builder.HardwareLoader{}, &builder.TargetBoardResolver{}, - &builder.AddBuildBoardPropertyIfMissing{}, } for _, command := range commands { @@ -90,6 +89,7 @@ func TestAddBuildBoardPropertyIfMissingNotMissing(t *testing.T) { require.Equal(t, "avr", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "mymega", targetBoard.BoardID) - require.Equal(t, "atmega1280", targetBoard.Properties.Get("build.mcu")) - require.Equal(t, "AVR_MYMEGA", targetBoard.Properties.Get("build.board")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "atmega1280", targetBoardBuildProperties.Get("build.mcu")) + require.Equal(t, "AVR_MYMEGA", targetBoardBuildProperties.Get("build.board")) } diff --git a/legacy/builder/test/target_board_resolver_test.go b/legacy/builder/test/target_board_resolver_test.go index 0d95a06ece5..db344a38448 100644 --- a/legacy/builder/test/target_board_resolver_test.go +++ b/legacy/builder/test/target_board_resolver_test.go @@ -47,7 +47,8 @@ func TestTargetBoardResolverUno(t *testing.T) { require.Equal(t, "avr", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "uno", targetBoard.BoardID) - require.Equal(t, "atmega328p", targetBoard.Properties.Get("build.mcu")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "atmega328p", targetBoardBuildProperties.Get("build.mcu")) } func TestTargetBoardResolverDue(t *testing.T) { @@ -72,7 +73,8 @@ func TestTargetBoardResolverDue(t *testing.T) { require.Equal(t, "sam", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "arduino_due_x", targetBoard.BoardID) - require.Equal(t, "cortex-m3", targetBoard.Properties.Get("build.mcu")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "cortex-m3", targetBoardBuildProperties.Get("build.mcu")) } func TestTargetBoardResolverMega1280(t *testing.T) { @@ -97,8 +99,9 @@ func TestTargetBoardResolverMega1280(t *testing.T) { require.Equal(t, "avr", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "mega", targetBoard.BoardID) - require.Equal(t, "atmega1280", targetBoard.Properties.Get("build.mcu")) - require.Equal(t, "AVR_MEGA", targetBoard.Properties.Get("build.board")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "atmega1280", targetBoardBuildProperties.Get("build.mcu")) + require.Equal(t, "AVR_MEGA", targetBoardBuildProperties.Get("build.board")) } func TestTargetBoardResolverMega2560(t *testing.T) { @@ -123,8 +126,9 @@ func TestTargetBoardResolverMega2560(t *testing.T) { require.Equal(t, "avr", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "mega", targetBoard.BoardID) - require.Equal(t, "atmega2560", targetBoard.Properties.Get("build.mcu")) - require.Equal(t, "AVR_MEGA2560", targetBoard.Properties.Get("build.board")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "atmega2560", targetBoardBuildProperties.Get("build.mcu")) + require.Equal(t, "AVR_MEGA2560", targetBoardBuildProperties.Get("build.board")) } func TestTargetBoardResolverCustomYun(t *testing.T) { @@ -149,8 +153,9 @@ func TestTargetBoardResolverCustomYun(t *testing.T) { require.Equal(t, "avr", targetPlatform.Platform.Architecture) targetBoard := ctx.TargetBoard require.Equal(t, "custom_yun", targetBoard.BoardID) - require.Equal(t, "atmega32u4", targetBoard.Properties.Get("build.mcu")) - require.Equal(t, "AVR_YUN", targetBoard.Properties.Get("build.board")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "atmega32u4", targetBoardBuildProperties.Get("build.mcu")) + require.Equal(t, "AVR_YUN", targetBoardBuildProperties.Get("build.board")) } func TestTargetBoardResolverCustomCore(t *testing.T) { @@ -176,5 +181,6 @@ func TestTargetBoardResolverCustomCore(t *testing.T) { targetBoard := ctx.TargetBoard require.Equal(t, "attiny841", targetBoard.BoardID) require.Equal(t, "tiny841", ctx.BuildCore) - require.Equal(t, "tiny14", targetBoard.Properties.Get("build.variant")) + targetBoardBuildProperties := ctx.TargetBoardBuildProperties + require.Equal(t, "tiny14", targetBoardBuildProperties.Get("build.variant")) } From b4a89226d270f61ec780b3c1c1254939f1f8b56f Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 2 Aug 2022 12:26:52 +0200 Subject: [PATCH 3/3] Increase code coverage --- .../test/add_build_board_property_if_missing_test.go | 4 ++-- .../test/user_hardware/my_avr_platform/avr/boards.txt | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/legacy/builder/test/add_build_board_property_if_missing_test.go b/legacy/builder/test/add_build_board_property_if_missing_test.go index 35f522627e0..eeeddb5ae4a 100644 --- a/legacy/builder/test/add_build_board_property_if_missing_test.go +++ b/legacy/builder/test/add_build_board_property_if_missing_test.go @@ -61,7 +61,7 @@ func TestAddBuildBoardPropertyIfMissing(t *testing.T) { require.Equal(t, "mymega", targetBoard.BoardID) targetBoardBuildProperties := ctx.TargetBoardBuildProperties require.Equal(t, "atmega2560", targetBoardBuildProperties.Get("build.mcu")) - require.Equal(t, "AVR_MYMEGA2560", targetBoardBuildProperties.Get("build.board")) + require.Equal(t, "AVR_MYMEGA", targetBoardBuildProperties.Get("build.board")) } func TestAddBuildBoardPropertyIfMissingNotMissing(t *testing.T) { @@ -91,5 +91,5 @@ func TestAddBuildBoardPropertyIfMissingNotMissing(t *testing.T) { require.Equal(t, "mymega", targetBoard.BoardID) targetBoardBuildProperties := ctx.TargetBoardBuildProperties require.Equal(t, "atmega1280", targetBoardBuildProperties.Get("build.mcu")) - require.Equal(t, "AVR_MYMEGA", targetBoardBuildProperties.Get("build.board")) + require.Equal(t, "MYMEGA1280", targetBoardBuildProperties.Get("build.board")) } diff --git a/legacy/builder/test/user_hardware/my_avr_platform/avr/boards.txt b/legacy/builder/test/user_hardware/my_avr_platform/avr/boards.txt index 5b50b4dfaf1..bf794a46f71 100644 --- a/legacy/builder/test/user_hardware/my_avr_platform/avr/boards.txt +++ b/legacy/builder/test/user_hardware/my_avr_platform/avr/boards.txt @@ -70,7 +70,8 @@ mymega.menu.cpu.atmega2560.bootloader.extended_fuses=0xFD mymega.menu.cpu.atmega2560.bootloader.file={bootloader._folder}/stk500boot_v2_mega2560.hex mymega.menu.cpu.atmega2560.build.mcu=atmega2560 -mymega.menu.cpu.atmega2560.build.board=AVR_MYMEGA2560 +# Do not define build.board to test autogeneration +#mymega.menu.cpu.atmega2560.build.board=AVR_MYMEGA2560 mymega.menu.cpu.atmega1280=ATmega1280 @@ -84,4 +85,5 @@ mymega.menu.cpu.atmega1280.bootloader.extended_fuses=0xF5 mymega.menu.cpu.atmega1280.bootloader.file={bootloader._folder}/ATmegaBOOT_168_atmega1280.hex mymega.menu.cpu.atmega1280.build.mcu=atmega1280 -mymega.menu.cpu.atmega1280.build.board=AVR_MYMEGA +# define custom build.board for testing +mymega.menu.cpu.atmega1280.build.board=MYMEGA1280