Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
21 changes: 15 additions & 6 deletions eng/liveBuilds.targets
Original file line number Diff line number Diff line change
Expand Up @@ -233,22 +233,31 @@

<LibrariesRuntimeFiles Condition="'$(TargetOS)' == 'browser' and '$(RuntimeFlavor)' == 'CoreCLR'"
Include="
$(CoreCLRSharedFrameworkDir)libcoreclr_static.a;
$(CoreCLRSharedFrameworkDir)libcoreclrminipal.a;
$(CoreCLRSharedFrameworkDir)libcoreclrpal.a;
$(CoreCLRSharedFrameworkDir)libgcinfo_unix_wasm.a;
$(CoreCLRSharedFrameworkDir)libnativeresourcestring.a;
$(LibrariesSharedFrameworkDir)package.json;
$(LibrariesSharedFrameworkDir)dotnet.d.ts;
$(LibrariesSharedFrameworkDir)*.map;
$(LibrariesSharedFrameworkDir)*.js;
$(LibrariesSharedFrameworkDir)*.a;
$(LibrariesSharedFrameworkDir)*.dat;
$(HostSharedFrameworkDir)libBrowserHost.a;
$(HostSharedFrameworkDir)dotnet.native.js;
$(HostSharedFrameworkDir)dotnet.native.js.symbols;
$(HostSharedFrameworkDir)dotnet.native.wasm;
$(RepoRoot)src\native\libs\System.Native.Browser\libSystem.Native.Browser.extpost.js;
"
IsNative="true" />
<!-- Include .a files from LibrariesSharedFrameworkDir, excluding those already in CoreCLRSharedFrameworkDir (added via RuntimeFiles) -->
<LibrariesRuntimeFiles Condition="'$(TargetOS)' == 'browser' and '$(RuntimeFlavor)' == 'CoreCLR'"
Include="$(LibrariesSharedFrameworkDir)*.a"
Exclude="
$(LibrariesSharedFrameworkDir)libminipal.a;
$(LibrariesSharedFrameworkDir)libSystem.IO.Compression.Native.a;
$(LibrariesSharedFrameworkDir)libz.a"
IsNative="true" />

<LibrariesRuntimeFiles Condition="'$(TargetOS)' == 'browser' and '$(RuntimeFlavor)' == 'CoreCLR'"
Include="$(HostSharedFrameworkDir)include\**"
NativeSubDirectory="include\"
IsNative="true" />

<LibrariesRuntimeFiles Condition="'$(TargetOS)' == 'browser' and '$(RuntimeFlavor)' == 'Mono'"
Include="
Expand Down
4 changes: 4 additions & 0 deletions eng/testing/scenarios/BuildWasmAppsJobsListCoreCLR.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ Wasm.Build.Tests.DebugLevelTests
Wasm.Build.Tests.EnvVariablesTests
Wasm.Build.Tests.FilesToIncludeInFileSystemTests
Wasm.Build.Tests.HttpTests
Wasm.Build.Tests.IcuShardingTests
Wasm.Build.Tests.IcuShardingTests2
Wasm.Build.Tests.IcuTests
Wasm.Build.Tests.InvariantGlobalizationTests
Wasm.Build.Tests.LazyLoadingTests
Wasm.Build.Tests.ModuleConfigTests
Wasm.Build.Tests.PreloadingTests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,11 @@
<PlatformManifestFileEntry Include="libSystem.Native.Browser.js.map" IsNative="true" />
<PlatformManifestFileEntry Include="libSystem.Runtime.InteropServices.JavaScript.Native.js" IsNative="true" />
<PlatformManifestFileEntry Include="libSystem.Runtime.InteropServices.JavaScript.Native.js.map" IsNative="true" />
<PlatformManifestFileEntry Include="libSystem.Native.Browser.extpost.js" IsNative="true" />
<PlatformManifestFileEntry Include="libBrowserHost.a" IsNative="true" />
<PlatformManifestFileEntry Include="callhelpers.hpp" IsNative="true" />
<PlatformManifestFileEntry Include="entrypoints.h" IsNative="true" />
<PlatformManifestFileEntry Include="utils.h" IsNative="true" />
Comment on lines +283 to +285
<!-- wasi specific -->
<PlatformManifestFileEntry Include="main.c" IsNative="true" />
<PlatformManifestFileEntry Include="driver.h" IsNative="true" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<VSInsertionShortComponentName>NetCore.SharedFramework</VSInsertionShortComponentName>
<UseTemplatedPlatformManifest>true</UseTemplatedPlatformManifest>
<UseRidGraph>true</UseRidGraph>
<IncludeStaticLibrariesInPack Condition="'$(TargetsMobile)' == 'true'">true</IncludeStaticLibrariesInPack>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/libraries/sendtohelix-browser.targets
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@
<_XUnitTraitArg Condition="'$(TestUsingWorkloads)' != 'true'">-trait category=no-workload</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(WasmFingerprintAssets)' == 'false'">$(_XUnitTraitArg) -trait category=no-fingerprinting</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true'">$(_XUnitTraitArg) -trait category=bundler-friendly</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(RuntimeFlavor)' == 'CoreCLR'">-notrait category=native -notrait category=mono -notrait category=workload</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(RuntimeFlavor)' == 'CoreCLR'">-notrait category=mono -notrait category=workload</_XUnitTraitArg>
</PropertyGroup>

