Skip to content
Merged
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
27 changes: 4 additions & 23 deletions src/mono/wasm/Wasm.Build.Tests/Blazor/NativeRefTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,35 +62,16 @@ public void WithNativeReference_AOTOnCommandLine(string config)
}

[Theory]
[InlineData("Debug")]
[InlineData("Release")]
public void BlazorWasm_CanRunMonoAOTCross_WithNoTrimming(string config)
public void BlazorWasm_CannotAOT_WithNoTrimming(string config)
{
string id = $"blazorwasm_{config}_aot_{GetRandomId()}";
CreateBlazorWasmTemplateProject(id);

// We don't want to emcc compile, and link ~180 assemblies!
// So, stop once `mono-aot-cross` part of the build is done
string target = @"<Target Name=""StopAfterWasmAOT"" AfterTargets=""_WasmAotCompileApp"">
<Error Text=""Stopping after AOT"" Condition=""'$(WasmBuildingForNestedPublish)' == 'true'"" />
</Target>
";
AddItemsPropertiesToProject(Path.Combine(_projectDir!, $"{id}.csproj"),
extraItems: null,
extraProperties: null,
atTheEnd: target);

string publishLogPath = Path.Combine(s_buildEnv.LogRootPath, id, $"{id}.binlog");
CommandResult res = new DotNetCommand(s_buildEnv, _testOutput)
.WithWorkingDirectory(_projectDir!)
.WithEnvironmentVariable("NUGET_PACKAGES", _nugetPackagesDir)
.ExecuteWithCapturedOutput("publish",
$"-bl:{publishLogPath}",
"-p:RunAOTCompilation=true",
"-p:PublishTrimmed=false",
$"-p:Configuration={config}");
extraProperties: "<PublishTrimmed>false</PublishTrimmed><RunAOTCompilation>true</RunAOTCompilation>");

Assert.True(res.ExitCode != 0, "Expected publish to fail");
Assert.Contains("Stopping after AOT", res.Output);
(CommandResult res, _) = BlazorPublish(new BlazorBuildOptions(id, config, ExpectSuccess: false));
Assert.Contains("AOT is not supported without IL trimming", res.Output);
}
}
13 changes: 4 additions & 9 deletions src/mono/wasm/Wasm.Build.Tests/NativeBuildTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,12 @@ public void SimpleNativeBuild(BuildArgs buildArgs, RunHost host, string id)

[Theory]
[BuildAndRun(aot: true, host: RunHost.None)]
public void MonoAOTCross_WorksWithNoTrimming(BuildArgs buildArgs, string id)
public void AOTNotSupportedWithNoTrimming(BuildArgs buildArgs, string id)
{
// stop once `mono-aot-cross` part of the build is done
string target = @"<Target Name=""StopAfterWasmAOT"" AfterTargets=""_WasmAotCompileApp"">
<Error Text=""Stopping after AOT"" Condition=""'$(WasmBuildingForNestedPublish)' == 'true'"" />
</Target>";

string projectName = $"mono_aot_cross_{buildArgs.Config}_{buildArgs.AOT}";

buildArgs = buildArgs with { ProjectName = projectName, ExtraBuildArgs = "-p:PublishTrimmed=false -v:n" };
buildArgs = ExpandBuildArgs(buildArgs, extraProperties: "<WasmBuildNative>true</WasmBuildNative>", insertAtEnd: target);
buildArgs = buildArgs with { ProjectName = projectName, ExtraBuildArgs = "-p:PublishTrimmed=false" };
buildArgs = ExpandBuildArgs(buildArgs);

(_, string output) = BuildProject(
buildArgs,
Expand All @@ -61,7 +56,7 @@ public void MonoAOTCross_WorksWithNoTrimming(BuildArgs buildArgs, string id)
DotnetWasmFromRuntimePack: false,
ExpectSuccess: false));

Assert.Contains("Stopping after AOT", output);
Assert.Contains("AOT is not supported without IL trimming", output);
}

[Theory]
Expand Down
2 changes: 2 additions & 0 deletions src/mono/wasm/build/WasmApp.Native.targets
Original file line number Diff line number Diff line change
Expand Up @@ -619,6 +619,8 @@
<_MonoAotCrossCompilerPath>@(MonoAotCrossCompiler->WithMetadataValue('RuntimeIdentifier','browser-wasm'))</_MonoAotCrossCompilerPath>
</PropertyGroup>

<Error Condition="'$(RunAOTCompilation)' == 'true' and '$(PublishTrimmed)' != 'true'"
Text="AOT is not supported without IL trimming (PublishTrimmed=true required)." />
<Error Condition="'@(_WasmAssembliesInternal)' == ''" Text="Item _WasmAssembliesInternal is empty" />
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for AOT'ing assemblies." />
Expand Down