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

Use patched emsdk 3.1.73 out of emscripten-forge #498

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

anutosh491
Copy link
Collaborator

Description

Moving as discussed to the patched emsdk from emscripten-forge for consistency among the builds in the CI and the dependencies that already are built on top of the patched version.

Type of change

Please tick all options which are relevant.

  • Bug fix
  • New feature
  • Requires documentation updates

Testing

Please describe the test(s) that you added and ran to verify your changes.

Checklist

  • I have read the contribution guide recently

@@ -21,13 +21,12 @@ jobs:
fail-fast: false
matrix:
include:
- name: osx15-arm-clang-clang-repl-19-emscripten_wasm
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather the deployment stuck with the MacOS runner since it is noticeably faster, and works just like the Linux build (this is where I do my testing)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already discussed that we would change the runners to linux as preferred for the build.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm referring to the discussion we had on Zoom yesterday. I don't remember agreeing to switch the deployment runner from MacOS. Only that we would move to emscripten forges emsdk subject to determining whether it was needed once xeus-cpp was more complicated. @vgvassilev can confirm whether this was agreed to or not in our Zoom meeting.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay if not discussed then we can discuss it here. The link to the discord above has all the context regarding the switch.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should keep these builds even if they are not preferred. Once they start failing we will figure out what to do.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah yeah not the point of discussion here !

For the deployment, we need to prefer one correct ? For just that we go with all the stable/recommended options. Make sense ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I see your point. It was not discussed during our last video call. I'd prefer to change this PR as it was discussed and agreed upon. That means keeping these and moving to the patched version of the sdk.

Comment on lines 40 to 41
executing micromamba install llvm -c
<https://repo.mamba.pm/emscripten-forge> and setting the LLVM_BUILD_DIR
appropriately)
https://repo.prefix.dev/emscripten-forge-dev and setting the LLVM_BUILD_DIR
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to change this to make sure it install llvm 19, and not just whatever the latest version emsdk has for now?

Copy link
Collaborator Author

@anutosh491 anutosh491 Feb 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New channel used to get llvm built against 3.1.73

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The channel fix is not what I was referring to. That will fetch the llvm being built in that channel, but to be consistent with the clone it should be fixed to get the latest llvm 19 version.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this will fetch the latest llvm version. So no issues !

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is if only no issues if CppInterOp has been updated to work with the latest version before that release in emscripten forge has happened. If not they will not be able to do the subsequent steps. Best to keep it to a fix version that we know works like with the git clones.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmmm not sure what you mean to say here. But the only way to get llvm from emscripten-forge build against emsdk 3.1.73 is through this channel https://repo.prefix.dev/emscripten-forge-dev

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here is an example of how it could run into trouble in the future. Let's say emscripten forge adds a build of llvm 20 using emsdk 3.1.73 before CppInterOp is ready for the upgrade, but this command has been merged in and people try to use it, then will get llvm 20, but they won't be able to build CppInterOp with it. Hopefully that makes sense.

Also separately I'm not sure how the llvm install command is made aware of what emsdk we are using. The emscripten forge developer channel will be using a different emsdk in a future upgrade (whenever that may be), which may causes issues if the llvm it gets is built with a different emsdk tonthe one we are using (but this second point is an issue for a different day)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay I guess you just want me to pin the version isn't it ?

Also separately I'm not sure how the llvm install command is made aware of what emsdk we are using

Shall educate you on this separately.

@@ -21,13 +21,12 @@ jobs:
fail-fast: false
matrix:
include:
- name: osx15-arm-clang-clang-repl-19-emscripten_wasm
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm referring to the discussion we had on Zoom yesterday. I don't remember agreeing to switch the deployment runner from MacOS. Only that we would move to emscripten forges emsdk subject to determining whether it was needed once xeus-cpp was more complicated. @vgvassilev can confirm whether this was agreed to or not in our Zoom meeting.

Copy link

codecov bot commented Feb 7, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 71.17%. Comparing base (b797dbb) to head (6598870).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main     #498   +/-   ##
=======================================
  Coverage   71.17%   71.17%           
=======================================
  Files           9        9           
  Lines        3552     3552           
=======================================
  Hits         2528     2528           
  Misses       1024     1024           

@@ -21,30 +21,20 @@ jobs:
fail-fast: false
matrix:
include:
- name: ubu24-arm-gcc12-clang-repl-19-emscripten
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be reverted, and instead work should be done make the emsdk from emscripten forge available for Linux arm.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As part of the evidence as to why we shouldn't be dropping Ubuntu arm from the ci, here is an example of xeus-cpp-lite working on a Ubuntu arm vm. Instead we should make emsdk available on the Ubuntu arm platform as commented above.
image

