Skip to content

[wasm] Enable AOT, and Wasm.Build.Tests on windows #58578

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 6 commits into from

Conversation

radical
Copy link
Member

@radical radical commented Sep 2, 2021

Adds build jobs in runtime-staging for:

  1. Wasm.Build.Tests
  2. Library AOT tests

TODO:

  • Add IsBrowserHostWindows, and use that to disable the failing tests

@ghost ghost added the area-Build-mono label Sep 2, 2021
@radical radical marked this pull request as draft September 2, 2021 19:06
@radical radical force-pushed the wbt-win branch 6 times, most recently from e3867a2 to c52afef Compare September 6, 2021 00:49
@radical radical changed the title [IGNORE][wasm] Building Wasm.Build.Tests on windows [wasm] Enable AOT, and Wasm.Build.Tests on windows Sep 6, 2021
@radical
Copy link
Member Author

radical commented Sep 6, 2021

@ghost
Copy link

ghost commented Sep 7, 2021

Tagging subscribers to 'arch-wasm': @lewing
See info in area-owners.md if you want to be subscribed.

Issue Details

Adds build jobs in runtime-staging for:

  1. Wasm.Build.Tests
  2. Library AOT tests
Author: radical
Assignees: -
Labels:

arch-wasm, area-Build-mono

Milestone: -

radical and others added 4 commits October 2, 2021 05:09
- Fix for a incremental build issue
- Change native build defaults for `Debug` config, to make it faster (thanks @SteveSandersonMS, @mattleibow)

- MonoAOTCompiler:
  - Skip unmanaged assemblies, and emit a warning
- PInvokeTableGenerator:
  - Fix to not fail in presence of native variadic functions, and pinvokes with function pointers (eg. used by sqlite)

Co-authored-by: Larry Ewing <lewing@microsoft.com>
(cherry picked from commit 80f015d)
On VS2022 Preview 5, building a blazorwasm project which used sqlite
native library crashed:

