Skip to content
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

Arduino IDE 2.x (for ARM64) #2585

Closed
4 tasks done
matu6968 opened this issue Apr 27, 2024 · 30 comments
Closed
4 tasks done

Arduino IDE 2.x (for ARM64) #2585

matu6968 opened this issue Apr 27, 2024 · 30 comments

Comments

@matu6968
Copy link

What is the name of the app?

Arduino IDE 2.x

Where is the app hosted?

https://github.com/arduino/arduino-ide

About the app

The newer and redefined Arduino IDE which allows you to code for embedded platforms (like the older 1.8.x based IDE, such as for Arduino Uno), supports many extensions just like the 1.8.x based one.

Upload file or Add PR Link

arduino-ide-2.x.zip

Confirmations

Copy link
Contributor

A zipfile was found in the body of your issue.
The sha1sum of the zip was: e4d00af8478068b29d99dd638c5338c8829092c7

Click to show contents preview

uninstall

#!/bin/bash

#Allow packages required by this app to be uninstalled
purge_packages || exit 1

description

The newer and refreshed Arduino IDE
based on the Electron and Javascript/Typescript Frameworks.

Use this to flash your code to Arduino microprocessors.
To run: Menu -> Programming -> Arduino IDE.
To run in a terminal: arduino-ide

install-64

#!/bin/bash

version=2.3.3

install_packages "https://ximitekcloud.com/downloads/arduino-ide_${version%-*}_arm64.deb" || exit 1

website

https://www.arduino.cc/en/main/software

Copy link
Contributor

Hello there 👋
Thanks for submitting your first issue to the Pi-Apps project! We'll try to get back to you as soon as possible.
In the meantime, we encourage you join our Discord server, where you can ask any questions you might have.

Please respond as soon as possible if a Pi-Apps maintainer requests more information from you. Stale issues will be closed after a lengthy period of time with no response.

@Botspot
Copy link
Owner

Botspot commented Apr 27, 2024

Who owns this domain? https://ximitekcloud.com/downloads
Also this seems to be an unofficial build, so can we be sure that it will continue to receive updates in the future?

@matu6968
Copy link
Author

Who owns this domain? https://ximitekcloud.com/downloads Also this seems to be an unofficial build, so can we be sure that it will continue to receive updates in the future?

I own it, as its a unofficial build i will also make updates for it as its kinda odd for Arduino to make a ARM64 version for Mac while ignoring Linux.

@Botspot
Copy link
Owner

Botspot commented Apr 27, 2024

I own it, as its a unofficial build i will also make updates for it as its kinda odd for Arduino to make a ARM64 version for Mac while ignoring Linux.

OK, so why not then host the build scripts and release assets on a github repo?

@matu6968
Copy link
Author

I own it, as its a unofficial build i will also make updates for it as its kinda odd for Arduino to make a ARM64 version for Mac while ignoring Linux.

OK, so why not then host the build scripts and release assets on a github repo?

I couldn't host the release assets on GitHub as when i tried a git pushing the repo with the main release assets, it just refused to do it (i was doing it on a private repo, will try on a public one and will reply to see if it does something)

@Botspot
Copy link
Owner

Botspot commented Apr 27, 2024

I couldn't host the release assets on GitHub as when i tried a git pushing the repo with the main release assets, it just refused to do it (i was doing it on a private repo, will try on a public one and will reply to see if it does something)

If builds will only be periodic, consider the option to simply upload them manually.

@matu6968
Copy link
Author

I couldn't host the release assets on GitHub as when i tried a git pushing the repo with the main release assets, it just refused to do it (i was doing it on a private repo, will try on a public one and will reply to see if it does something)

If builds will only be periodic, consider the option to simply upload them manually.

As my Pi 5 (the Pi i used for compiling the IDE) isn't used heavy duty by another project, i could do like minor release versions when they come out (for example 2.3.3 > 2.3.4)

@Botspot
Copy link
Owner

Botspot commented Apr 27, 2024

Who owns this domain? https://ximitekcloud.com/downloads

I own it

What are the chances of it going down? Is it self hosted?

@matu6968
Copy link
Author

Who owns this domain? https://ximitekcloud.com/downloads

