diff --git a/.travis.yml b/.travis.yml index 8ec2e23e..ded25aaa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ install: - go get github.com/wadey/gocovmerge - go get github.com/arduino/go-properties-map - go get github.com/arduino/go-timeutils + - go get github.com/blang/semver script: - go build -o $HOME/arduino-builder -v github.com/arduino/arduino-builder/arduino-builder diff --git a/add_missing_build_properties_from_parent_platform_txt_files.go b/add_missing_build_properties_from_parent_platform_txt_files.go index 558aa820..7ec29c10 100644 --- a/add_missing_build_properties_from_parent_platform_txt_files.go +++ b/add_missing_build_properties_from_parent_platform_txt_files.go @@ -30,6 +30,10 @@ package builder import ( + "strings" + + "github.com/arduino/arduino-builder/constants" + "github.com/arduino/arduino-builder/json_package_index" "github.com/arduino/arduino-builder/types" ) @@ -48,3 +52,40 @@ func (s *AddMissingBuildPropertiesFromParentPlatformTxtFiles) Run(ctx *types.Con return nil } + +type OverridePropertiesWithJsonInfo struct{} + +func (s *OverridePropertiesWithJsonInfo) Run(ctx *types.Context) error { + + if ctx.JsonFolders != nil { + + allowedJsons := strings.Split(ctx.BuildProperties[constants.ADDITIONALE_BOARD_MANAGER_JSON], ",") + jsonProperties, err := json_package_index.PackageIndexFoldersToPropertiesMap(ctx.Hardware, ctx.JsonFolders, allowedJsons) + + if err != nil { + // doesn't matter, log the broken package in verbose mode + } + + newBuildProperties := jsonProperties[ctx.TargetPackage.PackageId+":"+ctx.TargetPlatform.PlatformId+":"+ctx.TargetPlatform.Properties["version"]] + + buildProperties := ctx.BuildProperties.Clone() + + buildProperties.Merge(newBuildProperties) + + // HACK!!! To overcome AVR core 1.6.12 lto problems, replace avr-gcc-4.8.1-arduino5 with + // 4.9.2-atmel3.5.3-arduino2 if it exists + if ctx.TargetBoard.Properties["build.core"] == "arduino:arduino" && buildProperties[constants.HACK_PROPERTIES_AVR_GCC_NEW] != "" { + buildProperties[constants.HACK_PROPERTIES_AVR_GCC_OLD] = + "{" + constants.HACK_PROPERTIES_AVR_GCC_NEW + "}" + // if base runtime property is fully specified it needs to be replaced + if !strings.HasPrefix(buildProperties[constants.HACK_PROPERTIES_AVR_GCC_OLD_2], "{") { + buildProperties[constants.HACK_PROPERTIES_AVR_GCC_OLD_2] = + "{" + constants.HACK_PROPERTIES_AVR_GCC_NEW + "}" + } + } + + ctx.BuildProperties = buildProperties + } + + return nil +} diff --git a/arduino-builder/main.go b/arduino-builder/main.go index d2ca98c4..5daf1140 100644 --- a/arduino-builder/main.go +++ b/arduino-builder/main.go @@ -59,6 +59,7 @@ const FLAG_HARDWARE = "hardware" const FLAG_TOOLS = "tools" const FLAG_BUILT_IN_LIBRARIES = "built-in-libraries" const FLAG_LIBRARIES = "libraries" +const FLAG_PACKAGE_JSON = "package-index" const FLAG_PREFS = "prefs" const FLAG_FQBN = "fqbn" const FLAG_IDE_VERSION = "ide-version" @@ -123,6 +124,7 @@ var hardwareFoldersFlag foldersFlag var toolsFoldersFlag foldersFlag var librariesBuiltInFoldersFlag foldersFlag var librariesFoldersFlag foldersFlag +var jsonFoldersFlag foldersFlag var customBuildPropertiesFlag propertiesFlag var fqbnFlag *string var coreAPIVersionFlag *string @@ -146,6 +148,7 @@ func init() { flag.Var(&toolsFoldersFlag, FLAG_TOOLS, "Specify a 'tools' folder. Can be added multiple times for specifying multiple 'tools' folders") flag.Var(&librariesBuiltInFoldersFlag, FLAG_BUILT_IN_LIBRARIES, "Specify a built-in 'libraries' folder. These are low priority libraries. Can be added multiple times for specifying multiple built-in 'libraries' folders") flag.Var(&librariesFoldersFlag, FLAG_LIBRARIES, "Specify a 'libraries' folder. Can be added multiple times for specifying multiple 'libraries' folders") + flag.Var(&jsonFoldersFlag, FLAG_PACKAGE_JSON, "Specify a folder containing package_index json files. Can be added multiple times for specifying multiple folders") flag.Var(&customBuildPropertiesFlag, FLAG_PREFS, "Specify a custom preference. Can be added multiple times for specifying multiple custom preferences") fqbnFlag = flag.String(FLAG_FQBN, "", "fully qualified board name") coreAPIVersionFlag = flag.String(FLAG_CORE_API_VERSION, "10600", "version of core APIs (used to populate ARDUINO #define)") @@ -217,6 +220,13 @@ func main() { ctx.OtherLibrariesFolders = librariesFolders } + // FLAG_PACKAGE_JSON + if jsonFolders, err := toSliceOfUnquoted(jsonFoldersFlag); err != nil { + printCompleteError(err) + } else if len(jsonFolders) > 0 { + ctx.JsonFolders = jsonFolders + } + // FLAG_BUILT_IN_LIBRARIES if librariesBuiltInFolders, err := toSliceOfUnquoted(librariesBuiltInFoldersFlag); err != nil { printCompleteError(err) diff --git a/constants/constants.go b/constants/constants.go index d83ee273..4a1455c2 100644 --- a/constants/constants.go +++ b/constants/constants.go @@ -232,3 +232,7 @@ const SKETCH_FOLDER_SRC = "src" const TOOL_NAME = "name" const TOOL_URL = "url" const TOOL_VERSION = "version" +const ADDITIONALE_BOARD_MANAGER_JSON = "boardsmanager.additional.urls" +const HACK_PROPERTIES_AVR_GCC_NEW = BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX + "avr-gcc-arduino-4.9.2-atmel3.5.3-arduino2" + BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX +const HACK_PROPERTIES_AVR_GCC_OLD = BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX + "avr-gcc-arduino-4.8.1-arduino5" + BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX +const HACK_PROPERTIES_AVR_GCC_OLD_2 = BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX + "avr-gcc" + BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX diff --git a/container_setup.go b/container_setup.go index 93ee6d73..943064bc 100644 --- a/container_setup.go +++ b/container_setup.go @@ -52,6 +52,7 @@ func (s *ContainerSetupHardwareToolsLibsSketchAndProps) Run(ctx *types.Context) &LoadVIDPIDSpecificProperties{}, &SetCustomBuildProperties{}, &AddMissingBuildPropertiesFromParentPlatformTxtFiles{}, + &OverridePropertiesWithJsonInfo{}, } for _, command := range commands { diff --git a/json_package_index/package_index.go b/json_package_index/package_index.go new file mode 100644 index 00000000..e07d703f --- /dev/null +++ b/json_package_index/package_index.go @@ -0,0 +1,249 @@ +/* + * This file is part of Arduino Builder. + * + * Copyright 2016 Arduino LLC (http://www.arduino.cc/) + * + * Arduino Builder is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * As a special exception, you may use this file as part of a free software + * library without restriction. Specifically, if other files instantiate + * templates or use macros or inline functions from this file, or you compile + * this file and link it with other files to produce an executable, this + * file does not by itself cause the resulting executable to be covered by + * the GNU General Public License. This exception does not however + * invalidate any other reasons why the executable file might be covered by + * the GNU General Public License. + */ + +package json_package_index + +import ( + "encoding/json" + "errors" + "io/ioutil" + "net/http" + "os" + "path/filepath" + "strings" + + "github.com/blang/semver" + + "github.com/arduino/arduino-builder/constants" + _ "github.com/arduino/arduino-builder/i18n" + "github.com/arduino/arduino-builder/types" + "github.com/arduino/arduino-builder/utils" + "github.com/arduino/go-properties-map" +) + +type core struct { + Architecture string `json:"architecture"` + Version string `json:"version"` + URL string `json:"url"` + Maintainer string `json:"maintainer"` + Name string `json:"archiveFileName"` + Checksum string `json:"checksum"` + destination string + installed bool + Dependencies []struct { + Packager string `json:"packager"` + Name string `json:"name"` + Version string `json:"version"` + } `json:"toolsDependencies"` + CoreDependencies []struct { + Packager string `json:"packager"` + } `json:"coreDependencies"` +} + +type tool struct { + Name string `json:"name"` + Version string `json:"version"` + Systems []struct { + Host string `json:"host"` + URL string `json:"url"` + Name string `json:"archiveFileName"` + Checksum string `json:"checksum"` + } `json:"systems"` + url string + destination string +} + +type index struct { + Packages []struct { + Name string `json:"name"` + Maintainer string `json:"maintainer"` + Platforms []core `json:"platforms"` + Tools []tool `json:"tools"` + } `json:"packages"` +} + +var systems = map[string]string{ + "linuxamd64": "x86_64-linux-gnu", + "linux386": "i686-linux-gnu", + "darwinamd64": "apple-darwin", + "windows386": "i686-mingw32", +} + +// globalProperties is a big map of properties maps in the form +// globalProperties["arduino:avr:1.6.12"] = usual properties Map +// at compile time, when de board is well defined, the relevant map +// should be merged with the "classic" map overriding its values + +var globalProperties map[string]properties.Map + +func PackageIndexFoldersToPropertiesMap(packages *types.Packages, folders []string, specifiedFilenames []string) (map[string]properties.Map, error) { + + var paths []string + + for _, folder := range folders { + folder, err := filepath.Abs(folder) + if err != nil { + break + } + files, _ := ioutil.ReadDir(folder) + for _, f := range files { + if strings.HasPrefix(f.Name(), "package") && strings.HasSuffix(f.Name(), "index.json") { + // if a list of required json has been provided only add them + if specifiedFilenames != nil && len(specifiedFilenames) > 1 && + !utils.SliceContains(specifiedFilenames, f.Name()) { + continue + } else { + paths = append(paths, filepath.Join(folder, f.Name())) + } + } + } + } + return PackageIndexesToPropertiesMap(packages, paths) +} + +func PackageIndexesToPropertiesMap(packages *types.Packages, urls []string) (map[string]properties.Map, error) { + + globalProperties = make(map[string]properties.Map) + coreDependencyMap := make(map[string]string) + + data, err := PackageIndexesToGlobalIndex(packages, urls) + + for _, p := range data.Packages { + for _, a := range p.Platforms { + localProperties := make(properties.Map) + for _, dep := range a.Dependencies { + localProperties[constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX+dep.Name+constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX] = + "{" + constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX + dep.Name + "-" + dep.Version + constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX + "}" + if dep.Packager != p.Name { + localProperties[constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX+dep.Name+"-"+dep.Version+constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX] = + "{" + constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX + dep.Name + "-" + dep.Packager + "-" + dep.Version + constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX + "}" + } + } + for _, coredep := range a.CoreDependencies { + // inherit all the tools from latest coredep + if err == nil { + coreDependencyMap[p.Name+":"+a.Architecture+":"+a.Version] = + coredep.Packager + ":" + a.Architecture + } + } + globalProperties[p.Name+":"+a.Architecture+":"+a.Version] = localProperties.Clone() + } + } + + for idx, parentCore := range coreDependencyMap { + version, err := findLatestInstalledCore(data, strings.Split(parentCore, ":")[0], strings.Split(parentCore, ":")[1]) + if err == nil { + globalProperties[idx] = globalProperties[parentCore+":"+version].Clone() + } + } + + return globalProperties, err +} + +func findLatestInstalledCore(data index, Packager string, Name string) (string, error) { + latest, _ := semver.Make("0.0.0") + for _, p := range data.Packages { + for _, a := range p.Platforms { + if p.Name == Packager && a.Architecture == Name { + test, _ := semver.Make(a.Version) + if test.GT(latest) && a.installed { + latest = test + } + } + } + } + var err error + test, _ := semver.Make("0.0.0") + if latest.EQ(test) { + err = errors.New("No such core available") + } else { + err = nil + } + return latest.String(), err +} + +func PackageIndexesToGlobalIndex(packages *types.Packages, urls []string) (index, error) { + + // first stub of arduino-pdpm + var data index + var err error + + for _, url := range urls { + + var body []byte + var localdata index + localpath, _ := filepath.Abs(url) + _, err := os.Stat(localpath) + + if err != nil { + resp, err := http.Get(url) + if err == nil { + defer resp.Body.Close() + body, err = ioutil.ReadAll(resp.Body) + if err != nil { + break + } + } + } else { + body, err = ioutil.ReadFile(localpath) + if err != nil { + break + } + } + json.Unmarshal(body, &localdata) + for _, entry := range localdata.Packages { + data.Packages = append(data.Packages, entry) + } + } + + for i, p := range data.Packages { + for j, a := range p.Platforms { + if packages != nil && packages.Packages[p.Name] != nil && + packages.Packages[p.Name].Platforms[a.Architecture] != nil && + packages.Packages[p.Name].Platforms[a.Architecture].Properties["version"] == a.Version { + data.Packages[i].Platforms[j].installed = true + } + } + } + + return data, err +} + +func CompareVersions(fv string, sv string) int { + v1, _ := semver.Make(fv) + v2, _ := semver.Make(sv) + if v1.EQ(v2) { + return 0 + } + if v1.GT(v2) { + return 1 + } else { + return -1 + } +} diff --git a/json_package_index/package_index_test.go b/json_package_index/package_index_test.go new file mode 100644 index 00000000..d4f6f2e4 --- /dev/null +++ b/json_package_index/package_index_test.go @@ -0,0 +1,54 @@ +package json_package_index + +import ( + "github.com/stretchr/testify/require" + "path/filepath" + "testing" +) + +func TestPropertiesPackageIndex(t *testing.T) { + + var paths []string + paths = append(paths, filepath.Join("testdata", "package_index.json")) + + p, err := PackageIndexesToPropertiesMap(nil, paths) + + require.NoError(t, err) + + require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", p["arduino:avr:1.6.12"]["runtime.tools.avr-gcc.path"]) +} + +func TestPropertiesPackageIndexRemote(t *testing.T) { + + var paths []string + paths = append(paths, filepath.Join("testdata", "package_index.json")) + paths = append(paths, "http://downloads.arduino.cc/packages/package_arduino.cc_linux_index.json") + + p, err := PackageIndexesToPropertiesMap(nil, paths) + + require.NoError(t, err) + + require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", p["arduino:avr:1.6.12"]["runtime.tools.avr-gcc.path"]) + require.Equal(t, "{runtime.tools.linuxuploader-1.2.path}", p["arduino:arm_cortexA:0.4.0"]["runtime.tools.linuxuploader.path"]) +} + +func TestPackageIndexToGlobalIndex(t *testing.T) { + + var paths []string + paths = append(paths, filepath.Join("testdata", "package_index.json")) + + p, err := PackageIndexesToGlobalIndex(nil, paths) + require.NoError(t, err) + + require.Equal(t, "Arduino", p.Packages[0].Maintainer) +} + +func TestPackageIndexFoldersToPropertiesMap(t *testing.T) { + var paths []string + paths = append(paths, "testdata") + + p, err := PackageIndexFoldersToPropertiesMap(nil, paths, []string{"package_index.json"}) + require.NoError(t, err) + + require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", p["arduino:avr:1.6.12"]["runtime.tools.avr-gcc.path"]) +} diff --git a/json_package_index/testdata/package_index.json b/json_package_index/testdata/package_index.json new file mode 100644 index 00000000..429f5799 --- /dev/null +++ b/json_package_index/testdata/package_index.json @@ -0,0 +1,2371 @@ +{ + "packages": [ + { + "name": "arduino", + "maintainer": "Arduino", + "websiteURL": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": [ + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.2", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/avr-1.6.2.tar.bz2", + "archiveFileName": "avr-1.6.2.tar.bz2", + "checksum": "SHA-256:2909a4c6dd6d7497e7e1b5fcaa2f66a100271417510f3a68593b65af8ff78c1c", + "size": "4877442", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino2" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino2" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.3", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.3.tar.bz2", + "archiveFileName": "avr-1.6.3.tar.bz2", + "checksum": "SHA-256:c30033ba70cbb2d46ee0901a331b0f83be082f9110eda0464b624fdbb51b3c7b", + "size": "4876816", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino3" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino3" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.4", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.4.tar.bz2", + "archiveFileName": "avr-1.6.4.tar.bz2", + "checksum": "SHA-256:8a243410aeded6dbcbc4b134ba10be5c2562d137bfcf3ac97abdc5844933b363", + "size": "4780884", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.5", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.5.tar.bz2", + "archiveFileName": "avr-1.6.5.tar.bz2", + "checksum": "SHA-256:c72d890aa605add677634c6b25ebc3b2ed9e44c38805b95c47eab17a1ca72db6", + "size": "4876957", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.6", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.6.tar.bz2", + "archiveFileName": "avr-1.6.6.tar.bz2", + "checksum": "SHA-256:08ad5db4978ebea22344edc5d77dce0923d8a644da7a14dc8072e883c76058d8", + "size": "4876916", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.7", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.7.tar.bz2", + "archiveFileName": "avr-1.6.7.tar.bz2", + "checksum": "SHA-256:e112992c59c0d826db9a63967679854a96b3c7b970f788a03834e211f6390caa", + "size": "4904283", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.8", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.8.tar.bz2", + "archiveFileName": "avr-1.6.8.tar.bz2", + "checksum": "SHA-256:0e0775347baf0d93ef344bcd851e7d8d0af2bda7916c119fa3a4ff9b984c575b", + "size": "4885536", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino/Genuino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino/Genuino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino/Genuino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.9", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.9.tar.bz2", + "archiveFileName": "avr-1.6.9.tar.bz2", + "checksum": "SHA-256:eb8bc661162bc689b3ed02c4d24f6ff964e91ace890b7d3db2e316c84ba235f0", + "size": "4890702", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino/Genuino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino/Genuino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino/Genuino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.10", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.10.tar.bz2", + "archiveFileName": "avr-1.6.10.tar.bz2", + "checksum": "SHA-256:92cad999335198f875bdaec5de0169991bee19e0058c623d2cdd0835bb26eeaa", + "size": "4991331", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino/Genuino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino/Genuino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino/Genuino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.11", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.11.tar.bz2", + "archiveFileName": "avr-1.6.11.tar.bz2", + "checksum": "SHA-256:5292d3559de74eb990ff570df43887b44d4e3c6b80ab4ab0f945e94dd68d8210", + "size": "4991634", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino/Genuino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino/Genuino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino/Genuino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "Arduino AVR Boards", + "architecture": "avr", + "version": "1.6.12", + "category": "Arduino", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "url": "http://downloads.arduino.cc/cores/avr-1.6.12.tar.bz2", + "archiveFileName": "avr-1.6.12.tar.bz2", + "checksum": "SHA-256:4a296a3304a51d820e680e2022fb9b9f5706144abf1e5d60c7876a0f9fc7e6d9", + "size": "4993586", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino/Genuino Uno"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino/Genuino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino/Genuino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.9.2-atmel3.5.3-arduino2" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.3.0-arduino2" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.2", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.2.tar.bz2", + "archiveFileName": "sam-1.6.2.tar.bz2", + "checksum": "SHA-256:2d3c8a90bc214947cff1b816d0c2706441398efc78af7984d5250f2e50eddd5f", + "size": "16174730", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.3a-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.3", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.3.tar.bz2", + "archiveFileName": "sam-1.6.3.tar.bz2", + "checksum": "SHA-256:0a6e1d5542790e38ba454c796aabbd0e48b07635a5b4d8adc044a4eba959ca27", + "size": "16174017", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.3a-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.4", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.4.tar.bz2", + "archiveFileName": "sam-1.6.4.tar.bz2", + "checksum": "SHA-256:e0dc94d8ad0756b79838e99ad7409b08b07e40ed667ebe86eae11644ef7bec0d", + "size": "16174992", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.3a-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.5", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.5.tar.bz2", + "archiveFileName": "sam-1.6.5.tar.bz2", + "checksum": "SHA-256:1bde19e3af3887dbc3afda46754e1136fb5a3bc535b8de9862ad7753d93902b7", + "size": "16529130", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.6", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.6.tar.bz2", + "archiveFileName": "sam-1.6.6.tar.bz2", + "checksum": "SHA-256:7694b698bb24cd87d7d0b2b4caa09dc6039591868e735b0bf385299aea24c3e4", + "size": "16528101", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.7", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.7.tar.bz2", + "archiveFileName": "sam-1.6.7.tar.bz2", + "checksum": "SHA-256:62d8bde9bf92502aeeaaf5031ed841e4e4c241fe66fc8cb23625349e6129a1ea", + "size": "16473479", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.8", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.8.tar.bz2", + "archiveFileName": "sam-1.6.8.tar.bz2", + "checksum": "SHA-256:cc95b49b7dfe4138687a559d963db09b9b85352051173d93ad8c272aa23c2337", + "size": "16471779", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + } + ] + }, + { + "name": "Arduino SAM Boards (32-bits ARM Cortex-M3)", + "architecture": "sam", + "version": "1.6.9", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/sam-1.6.9.tar.bz2", + "archiveFileName": "sam-1.6.9.tar.bz2", + "checksum": "SHA-256:a5eaf60b5845599c24229456d6f5cd2254a275c8b34cac9d5330e4cfab6b0aa7", + "size": "16473503", + "boards": [ + {"name": "Arduino Due"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.0", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.0.tar.bz2", + "archiveFileName": "samd-1.6.0.tar.bz2", + "checksum": "SHA-256:c1d5118ea1bf03c71203de4eafa90dedf265ceb44c0e3712f5a1eba1b12321b0", + "size": "177135", + "boards": [ + { + "name": "Arduino Zero" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.5-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.1", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.1.tar.bz2", + "archiveFileName": "samd-1.6.1.tar.bz2", + "checksum": "SHA-256:dddd0f906a7c470a1dc7ef5b024e34c24b915020fabb5903b7313246955514a2", + "size": "178354", + "boards": [ + { + "name": "Arduino Zero" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.2", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.2.tar.bz2", + "archiveFileName": "samd-1.6.2.tar.bz2", + "checksum": "SHA-256:fad804d8fbd2f2b5f0e876708f953b9afd28513d794c6a973825582f1d6bacde", + "size": "179578", + "boards": [ + { + "name": "Arduino/Genuino Zero" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.3", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.3.tar.bz2", + "archiveFileName": "samd-1.6.3.tar.bz2", + "checksum": "SHA-256:f3fb17d593cdf5986c201fe3639d71cc1149b43e996a3afa5533c3b4b0c5a532", + "size": "978163", + "boards": [ + { "name": "Arduino/Genuino Zero" }, + { "name": "Arduino/Genuino MKR1000" } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.4", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.4.tar.bz2", + "archiveFileName": "samd-1.6.4.tar.bz2", + "checksum": "SHA-256:02c788e0ae786cabf31c5c27b64d60906d4038f56ee2df689022e32525be7b70", + "size": "977481", + "boards": [ + { "name": "Arduino/Genuino Zero" } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.5", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.5.tar.bz2", + "archiveFileName": "samd-1.6.5.tar.bz2", + "checksum": "SHA-256:3f3d70b4081b11ab07fc209702604f2ac3a52bb193b7f0d9fa5bb31071b2b34c", + "size": "979548", + "boards": [ + { "name": "Arduino/Genuino Zero" }, + { "name": "Arduino/Genuino MKR1000" } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "Arduino SAMD Boards (32-bits ARM Cortex-M0+)", + "architecture": "samd", + "version": "1.6.6", + "category": "Arduino", + "url": "http://downloads.arduino.cc/cores/samd-1.6.6.tar.bz2", + "archiveFileName": "samd-1.6.6.tar.bz2", + "checksum": "SHA-256:08e97127acf41ac28c195803be1d22a5cbf720d4cff58db9458af9255d6ee7b3", + "size": "997331", + "boards": [ + { "name": "Arduino/Genuino Zero" }, + { "name": "Arduino/Genuino MKR1000" } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.6.1-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + } + ], + "tools": [ + { + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1", + "systems": [ + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", + "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", + "checksum": "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", + "size": "44423906" + }, + { + "host": "i686-mingw32", + "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", + "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", + "checksum": "SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2", + "size": "84537449" + }, + { + "host": "x86_64-apple-darwin", + "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", + "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", + "checksum": "SHA-256:3598acf21600f17a8e4a4e8e193dc422b894dc09384759b270b2ece5facb59c2", + "size": "52518522" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", + "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", + "checksum": "SHA-256:d23f6626148396d6ec42a5b4d928955a703e0757829195fa71a939e5b86eecf6", + "size": "51395093" + }, + { + "host": "i686-pc-linux-gnu", + "url": "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", + "archiveFileName": "gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", + "checksum": "SHA-256:ba1994235f69c526c564f65343f22ddbc9822b2ea8c5ee07dd79d89f6ace2498", + "size": "51029223" + } + ] + }, + { + "name": "bossac", + "version": "1.3a-arduino", + "systems": [ + { + "host": "i686-linux-gnu", + "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i686-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.3a-arduino-i686-linux-gnu.tar.bz2", + "checksum": "SHA-256:d6d10362f40729a7877e43474fcf02ad82cf83321cc64ca931f5c82b2d25d24f", + "size": "147359" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-x86_64-pc-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.3a-arduino-x86_64-pc-linux-gnu.tar.bz2", + "checksum": "SHA-256:c1daed033251296768fa8b63ad283e053da93427c0f3cd476a71a9188e18442c", + "size": "26179" + }, + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i686-mingw32.tar.bz2", + "archiveFileName": "bossac-1.3a-arduino-i686-mingw32.tar.bz2", + "checksum": "SHA-256:a37727622e0f86cb4f2856ad0209568a5d804234dba3dc0778829730d61a5ec7", + "size": "265647" + }, + { + "host": "i386-apple-darwin11", + "url": "http://downloads.arduino.cc/tools/bossac-1.3a-arduino-i386-apple-darwin11.tar.bz2", + "archiveFileName": "bossac-1.3a-arduino-i386-apple-darwin11.tar.bz2", + "checksum": "SHA-256:40770b225753e7a52bb165e8f37e6b760364f5c5e96048168d0178945bd96ad6", + "size": "39475" + } + ] + }, + { + "name": "avr-gcc", + "version": "4.8.1-arduino2", + "systems": [ + { + "size": "24443285", + "checksum": "SHA-256:c19a7526235c364d7f62ec1a993d9b495973ba1813869ccf0241c65905896852", + "host": "i386-apple-darwin11", + "archiveFileName": "avr-gcc-4.8.1-arduino2-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i386-apple-darwin11.tar.bz2" + }, + { + "size": "27152002", + "checksum": "SHA-256:24a931877bee5f36dc00a88877219a6d2f6a1fb7abb989fd04556b8432d2e14e", + "host": "x86_64-linux-gnu", + "archiveFileName": "avr-gcc-4.8.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "25876628", + "checksum": "SHA-256:2d701b4efbc8cec62dc299cde01730c5eebcf23d7e4393db8cf7744a9bf1d3de", + "host": "i686-linux-gnu", + "archiveFileName": "avr-gcc-4.8.1-arduino2-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "46046691", + "checksum": "SHA-256:2eafb49fb803fa4d2c32d35e24c0b372fcd520ca0a790fa537a847179e382000", + "host": "i686-mingw32", + "archiveFileName": "avr-gcc-4.8.1-arduino2-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino2-i686-mingw32.zip" + } + ] + }, + { + "name": "avrdude", + "version": "6.0.1-arduino2", + "systems": [ + { + "size": "264965", + "checksum": "SHA-256:71117cce0096dad6c091e2c34eb0b9a3386d3aec7d863d2da733d9e5eac3a6b1", + "host": "i386-apple-darwin11", + "archiveFileName": "avrdude-6.0.1-arduino2-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i386-apple-darwin11.tar.bz2" + }, + { + "size": "292541", + "checksum": "SHA-256:2489004d1d98177eaf69796760451f89224007c98b39ebb5577a9a34f51425f1", + "host": "x86_64-linux-gnu", + "archiveFileName": "avrdude-6.0.1-arduino2-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "283209", + "checksum": "SHA-256:6f633dd6270ad0d9ef19507bcbf8697b414a15208e4c0f71deec25ef89cdef3f", + "host": "i686-linux-gnu", + "archiveFileName": "avrdude-6.0.1-arduino2-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "241618", + "checksum": "SHA-256:6c5483800ba753c80893607e30cade8ab77b182808fcc5ea15fa3019c63d76ae", + "host": "i686-mingw32", + "archiveFileName": "avrdude-6.0.1-arduino2-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino2-i686-mingw32.zip" + } + ] + }, + { + "name": "avr-gcc", + "version": "4.8.1-arduino3", + "systems": [ + { + "size": "24447175", + "checksum": "SHA-256:28e207c66b3dc405367d0c5e68ce3c278e5ec3abb0e4974e7927fe0f9a532c40", + "host": "i386-apple-darwin11", + "archiveFileName": "avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i386-apple-darwin11.tar.bz2" + }, + { + "size": "30556996", + "checksum": "SHA-256:028340abec6eb3085b82404dfc7ed143e1bb05b2da961b539ddcdba4a6f65533", + "host": "x86_64-linux-gnu", + "archiveFileName": "avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "28768022", + "checksum": "SHA-256:37796548ba9653267568f959cd8c7ebfe5b4bce4599898cf9f876d64e616cb87", + "host": "i686-linux-gnu", + "archiveFileName": "avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "46046917", + "checksum": "SHA-256:d6f0527793f9800f060408392a99eb290ed205730edbae43a1a25cbf6b6b588f", + "host": "i686-mingw32", + "archiveFileName": "avr-gcc-4.8.1-arduino3-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino3-i686-mingw32.zip" + } + ] + }, + { + "name": "avrdude", + "version": "6.0.1-arduino3", + "systems": [ + { + "size": "264682", + "checksum": "SHA-256:df7cd4a76e45ab3767eb964f845f4d5e9d643df950ec32812923da1e9843d072", + "host": "i386-apple-darwin11", + "archiveFileName": "avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i386-apple-darwin11.tar.bz2" + }, + { + "size": "748634", + "checksum": "SHA-256:bb7bff48f20a68e1fe559c3f3f644574df12ab5c98eb6a1491079f3c760434ad", + "host": "x86_64-linux-gnu", + "archiveFileName": "avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "495482", + "checksum": "SHA-256:96a0cfb83fe0452366159e3bf4e19ff10906a8957d1feafd3d98b49ab4b14405", + "host": "i686-linux-gnu", + "archiveFileName": "avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "241619", + "checksum": "SHA-256:ea59bfc2ee85039c85318b2ba52c47ef0573513444a785b72f59b22586a950f9", + "host": "i686-mingw32", + "archiveFileName": "avrdude-6.0.1-arduino3-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino3-i686-mingw32.zip" + } + ] + }, + { + "name": "avr-gcc", + "version": "4.8.1-arduino5", + "systems": [ + { + "size": "24403768", + "checksum": "SHA-256:c8ffcd2db7a651b48ab4ea19db4b34fbae3e7f0210a0f294592af2bdabf2154b", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avr-gcc-4.8.1-arduino5-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "24437400", + "checksum": "SHA-256:111b3ef00d737d069eb237a8933406cbb928e4698689e24663cffef07688a901", + "host": "i386-apple-darwin11", + "archiveFileName": "avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2" + }, + { + "size": "27093036", + "checksum": "SHA-256:9054fcc174397a419ba56c4ce1bfcbcad275a6a080cc144905acc9b0351ee9cc", + "host": "x86_64-linux-gnu", + "archiveFileName": "avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "25882375", + "checksum": "SHA-256:7648b7f549b37191da0b0be53bae791b652f82ac3cb4e7877f85075aaf32141f", + "host": "i686-linux-gnu", + "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "46044779", + "checksum": "SHA-256:d4303226a7b41d3c445d901b5aa5903458def3fc7b7ff4ffef37cabeb37d424d", + "host": "i686-mingw32", + "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-mingw32.zip" + } + ] + }, + { + "name": "avrdude", + "version": "6.0.1-arduino5", + "systems": [ + { + "size": "267095", + "checksum": "SHA-256:23ea1341dbc117ec067f2eb1a498ad2bdd7d11fff0143c00b2e018c39804f6b4", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avrdude-6.0.1-arduino5-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "264894", + "checksum": "SHA-256:41af8d3b0a586853c8317b4fb5163ca0db594a1870ddf680fd988c42166fc3e5", + "host": "i386-apple-darwin11", + "archiveFileName": "avrdude-6.0.1-arduino5-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i386-apple-darwin11.tar.bz2" + }, + { + "size": "292629", + "checksum": "SHA-256:d826cca7383461f7e8adde686372cf900e9cb3afd639555cf2d6c645b283a476", + "host": "x86_64-linux-gnu", + "archiveFileName": "avrdude-6.0.1-arduino5-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "283121", + "checksum": "SHA-256:5933d66927bce46ababa9b68a8b7f1d53f68c4f3ff7a5ce4b85d7cf4e6c6bfee", + "host": "i686-linux-gnu", + "archiveFileName": "avrdude-6.0.1-arduino5-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "241634", + "checksum": "SHA-256:41f667f1f6a0ab8df46b4ffacd023176dcdef331d6db3b74bddd37d18cca0a44", + "host": "i686-mingw32", + "archiveFileName": "avrdude-6.0.1-arduino5-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avrdude-6.0.1-arduino5-i686-mingw32.zip" + } + ] + }, + { + "name": "avr-gcc", + "version": "4.9.2-atmel3.5.3-arduino", + "systems": [ + { + "size": "27046965", + "checksum": "SHA-256:adeee70be27cc3ee0e4b9e844610d9c534c7b21dae24ec3fa49808c2f04958de", + "host": "i386-apple-darwin11", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i386-apple-darwin11.tar.bz2" + }, + { + "size": "27400001", + "checksum": "SHA-256:02dba9ee77694c23a4c304416a3808949c8faedf07f25a225a4189d850615ec6", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "29904544", + "checksum": "SHA-256:0711e885c0430859e7fea3831af8c69a0c25f92a90ecfda9281799a0acec7455", + "host": "x86_64-linux-gnu", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "29077606", + "checksum": "SHA-256:fe0bb1d6369694779ceb671d457ccadbeafe855a11f6746b7db20055cea4df33", + "host": "i686-linux-gnu", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "43847566", + "checksum": "SHA-256:445ce3117e87be7e196809fbbea373976160689b6d4b43dbf185eb4c914d1469", + "host": "i686-mingw32", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino-i686-mingw32.zip" + } + ] + }, + { + "name": "avr-gcc", + "version": "4.9.2-atmel3.5.3-arduino2", + "systems": [ + { + "size": "27400889", + "checksum": "SHA-256:77f300d519bc6b9a25df17b36cb303218e9a258c059b2f6bff8f71a0d8f96821", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "27048070", + "checksum": "SHA-256:311258af188defe24a4b341e4e1f4dc93ca6c80516d3e3b55a2fc07a7050248b", + "host": "i386-apple-darwin11", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i386-apple-darwin11.tar.bz2" + }, + { + "size": "43847945", + "checksum": "SHA-256:f8e6ede8746c70be01ec79a30803277cd94360cc5b2e104762da0fbcf536fcc6", + "host": "i686-mingw32", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-mingw32.zip" + }, + { + "size": "29292729", + "checksum": "SHA-256:f108951e7c4dc90926d1fc76cc27549f6ea63c702a2bb7ff39647a19ae86ec68", + "host": "i686-linux-gnu", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "29882960", + "checksum": "SHA-256:3903a6d1bb9fdd91727e504b5993d5501f119bcb7f99f7aee98a2101e5629188", + "host": "x86_64-linux-gnu", + "archiveFileName": "avr-gcc-4.9.2-atmel3.5.3-arduino2-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avr-gcc-4.9.2-atmel3.5.3-arduino2-x86_64-pc-linux-gnu.tar.bz2" + } + ] + }, + { + "name": "avrdude", + "version": "6.3.0-arduino2", + "systems": [ + { + "size": "643484", + "checksum": "SHA-256:26af86137d8a872f64d217cb262734860b36fe26d6d34faf72e951042f187885", + "host": "arm-linux-gnueabihf", + "archiveFileName": "avrdude-6.3.0-arduino2-armhf-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-armhf-pc-linux-gnu.tar.bz2" + }, + { + "size": "653968", + "checksum": "SHA-256:32525ea3696c861030e1a6006a5f11971d1dad331e45bfa68dac35126476b04f", + "host": "i386-apple-darwin11", + "archiveFileName": "avrdude-6.3.0-arduino2-i386-apple-darwin11.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i386-apple-darwin11.tar.bz2" + }, + { + "size": "745081", + "checksum": "SHA-256:9635af5a35bdca11804c07582d7beec458140fb6e3308168c3deda18dc6790fa", + "host": "x86_64-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino2-x86_64-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-x86_64-pc-linux-gnu.tar.bz2" + }, + { + "size": "731802", + "checksum": "SHA-256:790b6cb610c48e73a2a0f65dcee9903d2fd7f1b0a1f75008a9a21f50a60c7251", + "host": "i686-linux-gnu", + "archiveFileName": "avrdude-6.3.0-arduino2-i686-pc-linux-gnu.tar.bz2", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i686-pc-linux-gnu.tar.bz2" + }, + { + "size": "608496", + "checksum": "SHA-256:8eaf98ea41fbd4450483488ef31710cbcc43c0412dbc8e1e1b582feaab6eca30", + "host": "i686-mingw32", + "archiveFileName": "avrdude-6.3.0-arduino2-i686-w64-mingw32.zip", + "url": "http://downloads.arduino.cc/tools/avrdude-6.3.0-arduino2-i686-w64-mingw32.zip" + } + ] + }, + { + "name": "bossac", + "version": "1.5-arduino", + "systems": [ + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-arm-linux-gnueabihf.tar.bz2", + "archiveFileName": "bossac-1.5-arduino2-arm-linux-gnueabihf.tar.bz2", + "checksum": "SHA-256:7b61b7814e5b57bcbd853439fc9cd3e98af4abfdd369bf039c6917f9599e44b9", + "size": "199550" + }, + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-mingw32.tar.gz", + "archiveFileName": "bossac-1.5-arduino2-mingw32.tar.gz", + "checksum": "SHA-256:9d849a34f0b26c25c6a8c4d741cd749dea238cade73b57a3048f248c431d9cc9", + "size": "222283" + }, + { + "host": "x86_64-apple-darwin", + "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-i386-apple-darwin14.3.0.tar.gz", + "archiveFileName": "bossac-1.5-arduino2-i386-apple-darwin14.3.0.tar.gz", + "checksum": "SHA-256:8f07e50a1f887cb254092034c6a4482d73209568cd83cb624d6625d66794f607", + "size": "64120" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.5-arduino2-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:42785329155dcb39872d4d30a2a9d31e0f0ce3ae7e34a3ed3d840cbc909c4657", + "size": "30431" + }, + { + "host": "i686-pc-linux-gnu", + "url": "http://downloads.arduino.cc/bossac-1.5-arduino2-i486-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.5-arduino2-i486-linux-gnu.tar.gz", + "checksum": "SHA-256:ac56e553bbd6d992fa5592ace90996806230ab582f2bf9f8590836fec9dabef6", + "size": "29783" + } + ] + }, + { + "name": "bossac", + "version": "1.6-arduino", + "systems": [ + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-mingw32.tar.gz", + "archiveFileName": "bossac-1.6-arduino-mingw32.tar.gz", + "checksum": "SHA-256:b59d64d3f7a43c894d0fba2dd1241bbaeefedf8c902130a24d8ec63b08f9ff6a", + "size": "222517" + }, + { + "host": "x86_64-apple-darwin", + "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-i386-apple-darwin14.4.0.tar.gz", + "archiveFileName": "bossac-1.6-arduino-i386-apple-darwin14.4.0.tar.gz", + "checksum": "SHA-256:6b3b686a782b6587c64c85db80085c9089c5ea1b051e49e5af17b3c6109c8efa", + "size": "64538" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.6-arduino-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:2ce7a54d609b4ce3b678147202b2556dd1ce5b318de48a018c676521b994c7a7", + "size": "30649" + }, + { + "host": "i686-pc-linux-gnu", + "url": "http://downloads.arduino.cc/tools/bossac-1.6-arduino-i486-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.6-arduino-i486-linux-gnu.tar.gz", + "checksum": "SHA-256:5c320bf5cfdbf03e3f648642e6de325e459a061fcf96b2215cb955263f7467b2", + "size": "30072" + } + ] + }, + { + "name": "bossac", + "version": "1.6.1-arduino", + "systems": [ + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", + "archiveFileName": "bossac-1.6.1-arduino-arm-linux-gnueabihf.tar.bz2", + "checksum": "SHA-256:8c4e63db982178919c824e7a35580dffc95c3426afa7285de3eb583982d4d391", + "size": "201341" + }, + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-mingw32.tar.gz", + "archiveFileName": "bossac-1.6.1-arduino-mingw32.tar.gz", + "checksum": "SHA-256:d59f43e2e83a337d04c4ae88b195a4ee175b8d87fff4c43144d23412a4a9513b", + "size": "222918" + }, + { + "host": "x86_64-apple-darwin", + "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-i386-apple-darwin14.5.0.tar.gz", + "archiveFileName": "bossac-1.6.1-arduino-i386-apple-darwin14.5.0.tar.gz", + "checksum": "SHA-256:2f80ef569a3fb19da60ab3489e49d8fe7d4699876acf30ff4938c632230a09aa", + "size": "64587" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.6.1-arduino-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:b78afc66c00ccfdd69a08bd3959c260a0c64ccce78a71d5a1135ae4437ff40db", + "size": "30869" + }, + { + "host": "i686-pc-linux-gnu", + "url": "http://downloads.arduino.cc/bossac-1.6.1-arduino-i486-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.6.1-arduino-i486-linux-gnu.tar.gz", + "checksum": "SHA-256:1e211347569d75193b337296a10dd25b0ce04419e3d7dc644355178b6b514f92", + "size": "30320" + } + ] + }, + { + "name": "openocd", + "version": "0.9.0-arduino", + "systems": [ + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-arm-linux-gnueabihf.tar.bz2", + "archiveFileName": "OpenOCD-0.9.0-dev-arduino-arm-linux-gnueabihf.tar.bz2", + "checksum": "SHA-256:a84e7c4cba853f2c937d77286f8a0ca317447d3873e51cbd2a2d41424e044a18", + "size": "1402283" + }, + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-i686-pc-cygwin.tar.bz2", + "archiveFileName": "OpenOCD-0.9.0-arduino-i686-pc-cygwin.tar.bz2", + "checksum": "SHA-256:5310bdd3730168a33b09b68558e908ca8b2fec25620c488f50a5fb35d0d1effd", + "size": "2360705" + }, + { + "host": "x86_64-apple-darwin", + "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-x86_64-apple-darwin14.3.0.tar.bz2", + "archiveFileName": "OpenOCD-0.9.0-arduino-x86_64-apple-darwin14.3.0.tar.bz2", + "checksum": "SHA-256:ef90769c07b8018cec3a5054e690ac6c196e03720e102ac5038c3f9da4e44782", + "size": "2275101" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-x86_64-linux-gnu.tar.bz2", + "archiveFileName": "OpenOCD-0.9.0-arduino-x86_64-linux-gnu.tar.bz2", + "checksum": "SHA-256:c350409f7badf213dfcc516ea34289461ad92d87806e8e33945508a2c6b2c0b3", + "size": "1210796" + }, + { + "host": "i686-pc-linux-gnu", + "url": "http://downloads.arduino.cc/tools/OpenOCD-0.9.0-arduino-i486-linux-gnu.tar.bz2", + "archiveFileName": "OpenOCD-0.9.0-arduino-i486-linux-gnu.tar.bz2", + "checksum": "SHA-256:4c9793dfd7822b0fc959d039e5ecabfa89092ee2911abfdc7b5905deb171499a", + "size": "1129654" + } + ] + }, + { + "name": "CMSIS", + "version": "4.0.0-atmel", + "systems": [ + { + "host": "arm-linux-gnueabihf", + "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", + "archiveFileName": "CMSIS-4.0.0.tar.bz2", + "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", + "size": "17642623" + }, + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", + "archiveFileName": "CMSIS-4.0.0.tar.bz2", + "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", + "size": "17642623" + }, + { + "host": "x86_64-apple-darwin", + "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", + "archiveFileName": "CMSIS-4.0.0.tar.bz2", + "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", + "size": "17642623" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", + "archiveFileName": "CMSIS-4.0.0.tar.bz2", + "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", + "size": "17642623" + }, + { + "host": "i686-pc-linux-gnu", + "url": "http://downloads.arduino.cc/CMSIS-4.0.0.tar.bz2", + "archiveFileName": "CMSIS-4.0.0.tar.bz2", + "checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7", + "size": "17642623" + } + ] + }, + { + "name": "windows-drivers", + "version": "1.6.9", + "systems": [ + { + "host": "i686-mingw32", + "url": "http://downloads.arduino.cc/tools/drivers-arduino-windows-1.6.9.zip", + "archiveFileName": "drivers-arduino-windows-1.6.9.zip", + "checksum": "SHA-256:10d456ab18d164d42545255db8bef4ac9e1bf660cc89acb7a0980b5a486654ac", + "size": "7071714" + } + ] + } + ] + }, + { + "email": "support@intel.com", + "maintainer": "Intel", + "websiteURL": "http://maker.intel.com/", + "name": "Intel", + "platforms": [ + { + "name": "Intel i586 Boards", + "version": "1.6.2+1.0", + "category": "Arduino Certified", + "architecture": "i586", + "url": "https://github.com/01org/corelibs-galileo/archive/1.6.2+1.0.tar.gz", + "archiveFileName": "corelibs-galileo-1.6.2.tar.gz", + "checksum": "SHA-256:e20d62b0dccf0d68dbb61d70b866d77134b770b226d6046a61c7e8d55e64e53a", + "size": "272961", + "boards": [ + { + "name": "Galileo" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "name": "i586-poky-linux-uclibc", + "version": "1.6.2+1.0" + }, + { + "packager": "Intel", + "name": "sketchUploader", + "version": "1.6.2+1.0" + } + ] + }, + { + "name": "Intel i686 Boards", + "version": "1.6.2+1.0", + "category": "Arduino Certified", + "architecture": "i686", + "url": "https://github.com/01org/corelibs-edison/archive/1.6.2+1.0.tar.gz", + "archiveFileName": "corelibs-edison-1.6.2.tar.gz", + "checksum": "SHA-256:538ab8553f832f56b04df80d44992ecc994b9c296f3fce6902832d97f99811a8", + "size": "271420", + "boards": [ + { + "name": "Edison" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "name": "core2-32-poky-linux", + "version": "1.6.2+1.0" + }, + { + "packager": "Intel", + "name": "sketchUploader", + "version": "1.6.2+1.0" + } + ] + }, + { + "name": "Intel i586 Boards", + "version": "1.6.7+1.0", + "category": "Arduino Certified", + "architecture": "i586", + "url": "https://github.com/01org/corelibs-galileo/archive/1.6.7+1.0.tar.gz", + "archiveFileName": "corelibs-galileo-1.6.7.tar.gz", + "checksum": "SHA-256:4d161dde4c95ef8ebc264ca444ee6d1baaee70f9fd416e5f234f3f5cdd4ee028", + "size": "273392", + "boards": [ + { + "name": "Galileo" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "name": "i586-poky-linux-uclibc", + "version": "1.6.2+1.0" + }, + { + "packager": "Intel", + "name": "sketchUploader", + "version": "1.6.2+1.0" + } + ] + }, + { + "name": "Intel i686 Boards", + "version": "1.6.7+1.0", + "category": "Arduino Certified", + "architecture": "i686", + "url": "https://github.com/01org/corelibs-edison/archive/1.6.7+1.0.tar.gz", + "archiveFileName": "corelibs-edison-1.6.7.tar.gz", + "checksum": "SHA-256:2b630b4986c4c7543946eef339ab8d08ed23d28aa6428d27f5b464ad2331a3f1", + "size": "272002", + "boards": [ + { + "name": "Edison" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "name": "core2-32-poky-linux", + "version": "1.6.2+1.0" + }, + { + "packager": "Intel", + "name": "sketchUploader", + "version": "1.6.2+1.0" + } + ] + }, + { + "name": "Intel Curie Boards", + "version": "1.0.4", + "category": "Arduino Certified", + "architecture": "arc32", + "url": "https://github.com/01org/corelibs-arduino101/archive/1.6.4+1.59.zip", + "archiveFileName": "arduino101-1.0.4.zip", + "checksum": "SHA-256:af0a3f4dac320892de6f7c93429a70bf9a5d9ecf742047e3365f8132dc2b2faa", + "size": 807984, + "boards": [ + { + "name": "Arduino 101" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "version": "1.6.4+1.0", + "name": "arc-elf32" + }, + { + "packager": "Intel", + "version": "1.6.4+1.14", + "name": "sketchUploader" + } + ] + }, + { + "name": "Intel Curie Boards", + "version": "1.0.5", + "category": "Arduino Certified", + "architecture": "arc32", + "url": "https://github.com/01org/corelibs-arduino101/archive/1.6.4+1.68.zip", + "archiveFileName": "arduino101-1.0.5.zip", + "checksum": "SHA-256:741c970190d67401a0045c1c4929dc30ca1fd58e076c567e66d2de2bf1d77419", + "size": 778432, + "boards": [ + { + "name": "Arduino/Genuino 101" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "version": "1.6.4+1.0", + "name": "arc-elf32" + }, + { + "packager": "Intel", + "version": "1.6.4+1.18", + "name": "arduino101load" + } + ] + }, + { + "name": "Intel Curie Boards", + "version": "1.0.6", + "category": "Arduino Certified", + "archiveFileName": "arduino101-1.0.6.zip", + "architecture": "arc32", + "url": "https://github.com/01org/corelibs-arduino101/archive/1.6.9+1.74.zip", + "checksum": "SHA-256:c3d34679c18b34411bcfd55e09d3403ff372ff1ca1c6dcd26ec6b08f2b88fd7f", + "size": 673874, + "boards": [ + { + "name": "Arduino/Genuino 101" + } + ], + "toolsDependencies": [ + { + "packager": "Intel", + "version": "1.6.9+1.0.1", + "name": "arc-elf32" + }, + { + "packager": "Intel", + "version": "1.6.9+1.24", + "name": "arduino101load" + } + ] + } + ], + "tools": [ + { + "name": "i586-poky-linux-uclibc", + "version": "1.6.2+1.0", + "systems": [ + { + "size": "30587705", + "checksum": "SHA-256:5b705d26dc1d8ca8953df6e0c08dcc8584d5be77b584d561f631360fd166677c", + "host": "i386-apple-darwin11", + "archiveFileName": "galileo-toolchain-20150323-osx.tar.bz2", + "url": "http://downloadmirror.intel.com/24806/eng/galileo-toolchain-osx-1.6.2-1.0.tar.bz2" + }, + { + "size": "45948648", + "checksum": "SHA-256:821eb290d7c668c1caa74da30903c13843edc746d41508b35161622ae6279b56", + "host": "i686-mingw32", + "archiveFileName": "galileo-toolchain-20150323-windows.zip", + "url": "http://downloadmirror.intel.com/24806/eng/galileo-toolchain-windows-1.6.2-1.0.zip" + }, + { + "size": "56227185", + "checksum": "SHA-256:935ccad3eaaec34f5de76eceb0f0ecd1372bdab0b7dc8f4241e8260c6f827b72", + "host": "x86_64-linux-gnu", + "archiveFileName": "galileo-toolchain-20150316-linux64.tar.bz2", + "url": "http://downloadmirror.intel.com/24806/eng/galileo-toolchain-linux64-1.6.2-1.0.tar.bz2" + }, + { + "size": "55098166", + "checksum": "SHA-256:1dab7f21e10d0208a6dd2897c36c6f5f55f9372b947225d2b59c3c4ab4777d03", + "host": "i686-linux-gnu", + "archiveFileName": "galileo-toolchain-20150316-linux32.tar.bz2", + "url": "http://downloadmirror.intel.com/24806/eng/galileo-toolchain-linux32-1.6.2-1.0.tar.bz2" + } + ] + }, + { + "name": "core2-32-poky-linux", + "version": "1.6.2+1.0", + "systems": [ + { + "size": "42720934", + "checksum": "SHA-256:fac0b3f00a33ee0531ea0da6d517c170409e25bd5e59f6f3db9506974336375d", + "host": "i386-apple-darwin11", + "archiveFileName": "edison-toolchain-20150323-osx.tar.bz2", + "url": "http://downloadmirror.intel.com/24806/eng/edison-toolchain-osx-1.6.2-1.0.tar.bz2" + }, + { + "size": "56683094", + "checksum": "SHA-256:5a9a1b51f0fa18bf21e1dcf1332d34331dd435c5ca0d1fe008e68e13cb3255e5", + "host": "i686-mingw32", + "archiveFileName": "edison-toolchain-20150323-windows.zip", + "url": "http://downloadmirror.intel.com/24806/eng/edison-toolchain-windows-1.6.2-1.0.zip" + }, + { + "size": "78998436", + "checksum": "SHA-256:e3443e7832732f2189fd424e4868d2ebb563e823addb2321a6e8a86a9fced193", + "host": "x86_64-linux-gnu", + "archiveFileName": "edison-toolchain-20150316-linux64.tar.bz2", + "url": "http://downloadmirror.intel.com/24806/eng/edison-toolchain-linux64-1.6.2-1.0.tar.bz2" + }, + { + "size": "76488215", + "checksum": "SHA-256:014d1bdc40bb080987c736d04ffd42cdc0d2c3cad001891fb01555dac04296f7", + "host": "i686-linux-gnu", + "archiveFileName": "edison-toolchain-20150316-linux32.tar.bz2", + "url": "http://downloadmirror.intel.com/24806/eng/edison-toolchain-linux32-1.6.2-1.0.tar.bz2" + } + ] + }, + { + "name": "arc-elf32", + "version": "1.6.4+1.0", + "systems": [ + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-windows-arcem.zip", + "checksum": "SHA-256:d7a3700e8762c656da66b1f85967ef1992c2473cee5bfc06b23aacfef7867435", + "host": "i686-mingw32", + "archiveFileName": "arc-toolchain-windows-arcem.zip", + "size": 218816528 + }, + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-osx-arcem.tar.bz2", + "checksum": "SHA-256:3818fbc4cfbb8bc826ae33f6869413463849a889e53b4e27da365f2489699ec1", + "host": "i386-apple-darwin11", + "archiveFileName": "arc-toolchain-osx-arcem.tar.bz2", + "size": 78371400 + }, + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-linux32-arcem.tar.bz2", + "checksum": "SHA-256:cb49a8b6a2d55712a0750813d56f8271d712252907fcd82b0cf690321be0d663", + "host": "i686-linux-gnu", + "archiveFileName": "arc-toolchain-linux32-arcem.tar.bz2", + "size": 182899676 + }, + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-linux64-arcem.tar.bz2", + "checksum": "SHA-256:0b538ae361b02a6329e00a009962c3bad91c48b07c78bb6343ffc6c19475e1a8", + "host": "x86_64-linux-gnu", + "archiveFileName": "arc-toolchain-linux64-arcem.tar.bz2", + "size": 177840353 + } + ] + }, + { + "name": "arc-elf32", + "version": "1.6.9+1.0.1", + "systems": [ + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-windows-arcem-1.0.1.zip", + "checksum": "SHA-256:59614534473a55b1d964e1f4fa14f5e01e6aaa426d1e8319a8293ffa6576f58e", + "host": "i686-mingw32", + "archiveFileName": "arc-toolchain-windows-arcem-1.0.1.zip", + "size": 172455793 + }, + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-osx-arcem-1.0.1.tar.bz2", + "checksum": "SHA-256:456995157cf1549073b9330a114abb25f056352278c107e25b3cc79443040a44", + "host": "i386-apple-darwin11", + "archiveFileName": "arc-toolchain-osx-arcem-1.0.1.tar.bz2", + "size": 30014953 + }, + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-linux32-arcem-1.0.1.tar.bz2", + "checksum": "SHA-256:6aa92f239998d10992592cc16a16352bb1cce75a6bff1c72b8be18d939182915", + "host": "i686-linux-gnu", + "archiveFileName": "arc-toolchain-linux32-arcem-1.0.1.tar.bz2", + "size": 116481978 + }, + { + "url": "https://downloadmirror.intel.com/25470/eng/arc-toolchain-linux64-arcem-1.0.1.tar.bz2", + "checksum": "SHA-256:0ee03cecc27471eae58cb557a105c5edaea45b49557c86867fa436a13681392c", + "host": "x86_64-linux-gnu", + "archiveFileName": "arc-toolchain-linux64-arcem-1.0.1.tar.bz2", + "size": 129250679 + } + ] + }, + { + "name": "sketchUploader", + "version": "1.6.2+1.0", + "systems": [ + { + "size": "61789", + "checksum": "SHA-256:8395ccb57c627f997fe01170df4613de906f48c6ce99623b9ca42806079c28ad", + "host": "i386-apple-darwin11", + "archiveFileName": "intel-arduino-tools-20150316-osx.tar.gz", + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.2+1.0-osx.tar.gz" + }, + { + "size": "2534586", + "checksum": "SHA-256:c32d1ae4cde190242eef95122d20dbcb5da226e7de6c567079a1c8c292267ae5", + "host": "i686-mingw32", + "archiveFileName": "intel-arduino-tools-20150316-windows.zip", + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.2+1.0-windows.zip" + }, + { + "size": "178239", + "checksum": "SHA-256:2876db4153db22609d2f6c9c3bfb198efbb9d9574edad579aca7d58cff9d2cca", + "host": "x86_64-linux-gnu", + "archiveFileName": "intel-arduino-tools-20150316-linux64.tar.gz", + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.2+1.0-linux64.tar.gz" + }, + { + "size": "187995", + "checksum": "SHA-256:20d87602d0194be626f592d3f2bdc9566a5a897786b042393482ef4c26ae158c", + "host": "i686-linux-gnu", + "archiveFileName": "intel-arduino-tools-20150316-linux32.tar.gz", + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.2+1.0-linux32.tar.gz" + } + ] + }, + { + "version": "1.6.4+1.14", + "name": "sketchUploader", + "systems": [ + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.14-windows.zip", + "checksum": "SHA-256:694cc2e85bca897f2c5bf867d16f11ae4e93134e329a08079a41a83fa9fd7beb", + "host": "i686-mingw32", + "archiveFileName": "1.6.4+1.14-windows.zip", + "size": 8239124 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.14-osx.tar.gz", + "checksum": "SHA-256:cd9c81e72667f42fca2047b12da330917607d2f2412772758d3b25565f61cb61", + "host": "i386-apple-darwin11", + "archiveFileName": "1.6.4+1.14-osx.tar.gz", + "size": 324645 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.14-linux32.tar.gz", + "checksum": "SHA-256:8bd55d901ef26f89a2e0e67551eb966de2b3bd90504d8204bd200510b85e1a9b", + "host": "i686-linux-gnu", + "archiveFileName": "1.6.4+1.14-linux32.tar.gz", + "size": 224137 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.14-linux64.tar.gz", + "checksum": "SHA-256:2da8ac969f6e1731adfe0802d015891109b834fdedfa5ca199742d5439b4f038", + "host": "x86_64-linux-gnu", + "archiveFileName": "1.6.4+1.14-linux64.tar.gz", + "size": 216542 + } + ] + }, + { + "version": "1.6.4+1.18", + "name": "arduino101load", + "systems": [ + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.19-windows.zip", + "checksum": "SHA-256:66c184ed5b045ba262ee86e17eb00280ebb6407b73b21979186ccc2270624bf7", + "host": "i686-mingw32", + "archiveFileName": "1.6.4+1.19-windows.zip", + "size": 9367650 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.18-osx.tar.gz", + "checksum": "SHA-256:c698ced53fe27030dfae9d198cc550357bf130ede204d6ccac5eaac8c15e159a", + "host": "i386-apple-darwin11", + "archiveFileName": "1.6.4+1.18-osx.tar.gz", + "size": 1236355 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.18-linux32.tar.gz", + "checksum": "SHA-256:96a9a3c9306b2ddcdecf96db64d7640c76422626a12488ef90ecd1ecdf451f3c", + "host": "i686-linux-gnu", + "archiveFileName": "1.6.4+1.18-linux32.tar.gz", + "size": 1269508 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.4+1.18-linux64.tar.gz", + "checksum": "SHA-256:0e7a9c95a4b8ed9dbd9b3e2dcd00cb22c0f41a0090efe7f144cdf6fc94eb2a19", + "host": "x86_64-linux-gnu", + "archiveFileName": "1.6.4+1.18-linux64.tar.gz", + "size": 1467166 + } + ] + }, + { + "version": "1.6.9+1.24", + "name": "arduino101load", + "systems": [ + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.9+1.24-windows.zip", + "checksum": "SHA-256:b531d93a8aa5dcb3e9338c553060f71835e6530639106e6976ca8d9dea0039b0", + "host": "i686-mingw32", + "archiveFileName": "arduino101load-1.6.9+1.24-windows.zip", + "size": 9418690 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.9+1.24-osx.tar.gz", + "checksum": "SHA-256:b927e7996f48d861d803b911317062b345fa631c4fbe2f85f2a0dcb651508e92", + "host": "i386-apple-darwin11", + "archiveFileName": "arduino101load-1.6.9+1.24-osx.tar.gz", + "size": 1241701 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.9+1.24-linux32.tar.gz", + "checksum": "SHA-256:db418197f6b4fbdc104b682fc4137cd955681af1d12147a663054e7f352a3785", + "host": "i686-linux-gnu", + "archiveFileName": "arduino101load-1.6.9+1.24-linux32.tar.gz", + "size": 1305107 + }, + { + "url": "https://github.com/01org/intel-arduino-tools/archive/1.6.9+1.24-linux64.tar.gz", + "checksum": "SHA-256:b7723d8edac0ed957304dc2e275a5628f6602962b93863f32cc1986e1c2ee6ab", + "host": "x86_64-linux-gnu", + "archiveFileName": "arduino101-1.6.9+1.24-linux64.tar.gz", + "size": 1507392 + } + ] + } + ] + }, + { + "name": "atmel-avr-xminis", + "maintainer": "Atmel University France", + "websiteURL": "https://github.com/AtmelUniversityFrance/atmel-avr-xmini-boardmanagermodule/wiki", + "help": + { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": + [ + { + "name": "Atmel AVR Xplained-minis", + "architecture": "avr", + "version": "0.3.0", + "category": "Partner", + "url": "https://github.com/AtmelUniversityFrance/atmel-avr-xmini-boardmanagermodule/releases/download/v0.3.0/atmel-avr-xmini-boardmanagermodule-0.3.0.tar.bz2", + "archiveFileName": "atmel-avr-xmini-boardmanagermodule-0.3.0.tar.bz2", + "checksum": "SHA-256:3bf7739682bdd86c8e8e566769429e424859f23022664295f800df489c782f18", + "size": "95352", + "boards": [ + { + "name": "atmega168pb-xmini" + }, + { + "name": "atmega328pb-xmini" + }, + { + "name": "atmega328p-xmini" + } + ], + "toolsDependencies": + [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + } + ], + "tools": + [ + ] + }, + { + "name":"littleBits", + "maintainer":"littleBits Electronics", + "websiteURL":"http://www.littlebits.cc/bits/w6-arduino", + "email":"support@littlebits.cc", + "help":{ + "online":"http://www.littlebits.cc/arduino-help" + }, + "platforms":[ + { + "name":"littleBits Arduino AVR Modules", + "architecture":"avr", + "version":"1.0.0", + "category": "Arduino@Heart", + "url": "http://downloads.arduino.cc/cores/littlebits-avr-1.0.0.tar.bz2", + "archiveFileName":"littlebits-avr-1.0.0.tar.bz2", + "checksum":"SHA-256:8B867B8E89718B405231681CF9091F24372FAEF8B5B9FFBFBCF2486E3D9B5324", + "size":"27762", + "help":{ + "online":"http://www.littlebits.cc/arduino-help" + }, + "boards":[ + { "name":"littleBits w6 Arduino module" } + ], + "toolsDependencies":[ + { "packager":"arduino", "name":"avr-gcc", "version":"4.8.1-arduino5" }, + { "packager":"arduino", "name":"avrdude", "version":"6.0.1-arduino5" } + ] + } + ], + "tools":[] + }, + { + "name": "Microsoft", + "maintainer": "Microsoft.IoT", + "websiteURL": "https://github.com/ms-iot/iot-utilities/tree/master/IotCoreAppDeployment/ArduinoIde/", + "email": "bfjelds@microsoft.com", + "help": { + "online": "http://developer.microsoft.com/en-us/windows/iot/IotCoreAppDeployment_ArduinoIde.htm" + }, + "platforms": [ + { + "name": "Windows 10 Iot Core", + "architecture": "win10", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://developer.microsoft.com/en-us/windows/iot/IotCoreAppDeployment_ArduinoIde.htm" + }, + "url": "https://github.com/ms-iot/iot-utilities/raw/master/IotCoreAppDeployment/ArduinoIde/release/win10_iotcore-1.0.0_ide-1.6.6.zip", + "archiveFileName": "win10_iotcore-1.0.0_ide-1.6.6.zip", + "checksum": "SHA-256:ed1b42b396217e242cd3a5b597ad5dad5957cb8117dd0f972376bafab7d8a0e5", + "size": "47325480", + "help": { + "online": "http://developer.microsoft.com/en-us/windows/iot/IotCoreAppDeployment_ArduinoIde.htm" + }, + "boards": [ + {"name": "Windows 10 IoT Core"} + ], + "toolsDependencies":[] + }, + { + "name": "Windows 10 Iot Core", + "architecture": "win10", + "version": "1.1.0", + "category": "Contributed", + "help": { + "online": "http://developer.microsoft.com/en-us/windows/iot/IotCoreAppDeployment_ArduinoIde.htm" + }, + "url": "https://github.com/ms-iot/iot-utilities/raw/master/IotCoreAppDeployment/ArduinoIde/release/win10_iotcore-1.1.0_ide-1.6.6.zip", + "archiveFileName": "win10_iotcore-1.1.0_ide-1.6.6.zip", + "checksum": "SHA-256:683dcb0a72e80b9d21117f6471e0860d8cc35cd9b86557ba6fd1ed255952413e", + "size": "48316890", + "help": { + "online": "http://developer.microsoft.com/en-us/windows/iot/IotCoreAppDeployment_ArduinoIde.htm" + }, + "boards": [ + {"name": "Windows 10 IoT Core"} + ], + "toolsDependencies":[] + } + ], + "tools":[] + }, + { + "name": "Arrow", + "maintainer": "Axel Elettronica S.r.l.", + "websiteURL": "http://axelelettronica.it/", + "email": "development@axelelettronica.it", + "help": { + "online": "http://www.arrowsmarteverything.com/support/" + }, + "platforms": [ + { + "name": "Arrow Boards", + "architecture": "samd", + "version": "1.2.0", + "category": "Partner", + "url": "http://downloads.arduino.cc/cores/Arrow-samd-1.2.0.tar.bz2", + "archiveFileName": "Arrow-samd-1.2.0.tar.bz2", + "checksum": "SHA-256:1d1cd66eb9986ed60a45b6554b8dcbf168401339c8a06bcf45c1b6ee2efa0943", + "size": "36575", + "boards": [ + {"name": "SmartEverything Fox"}, + {"name": "SmartTutto"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.5-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + } + ], + "tools": [ + ] + }, + { + "name": "emoro", + "maintainer": "Inovatic-ICT", + "websiteURL": "http://www.inovatic-ict.com/", + "email": "support@inovatic-ict.com", + "help": { + "online": "http://www.inovatic-ict.com/" + }, + "platforms": [ + { + "name": "EMORO 2560", + "architecture": "avr", + "version": "3.2", + "category": "Arduino@Heart", + "url": "http://downloads.arduino.cc/cores/EMoRo_2560.zip", + "archiveFileName": "EMoRo_2560.zip", + "checksum": "SHA-256:8DFC8BB1AD9F573BF355AFAB1D4231F81E42345E1DD4AC98E4B74019BFD699D3", + "size": "846949", + "boards": [ + {"name": "EMoRo 2560"} + ], + "toolsDependencies": [ + ] + } + ], + "tools": [ + ] + }, + { + "name": "AMEL", + "maintainer": "replaced by Arrow Boards", + "websiteURL": "http://www.amel-tech.com", + "email": "dev@amel-tech.com", + "help": { + "online": "http://www.amel-tech.com" + }, + "platforms": [ + { + "name": "AMEL-Tech Boards", + "architecture": "samd", + "version": "1.0.0", + "category": "Partner", + "url": "http://downloads.arduino.cc/cores/AMEL-samd-1.0.0.tar.bz2", + "archiveFileName": "AMEL-samd-1.0.0.tar.bz2", + "checksum": "SHA-256:5399602a89cba1e5371d3c4b2ae17648b6c9f691454a46a58bc0e68b30ab60da", + "size": "59673", + "boards": [ + {"name": "SmartEverything Fox"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.5-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + }, + { + "name": "AMEL-Tech Boards", + "architecture": "samd", + "version": "1.1.0", + "category": "Partner", + "url": "http://downloads.arduino.cc/cores/AMEL-samd-1.1.0.tar.bz2", + "archiveFileName": "AMEL-samd-1.1.0.tar.bz2", + "checksum": "SHA-256:4bfc5f40e1456f600aa86745dab53d5df9fac8e15bcd977ca181d0a9f1cf1ed8", + "size": "36575", + "boards": [ + {"name": "SmartEverything Fox"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "arduino", + "name": "bossac", + "version": "1.5-arduino" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.0.0-atmel" + } + ] + } + ], + "tools": [ + ] + } + ] +} diff --git a/setup_build_properties.go b/setup_build_properties.go index b18d643a..664e02e5 100644 --- a/setup_build_properties.go +++ b/setup_build_properties.go @@ -93,6 +93,7 @@ func (s *SetupBuildProperties) Run(ctx *types.Context) error { for _, tool := range tools { buildProperties[constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX+tool.Name+constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX] = tool.Folder buildProperties[constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX+tool.Name+"-"+tool.Version+constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX] = tool.Folder + buildProperties[constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX+tool.Name+"-"+tool.Vendor+"-"+tool.Version+constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX] = tool.Folder } if !utils.MapStringStringHas(buildProperties, constants.BUILD_PROPERTIES_SOFTWARE) { diff --git a/src/arduino.cc/json_package_index/testdata/package_attiny_index.json b/src/arduino.cc/json_package_index/testdata/package_attiny_index.json new file mode 100644 index 00000000..24af5883 --- /dev/null +++ b/src/arduino.cc/json_package_index/testdata/package_attiny_index.json @@ -0,0 +1,105 @@ +{ + "packages": [ + { + "name": "attiny", + "maintainer": "David A. Mellis", + "websiteURL": "https://github.com/damellis/attiny", + "email": "", + "help": { + "online": "" + }, + "platforms": [ + { + "name": "attiny", + "architecture": "avr", + "version": "1.0.0", + "category": "attiny", + "help": { + "online": "" + }, + "url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip", + "checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5", + "size": "5005", + "boards": [ + {"name": "ATtiny45"}, + {"name": "ATtiny85"}, + {"name": "ATtiny44"}, + {"name": "ATtiny84"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "attiny", + "architecture": "avr", + "version": "1.0.1", + "category": "attiny", + "help": { + "online": "" + }, + "url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip", + "checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1", + "size": "5719", + "boards": [ + {"name": "ATtiny45"}, + {"name": "ATtiny85"}, + {"name": "ATtiny44"}, + {"name": "ATtiny84"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] + }, + { + "name": "attiny", + "architecture": "avr", + "version": "1.0.2", + "category": "attiny", + "help": { + "online": "" + }, + "url": "https://github.com/damellis/attiny/archive/6bba7d452af59d5190025bc870ec9e53d170e4d9.zip", + "archiveFileName": "6bba7d452af59d5190025bc870ec9e53d170e4d9.zip", + "checksum": "SHA-256:1654a8968fea7d599255bd18430786f9c84340606e7a678b9cf9a3cd49d94ad7", + "size": "5913", + "boards": [ + {"name": "ATtiny25"}, + {"name": "ATtiny45"}, + {"name": "ATtiny85"}, + {"name": "ATtiny24"}, + {"name": "ATtiny44"}, + {"name": "ATtiny84"} + ], + "coreDependencies": [ + { + "packager": "arduino", + "name": "avr" + } + ] + } + ], + "tools": [] + } + ] +} \ No newline at end of file diff --git a/test/add_build_board_property_if_missing_test.go b/test/add_build_board_property_if_missing_test.go index 34f74b51..3428ca5a 100644 --- a/test/add_build_board_property_if_missing_test.go +++ b/test/add_build_board_property_if_missing_test.go @@ -30,12 +30,14 @@ package test import ( + "path/filepath" + "testing" + "github.com/arduino/arduino-builder" "github.com/arduino/arduino-builder/constants" + "github.com/arduino/arduino-builder/json_package_index" "github.com/arduino/arduino-builder/types" "github.com/stretchr/testify/require" - "path/filepath" - "testing" ) func TestAddBuildBoardPropertyIfMissing(t *testing.T) { @@ -95,3 +97,71 @@ func TestAddBuildBoardPropertyIfMissingNotMissing(t *testing.T) { require.Equal(t, "atmega2560", targetBoard.Properties[constants.BUILD_PROPERTIES_BUILD_MCU]) require.Equal(t, "AVR_MEGA2560", targetBoard.Properties[constants.BUILD_PROPERTIES_BUILD_BOARD]) } + +func TestCoreDependencyProperty(t *testing.T) { + var paths []string + path, _ := filepath.Abs(filepath.Join("..", "..", "json_package_index", "testdata")) + paths = append(paths, path) + + DownloadCoresAndToolsAndLibraries(t) + + ctx := &types.Context{ + HardwareFolders: []string{filepath.Join("..", "hardware"), "hardware", "downloaded_hardware"}, + } + + commands := []types.Command{ + &builder.HardwareLoader{}, + } + + for _, command := range commands { + err := command.Run(ctx) + NoError(t, err) + } + + p, err := json_package_index.PackageIndexFoldersToPropertiesMap(ctx.Hardware, paths, []string{"package_index.json"}) + require.NoError(t, err) + + version := ctx.Hardware.Packages["arduino"].Platforms["avr"].Properties["version"] + + if json_package_index.CompareVersions(version, "1.6.12") >= 0 { + require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", p["attiny:avr:1.0.2"]["runtime.tools.avr-gcc.path"]) + } else { + require.Equal(t, "{runtime.tools.avr-gcc-4.8.1-arduino5.path}", p["attiny:avr:1.0.2"]["runtime.tools.avr-gcc.path"]) + } +} + +func TestCoreOutOfBoardManagerDependencyProperty(t *testing.T) { + var paths []string + path, _ := filepath.Abs(filepath.Join("..", "..", "json_package_index", "testdata")) + paths = append(paths, path) + + DownloadCoresAndToolsAndLibraries(t) + + ctx := &types.Context{ + HardwareFolders: []string{filepath.Join("..", "hardware"), "hardware", "downloaded_hardware", "user_hardware"}, + ToolsFolders: []string{"downloaded_tools"}, + FQBN: "my_avr_platform:avr:mymega:cpu=atmega2560", + } + + commands := []types.Command{ + &builder.HardwareLoader{}, + &builder.ToolsLoader{}, + &builder.TargetBoardResolver{}, + &builder.AddBuildBoardPropertyIfMissing{}, + &builder.SetupBuildProperties{}, + &builder.OverridePropertiesWithJsonInfo{}, + } + + for _, command := range commands { + err := command.Run(ctx) + NoError(t, err) + } + + version := ctx.Hardware.Packages["arduino"].Platforms["avr"].Properties["version"] + + if json_package_index.CompareVersions(version, "1.6.12") >= 0 { + require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", ctx.BuildProperties["runtime.tools.avr-gcc.path"]) + } else { + require.Equal(t, ctx.BuildProperties["runtime.tools.avr-gcc-4.8.1-arduino5.path"], ctx.BuildProperties["runtime.tools.avr-gcc.path"]) + } +} diff --git a/test/setup_build_properties_test.go b/test/setup_build_properties_test.go index c8d39a91..2c05f4f2 100644 --- a/test/setup_build_properties_test.go +++ b/test/setup_build_properties_test.go @@ -88,10 +88,10 @@ func TestSetupBuildProperties(t *testing.T) { require.Equal(t, Abs(t, "./downloaded_tools/bossac/1.6.1-arduino"), buildProperties["runtime.tools.bossac-1.6.1-arduino.path"]) require.Equal(t, Abs(t, "./downloaded_tools/bossac/1.5-arduino"), buildProperties["runtime.tools.bossac-1.5-arduino.path"]) require.True(t, buildProperties["runtime.tools.bossac.path"] == Abs(t, "./downloaded_tools/bossac/1.6.1-arduino") || buildProperties["runtime.tools.bossac.path"] == Abs(t, "./downloaded_tools/bossac/1.5-arduino")) - require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude.path"]) - require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude-6.0.1-arduino5.path"]) - require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc.path"]) - require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc-4.8.1-arduino5.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude-6.0.1-arduino5.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc-4.8.1-arduino5.path"]) require.Equal(t, Abs(t, "sketch1"), buildProperties[constants.BUILD_PROPERTIES_SOURCE_PATH]) @@ -223,10 +223,10 @@ func TestSetupBuildPropertiesWithMissingPropsFromParentPlatformTxtFiles(t *testi require.Equal(t, Abs(t, "./downloaded_tools/bossac/1.6.1-arduino"), buildProperties["runtime.tools.bossac-1.6.1-arduino.path"]) require.Equal(t, Abs(t, "./downloaded_tools/bossac/1.5-arduino"), buildProperties["runtime.tools.bossac-1.5-arduino.path"]) require.True(t, buildProperties["runtime.tools.bossac.path"] == Abs(t, "./downloaded_tools/bossac/1.6.1-arduino") || buildProperties["runtime.tools.bossac.path"] == Abs(t, "./downloaded_tools/bossac/1.5-arduino")) - require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude.path"]) - require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude-6.0.1-arduino5.path"]) - require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc.path"]) - require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc-4.8.1-arduino5.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), buildProperties["runtime.tools.avrdude-6.0.1-arduino5.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc.path"]) + //require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), buildProperties["runtime.tools.avr-gcc-4.8.1-arduino5.path"]) require.Equal(t, Abs(t, "sketch1"), buildProperties[constants.BUILD_PROPERTIES_SOURCE_PATH]) diff --git a/test/tools_loader_test.go b/test/tools_loader_test.go index 3507afe8..5aa7b817 100644 --- a/test/tools_loader_test.go +++ b/test/tools_loader_test.go @@ -64,7 +64,7 @@ func TestLoadTools(t *testing.T) { NoError(t, err) tools := ctx.Tools - require.Equal(t, 6, len(tools)) + require.Equal(t, 8, len(tools)) sort.Sort(ByToolIDAndVersion(tools)) @@ -77,10 +77,18 @@ func TestLoadTools(t *testing.T) { require.Equal(t, "4.8.1-arduino5", tools[idx].Version) require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), tools[idx].Folder) idx++ + require.Equal(t, "avr-gcc", tools[idx].Name) + require.Equal(t, "4.8.1-arduino5", tools[idx].Version) + require.Equal(t, Abs(t, "./tools_builtin/avr"), tools[idx].Folder) + idx++ require.Equal(t, "avrdude", tools[idx].Name) require.Equal(t, "6.0.1-arduino5", tools[idx].Version) require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), tools[idx].Folder) idx++ + require.Equal(t, "avrdude", tools[idx].Name) + require.Equal(t, "6.0.1-arduino5", tools[idx].Version) + require.Equal(t, Abs(t, "./tools_builtin/avr"), tools[idx].Folder) + idx++ require.Equal(t, "bossac", tools[idx].Name) require.Equal(t, "1.5-arduino", tools[idx].Version) require.Equal(t, Abs(t, "./downloaded_tools/bossac/1.5-arduino"), tools[idx].Folder) @@ -136,7 +144,7 @@ func TestLoadLotsOfTools(t *testing.T) { NoError(t, err) tools := ctx.Tools - require.Equal(t, 8, len(tools)) + require.Equal(t, 11, len(tools)) sort.Sort(ByToolIDAndVersion(tools)) @@ -149,10 +157,22 @@ func TestLoadLotsOfTools(t *testing.T) { require.Equal(t, "4.8.3-2014q1", tools[idx].Version) require.Equal(t, Abs(t, "./downloaded_tools/arm-none-eabi-gcc/4.8.3-2014q1"), tools[idx].Folder) idx++ + require.Equal(t, "arm-none-eabi-gcc", tools[idx].Name) + require.Equal(t, "4.8.3-2014q1", tools[idx].Version) + require.Equal(t, Abs(t, "./downloaded_board_manager_stuff/RFduino/tools/arm-none-eabi-gcc/4.8.3-2014q1"), tools[idx].Folder) + idx++ require.Equal(t, "avr-gcc", tools[idx].Name) require.Equal(t, "4.8.1-arduino5", tools[idx].Version) require.Equal(t, Abs(t, "./downloaded_tools/avr-gcc/4.8.1-arduino5"), tools[idx].Folder) idx++ + require.Equal(t, "avr-gcc", tools[idx].Name) + require.Equal(t, "4.8.1-arduino5", tools[idx].Version) + require.Equal(t, Abs(t, "./tools_builtin/avr"), tools[idx].Folder) + idx++ + require.Equal(t, "avrdude", tools[idx].Name) + require.Equal(t, "6.0.1-arduino5", tools[idx].Version) + require.Equal(t, Abs(t, "./tools_builtin/avr"), tools[idx].Folder) + idx++ require.Equal(t, "avrdude", tools[idx].Name) require.Equal(t, "6.0.1-arduino5", tools[idx].Version) require.Equal(t, Abs(t, "./downloaded_tools/avrdude/6.0.1-arduino5"), tools[idx].Folder) diff --git a/tools_loader.go b/tools_loader.go index 2d9ee00a..038bb150 100644 --- a/tools_loader.go +++ b/tools_loader.go @@ -121,9 +121,9 @@ func collectAllToolsFolders(from string) ([]string, error) { return folders, i18n.WrapError(err) } -func toolsSliceContains(tools *[]*types.Tool, name, version string) bool { +func toolsSliceContains(tools *[]*types.Tool, name, version string, vendor string) bool { for _, tool := range *tools { - if name == tool.Name && version == tool.Version { + if name == tool.Name && version == tool.Version && vendor == tool.Vendor { return true } } @@ -146,9 +146,10 @@ func loadToolsFrom(tools *[]*types.Tool, builtinToolsVersionsFilePath string) er if row != constants.EMPTY_STRING { rowParts := strings.Split(row, "=") toolName := strings.Split(rowParts[0], ".")[1] + toolVendor := strings.Split(rowParts[0], ".")[0] toolVersion := rowParts[1] - if !toolsSliceContains(tools, toolName, toolVersion) { - *tools = append(*tools, &types.Tool{Name: toolName, Version: toolVersion, Folder: folder}) + if !toolsSliceContains(tools, toolName, toolVersion, toolVendor) { + *tools = append(*tools, &types.Tool{Name: toolName, Vendor: toolVendor, Version: toolVersion, Folder: folder}) } } } @@ -190,8 +191,9 @@ func loadToolsFromFolderStructure(tools *[]*types.Tool, folder string) error { if err != nil { return i18n.WrapError(err) } - if !toolsSliceContains(tools, toolName.Name(), toolVersion.Name()) { - *tools = append(*tools, &types.Tool{Name: toolName.Name(), Version: toolVersion.Name(), Folder: toolFolder}) + _, toolVendor := filepath.Split(filepath.Join(folder, "..")) + if !toolsSliceContains(tools, toolName.Name(), toolVersion.Name(), toolVendor) { + *tools = append(*tools, &types.Tool{Name: toolName.Name(), Vendor: toolVendor, Version: toolVersion.Name(), Folder: toolFolder}) } } } diff --git a/types/context.go b/types/context.go index bc9491dd..9820c483 100644 --- a/types/context.go +++ b/types/context.go @@ -15,6 +15,7 @@ type Context struct { LibrariesFolders []string BuiltInLibrariesFolders []string OtherLibrariesFolders []string + JsonFolders []string SketchLocation string ArduinoAPIVersion string FQBN string diff --git a/types/types.go b/types/types.go index cff74014..6550ee1d 100644 --- a/types/types.go +++ b/types/types.go @@ -153,6 +153,7 @@ type Tool struct { Name string Version string Folder string + Vendor string } type LibraryLayout uint16