Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
a65d046
Fix calls to IL helpers from tailcalls
radekdoulik Jan 15, 2026
1016c3c
Alternative implementation
radekdoulik Jan 19, 2026
237de71
[wasm][coreclr] Build and run runtime tests on node
radekdoulik Jan 20, 2026
c7217c1
Conditinally disable tests with threads on wasm in ST scenario
radekdoulik Jan 12, 2026
7e44832
Add missing signuters for runtime tests
radekdoulik Jan 20, 2026
769df50
Build artifacts and try to run tests
radekdoulik Jan 20, 2026
32e6a77
Reduce CI to browser_wasm temporarily
radekdoulik Jan 20, 2026
b5543f2
Fix build_browser_wasm_linux_Release_CoreCLR_WasmBuildTests dependency
radekdoulik Jan 20, 2026
7942bd0
Fix build job suffix
radekdoulik Jan 20, 2026
37c67c9
Add hostedOs to the build dependency
radekdoulik Jan 20, 2026
7697993
Fix typo
radekdoulik Jan 20, 2026
3847f92
Fix hostedOs location
radekdoulik Jan 20, 2026
d345451
add jobParameters
radekdoulik Jan 20, 2026
d18ade8
Use hostedOs directly
radekdoulik Jan 20, 2026
87d1662
Try to create the missing coreclr_common_test_build_p0_AnyOS_AnyCPU_c…
radekdoulik Jan 20, 2026
c4ad36d
Fix suffix
radekdoulik Jan 20, 2026
840fea1
Use checked runtime configuration
radekdoulik Jan 21, 2026
4febea9
Fix build name for cases wiht hostedOs set
radekdoulik Jan 21, 2026
85c5607
Put back linux_x64 for CoreClrTestBuildHost
radekdoulik Jan 21, 2026
683842e
Put TestAssemblies=false back
radekdoulik Jan 22, 2026
b4c8999
[wasm][coreclr] Implement portable RhExceptionHandling_FailedAllocati…
radekdoulik Jan 22, 2026
edf3697
Merge remote-tracking branch 'remotes/rodo/clr-interp-fix-helper-call…
radekdoulik Jan 22, 2026
02a4b47
Make IsCoreClrInterpreter return true on wasm
radekdoulik Jan 29, 2026
01bd8c6
Feedback
radekdoulik Jan 29, 2026
ed88628
Prepare the runtime tests assets
radekdoulik Feb 3, 2026
faeda88
Run with node as default behavior
radekdoulik Feb 3, 2026
b7553c2
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 3, 2026
d1da106
Fix build after merge
radekdoulik Feb 3, 2026
27041fc
Add -os parameter
radekdoulik Feb 3, 2026
68c4b04
Fix build
radekdoulik Feb 3, 2026
8cd044c
Pass -os browser to the tests build
radekdoulik Feb 3, 2026
5fba3f8
Fix build after merge
radekdoulik Feb 3, 2026
e2da27d
Remove 2nd -os option
radekdoulik Feb 3, 2026
1f9b313
Build managed part of the tests
radekdoulik Feb 3, 2026
b689f1b
Override config
radekdoulik Feb 4, 2026
7e3b6f5
Set variables for native test assests
radekdoulik Feb 4, 2026
9feb2e9
Fix yml
radekdoulik Feb 4, 2026
086d6c4
Pass -os browser to build cmd
radekdoulik Feb 4, 2026
d10b749
Get the extra build args in
radekdoulik Feb 4, 2026
4cde393
Add extra build arg to job parameters
radekdoulik Feb 5, 2026
11c4b36
Set host configuration
radekdoulik Feb 5, 2026
67af18c
Try to run the tests as on desktop
radekdoulik Feb 5, 2026
c4ef0ef
Put the Test target back
radekdoulik Feb 5, 2026
3c06fd3
Use the host OS DotnetCliRuntime
radekdoulik Feb 5, 2026
1e85271
Do not set sdk style cli package type
radekdoulik Feb 6, 2026
26f8282
Use node
radekdoulik Feb 6, 2026
3640a38
Print node version before running the test
radekdoulik Feb 6, 2026
9916aec
Disable DOTNET_DbgEnableMiniDump
radekdoulik Feb 6, 2026
4f528b8
Merge remote-tracking branch 'remotes/origin/main' into clr-wasm-runt…
radekdoulik Feb 6, 2026
4c9b395
Call dotnetBrowserUtilsExports.abortBackgroundTimers() unconditionaly…
radekdoulik Feb 9, 2026
e348689
Add few signatures for tests, comment and regenerate call helpers
radekdoulik Feb 9, 2026
cd955e5
Use lighter workaround for exit code
radekdoulik Feb 9, 2026
6ba36fd
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 9, 2026
2827c65
- fix exit_code in more scenarios
pavelsavara Feb 9, 2026
2e48d6d
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
pavelsavara Feb 10, 2026
226df16
Increase memory limit to allow tests with 2GB+ requirements
radekdoulik Feb 9, 2026
4b84402
Feedback
radekdoulik Feb 10, 2026
8a8e234
Add active issues for EH throw in filter
radekdoulik Feb 10, 2026
120d69d
Rerun generator
radekdoulik Feb 10, 2026
ef6e666
Shorter run of SIMD on wasm
radekdoulik Feb 10, 2026
8978c36
More active issues
radekdoulik Feb 10, 2026
6d92904
Add 2 missing signatures + regenerate
radekdoulik Feb 10, 2026
d0816e4
Feedback
radekdoulik Feb 10, 2026
6ad4c79
Fix build
radekdoulik Feb 10, 2026
2057781
Add active issue to one more test
radekdoulik Feb 10, 2026
bbd2a3b
Add active issues to Loader tests
radekdoulik Feb 11, 2026
3992589
Update src/tests/Common/CLRTest.Execute.Bash.targets
radekdoulik Feb 11, 2026
6098ce3
Put the condition back
radekdoulik Feb 11, 2026
488b437
Update WBT template
radekdoulik Feb 11, 2026
e31ed96
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 11, 2026
fb3d330
Fix artifacts names
radekdoulik Feb 11, 2026
964803f
Add node option to run.cmd
radekdoulik Feb 11, 2026
bafd3c9
Rename the properties
radekdoulik Feb 11, 2026
e93d089
Restore the matrix
radekdoulik Feb 11, 2026
79dc457
Add comment
radekdoulik Feb 11, 2026
ba01e7a
Explicit parentheses
radekdoulik Feb 11, 2026
28887a1
Feedback
radekdoulik Feb 11, 2026
a0be891
Copilot's implementation of running with node in CLRTest.Execute.Batc…
radekdoulik Feb 11, 2026
76bafda
Use the timeout value
radekdoulik Feb 11, 2026
be1425c
Update win version
radekdoulik Feb 11, 2026
209cb90
Apply suggestion from @Copilot
radekdoulik Feb 11, 2026
545f09d
Fix run
radekdoulik Feb 11, 2026
ae6a379
Fix artifacts suffix
radekdoulik Feb 12, 2026
ef7bfe7
Do not use bc
radekdoulik Feb 12, 2026
af6321d
Skip native part of the test build on windows
radekdoulik Feb 12, 2026
ab2d4e2
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 12, 2026
ebc56f3
Revert "Skip native part of the test build on windows"
radekdoulik Feb 12, 2026
821446d
Do not build native test assets on windows
radekdoulik Feb 12, 2026
612a341
Update src/tests/Common/CLRTest.Execute.Batch.targets
radekdoulik Feb 12, 2026
2553b99
Split browser_wasm and browser_wasm_win to skip native assets build o…
radekdoulik Feb 12, 2026
5a6da68
Fix WBT artifacts name
radekdoulik Feb 12, 2026
7c19f87
Fix build config for WBT
radekdoulik Feb 12, 2026
97eb510
Fix timeout calc
radekdoulik Feb 12, 2026
afbdbc3
Escape $( for msbuild to not interpret it
radekdoulik Feb 12, 2026
eb776c0
Capitalize build config, Helix SDK seems case sensitive
radekdoulik Feb 12, 2026
0535af7
Add Release build for WBT
radekdoulik Feb 12, 2026
2da88b2
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 12, 2026
232bf3d
Fix missing artifact for WBT
radekdoulik Feb 13, 2026
12c216f
Fix the batch script for the tests
radekdoulik Feb 16, 2026
f8f8ba9
wip
pavelsavara Feb 16, 2026
339b37a
Fix paths and exit code for the runner with timeout
radekdoulik Feb 16, 2026
837ea8b
wip
pavelsavara Feb 16, 2026
9f4535d
more
pavelsavara Feb 16, 2026
3c72267
fix
pavelsavara Feb 16, 2026
de31ebc
fix
pavelsavara Feb 16, 2026
e1a23e3
Fix watchdog
radekdoulik Feb 17, 2026
237e902
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 17, 2026
171818e
Regenerate
radekdoulik Feb 17, 2026
19dce74
Emit symbols in WasmSDK
maraf Feb 17, 2026
cd807c7
Test
maraf Feb 17, 2026
8139241
Increase timeouts on browser, I see few timeouts
radekdoulik Feb 17, 2026
318d152
Report killing the test from watchdog
radekdoulik Feb 17, 2026
2e9b8eb
Kill the test only if sleep finished
radekdoulik Feb 17, 2026
031c0ce
Revert 4Gb change and active issue
radekdoulik Feb 17, 2026
08b5adc
Merge branch 'WasmSdkEmitSymbolMap' into native_js_symbols
pavelsavara Feb 17, 2026
311f504
more
pavelsavara Feb 17, 2026
bcf65a2
Merge branch 'main' into native_js_symbols
pavelsavara Feb 17, 2026
16ce9ae
Add debug print for libs tests failures
radekdoulik Feb 17, 2026
1b2f8bf
Merge branch 'main' into clr-wasm-runtime-tests-on-node-2
radekdoulik Feb 17, 2026
e7d774e
Update src/native/corehost/browserhost/loader/polyfills.ts
pavelsavara Feb 17, 2026
49281e8
Update src/native/corehost/browserhost/loader/assets.ts
pavelsavara Feb 17, 2026
8b91afc
feeedback
pavelsavara Feb 17, 2026
c365063
Update src/native/corehost/browserhost/loader/polyfills.ts
pavelsavara Feb 17, 2026
bc44ac1
Update src/native/libs/System.Native.Browser/diagnostics/symbolicate.ts
pavelsavara Feb 17, 2026
d0fdada
Update src/native/libs/System.Native.Browser/diagnostics/symbolicate.ts
pavelsavara Feb 17, 2026
0836fbe
Update src/native/corehost/browserhost/loader/logging.ts
pavelsavara Feb 17, 2026
3f59cb3
Update src/native/corehost/browserhost/loader/logging.ts
pavelsavara Feb 17, 2026
9b94935
Remove old comment
radekdoulik Feb 17, 2026
39ae198
Fix debug print
radekdoulik Feb 17, 2026
771f7db
Move prestub out of CallDescrWorkerInternal
radekdoulik Feb 17, 2026
713f800
Merge remote-tracking branch 'pavels/native_js_symbols' into rodo-tes…
radekdoulik Feb 17, 2026
a069ddf
Revert "Move prestub out of CallDescrWorkerInternal"
radekdoulik Feb 18, 2026
bb17c16
Move prestub out of CallDescrWorkerInternal
radekdoulik Feb 17, 2026
a1e9f70
Merge branch 'main' into clr-wasm-test-regression-2
radekdoulik Feb 18, 2026
fa70e3f
Fix ifdefs
radekdoulik Feb 18, 2026
9f1649a
Revert "Fix ifdefs"
radekdoulik Feb 18, 2026
6633d8d
Revert "Move prestub out of CallDescrWorkerInternal"
radekdoulik Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion eng/liveBuilds.targets
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
<!-- Set up artifact subpaths. -->
<PropertyGroup>
<CoreCLRSharedFrameworkDir>$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'sharedFramework'))</CoreCLRSharedFrameworkDir>
<LibrariesSharedFrameworkDir>$([MSBuild]::NormalizeDirectory('$(LibrariesNativeArtifactsPath)','sharedFramework'))</LibrariesSharedFrameworkDir>
<HostSharedFrameworkDir>$([MSBuild]::NormalizeDirectory('$(HostArtifactsPath)','sharedFramework'))</HostSharedFrameworkDir>
<CoreCLRCoreHostDir>$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'corehost'))</CoreCLRCoreHostDir>
<CoreCLRILCompilerDir>$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'ilc-published'))</CoreCLRILCompilerDir>
Expand All @@ -51,6 +50,7 @@
<LibrariesSharedFrameworkBinArtifactsPath Condition="'$(LibrariesSharedFrameworkBinArtifactsPath)' == ''">$(MicrosoftNetCoreAppRuntimePackRidLibTfmDir)</LibrariesSharedFrameworkBinArtifactsPath>
<LibrariesAllBinArtifactsPath Condition="'$(LibrariesAllBinArtifactsPath)' == ''">$([MSBuild]::NormalizeDirectory('$(LibrariesArtifactsPath)', 'bin', 'runtime', '$(NetCoreAppCurrent)-$(LibrariesTargetOSConfigurationArchitecture)'))</LibrariesAllBinArtifactsPath>
<LibrariesNativeArtifactsPath Condition="'$(LibrariesNativeArtifactsPath)' == ''">$([MSBuild]::NormalizeDirectory('$(LibrariesArtifactsPath)', 'bin', 'native', '$(NetCoreAppCurrent)-$(LibrariesTargetOSConfigurationArchitecture)'))</LibrariesNativeArtifactsPath>
<LibrariesSharedFrameworkDir>$([MSBuild]::NormalizeDirectory('$(LibrariesNativeArtifactsPath)','sharedFramework'))</LibrariesSharedFrameworkDir>