<PropertyGroup>
Expand Down
25 changes: 18 additions & 7 deletions src/mono/browser/build/BrowserWasmApp.CoreCLR.targets
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
<!-- Set IsBrowserWasmProject for browser-wasm targets -->
<IsBrowserWasmProject Condition="'$(IsBrowserWasmProject)' == '' and ('$(RuntimeIdentifier)' == 'browser-wasm' or '$(RuntimeIdentifiers)' == 'browser-wasm')">true</IsBrowserWasmProject>

<!-- Default to full globalization (ICU sharding). Mirrors Mono's WasmFeatures.props behavior.
Without this, the SDK defaults _WasmInvariantGlobalization=true when InvariantGlobalization is empty,
which excludes ICU .dat files from publish output and forces invariant mode. -->
<InvariantGlobalization Condition="'$(InvariantGlobalization)' == ''">false</InvariantGlobalization>

<!-- Ensure TargetsBrowser is set so native.wasm.targets populates exported functions/methods -->
<TargetsBrowser Condition="'$(TargetsBrowser)' == '' and '$(IsBrowserWasmProject)' == 'true'">true</TargetsBrowser>

Expand Down Expand Up @@ -271,9 +276,15 @@
<_EmccCFlags Include="-DGEN_PINVOKE=1" />
<_EmccCFlags Include="$(EmccExtraCFlags)" />

<!-- Include paths for ManagedToNativeGenerator output compilation -->
<_EmccCFlags Include="-I&quot;$(RepoRoot)src/coreclr/vm/wasm&quot;" Condition="Exists('$(RepoRoot)src/coreclr/vm/wasm/callhelpers.hpp')" />
<_EmccCFlags Include="-I&quot;$(RepoRoot)src/native&quot;" Condition="Exists('$(RepoRoot)src/native/minipal/entrypoints.h')" />
<!-- Include paths for ManagedToNativeGenerator output compilation.
Prefer the runtime pack's include directory (works for out-of-tree app builds);
fall back to repo source paths for in-tree dev builds before the pack is refreshed.
$(RepoRoot) is available in-tree; $(RepositoryEngineeringDir) is set by WBT test infrastructure. -->
<_EmccCFlags Include="-I&quot;$(MicrosoftNetCoreAppRuntimePackRidNativeDir)include&quot;" Condition="Exists('$(MicrosoftNetCoreAppRuntimePackRidNativeDir)include/callhelpers.hpp')" />
<_EmccCFlags Include="-I&quot;$(RepoRoot)src/coreclr/vm/wasm&quot;" Condition="!Exists('$(MicrosoftNetCoreAppRuntimePackRidNativeDir)include/callhelpers.hpp') and '$(RepoRoot)' != '' and Exists('$(RepoRoot)src/coreclr/vm/wasm/callhelpers.hpp')" />
<_EmccCFlags Include="-I&quot;$([MSBuild]::NormalizePath('$(RepositoryEngineeringDir)', '..', 'src', 'coreclr', 'vm', 'wasm'))&quot;" Condition="!Exists('$(MicrosoftNetCoreAppRuntimePackRidNativeDir)include/callhelpers.hpp') and '$(RepoRoot)' == '' and '$(RepositoryEngineeringDir)' != '' and Exists('$([MSBuild]::NormalizePath($(RepositoryEngineeringDir), .., src, coreclr, vm, wasm, callhelpers.hpp))')" />
<_EmccCFlags Include="-I&quot;$(RepoRoot)src/native&quot;" Condition="!Exists('$(MicrosoftNetCoreAppRuntimePackRidNativeDir)include/minipal/entrypoints.h') and '$(RepoRoot)' != '' and Exists('$(RepoRoot)src/native/minipal/entrypoints.h')" />
<_EmccCFlags Include="-I&quot;$([MSBuild]::NormalizePath('$(RepositoryEngineeringDir)', '..', 'src', 'native'))&quot;" Condition="!Exists('$(MicrosoftNetCoreAppRuntimePackRidNativeDir)include/minipal/entrypoints.h') and '$(RepoRoot)' == '' and '$(RepositoryEngineeringDir)' != '' and Exists('$([MSBuild]::NormalizePath($(RepositoryEngineeringDir), .., src, native, minipal, entrypoints.h))')" />
Comment on lines +285 to +287
<_EmccCFlags Include="-include &quot;$(_WasmIntermediateOutputPath)coreclr_compat.h&quot;" />
</ItemGroup>