I own it

What are the chances of it going down? Is it self hosted?

It is just a Linux based web server hosted on Linode with Caddy installed as the web server.

@matu6968
Copy link
Author

I own it, as its a unofficial build i will also make updates for it as its kinda odd for Arduino to make a ARM64 version for Mac while ignoring Linux.

OK, so why not then host the build scripts and release assets on a github repo?

And still nope, i cannot host the release assets on GitHub even when the repo is public.

@theofficialgman
Copy link
Collaborator

theofficialgman commented Apr 28, 2024

I am going to close this. Not interested in another porting project and still waiting on Arduino to show that they care to maintain their IDE project. There has not been a commit since February and they are running an old version of electron with security issues.

This has already been requested of upstream by many many users. It is trivial for them to implement. Please add your request to the others there. If you are able to help make any modifications to their build CI to build arm64 linux releases then by all means help them out with a PR.

@theofficialgman theofficialgman closed this as not planned Won't fix, can't repro, duplicate, stale Apr 28, 2024
@matu6968
Copy link
Author

I am going to close this. Not interested in another porting project and still waiting on Arduino to show that they care to maintain their IDE project. There has not been a commit since February and they are running an old version of electron with security issues.

This has already been requested of upstream by many many users. It is trivial for them to implement. Please add your request to the others there. If you are able to help make any modifications to their build CI to build arm64 linux releases then by all means help them out with a PR.