<CoreCLRCrossTargetComponentDirName Condition="'$(TargetArchitecture)' == 'arm64' and '$(BuildArchitecture)' != 'arm64'">x64</CoreCLRCrossTargetComponentDirName>
<CoreCLRCrossTargetComponentDirName Condition="'$(TargetArchitecture)' == 'arm' and '$(BuildArchitecture)' != 'arm' and '$(TargetsWindows)' == 'true'">x86</CoreCLRCrossTargetComponentDirName>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ jobs:
jobParameters:
dependsOn:
- ${{ if eq(platform, 'browser_wasm') }}:
- build_browser_wasm_linux_Release_AllSubsets_CoreCLR
- build_browser_wasm_linux_Release_CoreCLR
- ${{ if eq(platform, 'browser_wasm_win') }}:
- build_browser_wasm_windows_Release_AllSubsets_CoreCLR
- build_browser_wasm_windows_Release_CoreCLR
isExtraPlatforms: ${{ parameters.isExtraPlatformsBuild }}
testGroup: innerloop
nameSuffix: CoreCLR_WasmBuildTests
Expand All @@ -55,14 +55,14 @@ jobs:
displayName: Download built nugets for singlethreaded runtime
inputs:
buildType: current
artifactName: 'BuildArtifacts_browser_wasm_$(_hostedOs)_Release_AllSubsets_CoreCLR'
artifactName: 'BuildArtifacts_browser_wasm_$(_hostedOs)_Release_CoreCLR'
downloadType: single
downloadPath: '$(Build.SourcesDirectory)/artifacts'

