-
Notifications
You must be signed in to change notification settings - Fork 2
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
WCLAP with Emscripten #1
Open
geraintluff
wants to merge
1
commit into
baconpaul:main
Choose a base branch
from
geraintluff:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So build type release and debug don’t do this in emscripten?
winder if we want an wclap.cmake with utilities?
I’m happy to merge this if you want tho
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe they'd do
-O3
. The others (-ffast-math -fno-exceptions -fno-rtti
) are my personal defaults, and should probably be removed to avoid confusion.I previously couldn't get Release builds to work properly in a non-Emscripten project, but that's more about me being bad at CMake. 😅 If you want to refactor/rewrite this into something neater, that'd be fine by me!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To explain the other linker options:
-sSTANDALONE_WASM
: this can probably be omitted - it's the default when generating a.wasm
anyway (with no JS loader), and is also implied by-sPURE_WASI
.--no-entry
: don't expect amain()
-sEXPORTED_FUNCTIONS=_clap_entry,_malloc
: not sure what the_
prefix is about. We obviously needclap_entry
(which is a pointer rather than a function, but that's just this flag being badly named). We also needmalloc
because the in order to pass in pointers to host structs, those structs need to be inside the memory WASM can see. This doesn't have to be the realmalloc()
though - just any function that the host can use to get some memory it knows the plugin isn't using for anything else.-s INITIAL_MEMORY=512kb -sALLOW_MEMORY_GROWTH
: The default is 16Mb with no memory growth. This is neater and feels more flexible (to me), but optional.-sALLOW_TABLE_GROWTH --export-table
: WASM functions aren't addressed by memory locations, but by indices in a "function table". Function pointers are integer indices into this table. In order for our host-owned structs to point to host-defined functions, the WASM module needs to (1) export this function table so it's visible, and (2) allow it to grow, so we can expand it and insert our host functions in there.-sPURE_WASI
: This disables the last piece of (fairly pointless) Emscripten magic. Without this, Emscripten adds an extra import function (emscripten_notify_memory_growth
) which gets called when the memory expands.