Skip to content

Add riscv64 linux tools download support #2700

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 11, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 15 additions & 14 deletions docs/package_index_json-specification.md
Original file line number Diff line number Diff line change
@@ -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,
27 changes: 15 additions & 12 deletions internal/arduino/cores/tools.go
Original file line number Diff line number Diff line change
@@ -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":
3 changes: 3 additions & 0 deletions internal/arduino/cores/tools_test.go
Original file line number Diff line number Diff line change
@@ -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) {