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);
};