* Switch build x64 image to Azure Linux 3.0
* Add remaining (existing) images
* Remove accidental 9.0
* Fix BundleLegacy.TestNetCoreApp3xApp
Stop relying on ICU - this is irrelevant to what the test targets.
---------
Co-authored-by: Elinor Fung <elfung@microsoft.com>
* [DependencyInjection] introduce feature switch to disable S.R.E
When recording a new AOT profile for .NET MAUI apps running on Android,
we noticed that System.Reflection.Emit work was being done on a
background thread. The call seen in `dotnet-trace` output:
11.32ms microsoft.extensions.dependencyinjection!Microsoft.Extensions.DependencyInjection.ServiceLookup.ILEmitResolverBuilder.GenerateMethodBody(Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite,System.Reflection.Emit.ILGenerator)
.NET Android apps are unique in that there is a JIT,
`RuntimeFeature.IsDynamicCodeCompiled` is true, System.Reflection.Emit
is possible -- S.R.E is however, not great for startup performance.
Starting threads on Android during startup can also be slow, as Android
will commonly put all but a single core to sleep for battery saving
purposes. We try to avoid starting threads on startup for "hello world"
applications on Android.
To solve this for now, introduce a new feature flag:
Microsoft.Extensions.DependencyInjection.DisableDynamicEngine
Which, we will provide a value in either the Android or .NET MAUI
optional workload via an MSBuild property. To test, I put this in my
app's `.csproj` file:
<RuntimeHostConfigurationOption Include="Microsoft.Extensions.DependencyInjection.DisableDynamicEngine"
Condition="'$(DisableDynamicEngine)' != ''"
Value="$(DisableDynamicEngine)"
Trim="true" />
Customers *could* opt to change this flag, but we don't think it will
particularly useful. An example of services realized by .NET MAUI at
startup, via some logging added:
08-25 13:21:55.647 16530 16530 I DOTNET : RealizeService called: System.Collections.Generic.IEnumerable`1[Microsoft.Maui.Hosting.IMauiInitializeService]
08-25 13:21:55.664 16530 16530 I DOTNET : RealizeService called: System.Collections.Generic.IEnumerable`1[Microsoft.Maui.Hosting.IMauiInitializeScopedService]
08-25 13:21:55.665 16530 16530 I DOTNET : RealizeService called: Microsoft.Maui.Dispatching.IDispatcher
08-25 13:21:55.668 16530 16530 I DOTNET : RealizeService called: System.Collections.Generic.IEnumerable`1[Microsoft.Maui.LifecycleEvents.LifecycleEventRegistration]
08-25 13:21:56.057 16530 16530 I DOTNET : RealizeService called: System.Collections.Generic.IEnumerable`1[Microsoft.Maui.Hosting.HandlerMauiAppBuilderExtensions+HandlerRegistration]
08-25 13:21:56.115 16530 16530 I DOTNET : RealizeService called: Microsoft.Extensions.DependencyInjection.IServiceScopeFactory
08-25 13:21:56.670 16530 16530 I DOTNET : RealizeService called: Microsoft.Maui.Controls.HideSoftInputOnTappedChangedManager
08-25 13:21:56.712 16530 16530 I DOTNET : RealizeService called: System.Collections.Generic.IEnumerable`1[Microsoft.Maui.Hosting.ImageSourcesMauiAppBuilderExtensions+ImageSourceRegistration]
08-25 13:21:57.700 16530 16530 I DOTNET : RealizeService using S.R.E: Microsoft.Maui.Controls.HideSoftInputOnTappedChangedManager
`HideSoftInputOnTappedChangedManager` would be realized once per page,
which would not be a huge payoff to use S.R.E for. So the only way the
S.R.E codepath could be useful on Android would be if the customer is
registering lots of services themselves. They might be better off just
using `new()` in that case?
An example of the startup time Android reports with the new flag on/off:
DisableDynamicEngine=false
08-25 14:31:37.462 2090 2330 I ActivityTaskManager: Displayed com.companyname.testmaui/crc643c09abdeec717b83.MainActivity: +733ms
08-25 14:31:39.394 2090 2330 I ActivityTaskManager: Displayed com.companyname.testmaui/crc643c09abdeec717b83.MainActivity: +737ms
08-25 14:31:41.326 2090 2330 I ActivityTaskManager: Displayed com.companyname.testmaui/crc643c09abdeec717b83.MainActivity: +730ms
DisableDynamicEngine=true
08-25 14:32:20.233 2090 2330 I ActivityTaskManager: Displayed com.companyname.testmaui/crc643c09abdeec717b83.MainActivity: +724ms
08-25 14:32:22.137 2090 2330 I ActivityTaskManager: Displayed com.companyname.testmaui/crc643c09abdeec717b83.MainActivity: +727ms
08-25 14:32:24.042 2090 2330 I ActivityTaskManager: Displayed com.companyname.testmaui/crc643c09abdeec717b83.MainActivity: +716ms
This was a `dotnet new maui` project, using dotnet/maui/main on a Pixel
5 device.
* Update docs/workflow/trimming/feature-switches.md
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
---------
Co-authored-by: Jonathan Peppers <jonathan.peppers@microsoft.com>
Co-authored-by: Jonathan Peppers <jonathan.peppers@gmail.com>
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
* Add ILStrip task to wasm app build process
* Make it work for wasm app building workflow
* Interp: stop inlining stripped methods. ILStrip: set code size to zero for tiny methods
* [mono][aot] Avoid adding some methods to the compiled method file.
* Methods which have 'deopt' set can enter the interpreter during EH.
* Methods which have 'interp_entry_only' set are AOTed, but the AOT
code is only used to enter the interpreter.
* Only trim the methods that interpreter is able to call the aot'ed verion of it
* Add default value and documentation for WASMStripIL
* Move jit_call_can_be_supported to interp.c
* Minor format fix
* Add a test
* For testing
* Fix typo
* Skip TestUtilities Reference
* Address review feedback
* Change it to true
* Change name to trimming eligible
* Remove testing
* Address review feedback
* Address review feedback from Kate
* Add a var for llvm_only
---------
Co-authored-by: Zoltan Varga <vargaz@gmail.com>
* Enable AddressSanitizer in CoreCLR, Libs, and Host and update runtime-sanitized to run tests with ASAN on Linux and Mac
* Unify on HAS_ADDRESS_SANITIZER define name
Centralize setting up sanitizer flags.
Remove last usage of CLR_CMAKE_ENABLE_ASAN outside of eng/native
Remove unnecessary diffs
Use the cpuid intrinsic and enable ASAN on InitJitHelpers1.
Add comments for the places where we have ASAN disabled
Undo changes to src/coreclr/jit/CMakeLists.txt
Add docs and fix the docs in the build script.
Add docs for the SkipVCEnvInit hook
* Remove CRT runtime changes. We won't need this when we finally onboard to Windows with some changes they have coming down the pipeline, so remove them for now to reduce the diff of this PR.
* Remove suppression now that we've fixed the underlying issue.
* Remove some Windows-only sanitizer CMake that we won't need when ASAN is ready for us to consume on Windows.
* Set schedule for runtime-sanitized pipeline
* Remove workaround in JIT memory set/copy helpers now that the JIT bug has been fixed.
* Add missing helix queues setup template.
* Fix missing command to build nativeaot runtime tests as nativeaot.
* Add a scenario name to trigger the extended timeout in the libraries test helix configuration.
* Remove extraneous whitespace.
* Fix using the cross-targetting ILC when sanitizers are enabled. Also pass through our TargetOS and TargetArchitecture variables to the publish command for our native sanitizers targets to correctly do their extra logic.
* Disable LSAN on the CustomMain test.
* Disable some tests on sanitized runtimes.
* Copy the sanitizer runtime for OSX NativeAOT runtime tests.
* A little cleanup to try to get the build right now that we are always doing cross-builds on Linux.
* Fix crossgen-corelib.proj syntax.
* Fix cross-os dac builds to not include the host architecture in the output path.
* Split the debugger components into a separate component and make the "unsanitized cross components" build into an "unsanitized debugger components" build as it can't be part of the regular cross-components build
* Always write out the host-arch path on Windows and update the cross-dac build script to expect that.
* Change to use the dynamic runtime on Windows, as ASAN in VS is moving to a dynamic-only model.
* Update docker images to include the sanitizer runtimes in the crossrootfs images.
* Fix explicit image tags
* The unsanitized build should be of the target architecture, not the host architecture. As a result, we still need a cross-arch build for the cross-arch use cases when sanitized, as well as an unsanitized target arch build for the debugger tools.
* Turn off using the sigaltstack for NativeAOT tests that don't use the asansupport.cpp default options
* Make sure the shared ASAN runtime is present for the nativeaot/SmokeTests/SharedLibrary test.
* Disable crossgen2 tests with sanitizers as they don't get us interesting coverage.
* Fix custom default options and disable some more crossgen2-based tests.
* Simplify lookup of asan runtime on mac and fix copying the shared runtime for the SharedLibrary NativeAOT test.
* Disable test that's failing for weird reasons.
* Fix one more alloc-dealloc mismatch that only started to show up after test merging increased allocations in the runtime
* Disable the System.Text.Json test suite on sanitized builds as it causes SO failures on Mac
* Fix test exclusion
* PR feedback.
* Fix mac build
* Do review changes
* Add libbootstrapper object files to the platform manifest now that NativeAOT has
* Disable tests that check size on sanitized builds
* Use the built-in `include_guard` option
* Disable use-after-return checking in ASAN. CoreCLR doesn't do well with parallel stacks.
* Only pass the no UAR flag on C and CXX with Clang (not AppleClang).
* Let's see what happens :)
* CMake 3.20 works on my machine???
* Upped the llibraries CMake version to 3.20
* Upped native libs CMake version to 3.20, and updated the requirements docs.
* Add CMake Policy to 3.17.0 for native libs because of wasm.
* Downgraded native libs CMake to 3.17.0 temporarily, while we figure out the funny troublemaker wasm.
* Added a couple notes regarding CMake on Linux and Windows, and upped the corehost and libunwind CMake versions to 3.20
* Reverted external native components CMake versions, and upped tests to 3.20. Only Mono remains now.
* Added mono to the 3.20 gang. Also, changed the condition for wasm.
* Had to condition mono's CMake version as well because of wasm.
* DEBUG-ONLY COMMIT: Added some CMake logging to help me figure out what is set for wasm to think of the appropriate conditional.
* DEBUG-ONLY COMMIT: I think I have the answer for wasm now/
* Restored the DEBUG-ONLY changes and set 3.20 as the universal CMake, as the missing machines have now been updated.
* Updated requirements doc with notes for Debian 11 and lower.
* A bit faster version of indexing. WIP
* Tiny speedup.
* Fixed IndexOf, ToDo: LastIndexOf.
* All tests pass.
* Updated docs.
* Update docs.
* Slicing + saving previous absolute index instead of pushing the iterator to the start position.
* Refactored.
* Fixed tests on browser.
* Str1 and str2 was confusing.
* Fix CI- correctly trimming Hybrid properties.
* Previous commit should target only Browser.
* Applied @mkhamoyan's suggestion to avoid code duplication.
* Applied @pavelsavara's review.
* Get rid of build errors.
* Revert.
To reflect recent series of changes to our official build. This
updates the mentioned images to use floating tags, and clarifies
that the new official build containers all are designed for
cross-building.
* Skip methods in test-merging if they use the named argument 'Skip'
* Use ActiveIssueAttribute instead of FactAttribute with Skip. Add documentation about FactAttribute and Skip.
* Simplify numasupport
* short-circuit
* Cleanup from QUIC readme
* Address CR feedback: early bail for < 2 NUMA nodes
* Fix node numbering, which is 0-based
* Implement the STJ.DisableDefaultReflection feature switch.
* Reinstate accidentally stripped attribute
* Address feedback.
* Address feedback.
* Add a trimming test for STJ
* Move trimming test to existing trimming tests folder.
* Add source gen serialization test case to Trimming test.
* Fix style.
* Expose the feature switch as a property on JsonSerializer -- rename feature switch to match namespace.
* Update src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Helpers.cs
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
* Update src/libraries/System.Text.Json/tests/System.Text.Json.Tests/TrimmingTests/IsReflectionEnabledByDefaultFalse.cs
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
* Address feedback.
* Address feedback.
* Add entry to feature-switches.md
---------
Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
I suppose head of the URL was redondant — gave me "docker: invalid refence format" when I tried the original command, and worked fine when I removed the first "mcr.microsoft.com/dotnet-buildtools/prereqs:"
* Added the documentation regarding the new libraries test modes.
* Enable the fundamentals behind libraries tests compiled via crossgen2.
* Fixed a typo with SINGLE_FILE_TEST_RUNNER.
* Addressed review comments.
* Restored an accidentally deleted comment.
* Fixed wrong Crossgen2 path and added comment with link to an important tracking SDK bug.
* Draft.
* DevTools as IDE instructions.
* VS Code as IDE instructions.
* Correction: `WebRoot` is not required.
* Added: expect long wait & new pic without webRoot
* Renamed as suggested by @pavelsavara.
* The first bp is not automatic, user has to set it on their own.
* Set target SDK version
* Update Android docs
* Disable tests that do not pass with target API 31
* Check if the installed Android SDK is up-to-date
* Update skip explanation
* Use latest SDK
* Disable failing System.Net.Security test
Change github illink links to point from dotnet/linker to dotnet/runtime
Delete scripts that clone illink into runtime since illink now lives in runtime
Create a forward link for error 1012 in illink, that leads users to open an issue in runtime
Follow-up on #32451
Follow-up on #80074
In #43651, the "Windows" OS name was lowercased to achieve target frameworks with RIDs in them. At that time, the original plan was to lowercase all TargetOS values but that had to be cut because of resources. This PR finishes that and updates build systems, YML, markdowns and managed components.
To not break existing developer workflows, the passed-in -os value is automatically lower-cased in the script entry points and validated in the msbuild entry point.
In Visual Studio 17.5, Visual Studio will start enforcing signature validation for DAC and DBI. This adds documentation on how to disable this for folks using daily or private builds.