I just recently moved the package to a GitHub repo and provided some instructions to build it so no more need for a external web server anymore. Also as @theofficialgman does not like the current state of the Arduino IDE 2.x (due to using a outdated Electron 27 build) then i do not think it will be ever published until Arduino updates Electron to the latest version and to contribute to the issues (as well as also responding to backlash on why they didn't ship a Linux ARM64 version of their IDE officially).

@Botspot
Copy link
Owner

Botspot commented Nov 14, 2024

This should be revisited, now with more regular updates and their current dependence on "node": ">=18.17.0 <21"

@Botspot
Copy link
Owner

Botspot commented Nov 14, 2024

The build from @matu6968 seems to be offline.
Try again hosting release assets on github, or provide a script to convert the linux release to arm64.

@theofficialgman
Copy link
Collaborator

@theofficialgman does not like the current state of the Arduino IDE 2.x (due to using a outdated Electron 27 build) then i do not think it will be ever published until Arduino updates Electron to the latest version and to contribute to the issues (as well as also responding to backlash on why they didn't ship a Linux ARM64 version of their IDE officially).

This issue still exists... There are so many critical bugs that have been resolved since 27 in August 2023, not to mention all the security vulnerabilities that come with such an out of date and unmaintained version of chromium. I simply will not accept new applications that use electron and don't do the basic maintenance to keep up to date with one of the stable electron releases (major version releases are supported for 8 months, they don't even need update frequently).

In any case, our current stance on such porting projects is for them to not exist when an effort could be contributed upstream. This seems like a prime candidate and would resolve an issue for many many users who have requested such a feature arduino/arduino-ide#107 . Consider using your time to create CI for upstream to build for arm64/armhf linux.

@matu6968
Copy link
Author

The build from @matu6968 seems to be offline.

Regarding about the hosting before it got migrated my github repo, the server for that is long gone.

Try again hosting release assets on github, or provide a script to convert the linux release to arm64.

Since Arduino released their official 2.3.3 version of their 2.x based IDE, i will possibly today make a CI and/or a bash script to automate the build process and not to worry about updates if I made a CI (as long as Arduino themselves don't make breaking changes to their code especially with changing Electron versions to a newer version)

@matu6968
Copy link
Author

matu6968 commented Nov 14, 2024

The build from @matu6968 seems to be offline. Try again hosting release assets on github, or provide a script to convert the linux release to arm64.

The script is ready it essentially builds the ide from source and has disclaimers for building for other arches and everything is there, except for checking if golang is installed (i will add the golang installed check later and put it on my repo)

build-ide.txt
(rename build-ide.txt to build-ide.sh and enable execution permissions to make it work)

@Botspot
Copy link
Owner

Botspot commented Nov 15, 2024

Did you ever encounter this error @matu6968?

pi@raspberrypi:~/arduino-ide $ /home/pi/Downloads/build-ide.sh build-package
64 bit ARM Architecture detected
v22.11.0
Now using node v20.18.0 (npm v10.8.2)
building package
installing node dependencies
yarn install v1.22.22
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
warning vscode-arduino-api@0.1.2: The engine "vscode" appears to be invalid.
[4/5] Linking dependencies...
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > @theia/electron@1.41.0" has unmet peer dependency "electron@^23.2.4".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > @tippyjs/react@4.2.6" has unmet peer dependency "react@>=16.8".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > @tippyjs/react@4.2.6" has unmet peer dependency "react-dom@>=16.8".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-disable@0.1.1" has unmet peer dependency "react@>=16".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-markdown@8.0.7" has unmet peer dependency "@types/react@>=16".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-markdown@8.0.7" has unmet peer dependency "react@>=16".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-perfect-scrollbar@1.5.8" has unmet peer dependency "react@>=16.3.3".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-perfect-scrollbar@1.5.8" has unmet peer dependency "react-dom@>=16.3.3".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select@5.7.7" has unmet peer dependency "react@^16.8.0 || ^17.0.0 || ^18.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select@5.7.7" has unmet peer dependency "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-tabs@3.2.3" has unmet peer dependency "react@^16.3.0 || ^17.0.0-0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-window@1.8.9" has unmet peer dependency "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-window@1.8.9" has unmet peer dependency "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > @theia/scm > react-autosize-textarea@7.1.0" has unmet peer dependency "react@^0.14.0 || ^15.0.0 || ^16.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > @theia/scm > react-autosize-textarea@7.1.0" has unmet peer dependency "react-dom@^0.14.0 || ^15.0.0 || ^16.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select > @emotion/react@11.11.1" has unmet peer dependency "react@>=16.8.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select > react-transition-group@4.4.5" has unmet peer dependency "react@>=16.6.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select > react-transition-group@4.4.5" has unmet peer dependency "react-dom@>=16.6.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select > use-isomorphic-layout-effect@1.1.2" has unmet peer dependency "react@^16.8.0 || ^17.0.0 || ^18.0.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > @theia/debug > @theia/process > node-pty@0.11.0-beta17" has incorrect peer dependency "node-gyp@^8.3.0".
warning "workspace-aggregator-92977e9f-fac2-4112-9b6a-a209b636165a > arduino-ide-extension > react-select > @emotion/react > @emotion/use-insertion-effect-with-fallbacks@1.0.1" has unmet peer dependency "react@>=16.8.0".
[5/5] Building fresh packages...
$ lerna run prepare
lerna notice cli v7.4.2
lerna info versioning independent

 >  Lerna (powered by Nx)   Running target prepare for 2 projects:

    - arduino-ide-extension
    - electron-app

 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

> arduino-ide-extension:prepare

arduino-ide-extension: yarn run v1.22.22
arduino-ide-extension: $ yarn download-cli && yarn download-fwuploader && yarn download-ls && yarn copy-i18n && yarn download-examples
$ node ./scripts/download-cli.js
arduino-ide-extension: 📦  Identified released version of the CLI. Downloading version 1.0.4 from 'https://downloads.arduino.cc/arduino-cli/arduino-cli_1.0.4_Linux_ARM64.tar.gz'
arduino-ide-extension: >>> Downloading from 'https://downloads.arduino.cc/arduino-cli/arduino-cli_1.0.4_Linux_ARM64.tar.gz'...
arduino-ide-extension: <<< Download succeeded.
arduino-ide-extension: >>> Decompressing...
arduino-ide-extension: <<< Decompressing succeeded.
arduino-ide-extension: Done: /home/pi/arduino-ide/arduino-ide-extension/src/node/resources/arduino-cli
arduino-ide-extension: $ node ./scripts/download-fwuploader.js
arduino-ide-extension: 📦  Identified released version of the Firmware Uploader. Downloading version 2.4.1 from 'https://downloads.arduino.cc/arduino-fwuploader/arduino-fwuploader_2.4.1_Linux_ARM64.tar.gz'
arduino-ide-extension: >>> Downloading from 'https://downloads.arduino.cc/arduino-fwuploader/arduino-fwuploader_2.4.1_Linux_ARM64.tar.gz'...
arduino-ide-extension: <<< Download succeeded.
arduino-ide-extension: >>> Decompressing...
arduino-ide-extension: <<< Decompressing succeeded.
arduino-ide-extension: Done: /home/pi/arduino-ide/arduino-ide-extension/src/node/resources/arduino-fwuploader
arduino-ide-extension: $ node ./scripts/download-ls.js
arduino-ide-extension: Building language-server from https://github.com/arduino/arduino-language-server.git. Commitish: 05ec308
arduino-ide-extension: >>> Cloning language-server source to /tmp/d-20241014-972600-2ai2tu.h1aev...
arduino-ide-extension: Cloning into '/tmp/d-20241014-972600-2ai2tu.h1aev'...
arduino-ide-extension: <<< Cloned language-server repo.
arduino-ide-extension: >>> Checking out 05ec308...
arduino-ide-extension: Note: switching to '05ec308'.
arduino-ide-extension: You are in 'detached HEAD' state. You can look around, make experimental
arduino-ide-extension: changes and commit them, and you can discard any commits you make in this
arduino-ide-extension: state without impacting any branches by switching back to a branch.
arduino-ide-extension: If you want to create a new branch to retain commits you create, you may
arduino-ide-extension: do so (now or later) by using -c with the switch command. Example:
arduino-ide-extension:   git switch -c <new-branch-name>
arduino-ide-extension: Or undo this operation with:
arduino-ide-extension:   git switch -
arduino-ide-extension: Turn off this advice by setting config variable advice.detachedHead to false
arduino-ide-extension: HEAD is now at 05ec308 Merge pull request #191 from arduino/update_grpc
arduino-ide-extension: <<< Checked out 05ec308.
arduino-ide-extension: 05ec308
arduino-ide-extension: >>> Building the language-server...
arduino-ide-extension: Failed to execute go with args: ["build"]
arduino-ide-extension: Error: spawnSync go ENOENT
arduino-ide-extension: error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
arduino-ide-extension: error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 >  Lerna (powered by Nx)   Running target prepare for 2 projects failed

   Tasks not run because their dependencies failed or --nx-bail=true:
   
   - electron-app:prepare
   
   Failed tasks:
   
   - arduino-ide-extension:prepare

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

!!! An error happened during script execution
!!! Please check console output for bad sync,
!!! failed patch application, OOM killer messages, etc.

@Botspot
Copy link
Owner

Botspot commented Nov 15, 2024

Found a solution here: arduino/arduino-ide#2499 (comment)

@Botspot
Copy link
Owner

Botspot commented Nov 15, 2024

Fixed and working script for arm64 debian/ubuntu only
build-ide.txt
There was a large number of issues with the script I started from.

@matu6968 Would you be willing to try adding the arm64 arch to Arduino's official CI build? I think the only file with needed changes is this one: https://github.com/arduino/arduino-ide/blob/main/.github/workflows/build.yml#L389
The changes needed may look similar to this PR for a similar project: https://github.com/Eugeny/tabby/pull/5907/files

@matu6968
Copy link
Author

@matu6968 Would you be willing to try adding the arm64 arch to Arduino's official CI build? I think the only file with needed changes is this one: https://github.com/arduino/arduino-ide/blob/main/.github/workflows/build.yml#L389

The changes needed may look similar to this PR for a similar project: https://github.com/Eugeny/tabby/pull/5907/files

These changes seem to add checking environment variables for getting armhf and arm64 support, however I believe this should not be needed because you can specify electron-builder configs in package.json inside of the electron-app folder to add other arches like armhf without needing to modify the workflow.

@Botspot
Copy link
Owner

Botspot commented Nov 15, 2024

@matu6968, clearly you understand electron more than I do. Are you willing to open a pull request to arduino-ide to get arm build artifacts released alongside their x86 appimage and zip? If so, I will wait for you. If not, then I will see about doing something hacky here that theofficialgman would probably not be too fond of... ;)

@matu6968
Copy link
Author

@matu6968, clearly you understand electron more than I do. Are you willing to open a pull request to arduino-ide to get arm build artifacts released alongside their x86 appimage and zip? If so, I will wait for you. If not, then I will see about doing something hacky here that theofficialgman would probably not be too fond of... ;)