Expand Down Expand Up @@ -455,10 +466,10 @@
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libSystem.Native.Browser.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libSystem.Runtime.InteropServices.JavaScript.Native.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libSystem.Native.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libSystem.Globalization.Native.a" Condition="'$(InvariantGlobalization)' != 'true'" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libicuuc.a" Condition="'$(InvariantGlobalization)' != 'true'" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libicui18n.a" Condition="'$(InvariantGlobalization)' != 'true'" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libicudata.a" Condition="'$(InvariantGlobalization)' != 'true'" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libSystem.Globalization.Native.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libicuuc.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libicui18n.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libicudata.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libSystem.IO.Compression.Native.a" />
<_CoreCLRNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)libz.a" />

Expand Down
4 changes: 2 additions & 2 deletions src/mono/wasm/Wasm.Build.Tests/IcuShardingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public IcuShardingTests(ITestOutputHelper output, SharedBuildPerTestClassFixture
: base(output, buildContext) { }

public static IEnumerable<object[]> IcuExpectedAndMissingCustomShardTestData(Configuration config) =>
from aot in boolOptions
from aot in aotBoolOptions
from onlyPredefinedCultures in boolOptions
// isOnlyPredefinedCultures = true fails with wasmbrowser: https://github.com/dotnet/runtime/issues/108272
where !(onlyPredefinedCultures)
Expand All @@ -34,7 +34,7 @@ public static IEnumerable<object[]> IcuExpectedAndMissingAutomaticShardTestData(
{ "ja-JP", GetCjkTestedLocales(SundayNames.Japanese) },
{ "sk-SK", GetNocjkTestedLocales(SundayNames.Slovak) }
};
return from aot in boolOptions
return from aot in aotBoolOptions
from locale in locales
select new object[] { config, aot, locale.Key, locale.Value };
}
Expand Down
2 changes: 1 addition & 1 deletion src/mono/wasm/Wasm.Build.Tests/IcuShardingTests2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public static IEnumerable<object[]> IcuExpectedAndMissingShardFromRuntimePackTes
{ "icudt_no_CJK.dat", GetNocjkTestedLocales() }
};
return
from aot in boolOptions
from aot in aotBoolOptions
from locale in locales
select new object[] { config, aot, locale.Key, locale.Value };
}
Expand Down
4 changes: 2 additions & 2 deletions src/mono/wasm/Wasm.Build.Tests/IcuTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public IcuTests(ITestOutputHelper output, SharedBuildPerTestClassFixture buildCo
: base(output, buildContext) { }

public static IEnumerable<object[]> FullIcuWithICustomIcuTestData(Configuration config) =>
from aot in boolOptions
from aot in aotBoolOptions
from fullIcu in boolOptions
select new object[] { config, aot, fullIcu };

Expand All @@ -34,7 +34,7 @@ public static IEnumerable<object[]> FullIcuWithInvariantTestData(Configuration c
new object[] { false, false, GetEfigsTestedLocales() },
new object[] { false, true, s_fullIcuTestedLocales }
};
return from aot in boolOptions
return from aot in aotBoolOptions
from locale in locales
select new object[] { config, aot, locale[0], locale[1], locale[2] };
}
Expand Down
2 changes: 2 additions & 0 deletions src/mono/wasm/Wasm.Build.Tests/IcuTestsBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public IcuTestsBase(ITestOutputHelper output, SharedBuildPerTestClassFixture bui
private const string _fallbackSundayNameEnUS = "Sunday";
protected static string[] templateTypes = { "wasmbrowser" };
protected static bool[] boolOptions = { false, true };
// CoreCLR WASM doesn't support AOT; filter to aot=false only for CoreCLR runs
protected static bool[] aotBoolOptions => IsCoreClrRuntime ? new[] { false } : new[] { false, true };

protected record SundayNames
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ public async Task RelinkingWithoutAOT(Configuration config, bool aot, bool? inva

private async Task TestInvariantGlobalization(Configuration config, bool aot, bool? invariantGlobalization, bool? isNativeBuild = null)
{
if (aot && IsCoreClrRuntime)
return; // CoreCLR WASM doesn't support AOT

string extraProperties = isNativeBuild == true ? "<WasmBuildNative>true</WasmBuildNative>" : "";
if (invariantGlobalization != null)
{
Expand Down
2 changes: 1 addition & 1 deletion src/mono/wasm/Wasm.Build.Tests/Wasm.Build.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
<_XUnitTraitArg Condition="'$(TestUsingWorkloads)' != 'true'">-trait category=no-workload</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(WasmFingerprintAssets)' == 'false'">-trait category=no-fingerprinting</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true'">-trait category=bundler-friendly</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(RuntimeFlavor)' == 'CoreCLR'">-notrait category=native -notrait category=mono -notrait category=workload</_XUnitTraitArg>
<_XUnitTraitArg Condition="'$(RuntimeFlavor)' == 'CoreCLR'">-notrait category=mono -notrait category=workload</_XUnitTraitArg>
</PropertyGroup>

<PropertyGroup Condition="'$(ContinuousIntegrationBuild)' != 'true'">
Expand Down
5 changes: 5 additions & 0 deletions src/native/corehost/browserhost/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -138,5 +138,10 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dotnet.native.wasm DESTINATION sharedF
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dotnet.native.js.symbols DESTINATION corehost COMPONENT runtime)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dotnet.native.js.symbols DESTINATION sharedFramework COMPONENT runtime)

# Headers needed for app native re-link (ManagedToNativeGenerator output includes these)
install(FILES ${CLR_REPO_ROOT_DIR}/src/coreclr/vm/wasm/callhelpers.hpp DESTINATION sharedFramework/include COMPONENT runtime)
install(FILES ${CLR_REPO_ROOT_DIR}/src/native/minipal/entrypoints.h DESTINATION sharedFramework/include/minipal COMPONENT runtime)
install(FILES ${CLR_REPO_ROOT_DIR}/src/native/minipal/utils.h DESTINATION sharedFramework/include/minipal COMPONENT runtime)

set_source_files_properties(${BROWSERHOST_SOURCES} PROPERTIES OBJECT_DEPENDS
"${JS_SYSTEM_NATIVE_BROWSER};${JS_SYSTEM_BROWSER_UTILS};${JS_SYSTEM_RUNTIME_INTEROPSERVICES_JAVASCRIPT_NATIVE};${JS_BROWSER_HOST};${JS_SYSTEM_NATIVE_BROWSER_EXPOST}")
4 changes: 3 additions & 1 deletion src/native/corehost/browserhost/libBrowserHost.footer.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ function libBrowserHostFactory() {
libBrowserHost(exports);

// libBrowserHostFn is too complex for acorn-optimizer.mjs to find the dependencies
// NOTE: wasm_load_icu_data is NOT listed here because it's only available when
// InvariantGlobalization != true. The loadIcuData() JS code is only called when
// ICU data is present, so the symbol doesn't need to be a hard link-time dependency.
let explicitDeps = [
Comment on lines 20 to 24
"wasm_load_icu_data",
"BrowserHost_CreateHostContract",
"BrowserHost_InitializeDotnet",
"BrowserHost_ExecuteAssembly",
Expand Down
Loading