Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Make HelloWorld run on wasm with core[wasm]run - #119640

Merged
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native
Sep 13, 2025
Merged

Make HelloWorld run on wasm with core[wasm]run#119640
pavelsavara merged 4 commits into
dotnet:mainfrom
radekdoulik:clr-interp-wasm-add-system-native

Conversation

@radekdoulik

Copy link
Copy Markdown
Member

Link devel hosts with System.Native on wasm

Add PInvoke override to resolve entrypoints in static wasm binary

Update PEImage::HasLoadedLayout() to check for flat image when PEIMAGE_FLAT_LAYOUT_ONLY is enabled

Note: it also depends on changes in #119591

To try it:

  1. Build HelloWorld (dotnet new console template)
  2. Build coreclr and libs for browser
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#testing-the-runtime
  3. Copy HelloWorld.dll and testhosts dll's to a single folder
  4. Run it with corerun or corewasmrun
    https://github.com/dotnet/runtime/blob/main/docs/workflow/building/coreclr/wasm.md#building-coreclr-for-webassembly-1

And add override pinvoke to resolve entrypoints in static bundle
@radekdoulikradekdoulik added this to the Future milestone Sep 12, 2025
@radekdoulikradekdoulik added the arch-wasm WebAssembly architecture label Sep 12, 2025
CopilotAI review requested due to automatic review settings September 12, 2025 13:36
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @mangod9
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables HelloWorld console applications to run on WebAssembly (WASM) using the corewasmrun host by implementing PInvoke support for statically linked native libraries.

  • Adds PInvoke override mechanism to resolve native function calls in static WASM binaries
  • Links System.Native statically with WASM development hosts (corerun and corewasmrun)
  • Updates PE image handling to support flat layouts required for WASM

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
src/native/libs/System.Native/entrypoints.cConditionally excludes WASM-unsupported network event functions from entry points
src/native/libs/System.Native/CMakeLists.txtIncludes entrypoints.c in WASM static builds by removing browser target exclusion
src/coreclr/vm/wasm/helpers.cppAdds placeholder implementation for timezone data function to avoid dependency
src/coreclr/vm/peimage.inlUpdates PE image layout check to support flat layouts when PEIMAGE_FLAT_LAYOUT_ONLY is enabled
src/coreclr/hosts/corewasmrun/corewasmrun.cppImplements complete HelloWorld execution with proper initialization, assembly execution, and shutdown
src/coreclr/hosts/corewasmrun/CMakeLists.txtLinks System.Native statically and includes shared WASM PInvoke override code
src/coreclr/hosts/corerun/corerun.wasm.hppHeader file declaring WASM PInvoke override initialization function
src/coreclr/hosts/corerun/corerun.wasm.cppImplements PInvoke override mechanism to resolve System.Native functions in static builds
src/coreclr/hosts/corerun/corerun.cppIntegrates WASM PInvoke override initialization into corerun host
src/coreclr/hosts/corerun/CMakeLists.txtLinks System.Native statically and includes WASM-specific source for corerun

Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corewasmrun/corewasmrun.cpp
Comment threadsrc/coreclr/hosts/corerun/CMakeLists.txt
Comment threadsrc/coreclr/vm/wasm/helpers.cpp Outdated
Comment threadsrc/native/libs/System.Native/CMakeLists.txt Outdated
radekdoulikand others added 2 commits September 12, 2025 21:13
Co-authored-by: Pavel Savara <pavelsavara@microsoft.com>
@pavelsavara
pavelsavara merged commit a3bdddc into dotnet:mainSep 13, 2025
149 of 152 checks passed
@jkotasjkotas mentioned this pull request Sep 19, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 14, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-VM-coreclr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@radekdoulik@pavelsavara@SingleAccretion