I will see how it turns out and make a pull request if cross compiling works, also imma see if I can update Electron 27 dependency to the latest version (which is version 27.3.11) without breaking changes.

@Botspot
Copy link
Owner

Botspot commented Nov 15, 2024

@matu6968, clearly you understand electron more than I do. Are you willing to open a pull request to arduino-ide to get arm build artifacts released alongside their x86 appimage and zip? If so, I will wait for you. If not, then I will see about doing something hacky here that theofficialgman would probably not be too fond of... ;)

I will see how it turns out and make a pull request if cross compiling works, also imma see if I can update Electron 27 dependency to the latest version (which is version 27.3.11) without breaking changes.

I would suggest one change at a time. Try only doing a PR for arm builds, then if they merge that, try another PR for newer electron.
If you try both at once, they might close it and then not want to see you again when you ask for only one of the two changes.

@matu6968
Copy link
Author

Did you ever encounter this error @matu6968?
...

This is cause the script didn't check if go was installed and hence the error because go wasn't installed to build the language-server.

@Botspot
Copy link
Owner

Botspot commented Nov 15, 2024

Yeah I know, I fixed it in the script I sent back to you here. Please check it. It is simplified and only for debian arm64, but it fixed several issues you had in your script with how arduino-ide was being compiled and packaged. I think if you run your original script on the master branch of arduino-ide, you will see that much of it fails. I had to redo major parts of it based on their buildscripts.