```
System.BadImageFormatException: Expected signature header for 'Property' or 'Method', but found '9' (0x09).

 at System.Reflection.Metadata.Ecma335.SignatureDecoder`2.CheckMethodOrPropertyHeader(SignatureHeader header)
 at System.Reflection.Metadata.Ecma335.SignatureDecoder`2.DecodeMethodSignature(BlobReader& blobReader)
 at System.Reflection.Metadata.Ecma335.SignatureDecoder`2.DecodeType(BlobReader& blobReader, Boolean allowlypeSpecifications, Int32 typeCode)
 at System.Reflection.Metadata.Ecma335.SignatureDecoder`2.DecodeMethodSignature(BlobReader& blobReader)
 at System.Reflection.Metadata.MethodDefinition.DecodeSignature[TType, TGenericContext] (ISignatureTypeProvider`2 provider, TGenericContext genericCo
 at System.Reflection.TypeLoading.Ecma.EcmaMethodDecoder.SpecializeMethodSigStrings(TypeContext& typeContext)
 at System.Reflection.TypeLoading.RoDefinitionMethod`1.ComputeMethodSigStrings()
 at System.Reflection.TypeLoading.RoMethod.ToString()
 at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
 at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
 at System.String.Format(String format, Object arg0, Object arg1, Object arg2)
 at PInvokeComparer.GetHashCode(PInvoke pinvoke)
 at ...
 at System.Ling.Enumerable.<DistinctIterator>d__64`1.MoveNext()
 at System.Ling.Buffer`1..ctor(IEnumerable`1 source)
 at System.Ling.Enumerable.ToArray [TSource] (IEnumerable`1 source)
 at PInvokeTableGenerator.EmitPInvokeTable(StreamWriter w, Dictionary`2 modules, List`1 pinvokes)
 at PInvokeTableGenerator.GenPInvokeTable(String[] pinvokeModules, String[] assemblies)
 at PInvokeTableGenerator.Execute()
```

- This is crashing in a new code path(`PInvokeComparer.GetHashCode`) that
  invokes `methodInfo.ToString()` for methods with `DllImport` attribute.
- It fails for `EnumCalendarInfo`, which has a function pointer parameter,
  which `System.Reflection.MetadataLoadContext`(SRMLC) does not support, and is
  explicitly worked around in the code.
- It usually fails with on `methodInfo.GetParameters()` with
  `NotSupportedException`, and `methodInfo.ToString()` works fine

The difference seems to be because the version of `SRMLC` being bundled
with the task is `1.4.5.0`, which is too old.

The fix is to use the same version of SRMLC, and
`System.Reflection.Metadata`(SRM) used by other tasks, which is `5.0.0`
currently.

Also, this mirrors some other reference changes from dotnet#59720

- don't include msbuild assemblies with the task
- and explicitly reference `System.Text.Json`, and
  `System.Threading.Tasks.Extensions` to be sure about the version that
  we'll include for net472

The following in a table of the assemblies that are bundled with the task, for `net472`, and `net6.0`.
The `new` has fewer assemblies.

| Path                                                          | Old         | New         |
|---------------------------------------------------------------|-------------|-------------|
| net472/Microsoft.Bcl.AsyncInterfaces.dll                      | 1.0.0.0     | 5.0.0.0     |
| net472/Microsoft.Build.Framework.dll                          | 15.1.0.0    |             |
| net472/Microsoft.Build.Tasks.Core.dll                         | 15.1.0.0    |             |
| net472/Microsoft.Build.Utilities.Core.dll                     | 15.1.0.0    |             |
| net472/Microsoft.Build.dll                                    | 15.1.0.0    |             |
| net472/Microsoft.NET.StringTools.dll                          | 1.0.0.0     |             |
| net472/Microsoft.VisualStudio.Setup.Configuration.Interop.dll | 1.0.0.0     |             |
| net472/System.Buffers.dll                                     | 4.0.3.0     | 4.0.3.0     |
| net472/System.Collections.Immutable.dll                       | 5.0.0.0     | 5.0.0.0     |
| net472/System.Configuration.ConfigurationManager.dll          | 4.0.3.0     |             |
| net472/System.Memory.dll                                      | 4.0.1.1     | 4.0.1.1     |
| net472/System.Numerics.Vectors.dll                            | 4.1.4.0     | 4.1.4.0     |
| net472/System.Reflection.Metadata.dll                         | 1.4.5.0     | 5.0.0.0     |
| net472/System.Reflection.MetadataLoadContext.dll              | 4.0.1.1     | 5.0.0.0     |
| net472/System.Resources.Extensions.dll                        | 4.0.0.0     |             |
| net472/System.Runtime.CompilerServices.Unsafe.dll             | 5.0.0.0     | 5.0.0.0     |
| net472/System.Security.AccessControl.dll                      | 4.1.3.0     |             |
| net472/System.Security.Permissions.dll                        | 4.0.3.0     |             |
| net472/System.Security.Principal.Windows.dll                  | 4.1.3.0     |             |
| net472/System.Text.Encodings.Web.dll                          | 4.0.5.0     | 5.0.0.0     |
| net472/System.Text.Json.dll                                   | 4.0.1.0     | 5.0.0.0     |
| net472/System.Threading.Tasks.Dataflow.dll                    | 4.6.3.0     |             |
| net472/System.Threading.Tasks.Extensions.dll                  | 4.2.0.0     | 4.2.0.1     |
| net472/System.ValueTuple.dll                                  | 4.0.3.0     | 4.0.3.0     |
| net472/WasmAppBuilder.dll                                     | 6.0.0.0     | 6.0.0.0     |
|                                                               |             |             |
| net6.0/System.Reflection.MetadataLoadContext.dll              | 4.0.1.1     | 5.0.0.0     |
| net6.0/WasmAppBuilder.dll                                     | 6.0.0.0     | 6.0.0.0     |
@radical radical changed the base branch from main to release/6.0 October 2, 2021 23:36
@lewing lewing added this to the Future milestone Oct 21, 2021
@radical radical closed this Nov 10, 2021
@ghost ghost locked as resolved and limited conversation to collaborators Dec 10, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
arch-wasm WebAssembly architecture area-Build-mono
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants