Skip to content

Commit 9045c25

Browse files
author
Federico Fissore
committed
Switched to Packages type, instead of raw map string->Package
Signed-off-by: Federico Fissore <f.fissore@arduino.cc>
1 parent d661e83 commit 9045c25

8 files changed

+83
-73
lines changed

src/arduino.cc/builder/add_build_board_property_if_missing.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ import (
4040
type AddBuildBoardPropertyIfMissing struct{}
4141

4242
func (s *AddBuildBoardPropertyIfMissing) Run(context map[string]interface{}) error {
43-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
43+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
4444
logger := context[constants.CTX_LOGGER].(i18n.Logger)
4545

46-
for _, aPackage := range packages {
46+
for _, aPackage := range packages.Packages {
4747
for _, platform := range aPackage.Platforms {
4848
for _, board := range platform.Boards {
4949
if board.Properties[constants.BUILD_PROPERTIES_BUILD_BOARD] == constants.EMPTY_STRING {

src/arduino.cc/builder/hardware_loader.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ type HardwareLoader struct{}
4343
func (s *HardwareLoader) Run(context map[string]interface{}) error {
4444
mainHardwarePlatformTxt := make(map[string]string)
4545

46-
packages := make(map[string]*types.Package)
46+
packages := &types.Packages{}
47+
packages.Packages = make(map[string]*types.Package)
48+
packages.Properties = make(map[string]string)
4749

4850
folders := context[constants.CTX_HARDWARE_FOLDERS].([]string)
4951
folders, err := utils.AbsolutizePaths(folders)
@@ -91,7 +93,7 @@ func (s *HardwareLoader) Run(context map[string]interface{}) error {
9193
if err != nil {
9294
return utils.WrapError(err)
9395
}
94-
packages[packageId] = targetPackage
96+
packages.Packages[packageId] = targetPackage
9597
}
9698
}
9799

@@ -100,9 +102,9 @@ func (s *HardwareLoader) Run(context map[string]interface{}) error {
100102
return nil
101103
}
102104

103-
func getOrCreatePackage(packages map[string]*types.Package, packageId string) *types.Package {
104-
if _, ok := packages[packageId]; ok {
105-
return packages[packageId]
105+
func getOrCreatePackage(packages *types.Packages, packageId string) *types.Package {
106+
if _, ok := packages.Packages[packageId]; ok {
107+
return packages.Packages[packageId]
106108
}
107109

108110
targetPackage := types.Package{}

src/arduino.cc/builder/rewrite_hardware_keys.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ func (s *RewriteHardwareKeys) Run(context map[string]interface{}) error {
4444
return nil
4545
}
4646

47-
hardware := context[constants.CTX_HARDWARE].(map[string]*types.Package)
47+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
4848
platformKeysRewrite := context[constants.CTX_PLATFORM_KEYS_REWRITE].(types.PlatforKeysRewrite)
4949
logger := context[constants.CTX_LOGGER].(i18n.Logger)
5050

5151
warn := utils.DebugLevel(context) > 0
5252

53-
for _, aPackage := range hardware {
53+
for _, aPackage := range packages.Packages {
5454
for _, platform := range aPackage.Platforms {
5555
if platform.Properties[constants.REWRITING] != constants.REWRITING_DISABLED {
5656
for _, rewrite := range platformKeysRewrite.Rewrites {

src/arduino.cc/builder/setup_build_properties.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import (
4242
type SetupBuildProperties struct{}
4343

4444
func (s *SetupBuildProperties) Run(context map[string]interface{}) error {
45-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
45+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
4646

4747
targetPlatform := context[constants.CTX_TARGET_PLATFORM].(*types.Platform)
4848
actualPlatform := context[constants.CTX_ACTUAL_PLATFORM].(*types.Platform)
@@ -77,7 +77,7 @@ func (s *SetupBuildProperties) Run(context map[string]interface{}) error {
7777
var variantPlatform *types.Platform
7878
variantParts := strings.Split(variant, ":")
7979
if len(variantParts) > 1 {
80-
variantPlatform = packages[variantParts[0]].Platforms[targetPlatform.PlatformId]
80+
variantPlatform = packages.Packages[variantParts[0]].Platforms[targetPlatform.PlatformId]
8181
variant = variantParts[1]
8282
} else {
8383
variantPlatform = targetPlatform

src/arduino.cc/builder/target_board_resolver.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ func (s *TargetBoardResolver) Run(context map[string]interface{}) error {
4747
targetPlatformName := fqbnParts[1]
4848
targetBoardName := fqbnParts[2]
4949

50-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
50+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
5151

52-
targetPackage := packages[targetPackageName]
52+
targetPackage := packages.Packages[targetPackageName]
5353
if targetPackage == nil {
5454
return utils.Errorf(context, constants.MSG_PACKAGE_UNKNOWN, targetPackageName)
5555
}
@@ -81,11 +81,11 @@ func (s *TargetBoardResolver) Run(context map[string]interface{}) error {
8181
coreParts := strings.Split(core, ":")
8282
if len(coreParts) > 1 {
8383
core = coreParts[1]
84-
if packages[coreParts[0]] == nil {
84+
if packages.Packages[coreParts[0]] == nil {
8585
return utils.Errorf(context, constants.MSG_MISSING_CORE_FOR_BOARD, coreParts[0])
8686

8787
}
88-
corePlatform = packages[coreParts[0]].Platforms[targetPlatform.PlatformId]
88+
corePlatform = packages.Packages[coreParts[0]].Platforms[targetPlatform.PlatformId]
8989
}
9090

9191
var actualPlatform *types.Platform

src/arduino.cc/builder/test/hardware_loader_test.go

+50-50
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,22 @@ func TestLoadHardware(t *testing.T) {
4747
err := loader.Run(context)
4848
NoError(t, err)
4949

50-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
51-
require.Equal(t, 1, len(packages))
52-
require.NotNil(t, packages["arduino"])
53-
require.Equal(t, 2, len(packages["arduino"].Platforms))
50+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
51+
require.Equal(t, 1, len(packages.Packages))
52+
require.NotNil(t, packages.Packages["arduino"])
53+
require.Equal(t, 2, len(packages.Packages["arduino"].Platforms))
5454

55-
require.Equal(t, "uno", packages["arduino"].Platforms["avr"].Boards["uno"].BoardId)
56-
require.Equal(t, "uno", packages["arduino"].Platforms["avr"].Boards["uno"].Properties[constants.ID])
55+
require.Equal(t, "uno", packages.Packages["arduino"].Platforms["avr"].Boards["uno"].BoardId)
56+
require.Equal(t, "uno", packages.Packages["arduino"].Platforms["avr"].Boards["uno"].Properties[constants.ID])
5757

58-
require.Equal(t, "yun", packages["arduino"].Platforms["avr"].Boards["yun"].BoardId)
59-
require.Equal(t, "true", packages["arduino"].Platforms["avr"].Boards["yun"].Properties["upload.wait_for_upload_port"])
58+
require.Equal(t, "yun", packages.Packages["arduino"].Platforms["avr"].Boards["yun"].BoardId)
59+
require.Equal(t, "true", packages.Packages["arduino"].Platforms["avr"].Boards["yun"].Properties["upload.wait_for_upload_port"])
6060

61-
require.Equal(t, "{build.usb_flags}", packages["arduino"].Platforms["avr"].Boards["robotMotor"].Properties["build.extra_flags"])
61+
require.Equal(t, "{build.usb_flags}", packages.Packages["arduino"].Platforms["avr"].Boards["robotMotor"].Properties["build.extra_flags"])
6262

63-
require.Equal(t, "arduino_due_x", packages["arduino"].Platforms["sam"].Boards["arduino_due_x"].BoardId)
63+
require.Equal(t, "arduino_due_x", packages.Packages["arduino"].Platforms["sam"].Boards["arduino_due_x"].BoardId)
6464

65-
avrPlatform := packages["arduino"].Platforms["avr"]
65+
avrPlatform := packages.Packages["arduino"].Platforms["avr"]
6666
require.Equal(t, "Arduino AVR Boards", avrPlatform.Properties[constants.PLATFORM_NAME])
6767
require.Equal(t, "-v", avrPlatform.Properties["tools.avrdude.bootloader.params.verbose"])
6868
require.Equal(t, "/my/personal/avrdude", avrPlatform.Properties["tools.avrdude.cmd.path"])
@@ -89,29 +89,29 @@ func TestLoadHardwareMixingUserHardwareFolder(t *testing.T) {
8989
NoError(t, err)
9090
}
9191

92-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
92+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
9393

9494
if runtime.GOOS == "windows" {
9595
//a package is a symlink, and windows does not support them
96-
require.Equal(t, 2, len(packages))
96+
require.Equal(t, 2, len(packages.Packages))
9797
} else {
98-
require.Equal(t, 3, len(packages))
98+
require.Equal(t, 3, len(packages.Packages))
9999
}
100100

101-
require.NotNil(t, packages["arduino"])
102-
require.Equal(t, 2, len(packages["arduino"].Platforms))
101+
require.NotNil(t, packages.Packages["arduino"])
102+
require.Equal(t, 2, len(packages.Packages["arduino"].Platforms))
103103

104-
require.Equal(t, "uno", packages["arduino"].Platforms["avr"].Boards["uno"].BoardId)
105-
require.Equal(t, "uno", packages["arduino"].Platforms["avr"].Boards["uno"].Properties[constants.ID])
104+
require.Equal(t, "uno", packages.Packages["arduino"].Platforms["avr"].Boards["uno"].BoardId)
105+
require.Equal(t, "uno", packages.Packages["arduino"].Platforms["avr"].Boards["uno"].Properties[constants.ID])
106106

107-
require.Equal(t, "yun", packages["arduino"].Platforms["avr"].Boards["yun"].BoardId)
108-
require.Equal(t, "true", packages["arduino"].Platforms["avr"].Boards["yun"].Properties["upload.wait_for_upload_port"])
107+
require.Equal(t, "yun", packages.Packages["arduino"].Platforms["avr"].Boards["yun"].BoardId)
108+
require.Equal(t, "true", packages.Packages["arduino"].Platforms["avr"].Boards["yun"].Properties["upload.wait_for_upload_port"])
109109

110-
require.Equal(t, "{build.usb_flags}", packages["arduino"].Platforms["avr"].Boards["robotMotor"].Properties["build.extra_flags"])
110+
require.Equal(t, "{build.usb_flags}", packages.Packages["arduino"].Platforms["avr"].Boards["robotMotor"].Properties["build.extra_flags"])
111111

112-
require.Equal(t, "arduino_due_x", packages["arduino"].Platforms["sam"].Boards["arduino_due_x"].BoardId)
112+
require.Equal(t, "arduino_due_x", packages.Packages["arduino"].Platforms["sam"].Boards["arduino_due_x"].BoardId)
113113

114-
avrPlatform := packages["arduino"].Platforms["avr"]
114+
avrPlatform := packages.Packages["arduino"].Platforms["avr"]
115115
require.Equal(t, "Arduino AVR Boards", avrPlatform.Properties[constants.PLATFORM_NAME])
116116
require.Equal(t, "-v", avrPlatform.Properties["tools.avrdude.bootloader.params.verbose"])
117117
require.Equal(t, "/my/personal/avrdude", avrPlatform.Properties["tools.avrdude.cmd.path"])
@@ -123,13 +123,13 @@ func TestLoadHardwareMixingUserHardwareFolder(t *testing.T) {
123123
require.Equal(t, "{build.mbed_api_include} {build.nRF51822_api_include} {build.ble_api_include} {compiler.libsam.c.flags} {compiler.arm.cmsis.path} {build.variant_system_include}", avrPlatform.Properties["preproc.macros.compatibility_flags"])
124124
require.Equal(t, "\"{compiler.path}{compiler.cpp.cmd}\" {preproc.includes.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} \"{source_file}\"", avrPlatform.Properties[constants.RECIPE_PREPROC_INCLUDES])
125125

126-
require.NotNil(t, packages["my_avr_platform"])
127-
myAVRPlatform := packages["my_avr_platform"].Platforms["avr"]
126+
require.NotNil(t, packages.Packages["my_avr_platform"])
127+
myAVRPlatform := packages.Packages["my_avr_platform"].Platforms["avr"]
128128
require.Equal(t, "custom_yun", myAVRPlatform.Boards["custom_yun"].BoardId)
129129

130130
if runtime.GOOS != "windows" {
131-
require.NotNil(t, packages["my_symlinked_avr_platform"])
132-
require.NotNil(t, packages["my_symlinked_avr_platform"].Platforms["avr"])
131+
require.NotNil(t, packages.Packages["my_symlinked_avr_platform"])
132+
require.NotNil(t, packages.Packages["my_symlinked_avr_platform"].Platforms["avr"])
133133
}
134134
}
135135

@@ -141,16 +141,16 @@ func TestLoadHardwareWithBoardManagerFolderStructure(t *testing.T) {
141141
err := loader.Run(context)
142142
NoError(t, err)
143143

144-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
145-
require.Equal(t, 3, len(packages))
146-
require.NotNil(t, packages["arduino"])
147-
require.Equal(t, 1, len(packages["arduino"].Platforms))
148-
require.NotNil(t, packages["RedBearLab"])
149-
require.Equal(t, 1, len(packages["RedBearLab"].Platforms))
150-
require.NotNil(t, packages["RFduino"])
151-
require.Equal(t, 0, len(packages["RFduino"].Platforms))
144+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
145+
require.Equal(t, 3, len(packages.Packages))
146+
require.NotNil(t, packages.Packages["arduino"])
147+
require.Equal(t, 1, len(packages.Packages["arduino"].Platforms))
148+
require.NotNil(t, packages.Packages["RedBearLab"])
149+
require.Equal(t, 1, len(packages.Packages["RedBearLab"].Platforms))
150+
require.NotNil(t, packages.Packages["RFduino"])
151+
require.Equal(t, 0, len(packages.Packages["RFduino"].Platforms))
152152

153-
samdPlatform := packages["arduino"].Platforms["samd"]
153+
samdPlatform := packages.Packages["arduino"].Platforms["samd"]
154154
require.Equal(t, 2, len(samdPlatform.Boards))
155155

156156
require.Equal(t, "arduino_zero_edbg", samdPlatform.Boards["arduino_zero_edbg"].BoardId)
@@ -167,7 +167,7 @@ func TestLoadHardwareWithBoardManagerFolderStructure(t *testing.T) {
167167
require.Equal(t, "Atmel EDBG", samdPlatform.Programmers["edbg"][constants.PROGRAMMER_NAME])
168168
require.Equal(t, "openocd", samdPlatform.Programmers["edbg"]["program.tool"])
169169

170-
avrRedBearPlatform := packages["RedBearLab"].Platforms["avr"]
170+
avrRedBearPlatform := packages.Packages["RedBearLab"].Platforms["avr"]
171171
require.Equal(t, 3, len(avrRedBearPlatform.Boards))
172172

173173
require.Equal(t, "blend", avrRedBearPlatform.Boards["blend"].BoardId)
@@ -185,28 +185,28 @@ func TestLoadLotsOfHardware(t *testing.T) {
185185
err := loader.Run(context)
186186
NoError(t, err)
187187

188-
packages := context[constants.CTX_HARDWARE].(map[string]*types.Package)
188+
packages := context[constants.CTX_HARDWARE].(*types.Packages)
189189

190190
if runtime.GOOS == "windows" {
191191
//a package is a symlink, and windows does not support them
192-
require.Equal(t, 4, len(packages))
192+
require.Equal(t, 4, len(packages.Packages))
193193
} else {
194-
require.Equal(t, 5, len(packages))
194+
require.Equal(t, 5, len(packages.Packages))
195195
}
196196

197-
require.NotNil(t, packages["arduino"])
198-
require.NotNil(t, packages["my_avr_platform"])
197+
require.NotNil(t, packages.Packages["arduino"])
198+
require.NotNil(t, packages.Packages["my_avr_platform"])
199199

200-
require.Equal(t, 3, len(packages["arduino"].Platforms))
201-
require.Equal(t, 20, len(packages["arduino"].Platforms["avr"].Boards))
202-
require.Equal(t, 2, len(packages["arduino"].Platforms["sam"].Boards))
203-
require.Equal(t, 2, len(packages["arduino"].Platforms["samd"].Boards))
200+
require.Equal(t, 3, len(packages.Packages["arduino"].Platforms))
201+
require.Equal(t, 20, len(packages.Packages["arduino"].Platforms["avr"].Boards))
202+
require.Equal(t, 2, len(packages.Packages["arduino"].Platforms["sam"].Boards))
203+
require.Equal(t, 2, len(packages.Packages["arduino"].Platforms["samd"].Boards))
204204

205-
require.Equal(t, 1, len(packages["my_avr_platform"].Platforms))
206-
require.Equal(t, 2, len(packages["my_avr_platform"].Platforms["avr"].Boards))
205+
require.Equal(t, 1, len(packages.Packages["my_avr_platform"].Platforms))
206+
require.Equal(t, 2, len(packages.Packages["my_avr_platform"].Platforms["avr"].Boards))
207207

208208
if runtime.GOOS != "windows" {
209-
require.Equal(t, 1, len(packages["my_symlinked_avr_platform"].Platforms))
210-
require.Equal(t, 2, len(packages["my_symlinked_avr_platform"].Platforms["avr"].Boards))
209+
require.Equal(t, 1, len(packages.Packages["my_symlinked_avr_platform"].Platforms))
210+
require.Equal(t, 2, len(packages.Packages["my_symlinked_avr_platform"].Platforms["avr"].Boards))
211211
}
212212
}

src/arduino.cc/builder/test/rewrite_hardware_keys_test.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ import (
4040
func TestRewriteHardwareKeys(t *testing.T) {
4141
context := make(map[string]interface{})
4242

43-
hardware := make(map[string]*types.Package)
43+
packages := &types.Packages{}
44+
packages.Packages = make(map[string]*types.Package)
4445
aPackage := &types.Package{PackageId: "dummy"}
45-
hardware["dummy"] = aPackage
46+
packages.Packages["dummy"] = aPackage
4647
aPackage.Platforms = make(map[string]*types.Platform)
4748

4849
platform := &types.Platform{PlatformId: "dummy"}
@@ -51,7 +52,7 @@ func TestRewriteHardwareKeys(t *testing.T) {
5152
platform.Properties[constants.PLATFORM_NAME] = "A test platform"
5253
platform.Properties[constants.BUILD_PROPERTIES_COMPILER_PATH] = "{runtime.ide.path}/hardware/tools/avr/bin/"
5354

54-
context[constants.CTX_HARDWARE] = hardware
55+
context[constants.CTX_HARDWARE] = packages
5556

5657
rewrite := types.PlatforKeyRewrite{Key: constants.BUILD_PROPERTIES_COMPILER_PATH, OldValue: "{runtime.ide.path}/hardware/tools/avr/bin/", NewValue: "{runtime.tools.avr-gcc.path}/bin/"}
5758
platformKeysRewrite := types.PlatforKeysRewrite{Rewrites: []types.PlatforKeyRewrite{rewrite}}
@@ -74,9 +75,10 @@ func TestRewriteHardwareKeys(t *testing.T) {
7475
func TestRewriteHardwareKeysWithRewritingDisabled(t *testing.T) {
7576
context := make(map[string]interface{})
7677

77-
hardware := make(map[string]*types.Package)
78+
packages := &types.Packages{}
79+
packages.Packages = make(map[string]*types.Package)
7880
aPackage := &types.Package{PackageId: "dummy"}
79-
hardware["dummy"] = aPackage
81+
packages.Packages["dummy"] = aPackage
8082
aPackage.Platforms = make(map[string]*types.Platform)
8183

8284
platform := &types.Platform{PlatformId: "dummy"}
@@ -86,7 +88,7 @@ func TestRewriteHardwareKeysWithRewritingDisabled(t *testing.T) {
8688
platform.Properties[constants.BUILD_PROPERTIES_COMPILER_PATH] = "{runtime.ide.path}/hardware/tools/avr/bin/"
8789
platform.Properties[constants.REWRITING] = constants.REWRITING_DISABLED
8890

89-
context[constants.CTX_HARDWARE] = hardware
91+
context[constants.CTX_HARDWARE] = packages
9092

9193
rewrite := types.PlatforKeyRewrite{Key: constants.BUILD_PROPERTIES_COMPILER_PATH, OldValue: "{runtime.ide.path}/hardware/tools/avr/bin/", NewValue: "{runtime.tools.avr-gcc.path}/bin/"}
9294
platformKeysRewrite := types.PlatforKeysRewrite{Rewrites: []types.PlatforKeyRewrite{rewrite}}

src/arduino.cc/builder/types/types.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,15 @@ type Sketch struct {
6060
AdditionalFiles []SketchFile
6161
}
6262

63+
type Packages struct {
64+
Properties map[string]string
65+
Packages map[string]*Package
66+
}
67+
6368
type Package struct {
64-
PackageId string
65-
Platforms map[string]*Platform
69+
PackageId string
70+
Properties map[string]string
71+
Platforms map[string]*Platform
6672
}
6773

6874
type Platform struct {

0 commit comments

Comments
 (0)