@theofficialgman
Copy link
Collaborator

@matu6968 Would you be willing to try adding the arm64 arch to Arduino's official CI build? I think the only file with needed changes is this one: https://github.com/arduino/arduino-ide/blob/main/.github/workflows/build.yml#L389 The changes needed may look similar to this PR for a similar project: https://github.com/Eugeny/tabby/pull/5907/files

To extend that, when building native libraries with yarn are involved you also need to manually specify and install the cross compilers when building on x86_64 for armhf/arm64 (eg: https://github.com/shiftkey/desktop/pull/897/files which was later refactored into a dockerfile for some other reasons https://github.com/shiftkey/desktop-ubuntu-arm64-packaging/blob/shiftkey-patch-1/Dockerfile)

@matu6968
Copy link
Author

Due to GitHub Actions limits and for the time being ARM64 runners being unavailable to the public until next year aswell as the limited amount of time i can work on this, i gave up implementing building for ARM64 into the action file. So for now build scripts will have to stay.

@matu6968
Copy link
Author

matu6968 commented Dec 13, 2024

To extend that, when building native libraries with yarn are involved you also need to manually specify and install the cross compilers when building on x86_64 for armhf/arm64 (eg: https://github.com/shiftkey/desktop/pull/897/files which was later refactored into a dockerfile for some other reasons https://github.com/shiftkey/desktop-ubuntu-arm64-packaging/blob/shiftkey-patch-1/Dockerfile)

I am trying to get the IDE to work on armhf but ran into a wall of problems.

Here is what I tried:

  1. Cross compiling using arm64 system but with 32 bit cross compiler and some 32 bit native libraries: (note arduino-ide-extension and other arduino things are not cross compiled for armhf) After running yarn --cwd electron-app rebuild , compiling errors out: https://pastebin.com/g67zgMfM
  2. Using armhf system with all the 32 bit libraries and patched out download-ls.js file to allow downloading of 32 bit clang binaries: Running yarn --cwd electron-app rebuild works fine but after running yarn --cwd electron-app build Errors out with 2 possible outcomes: 1. a stack trace and a error with the lines: Allocation failed - JavaScript heap out of memory or 2. SIGABRT or SIGSEGV exit code with the error line for SIGSEGV: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc (meant out of memory, but 32 bit OS has a hard memory limit of around 4 GB but adding in my enviroment variables NODE_OPTIONS= --max_old_space_size=4000 did not help nor decreasing running processes in parallel using webpack config flag: parallelism)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants