diff --git a/eng/Versions.props b/eng/Versions.props index f95bf9392084c..675cd53fbda78 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -163,7 +163,7 @@ 2.0.4 4.12.0 2.14.3 - 6.0.100-preview.7.21362.5 + 6.0.100-rc.1.21370.2 5.0.0-preview-20201009.2 diff --git a/src/mono/wasm/build/WasmApp.Native.targets b/src/mono/wasm/build/WasmApp.Native.targets index 48bafb1d42839..85d301885db2f 100644 --- a/src/mono/wasm/build/WasmApp.Native.targets +++ b/src/mono/wasm/build/WasmApp.Native.targets @@ -158,6 +158,8 @@ $(EmccCompileOptimizationFlag) <_EmccCompileRsp>$(_WasmIntermediateOutputPath)emcc-compile.rsp + <_EmccCompileOutputMessageImportance Condition="'$(EmccVerbose)' == 'true'">Normal + <_EmccCompileOutputMessageImportance Condition="'$(EmccVerbose)' != 'true'">Low @@ -181,6 +183,7 @@ <_EmccCFlags Include="-DLINK_ICALLS=1" Condition="'$(WasmLinkIcalls)' == 'true'" /> <_EmccCFlags Include="-DCORE_BINDINGS" /> <_EmccCFlags Include="-DGEN_PINVOKE=1" /> + <_EmccCFlags Include="-emit-llvm" /> <_EmccCFlags Include=""-I%(_EmccIncludePaths.Identity)"" /> <_EmccCFlags Include="-g" Condition="'$(WasmNativeDebugSymbols)' == 'true'" /> @@ -240,7 +243,11 @@ - + @@ -269,8 +276,9 @@ + Arguments=""@$(_EmccDefaultFlagsRsp)" @(_EmccLDFlags, ' ')" + EnvironmentVariables="@(EmscriptenEnvVars)" + OutputMessageImportance="$(_EmccCompileOutputMessageImportance)" /> diff --git a/src/tasks/WasmAppBuilder/EmccCompile.cs b/src/tasks/WasmAppBuilder/EmccCompile.cs index 89bea79454abf..eed8bb5269069 100644 --- a/src/tasks/WasmAppBuilder/EmccCompile.cs +++ b/src/tasks/WasmAppBuilder/EmccCompile.cs @@ -33,6 +33,7 @@ public class EmccCompile : Microsoft.Build.Utilities.Task public bool DisableParallelCompile { get; set; } public string Arguments { get; set; } = string.Empty; public string? WorkingDirectory { get; set; } + public string OutputMessageImportance{ get; set; } = "Low"; [Output] public ITaskItem[]? OutputFiles { get; private set; } @@ -54,6 +55,12 @@ public override bool Execute() return false; } + if (!Enum.TryParse(OutputMessageImportance, ignoreCase: true, out MessageImportance messageImportance)) + { + Log.LogError($"Invalid value for OutputMessageImportance={OutputMessageImportance}. Valid values: {string.Join(", ", Enum.GetNames(typeof(MessageImportance)))}"); + return false; + } + IDictionary envVarsDict = GetEnvironmentVariablesDict(); ConcurrentBag outputItems = new(); try @@ -112,7 +119,7 @@ bool ProcessSourceFile(ITaskItem srcItem) try { - string command = $"emcc {Arguments} -c -o {objFile} {srcFile}"; + string command = $"emcc {Arguments} -c -o \"{objFile}\" \"{srcFile}\""; // Log the command in a compact format which can be copy pasted StringBuilder envStr = new StringBuilder(string.Empty); @@ -125,7 +132,7 @@ bool ProcessSourceFile(ITaskItem srcItem) envVarsDict, workingDir: Environment.CurrentDirectory, logStdErrAsMessage: true, - debugMessageImportance: MessageImportance.High, + debugMessageImportance: messageImportance, label: Path.GetFileName(srcFile)); if (exitCode != 0) diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs index dacf67ff4f395..002ca2480311a 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmTests.cs @@ -16,10 +16,16 @@ public BlazorWasmTests(ITestOutputHelper output, SharedBuildPerTestClassFixture { } - [ConditionalFact(typeof(BuildTestBase), nameof(IsUsingWorkloads))] - public void PublishTemplateProject() + // TODO: invariant case? + + [ConditionalTheory(typeof(BuildTestBase), nameof(IsUsingWorkloads))] + [InlineData("Debug", false)] + [InlineData("Debug", true)] // just aot + [InlineData("Release", false)] // should re-link + [InlineData("Release", true)] + public void PublishTemplateProject(string config, bool aot) { - string id = "blazorwasm"; + string id = $"blazorwasm_{config}_aot_{aot}"; InitPaths(id); if (Directory.Exists(_projectDir)) Directory.Delete(_projectDir, recursive: true); @@ -37,14 +43,16 @@ public void PublishTemplateProject() .ExecuteWithCapturedOutput("new blazorwasm") .EnsureSuccessful(); - string publishLogPath = Path.Combine(logPath, $"{id}.publish.binlog"); + string publishLogPath = Path.Combine(logPath, $"{id}.binlog"); new DotNetCommand(s_buildEnv) .WithWorkingDirectory(_projectDir) - .ExecuteWithCapturedOutput("publish", $"-bl:{publishLogPath}", "-p:RunAOTCompilation=true") + .ExecuteWithCapturedOutput("publish", $"-bl:{publishLogPath}", aot ? "-p:RunAOTCompilation=true" : "", $"-p:Configuration={config}") .EnsureSuccessful(); //TODO: validate the build somehow? // compare dotnet.wasm? + // relinking - dotnet.wasm should be smaller + // // playwright? } } diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs index 608aee1781715..4dd5144729cd1 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs @@ -332,10 +332,7 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp } if (useCache) - { _buildContext.CacheBuild(buildArgs, new BuildProduct(_projectDir, logFilePath, true)); - Console.WriteLine($"caching build for {buildArgs}"); - } return (_projectDir, result.buildOutput); } diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeBuildTests.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeBuildTests.cs index 989b90676ecdc..80c7ba5fe85b8 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeBuildTests.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/NativeBuildTests.cs @@ -1,10 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System; using System.IO; using Xunit; using Xunit.Abstractions; +using Xunit.Sdk; #nullable enable @@ -43,5 +43,37 @@ private void NativeBuild(string projectNamePrefix, string projectContents, Build test: output => {}, host: host, id: id); } + + [Theory] + [BuildAndRun(host: RunHost.None, aot: true)] + public void IntermediateBitcodeToObjectFilesAreNotLLVMIR(BuildArgs buildArgs, string id) + { + string printFileTypeTarget = @" + + + + + + + + + "; + string projectName = $"bc_to_o_{buildArgs.Config}"; + + buildArgs = buildArgs with { ProjectName = projectName }; + buildArgs = ExpandBuildArgs(buildArgs, insertAtEnd: printFileTypeTarget); + + (_, string output) = BuildProject(buildArgs, + initProject: () => File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), s_mainReturns42), + dotnetWasmFromRuntimePack: false, + id: id); + + if (!output.Contains("wasm-dis exit code: 0")) + throw new XunitException($"Expected to successfully run wasm-dis on System.Private.CoreLib.dll.o ." + + " It might fail if it was incorrectly compiled to a bitcode file, instead of wasm."); + } } } diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/SharedBuildPerTestClassFixture.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/SharedBuildPerTestClassFixture.cs index 2c43614ea4169..e84a151bd5b02 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/SharedBuildPerTestClassFixture.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/SharedBuildPerTestClassFixture.cs @@ -44,7 +44,7 @@ private void RemoveDirectory(string path) { try { - Directory.Delete(path, recursive: true); + Directory.Delete(path, recursive: true); } catch (Exception ex) { diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/ToolCommand.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/ToolCommand.cs index b45fefac9acda..9d39dcce04a57 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/ToolCommand.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/ToolCommand.cs @@ -88,6 +88,7 @@ private async Task ExecuteAsyncInternal(string executable, string return; output.Add($"[{_label}] {e.Data}"); + Console.WriteLine($"[{_label}] {e.Data}"); ErrorDataReceived?.Invoke(s, e); }; @@ -97,6 +98,7 @@ private async Task ExecuteAsyncInternal(string executable, string return; output.Add($"[{_label}] {e.Data}"); + Console.WriteLine($"[{_label}] {e.Data}"); OutputDataReceived?.Invoke(s, e); };