Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
494d4c5
Add packages and CI for multithreaded debug config.
yowl Jul 5, 2025
46699a7
use nameSuffix in preference to new platforms.
yowl Jul 7, 2025
7fc1d34
Dont emulate for Multithreaded
yowl Jul 8, 2025
e8e2de4
balance brackets
yowl Jul 8, 2025
301c775
pass WasmEnableThreads to build the packages to get the right name
yowl Jul 9, 2025
456f600
set DCLR_CMAKE_TARGET_OS_SUBGROUP in runtime.proj
yowl Jul 9, 2025
4099b10
Remove CLR_CMAKE_TARGET_OS_SUBGROUP from yml
yowl Jul 10, 2025
c3ed443
disable PackagingTests for multithread
yowl Jul 11, 2025
3261466
remove cmakeargs arg from yml and docs.
yowl Jul 13, 2025
900df40
add wasmEnableThreadsArg
yowl Jul 13, 2025
8ccf2ec
Remove PalGetMaximumStackBounds_MultiThreadedWasm and add pthread_att…
yowl Jul 13, 2025
d494b8e
revert
yowl Jul 14, 2025
06f4e2d
Update eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
yowl Jul 15, 2025
2672e75
address feedback for running tests.
yowl Jul 16, 2025
3b7cfbc
Merge branch 'FEATURE_WASM_MANAGED_THREADS' of https://github.com/yow…
yowl Jul 16, 2025
ddf7606
remove D_WASI_EMULATED_PTHREAD
yowl Jul 16, 2025
9f681c6
Add todo for zlib-ng
yowl Jul 16, 2025
384c77e
put back the nameSuffix check for wasm on linux arm
yowl Jul 17, 2025
f52f534
dont run test for browser mt
yowl Jul 17, 2025
3f6f0ed
pass osSubGroup down in more places.
yowl Jul 17, 2025
0a72ac1
Merge remote-tracking branch 'origin/feature/NativeAOT-LLVM' into FEA…
yowl Jul 17, 2025
f39a0cb
remove wasi from multithread ci
yowl Jul 19, 2025
539edc4
revert ws cchange
yowl Jul 19, 2025
f49ca4d
revert ws change
yowl Jul 19, 2025
521afe1
Change CLR_CMAKE_TARGET_OS_SUBGROUP to CMAKE_USE_PTHREADS
yowl Jul 19, 2025
1b4daba
remove atomics and bulk memory
yowl Jul 19, 2025
5be5163
remove wasi workaround
yowl Jul 19, 2025
44eba75
remove wasi pthread stubs
yowl Jul 20, 2025
1e6d545
remove FeatureWasmPerfTracing
yowl Jul 20, 2025
9073092
Update eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
yowl Jul 20, 2025
f9597f7
Update src/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp
yowl Jul 20, 2025
e47224c
Apply suggestions from code review
yowl Jul 20, 2025
024e938
Update eng/pipelines/common/platform-matrix.yml
yowl Jul 20, 2025
9f213e9
simplify yml
yowl Jul 20, 2025
c2c2c37
Merge branch 'FEATURE_WASM_MANAGED_THREADS' of https://github.com/yow…
yowl Jul 20, 2025
6483fb1
Update eng/pipelines/runtimelab.yml
yowl Jul 20, 2025
0a8d87e
feedback for docs
yowl Jul 21, 2025
1ecfb04
Merge branch 'FEATURE_WASM_MANAGED_THREADS' of https://github.com/yow…
yowl Jul 21, 2025
fae5d14
match brackets
yowl Jul 21, 2025
fb468b9
suppress no-pthreads-mem-growt
yowl Jul 22, 2025
250b2a6
Update eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
yowl Jul 22, 2025
06dacf0
Update src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Nativ…
yowl Jul 22, 2025
d6ccf55
Update docs/workflow/building/coreclr/nativeaot.md
jkotas Jul 22, 2025
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
13 changes: 13 additions & 0 deletions docs/workflow/building/coreclr/nativeaot.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,19 @@ You should now be able to publish the project for Wasm: `dotnet publish -r brows

Once you build the repo, you can use the produced binaries in one of four ways specified below ("Using built binaries", "Building packages", "Convenience Visual Studio "repro" project", "Running tests").

## Building for Multithreaded packages

This is a work in progress and far from functional. Currently there exists just enough infrastructure to build packages for multithreaded runtime and libs, but they are not functional in the sense that they support multithreaded programs yet.
To build the browser multithreaded packages:
```
build clr.aot+libs+nativeaot.packages -c Debug -a wasm -os browser '/p:WasmEnableThreads=true'
```
To build the runtime tests for browser
```
src\tests\build nativeaot Debug wasm tree nativeaot browser /p:LibrariesConfiguration=debug /p:WasmEnableThreads=true
```


### Using built binaries

In this workflow, you have a project file that you want to `dotnet publish`, but you want to use your own build of the compiler/runtime/framework. You need to be using a daily build of the .NET SDK downloaded from the dotnet/sdk repo. It's typically enough to just download the daily build ZIP file, unpack it, and make sure the unpacked directory is the first thing in your PATH. Don't forget to add a NuGet.config as specified by the dotnet/sdk repo- you'll hit restore issues otherwise.
Expand Down
4 changes: 4 additions & 0 deletions eng/native/configurecompiler.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@ elseif (CLR_CMAKE_HOST_UNIX)
add_compile_options(-Wno-alloca)
add_compile_options(-Wno-implicit-int-float-conversion)
endif()

if (CMAKE_USE_PTHREADS AND CLR_CMAKE_HOST_BROWSER)
add_compile_options(-pthread)
endif(CMAKE_USE_PTHREADS AND CLR_CMAKE_HOST_BROWSER)
endif(MSVC)

if (CLR_CMAKE_ENABLE_SANITIZERS)
Expand Down
20 changes: 20 additions & 0 deletions eng/pipelines/runtimelab.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,26 @@ extends:
parameters:
librariesConfiguration: Debug

#
# Build and test Wasm Debug multithreaded libraries and Debug runtime
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
buildConfig: debug
platforms:
- browser_wasm_win
jobParameters:
timeoutInMinutes: 300
buildArgs: -s clr.aot+libs -c debug -rc $(_BuildConfig) '/p:WasmEnableThreads=true'
nameSuffix: Multithreaded
postBuildSteps:
- template: /eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
parameters:
librariesConfiguration: Debug
wasmEnableThreadsArg: /p:WasmEnableThreads=true

#
# Build and test with Debug libraries and Checked runtime
#
Expand Down
14 changes: 8 additions & 6 deletions eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ parameters:
runtimeVariant: ''
isOfficialBuild: false
librariesConfiguration: Debug
wasmEnableThreadsArg: ''

steps:
# For NativeAOT-LLVM, we have just built the Wasm-targeting native artifacts (the runtime and libraries).
Expand All @@ -17,7 +18,7 @@ steps:
displayName: Build the ILC and RyuJit cross-compilers

# Build target packages (note: target libs already built).
- script: $(Build.SourcesDirectory)/build$(scriptExt) nativeaot.packages -os ${{ parameters.osGroup }} -a wasm -c $(buildConfigUpper) $(_officialBuildParameter) -ci
- script: $(Build.SourcesDirectory)/build$(scriptExt) nativeaot.packages -os ${{ parameters.osGroup }} -a wasm -c $(buildConfigUpper) $(_officialBuildParameter) -ci $(wasmEnableThreadsArg)
displayName: Build target packages

# Build host packages.
Expand All @@ -26,12 +27,12 @@ steps:

# Build coreclr native test output outside of official build
- ${{ if ne(parameters.isOfficialBuild, true) }}:
- ${{ if and(eq(parameters.archType, 'wasm'), ne(parameters.nameSuffix, '')) }}:
- ${{ if and(eq(parameters.archType, 'wasm'), ne(parameters.nameSuffix, ''), eq(parameters.wasmEnableThreadsArg, '')) }}:
- script: pwsh $(Build.SourcesDirectory)/eng/pipelines/runtimelab/set-ilc-emulation-environment.ps1 -Arch $(hostedTargetArch)
displayName: Set up ILC emulation environment

- ${{ if eq(parameters.archType, 'wasm') }}:
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) nativeaot $(buildConfigUpper) ${{ parameters.osGroup }} $(crossArg) $(_officialBuildParameter) ci tree nativeaot /p:LibrariesConfiguration=${{ parameters.librariesConfiguration }}
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) nativeaot $(buildConfigUpper) ${{ parameters.osGroup }} $(crossArg) $(_officialBuildParameter) ci tree nativeaot /p:LibrariesConfiguration=${{ parameters.librariesConfiguration }} ${{ parameters.wasmEnableThreadsArg }}
displayName: Build runtime tests
- ${{ else }}:
- ${{ if eq(parameters.osGroup, 'windows') }}:
Expand All @@ -42,14 +43,15 @@ steps:
displayName: Build runtime tests

- ${{ if contains(parameters.platform, 'win') }}:
- script: $(Build.SourcesDirectory)/src/tests/run$(scriptExt) runnativeaottests $(buildConfigUpper) ${{ parameters.archType }} ${{ parameters.osGroup }}
displayName: Run runtime tests
- ${{ if eq(parameters.wasmEnableThreadsArg, '') }}:
- script: $(Build.SourcesDirectory)/src/tests/run$(scriptExt) runnativeaottests $(buildConfigUpper) ${{ parameters.archType }} ${{ parameters.osGroup }}
displayName: Run runtime tests
- ${{ else }}:
- script: $(Build.SourcesDirectory)/src/tests/run$(scriptExt) --runnativeaottests $(buildConfigUpper) ${{ parameters.archType }} ${{ parameters.osGroup }}
displayName: Run runtime tests

# Don't compile/run the libraries tests with emulated ILC to save CI time/resources.
- ${{ if and(eq(parameters.archType, 'wasm'), eq(parameters.nameSuffix, '')) }}:
- ${{ if and(eq(parameters.archType, 'wasm'), eq(parameters.nameSuffix, ''), eq(parameters.wasmEnableThreadsArg, '')) }}:
- script: $(Build.SourcesDirectory)/build$(scriptExt) libs.tests -test -a ${{ parameters.archType }} -os ${{ parameters.osGroup }} -lc ${{ parameters.librariesConfiguration }} -rc $(buildConfigUpper) /p:TestNativeAot=true /p:RunSmokeTestsOnly=true
displayName: Build and run WebAssembly libraries tests

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ The .NET Foundation licenses this file to you under the MIT license.
<CompileWasmArgs Condition="'$(NativeDebugSymbols)' == 'true'">$(CompileWasmArgs) -g3</CompileWasmArgs>
<CompileWasmArgs Condition="'$(WasmEnableNonTrappingFloatToIntConversions)' == 'true'">$(CompileWasmArgs) -mnontrapping-fptoint</CompileWasmArgs>
<CompileWasmArgs Condition="'$(IlcLlvmExceptionHandlingModel)' == 'wasm'">$(CompileWasmArgs) -fwasm-exceptions</CompileWasmArgs>
<CompileWasmArgs Condition="'$(WasmEnableThreads)' == 'true'">$(CompileWasmArgs) -pthread</CompileWasmArgs>
</PropertyGroup>

<PropertyGroup Condition="'$(_targetOS)' == 'browser'">
Expand Down Expand Up @@ -604,6 +605,8 @@ The .NET Foundation licenses this file to you under the MIT license.
<CustomLinkerArg Include="-s MAXIMUM_MEMORY=$(EmccMaximumHeapSize)" Condition="'$(EmccMaximumHeapSize)' != ''" />
<CustomLinkerArg Include="-s INITIAL_MEMORY=$(EmccInitialHeapSize)" Condition="'$(EmccInitialHeapSize)' != ''" />
<CustomLinkerArg Include="-s ASSERTIONS=1" Condition="'$(EmccEnableAssertions)' == 'true'" />
<CustomLinkerArg Include="-pthread" Condition="'$(WasmEnableThreads)' == 'true'"/>
<CustomLinkerArg Include="-Wno-pthreads-mem-growth" Condition="'$(WasmEnableThreads)' == 'true'"/>

<!-- See https://github.com/dotnet/runtimelab/issues/2357 for why we don't run wasm-opt (it would mangle our strack trace info). -->
<CustomLinkerArg Condition="'$(Optimize)' == 'true'" Include="-O1" />
Expand Down
6 changes: 6 additions & 0 deletions src/coreclr/nativeaot/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ if(CLR_CMAKE_TARGET_OS STREQUAL wasi)
add_definitions(-DTARGET_UNIX)
endif(CLR_CMAKE_TARGET_OS STREQUAL wasi)

if((CLR_CMAKE_TARGET_OS STREQUAL wasi OR CLR_CMAKE_TARGET_OS STREQUAL emscripten)
AND CMAKE_USE_PTHREADS)
add_definitions(-DFEATURE_WASM_MANAGED_THREADS)
endif((CLR_CMAKE_TARGET_OS STREQUAL wasi OR CLR_CMAKE_TARGET_OS STREQUAL emscripten)
AND CMAKE_USE_PTHREADS)

if(CLR_CMAKE_TARGET_ANDROID)
add_definitions(-DFEATURE_EMULATED_TLS)
endif()
Expand Down
5 changes: 5 additions & 0 deletions src/coreclr/nativeaot/Runtime/eventpipe/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ project(Runtime)

include(FindPython)

# Workaround from https://github.com/dotnet/runtime/pull/117513
if (NOT "$ENV{EMSDK_PYTHON}" STREQUAL "")
set(Python_EXECUTABLE "$ENV{EMSDK_PYTHON}")
endif()

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(EVENT_MANIFEST ${VM_DIR}/ClrEtwAll.man)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@
<PropertyGroup Condition="'$(TargetsSingleThreadedWasm)' != 'true'">
<FeaturePortableThreadPool>true</FeaturePortableThreadPool>
<FeaturePortableTimer>true</FeaturePortableTimer>
<!-- LLVM-TODO: Remove FeatureWasmManagedThreads in favor of WasmEnableThreads. -->
<FeatureWasmManagedThreads Condition="'$(WasmEnableThreads)' == 'true'">true</FeatureWasmManagedThreads>
<DefineConstants Condition="'$(WasmEnableThreads)' == 'true'">$(DefineConstants);FEATURE_WASM_MANAGED_THREADS</DefineConstants>
</PropertyGroup>
<PropertyGroup>
<FeatureHardwareIntrinsics>true</FeatureHardwareIntrinsics>
Expand Down Expand Up @@ -347,6 +350,8 @@
<Compile Include="System\Diagnostics\StackFrame.NativeAot.Wasm.cs" />
<Compile Include="System\Diagnostics\StackFrame.NativeAot.Wasi.cs" Condition="'$(TargetsWasi)' == 'true'" />
<Compile Include="System\Diagnostics\StackFrame.NativeAot.Browser.cs" Condition="'$(TargetsBrowser)' == 'true'" />
<Compile Include="$(MonoBclSourcesRoot)\System\Threading\PortableThreadPool.Browser.Threads.Mono.cs" Condition="'$(TargetsBrowser)' == 'true' and '$(WasmEnableThreads)' == 'true'" />
<Compile Include="$(MonoBclSourcesRoot)\System\Threading\ThreadPool.Browser.Threads.Mono.cs" Condition="'$(TargetsBrowser)' == 'true' and '$(WasmEnableThreads)' == 'true'" />
</ItemGroup>

<!-- WASM-specific things. Keep in sync with Mono. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,9 @@ public static bool IsEntered(object obj)

#region Public Wait/Pulse methods

#if !FEATURE_WASM_MANAGED_THREADS
[UnsupportedOSPlatform("browser")]
#endif
public static bool Wait(object obj, int millisecondsTimeout)
{
return GetCondition(obj).Wait(millisecondsTimeout, obj);
Expand Down
4 changes: 4 additions & 0 deletions src/coreclr/runtime.proj
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@
<_CoreClrBuildArg Include="-cmakeargs &quot;-DCLR_CMAKE_ESRP_CLIENT=$(DotNetEsrpToolPath)&quot;" />
</ItemGroup>

<ItemGroup Condition="'$(WasmEnableThreads)' == 'true'">
<_CoreClrBuildArg Include="-cmakeargs &quot;-DCMAKE_USE_PTHREADS=1&quot;" />
</ItemGroup>

<PropertyGroup>
<_CoreClrBuildScript Condition="$([MSBuild]::IsOsPlatform(Windows))">build-runtime.cmd</_CoreClrBuildScript>
<_CoreClrBuildScript Condition="!$([MSBuild]::IsOsPlatform(Windows))">build-runtime.sh</_CoreClrBuildScript>
Expand Down
3 changes: 2 additions & 1 deletion src/installer/pkg/projects/nativeaot-packages.proj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
<ItemGroup>
<Project Include="Microsoft.DotNet.ILCompiler.LLVM\Microsoft.DotNet.ILCompiler.LLVM.pkgproj" />
<ProjectReference Include="@(Project)" />
<ProjectReference Include="@(Project)" AdditionalProperties="PackageTargetRuntime=$(OutputRID)" />
<ProjectReference Include="@(Project)" Condition="'$(WasmEnableThreads)' != 'true'" AdditionalProperties="PackageTargetRuntime=$(OutputRID)" />
<ProjectReference Include="@(Project)" Condition="'$(WasmEnableThreads)' == 'true'" AdditionalProperties="PackageTargetRuntime=multithread.$(OutputRID)" />
<ProjectReference Condition="'$(BuildHostTools)' == 'true'" Include="@(Project)" AdditionalProperties="PackageTargetRuntime=$(NETCoreSdkRuntimeIdentifier);PackHostILCompiler=true" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,30 @@ internal static unsafe partial class Runtime
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_cancel_promise", StringMarshalling = StringMarshalling.Utf16)]
public static unsafe partial void CancelPromise(IntPtr gcHandle);

#if FEATURE_WASM_MANAGED_THREADS
// Required by JavaScript/JSFunctionBinding.cs
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_invoke_js_function_send")]
public static unsafe partial void InvokeJSFunctionSend(nint targetNativeTID, nint functionHandle, nint data);
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_invoke_jsimport_MT")]
public static unsafe partial void InvokeJSImportSync(nint signature, nint args);
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_invoke_jsimport_sync_send")]
public static unsafe partial void InvokeJSImportSyncSend(nint targetNativeTID, nint signature, nint args);
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_invoke_jsimport_async_post")]
public static unsafe partial void InvokeJSImportAsyncPost(nint targetNativeTID, nint signature, nint args);
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_resolve_or_reject_promise_post")]
public static unsafe partial void ResolveOrRejectPromisePost(nint targetNativeTID, nint data);
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_install_js_worker_interop_wrapper")]
public static unsafe partial void InstallWebWorkerInterop(nint proxyContextGCHandle, void* beforeSyncJSImport, void* afterSyncJSImport, void* pumpHandler);
// Required by JavaScript/JSProxyContext.cs
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_release_cs_owned_object_post")]
internal static unsafe partial void ReleaseCSOwnedObjectPost(nint targetNativeTID, nint jsHandle);
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_uninstall_js_worker_interop")]
public static unsafe partial void UninstallWebWorkerInterop();
// Required by JavaScript/CancelablePromise.cs
[LibraryImport(JSLibrary, EntryPoint = "mono_wasm_cancel_promise_post")]
public static unsafe partial void CancelPromisePost(nint targetNativeTID, nint taskHolderGCHandle);
#endif

#region Not used by NativeAOT
public static IntPtr RegisterGCRoot(void* start, int bytesSize, IntPtr name) => throw new NotImplementedException();
public static void DeregisterGCRoot(IntPtr handle) => throw new NotImplementedException();
Expand Down
3 changes: 2 additions & 1 deletion src/mono/browser/runtime/loader/polyfills.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ export function verifyEnvironment () {
mono_assert(ENVIRONMENT_IS_SHELL || typeof globalThis.URL === "function", "This browser/engine doesn't support URL API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features");
mono_assert(typeof globalThis.BigInt64Array === "function", "This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features");
if (WasmEnableThreads) {
mono_assert(!ENVIRONMENT_IS_SHELL && !ENVIRONMENT_IS_NODE, "This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS. See also https://aka.ms/dotnet-wasm-features");
// TODO-LLVM: Comment this check out for now so we can run at least some tests.
//mono_assert(!ENVIRONMENT_IS_SHELL && !ENVIRONMENT_IS_NODE, "This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS. See also https://aka.ms/dotnet-wasm-features");
mono_assert(globalThis.SharedArrayBuffer !== undefined, "SharedArrayBuffer is not enabled on this page. Please use a modern browser and set Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy http headers. See also https://aka.ms/dotnet-wasm-features");
mono_assert(typeof globalThis.EventTarget === "function", "This browser/engine doesn't support EventTarget API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features");
}
Expand Down
5 changes: 5 additions & 0 deletions src/tests/Common/dirs.proj
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
<DisabledProjects Include="$(TestRoot)readytorun\**\*.csproj" Condition="'$(TestBuildMode)' == 'nativeaot'" />
</ItemGroup>

<!-- TODO-LLVM: Reinstate when more thread support is implemented. -->
<ItemGroup Condition="'$(WasmEnableThreads)' == 'true'">
<DisabledProjects Include="$(TestRoot)nativeaot\**\PackagingTests.csproj" />
</ItemGroup>

<ItemGroup>
<!-- These projects are built separately in an isolated way. -->
<DisabledProjects Include="$(TestRoot)nativeaot\SmokeTests\HelloWasm\PackagingTests\*.csproj" />
Expand Down
1 change: 1 addition & 0 deletions src/tests/build.proj
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,7 @@
<GroupBuildCmd Condition="'$(MonoForceInterpreter)' == 'true'">$(GroupBuildCmd) "/p:MonoForceInterpreter=true"</GroupBuildCmd>
<GroupBuildCmd Condition="'$(RunAOTCompilation)' == 'true'">$(GroupBuildCmd) "/p:RunAOTCompilation=true"</GroupBuildCmd>
<GroupBuildCmd Condition="'$(DevTeamProvisioning)' != ''">$(GroupBuildCmd) "/p:DevTeamProvisioning=$(DevTeamProvisioning)"</GroupBuildCmd>
<GroupBuildCmd Condition="'$(WasmEnableThreads)' != ''">$(GroupBuildCmd) "/p:WasmEnableThreads=$(WasmEnableThreads)"</GroupBuildCmd>
</PropertyGroup>

<Message Importance="High" Text="$(MsgPrefix)Building managed test group $(__TestGroupToBuild): $(GroupBuildCmd)" />
Expand Down