From a3796a0e8f0b7c8e6f96f62d64f0e4b320ecc5b3 Mon Sep 17 00:00:00 2001 From: Tianxiang Bian Date: Wed, 11 Sep 2024 21:33:17 +0800 Subject: [PATCH] Add riscv64 linux tools download support (#2700) * Add riscv64 linux tools download support * fix style * Updated docs --------- Co-authored-by: Cristian Maglie --- docs/package_index_json-specification.md | 29 ++++++++++++------------ internal/arduino/cores/tools.go | 27 ++++++++++++---------- internal/arduino/cores/tools_test.go | 3 +++ 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/docs/package_index_json-specification.md b/docs/package_index_json-specification.md index ef8bbdaa3f3..416a5e2e815 100644 --- a/docs/package_index_json-specification.md +++ b/docs/package_index_json-specification.md @@ -170,20 +170,21 @@ Each tool version may come in different build flavours for different OS. Each fl array. The IDE will take care to install the right flavour for the user's OS by matching the `host` value with the following table or fail if a needed flavour is missing. -| OS flavour | `host` regexp value | `host` suggested value | -| ------------ | ------------------------------------- | ---------------------------------- | -| Linux 32 | `i[3456]86-.*linux-gnu` | `i686-linux-gnu` | -| Linux 64 | `x86_64-.*linux-gnu` | `x86_64-linux-gnu` | -| Linux Arm | `arm.*-linux-gnueabihf` | `arm-linux-gnueabihf` | -| Linux Arm64 | `(aarch64\|arm64)-linux-gnu` | `aarch64-linux-gnu` | -| Windows 32 | `i[3456]86-.*(mingw32\|cygwin)` | `i686-mingw32` or `i686-cygwin` | -| Windows 64 | `(amd64\|x86_64)-.*(mingw32\|cygwin)` | `x86_64-migw32` or `x86_64-cygwin` | -| MacOSX 32 | `i[3456]86-apple-darwin.*` | `i686-apple-darwin` | -| MacOSX 64 | `x86_64-apple-darwin.*` | `x86_64-apple-darwin` | -| MacOSX Arm64 | `arm64-apple-darwin.*` | `arm64-apple-darwin` | -| FreeBSD 32 | `i?[3456]86-freebsd[0-9]*` | `i686-freebsd` | -| FreeBSD 64 | `amd64-freebsd[0-9]*` | `amd64-freebsd` | -| FreeBSD Arm | `arm.*-freebsd[0-9]*` | `arm-freebsd` | +| OS flavour | `host` regexp | suggested `host` value | +| --------------- | ------------------------------------- | ---------------------------------- | +| Linux 32 | `i[3456]86-.*linux-gnu` | `i686-linux-gnu` | +| Linux 64 | `x86_64-.*linux-gnu` | `x86_64-linux-gnu` | +| Linux Arm | `arm.*-linux-gnueabihf` | `arm-linux-gnueabihf` | +| Linux Arm64 | `(aarch64\|arm64)-linux-gnu` | `aarch64-linux-gnu` | +| Linux RISC-V 64 | `riscv64-linux-gnu` | `riscv64-linux-gnu` | +| Windows 32 | `i[3456]86-.*(mingw32\|cygwin)` | `i686-mingw32` or `i686-cygwin` | +| Windows 64 | `(amd64\|x86_64)-.*(mingw32\|cygwin)` | `x86_64-migw32` or `x86_64-cygwin` | +| MacOSX 32 | `i[3456]86-apple-darwin.*` | `i686-apple-darwin` | +| MacOSX 64 | `x86_64-apple-darwin.*` | `x86_64-apple-darwin` | +| MacOSX Arm64 | `arm64-apple-darwin.*` | `arm64-apple-darwin` | +| FreeBSD 32 | `i?[3456]86-freebsd[0-9]*` | `i686-freebsd` | +| FreeBSD 64 | `amd64-freebsd[0-9]*` | `amd64-freebsd` | +| FreeBSD Arm | `arm.*-freebsd[0-9]*` | `arm-freebsd` | The `host` value is matched with the regexp, this means that a more specific value for the `host` field is allowed (for example you may write `x86_64-apple-darwin14.1` for MacOSX instead of the suggested `x86_64-apple-darwin`), by the way, diff --git a/internal/arduino/cores/tools.go b/internal/arduino/cores/tools.go index 3648119c483..b858e7eab62 100644 --- a/internal/arduino/cores/tools.go +++ b/internal/arduino/cores/tools.go @@ -127,18 +127,19 @@ func (tr *ToolRelease) RuntimeProperties() *properties.Map { } var ( - regexpLinuxArm = regexp.MustCompile("arm.*-linux-gnueabihf") - regexpLinuxArm64 = regexp.MustCompile("(aarch64|arm64)-linux-gnu") - regexpLinux64 = regexp.MustCompile("x86_64-.*linux-gnu") - regexpLinux32 = regexp.MustCompile("i[3456]86-.*linux-gnu") - regexpWindows32 = regexp.MustCompile("i[3456]86-.*(mingw32|cygwin)") - regexpWindows64 = regexp.MustCompile("(amd64|x86_64)-.*(mingw32|cygwin)") - regexpMac64 = regexp.MustCompile("x86_64-apple-darwin.*") - regexpMac32 = regexp.MustCompile("i[3456]86-apple-darwin.*") - regexpMacArm64 = regexp.MustCompile("arm64-apple-darwin.*") - regexpFreeBSDArm = regexp.MustCompile("arm.*-freebsd[0-9]*") - regexpFreeBSD32 = regexp.MustCompile("i?[3456]86-freebsd[0-9]*") - regexpFreeBSD64 = regexp.MustCompile("amd64-freebsd[0-9]*") + regexpLinuxArm = regexp.MustCompile("arm.*-linux-gnueabihf") + regexpLinuxArm64 = regexp.MustCompile("(aarch64|arm64)-linux-gnu") + regexpLinuxRiscv64 = regexp.MustCompile("riscv64-linux-gnu") + regexpLinux64 = regexp.MustCompile("x86_64-.*linux-gnu") + regexpLinux32 = regexp.MustCompile("i[3456]86-.*linux-gnu") + regexpWindows32 = regexp.MustCompile("i[3456]86-.*(mingw32|cygwin)") + regexpWindows64 = regexp.MustCompile("(amd64|x86_64)-.*(mingw32|cygwin)") + regexpMac64 = regexp.MustCompile("x86_64-apple-darwin.*") + regexpMac32 = regexp.MustCompile("i[3456]86-apple-darwin.*") + regexpMacArm64 = regexp.MustCompile("arm64-apple-darwin.*") + regexpFreeBSDArm = regexp.MustCompile("arm.*-freebsd[0-9]*") + regexpFreeBSD32 = regexp.MustCompile("i?[3456]86-freebsd[0-9]*") + regexpFreeBSD64 = regexp.MustCompile("amd64-freebsd[0-9]*") ) func (f *Flavor) isExactMatchWith(osName, osArch string) bool { @@ -151,6 +152,8 @@ func (f *Flavor) isExactMatchWith(osName, osArch string) bool { return regexpLinuxArm.MatchString(f.OS) case "linux,arm64": return regexpLinuxArm64.MatchString(f.OS) + case "linux,riscv64": + return regexpLinuxRiscv64.MatchString(f.OS) case "linux,amd64": return regexpLinux64.MatchString(f.OS) case "linux,386": diff --git a/internal/arduino/cores/tools_test.go b/internal/arduino/cores/tools_test.go index 4c0d54e953a..f4a3097a3ca 100644 --- a/internal/arduino/cores/tools_test.go +++ b/internal/arduino/cores/tools_test.go @@ -34,6 +34,7 @@ func TestFlavorCompatibility(t *testing.T) { linuxArm := &os{"linux", "arm"} linuxArmbe := &os{"linux", "armbe"} linuxArm64 := &os{"linux", "arm64"} + linuxRiscv64 := &os{"linux", "riscv64"} darwin32 := &os{"darwin", "386"} darwin64 := &os{"darwin", "amd64"} darwinArm64 := &os{"darwin", "arm64"} @@ -47,6 +48,7 @@ func TestFlavorCompatibility(t *testing.T) { linuxArm, linuxArmbe, linuxArm64, + linuxRiscv64, darwin32, darwin64, darwinArm64, @@ -82,6 +84,7 @@ func TestFlavorCompatibility(t *testing.T) { {&Flavor{OS: "x86_64-pc-linux-gnu"}, []*os{linux64}, []*os{linux64}}, {&Flavor{OS: "aarch64-linux-gnu"}, []*os{linuxArm64}, []*os{linuxArm64}}, {&Flavor{OS: "arm64-linux-gnu"}, []*os{linuxArm64}, []*os{linuxArm64}}, + {&Flavor{OS: "riscv64-linux-gnu"}, []*os{linuxRiscv64}, []*os{linuxRiscv64}}, } checkCompatible := func(test *test, os *os) {