Copy link
Collaborator Author

@anutosh491 anutosh491 Feb 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay let's add this as a TODO for now and proceed ?

As discussed on the issue, it doesn't matter a lot having a lot of native builds. We aren't generating a lot of value here but if that's something we are interested in we can try supporting it.
emscripten-forge/recipes#1689 (comment)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we are interested in that.

Copy link
Collaborator

@mcbarton mcbarton Feb 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather not have this labelled as a todo item, just to get the PR in now. We currently are able to have people build on Linux arm (and have it work), while as things stands if itgis PR went in people using Linux arm wouldn't be able to do afterwards. We have agreed to use emscripten forges emsdk (while xeus-cpp-lite is developed more and it is checked the patch you mentioned is needed), but it should be done properly first time. Please do the work to get emsdk available throught emscripten forge on Linux arm first and then revert this ci change.

Copy link
Collaborator Author

@anutosh491 anutosh491 Feb 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay In that case I don't know how to proceed.

As per what we discussed we decided to go ahead with the patched emsdk

  1. And the main point behind using it was not technically to support a lot of platforms rather it was towards introducing a consistent build. I am not sure if it makes sense to use different emsdk's to build llvm and CppInterOp differently and the other platforms differently

  2. That being said, I think what we have is a good start. If we read through the issue that I linked above
    i) emscripten_emscripten-wasm32 package only available on Ubuntu platform emscripten-forge/recipes#1689 (comment)
    ii) emscripten_emscripten-wasm32 package only available on Ubuntu platform emscripten-forge/recipes#1689 (comment)

Answers by Johan and Thortsen state as to why it shouldn't matter even if we have 1 single good build through the CI.

  1. Now obviously there's this point where what do users do in that case ? But think about it ....
    We end up having to make a choice here

Having an inconsistent build on all platforms vs Supporting more platforms !

  1. Btw here's are some answers by pyodide maintainers on why we need the patch. I had opened a discussion so that I can get some detailed replies on this
    i) Discussing patches on emsdk in Pyodide pyodide/pyodide#5420 (reply in thread)
    ii) Discussing patches on emsdk in Pyodide pyodide/pyodide#5420 (comment)

So yeah my point here is that ....
Allowing users to access the patched emsdk to build xeus-cpp-lite actually should end up holding more value than having it through the CI !
We know from a CI standpoint that having 1 good build should do the job in a wasm context
So CI shouldn't be our focus but rather how would a user make use of it. And for that I can open up an issue on emscripten-forge asking it to be supported. I probably won't be able to work on it right away as it doesn't fall under my assigned list of tasks. We can ask our users to make use of the emsdk from github till then and add a TODO for the same.

Also a big point is when it comes to the deployment, shouldn't we work towards the best build possible ? Isn't that what our users would use ?

So even if we don't want to use the patched emsdk untill Ubuntu Arm is supported, we should use it for our deployment build as that is our go-to build. We need to have a consistent build there

@vgvassilev how should we move here ?

My suggestion being if we want to be so demanding out of emscripten-forge cause obviously there's work going on there too and not sure if we would have this right away :/
We just have that one perfect build through our deployment where we use the patched emsdk and not have it through the CI untill Ubuntu Arm is supported ?

Copy link
Collaborator

@mcbarton mcbarton Feb 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is stopping us from cloning emscripten forges recipe repo, so we can activate their emsdk manually on all platforms until its available as a package though emscripten forges channels? Having this way of building for now will xeus-cpp-lite to maintain the ability to be built from any available platforms, and we also get whatever patches are currently being applied within emscripten forge.

Thanks for the opening the discussions on Pyodide about the patches. I will look into what is said in the dicusssion (probably Monday)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is stopping us from cloning emscripten forges recipe repo, so we can activate their emsdk manually on all platforms until its available as a package though emscripten forges channels?

I think that's a brilliant suggestion. Let's do that ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is stopping us from cloning emscripten forges recipe repo, so we can activate their emsdk manually on all platforms until its available as a package though emscripten forges channels?

I think that's a brilliant suggestion. Let's do that ?

Ping me once you've made that suggested change to the ci, and build instructions and I will take another look at the PR (probably Monday as I am busy this weekend)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I am making no commits today. Only on Monday or Teusday

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

Successfully merging this pull request may close these issues.

3 participants