- task: CopyFiles@2
displayName: Copy single threaded assets
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts/BuildArtifacts_browser_wasm_$(_hostedOs)_Release_AllSubsets_CoreCLR'
SourceFolder: '$(Build.SourcesDirectory)/artifacts/BuildArtifacts_browser_wasm_$(_hostedOs)_Release_CoreCLR'
TargetFolder: '$(Build.SourcesDirectory)/artifacts'
CleanTargetFolder: false

Expand All @@ -88,14 +88,14 @@ jobs:
displayName: Download Wasm.Build.Tests
inputs:
buildType: current
artifactName: WasmBuildTests_$(_hostedOs)_AllSubsets_CoreCLR
artifactName: WasmBuildTests_$(_hostedOs)_CoreCLR
downloadType: single
downloadPath: '$(Build.SourcesDirectory)/artifacts'

- task: CopyFiles@2
displayName: Copy Wasm.Build.Tests archive
inputs:
SourceFolder: '$(Build.SourcesDirectory)/artifacts/WasmBuildTests_$(_hostedOs)_AllSubsets_CoreCLR'
SourceFolder: '$(Build.SourcesDirectory)/artifacts/WasmBuildTests_$(_hostedOs)_CoreCLR'
Contents: helix/**
TargetFolder: '$(Build.SourcesDirectory)/artifacts'
CleanTargetFolder: false
Expand Down
16 changes: 13 additions & 3 deletions eng/pipelines/common/templates/runtimes/run-test-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ parameters:
archType: ''
osGroup: ''
osSubgroup: ''
hostedOs: ''
container: ''
testGroup: ''
crossBuild: false
Expand All @@ -27,6 +28,7 @@ parameters:
unifiedArtifactsName: ''
unifiedBuildNameSuffix: ''
unifiedBuildConfigOverride: ''
extraBuildArgs: ''

### Test run job

Expand All @@ -40,6 +42,8 @@ jobs:
archType: ${{ parameters.archType }}
osGroup: ${{ parameters.osGroup }}
osSubgroup: ${{ parameters.osSubgroup }}
hostedOs: ${{ parameters.hostedOs }}
extraBuildArgs: ${{ parameters.extraBuildArgs }}
container: ${{ parameters.container }}
testGroup: ${{ parameters.testGroup }}
crossBuild: ${{ parameters.crossBuild }}
Expand All @@ -64,7 +68,10 @@ jobs:
- ${{ if notIn(parameters.testGroup, 'innerloop') }}:
- '${{ parameters.runtimeFlavor }}_common_test_build_p1_AnyOS_AnyCPU_${{parameters.buildConfig }}'
- ${{ if ne(parameters.unifiedArtifactsName, '')}}:
- 'build_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ coalesce(parameters.unifiedBuildConfigOverride, parameters.buildConfig) }}_${{ parameters.unifiedBuildNameSuffix }}'
- ${{ if eq(parameters.hostedOs, '')}}:
- 'build_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ coalesce(parameters.unifiedBuildConfigOverride, parameters.buildConfig) }}_${{ parameters.unifiedBuildNameSuffix }}'
- ${{ if ne(parameters.hostedOs, '')}}:
- 'build_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.hostedOs }}_${{ coalesce(parameters.unifiedBuildConfigOverride, parameters.buildConfig) }}_${{ parameters.unifiedBuildNameSuffix }}'

# Compute job name from template parameters
${{ if in(parameters.testGroup, 'innerloop') }}:
Expand All @@ -83,6 +90,9 @@ jobs:
- name: archType
value: ${{ parameters.archType }}

- name: extraBuildArgs
value: ${{ parameters.extraBuildArgs }}

- name: monoAotBuildshCommand
value: ''

Expand Down Expand Up @@ -233,13 +243,13 @@ jobs:
# and directly unzip them there after download). Unfortunately the logic to copy
# the native artifacts to the final test folders is dependent on availability of the
# managed test artifacts. This step also generates the final test execution scripts.
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) copynativeonly $(logRootNameArg)Native $(testFilterArg) $(runtimeFlavorArgs) $(crossgenArg) $(buildConfig) $(archType) $(priorityArg) $(librariesOverrideArg) $(codeFlowEnforcementArg)
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) copynativeonly $(logRootNameArg)Native $(testFilterArg) $(runtimeFlavorArgs) $(crossgenArg) $(buildConfig) $(archType) $(priorityArg) $(librariesOverrideArg) $(codeFlowEnforcementArg) $(extraBuildArgs)
displayName: Copy native test components to test output folder

# Compose the Core_Root folder containing all artifacts needed for running
# CoreCLR tests. This step also compiles the framework using Crossgen2
# in ReadyToRun jobs.
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) generatelayoutonly $(logRootNameArg)Layout $(runtimeFlavorArgs) $(crossgenArg) $(buildConfig) $(archType) $(crossArg) $(priorityArg) $(librariesOverrideArg) $(runtimeVariantArg) -ci
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) generatelayoutonly $(logRootNameArg)Layout $(runtimeFlavorArgs) $(crossgenArg) $(buildConfig) $(archType) $(crossArg) $(priorityArg) $(librariesOverrideArg) $(runtimeVariantArg) -ci $(extraBuildArgs)
displayName: Generate CORE_ROOT

# Build a Mono LLVM AOT cross-compiler for non-amd64 targets (in this case, just arm64)
Expand Down
5 changes: 5 additions & 0 deletions eng/pipelines/common/templates/runtimes/test-variables.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ variables:
value: 10
- name: timeoutPerTestCollectionInMinutes
value: 30
- ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), eq(parameters.osGroup, 'browser')) }}:
- name: timeoutPerTestInMinutes
value: 15
- name: timeoutPerTestCollectionInMinutes
value: 45
- ${{ if in(parameters.testGroup, 'outerloop') }}:
- name: timeoutPerTestCollectionInMinutes
value: 120
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Build the native assets for the tests in the src/tests
parameters:
compiler: ''
extraBuildArgs: ''

steps:
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) skipmanaged skipgeneratelayout $(nativeTestArtifactConfig) $(archType) $(crossArg) $(priorityArg) ${{ parameters.compiler }}
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) skipmanaged skipgeneratelayout $(nativeTestArtifactConfig) $(archType) $(crossArg) $(priorityArg) ${{ parameters.extraBuildArgs }} ${{ parameters.compiler }}
displayName: Build native test components
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
Expand Down
120 changes: 116 additions & 4 deletions eng/pipelines/runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ extends:
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true),
eq(variables['isRollingBuild'], true))

# Release build of browser wasm for WBT
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
Expand All @@ -111,13 +112,104 @@ extends:
- browser_wasm
- browser_wasm_win
jobParameters:
nameSuffix: AllSubsets_CoreCLR
buildArgs: -s clr+libs+libs.tests+packs -c $(_BuildConfig) -lc Release /p:TestAssemblies=false /p:TestWasmBuildTests=true /p:ArchiveTests=true /p:InstallWorkloadForTesting=false
nameSuffix: CoreCLR
buildArgs: -s clr+libs+libs.tests+packs -c Release -rc $(_BuildConfig) /p:TestAssemblies=false /p:TestWasmBuildTests=true /p:ArchiveTests=true /p:InstallWorkloadForTesting=false
timeoutInMinutes: 120
postBuildSteps:
- template: /eng/pipelines/common/templates/runtimes/build-runtime-tests.yml
- template: /eng/pipelines/common/wasm-post-build-steps.yml
parameters:
publishArtifactsForWorkload: true
publishWBT: true
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
parameters:
testGroup: innerloop
liveLibrariesBuildConfig: Release
condition: >-
or(
eq(variables['wasmDarcDependenciesChanged'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_wasm_coreclr_runtimetests.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- browser_wasm
jobParameters:
nameSuffix: CoreCLR_ReleaseLibraries
buildArgs: -s clr+libs+libs.tests+packs -c Release -rc $(_BuildConfig) /p:TestAssemblies=false /p:ArchiveTests=true /p:InstallWorkloadForTesting=false
timeoutInMinutes: 120
postBuildSteps:
- template: /eng/pipelines/coreclr/templates/build-native-test-assets-step.yml
parameters:
extraBuildArgs: -os browser
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/artifacts/bin
includeRootFolder: false
archiveType: $(archiveType)
archiveExtension: $(archiveExtension)
tarCompression: $(tarCompression)
artifactName: CoreCLR_ReleaseLibraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
displayName: Build Assets
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/artifacts/helix
includeRootFolder: false
archiveType: $(archiveType)
archiveExtension: $(archiveExtension)
tarCompression: $(tarCompression)
artifactName: CoreCLR_ReleaseLibraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
- template: /eng/pipelines/common/wasm-post-build-steps.yml
parameters:
publishArtifactsForWorkload: true
publishWBT: true
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
parameters:
testGroup: innerloop
liveLibrariesBuildConfig: Release
- template: /eng/pipelines/common/templates/runtimes/native-test-assets-variables.yml
parameters:
testGroup: innerloop
condition: >-
or(
eq(variables['wasmDarcDependenciesChanged'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_tools_illink.containsChange'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_wasm_coreclr_runtimetests.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
buildConfig: checked
platforms:
- browser_wasm_win
jobParameters:
nameSuffix: CoreCLR_ReleaseLibraries
buildArgs: -s clr+libs+libs.tests+packs -c Release -rc $(_BuildConfig) /p:TestAssemblies=false /p:ArchiveTests=true /p:InstallWorkloadForTesting=false
timeoutInMinutes: 120
postBuildSteps:
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/artifacts/bin
includeRootFolder: false
archiveType: $(archiveType)
archiveExtension: $(archiveExtension)
tarCompression: $(tarCompression)
artifactName: CoreCLR_ReleaseLibraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
displayName: Build Assets
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
testBuildArgs: test JIT/interpreter/Interpreter.csproj
rootFolder: $(Build.SourcesDirectory)/artifacts/helix
includeRootFolder: false
archiveType: $(archiveType)
archiveExtension: $(archiveExtension)
tarCompression: $(tarCompression)
artifactName: CoreCLR_ReleaseLibraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
- template: /eng/pipelines/common/wasm-post-build-steps.yml
parameters:
publishArtifactsForWorkload: true
Expand Down Expand Up @@ -1614,6 +1706,26 @@ extends:
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_runtimetests.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
buildConfig: checked
platforms:
- browser_wasm
helixQueueGroup: pr
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
jobParameters:
testGroup: innerloop
liveLibrariesBuildConfig: Release
unifiedArtifactsName: CoreCLR_ReleaseLibraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
unifiedBuildNameSuffix: CoreCLR_ReleaseLibraries
extraBuildArgs: -os browser -p:HostConfiguration=Release
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_runtimetests.containsChange'], true),
eq(variables['isRollingBuild'], true))

- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/hosts/corerun/corerun.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,7 @@ static int run(const configuration& config)
// The NodeJS process is kept alive by pending async work via safeSetTimeout() -> runtimeKeepalivePush()
// The actual exit code would be set by SystemJS_ResolveMainPromise if the managed Main() is async.
// Or in Module.onExit handler when managed Main() is synchronous.
return 0;
return exit_code;
#else // TARGET_BROWSER
return corerun_shutdown(exit_code);
#endif // TARGET_BROWSER
Expand Down
30 changes: 14 additions & 16 deletions src/coreclr/hosts/corerun/wasm/libCorerun.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ function libCoreRunFactory() {
"$FS",
"$NODEFS",
"$NODERAWFS",
"corerun_shutdown"
"corerun_shutdown",
"__funcs_on_exit",
];
const mergeCoreRun = {
$CORERUN: {
Expand All @@ -25,24 +26,21 @@ function libCoreRunFactory() {
}

ENV["DOTNET_SYSTEM_GLOBALIZATION_INVARIANT"] = "true";
const originalExitJS = exitJS;
exitJS = (status, implicit) => {
if (!implicit) {
EXITSTATUS = status;
ABORT = true;

Module.preInit = [() => {
const orig_funcs_on_exit = ___funcs_on_exit;
// it would be better to use addOnExit(), but it's called too late.
___funcs_on_exit = () => {
// this will prevent more timers (like finalizer) to get scheduled during thread destructor
if (dotnetBrowserUtilsExports.abortBackgroundTimers) {
dotnetBrowserUtilsExports.abortBackgroundTimers();
}
}
if (!keepRuntimeAlive()) {
ABORT = true;
var latched = _corerun_shutdown(EXITSTATUS || 0);
if (EXITSTATUS === undefined) {
EXITSTATUS = latched;
}
}
return originalExitJS(EXITSTATUS, implicit);
};
EXITSTATUS = _corerun_shutdown(EXITSTATUS || 0);
orig_funcs_on_exit();
};

}, ...(Module.preInit || [])];

},
},
$CORERUN__postset: "CORERUN.selfInitialize()",
Expand Down
2 changes: 2 additions & 0 deletions src/coreclr/vm/dllimport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6197,10 +6197,12 @@ EXTERN_C void LookupUnmanagedCallersOnlyMethodByName(const char* fullQualifiedTy
&& pMD->HasUnmanagedCallersOnlyAttribute())
{
*ppMD = pMD;
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
return;
}
}

printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
Comment on lines +6200 to +6205
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

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

Debug printf statements should not be committed to production code. These should be replaced with proper logging or removed entirely.

Suggested change
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
return;
}
}
printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
return;
}
}

Copilot uses AI. Check for mistakes.
Comment on lines 6199 to +6205
Copy link

Copilot AI Feb 18, 2026

Choose a reason for hiding this comment

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

Debug printf statement should not be committed to production code. This will output to stdout in all builds, not just debug builds. If logging is needed, use appropriate logging mechanisms or wrap in #ifdef _DEBUG.

Suggested change
*ppMD = pMD;
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
return;
}
}
printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
*ppMD = pMD;
#ifdef _DEBUG
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
#endif // _DEBUG
return;
}
}
#ifdef _DEBUG
printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
#endif // _DEBUG

Copilot uses AI. Check for mistakes.
Comment on lines 6199 to +6205
Copy link

Copilot AI Feb 18, 2026

Choose a reason for hiding this comment

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

Debug printf statement should not be committed to production code. This will output to stdout in all builds, not just debug builds. If logging is needed, use appropriate logging mechanisms or wrap in #ifdef _DEBUG.

Suggested change
*ppMD = pMD;
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
return;
}
}
printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
*ppMD = pMD;
#ifdef _DEBUG
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
#endif // _DEBUG
return;
}
}
#ifdef _DEBUG
printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
#endif // _DEBUG

Copilot uses AI. Check for mistakes.
Comment on lines +6200 to +6205
Copy link

Copilot AI Feb 18, 2026

Choose a reason for hiding this comment

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

The new printf diagnostics in LookupUnmanagedCallersOnlyMethodByName will emit to stdout on every lookup, which can severely impact performance and pollute test output/logs. Please remove these prints or gate them behind an existing logging facility/conditional compilation (e.g., a debug-only or feature-specific trace macro).

Suggested change
printf("Found UCO method %s on type %s\n", methodName, fullQualifiedTypeName);
return;
}
}
printf("Did not find UCO method %s on type %s, looking for a method with the given name\n", methodName, fullQualifiedTypeName);
return;
}
}

Copilot uses AI. Check for mistakes.
// Fallback if no UCO match found.
*ppMD = MemberLoader::FindMethodByName(pMT, methodName);
}
Expand Down
Loading
Loading