diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index bd60f2e67ceacc..7df4df2dd167f1 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -15,7 +15,7 @@
]
},
"microsoft.dotnet.xharness.cli": {
- "version": "8.0.0-prerelease.23407.2",
+ "version": "8.0.0-prerelease.23456.2",
"commands": [
"xharness"
]
diff --git a/.devcontainer/libraries/Dockerfile b/.devcontainer/Dockerfile
similarity index 100%
rename from .devcontainer/libraries/Dockerfile
rename to .devcontainer/Dockerfile
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 00000000000000..ed9d1f78e2f502
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,48 @@
+// For format details, see https://aka.ms/devcontainer.json.
+{
+ "name": "Standard configuration",
+ "build": {
+ "dockerfile": "Dockerfile",
+ "args": {
+ // Update 'VARIANT' to pick a .NET Core version: 6.0, 7.0
+ "VARIANT": "6.0-jammy"
+ }
+ },
+ "hostRequirements": {
+ "cpus": 4,
+ "memory": "8gb"
+ },
+
+ "features": {
+ "ghcr.io/devcontainers/features/github-cli:1": {}
+ },
+
+ // Configure tool-specific properties.
+ "customizations": {
+ // Configure properties specific to VS Code.
+ "vscode": {
+ // Add the IDs of extensions you want installed when the container is created.
+ "extensions": [
+ "ms-dotnettools.csharp"
+ ],
+ "settings": {
+ // Loading projects on demand is better for larger codebases
+ "omnisharp.enableMsBuildLoadProjectsOnDemand": true,
+ "omnisharp.enableRoslynAnalyzers": true,
+ "omnisharp.enableEditorConfigSupport": true,
+ "omnisharp.enableAsyncCompletion": true,
+ "omnisharp.testRunSettings": "${containerWorkspaceFolder}/artifacts/obj/vscode/.runsettings"
+ }
+ }
+ },
+
+ // Add the locally installed dotnet to the path to ensure that it is activated
+ // This allows developers to just use 'dotnet build' on the command-line, and the local dotnet version will be used.
+ "remoteEnv": {
+ "PATH": "${containerWorkspaceFolder}/.dotnet:${containerEnv:PATH}",
+ "DOTNET_MULTILEVEL_LOOKUP": "0"
+ },
+
+ // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+ "remoteUser": "vscode"
+}
diff --git a/.devcontainer/libraries/devcontainer.json b/.devcontainer/libraries/devcontainer.json
index 4e6b891872c4bb..1cb53754298ab2 100644
--- a/.devcontainer/libraries/devcontainer.json
+++ b/.devcontainer/libraries/devcontainer.json
@@ -1,8 +1,8 @@
// For format details, see https://aka.ms/devcontainer.json.
{
- "name": "C# (.NET)",
+ "name": "Libraries/Runtime development (prebuilt)",
"build": {
- "dockerfile": "Dockerfile",
+ "dockerfile": "../Dockerfile",
"args": {
// Update 'VARIANT' to pick a .NET Core version: 6.0, 7.0
"VARIANT": "6.0-jammy"
diff --git a/.devcontainer/scripts/onCreateCommand.sh b/.devcontainer/scripts/onCreateCommand.sh
index 09b7478bbaca90..c47eb6b7a0d1d1 100755
--- a/.devcontainer/scripts/onCreateCommand.sh
+++ b/.devcontainer/scripts/onCreateCommand.sh
@@ -19,7 +19,7 @@ case "$opt" in
./build.sh mono+libs -os browser -c Release
# install dotnet-serve for running wasm samples
- ./dotnet.sh tool install dotnet-serve --tool-path ./.dotnet-tools-global
+ ./dotnet.sh tool install dotnet-serve --version 1.10.172 --tool-path ./.dotnet-tools-global
;;
esac
diff --git a/.devcontainer/wasm/devcontainer.json b/.devcontainer/wasm/devcontainer.json
index 5c99a66e8c5485..ff3a23960d7d4f 100644
--- a/.devcontainer/wasm/devcontainer.json
+++ b/.devcontainer/wasm/devcontainer.json
@@ -1,6 +1,6 @@
// For format details, see https://aka.ms/devcontainer.json.
{
- "name": "C# (.NET)",
+ "name": "WASM development (prebuilt)",
"build": {
"dockerfile": "Dockerfile",
"args": {
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 22648cbe1e4e8d..ab341bf12b5d90 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -39,7 +39,7 @@
/src/mono/mono/mini @vargaz @lambdageek @SamMonoRT
/src/mono/mono/mini/*cfgdump* @vargaz
/src/mono/mono/mini/*exceptions* @vargaz @BrzVlad
-/src/mono/mono/mini/*llvm* @vargaz
+/src/mono/mono/mini/*llvm* @vargaz @fanyang-mono
/src/mono/mono/mini/*ppc* @vargaz
/src/mono/mono/mini/*profiler* @BrzVlad @lambdageek
/src/mono/mono/mini/*riscv* @vargaz @lambdageek
@@ -47,6 +47,7 @@
/src/mono/mono/mini/debugger-agent.c @vargaz @thaystg @lambdageek
/src/mono/mono/mini/interp/* @BrzVlad @vargaz @kotlarmilos
/src/mono/mono/mini/interp/*jiterp* @kg
+/src/mono/mono/mini/*simd* @fanyang-mono
/src/mono/mono/profiler @BrzVlad @lambdageek
/src/mono/mono/sgen @BrzVlad @lambdageek @SamMonoRT
diff --git a/.github/fabricbot.json b/.github/fabricbot.json
index 43a7dceabb3c6b..ff4b8e8acc4367 100644
--- a/.github/fabricbot.json
+++ b/.github/fabricbot.json
@@ -59,6 +59,15 @@
"vargaz"
]
},
+ {
+ "labels": [
+ "area-Codegen-Intrinsics-mono"
+ ],
+ "mentionees": [
+ "SamMonoRT",
+ "fanyang-mono"
+ ]
+ },
{
"labels": [
"area-CodeGen-meta-Mono"
diff --git a/Directory.Build.props b/Directory.Build.props
index f6776738457046..4d3e8a8408abfe 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -80,7 +80,7 @@
- 8.0
+ 9.0
.NETCoreApp
$(NetCoreAppCurrentIdentifier),Version=v$(NetCoreAppCurrentVersion)
Microsoft.NETCore.App
@@ -88,16 +88,17 @@
net$(NetCoreAppCurrentVersion)
- 7.0
+ 8.0
net$(NetCoreAppPreviousVersion)
$(NetCoreAppCurrent)
- net6.0
+ net8.0
$(NetCoreAppCurrent)
+ in src/mono/wasm/build/WasmApp.LocalBuild.props
+ and in src/mono/msbuild/apple/build/AppleBuild.LocalBuild.props in sync -->
8.0
net$(NetCoreAppToolCurrentVersion)
$(NetCoreAppCurrentIdentifier),Version=v$(NetCoreAppToolCurrentVersion)
@@ -114,8 +115,8 @@
- 7.0.0
- net7.0
+ 8.0.0-rc.1.23415.6
+ net8.0
$(NetFrameworkToolCurrent)
@@ -136,6 +137,7 @@
$(Configuration)
$(Configuration)
$(Configuration)
+ $(Configuration)
@@ -429,6 +431,7 @@
false
+
@@ -468,4 +471,11 @@
$(RepositoryEngineeringDir)NoTargetsSdk.BeforeTargets.targets
$(RepositoryEngineeringDir)TraversalSdk.AfterTargets.targets
+
+
+
+ $([MSBuild]::NormalizePath('$(ArtifactsBinDir)', 'Microsoft.NETCore.Platforms', 'runtime.json'))
+ $([MSBuild]::NormalizePath('$(LibrariesProjectRoot)', 'Microsoft.NETCore.Platforms', 'src', 'runtime.json'))
+
+
diff --git a/Directory.Build.targets b/Directory.Build.targets
index 933f4d7f4bf10e..c4c006eb266d53 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -15,6 +15,7 @@
+
- $(ProductVersion)
- $(ProductVersion)
- $(ProductVersion)
- $(ProductVersion)
+
diff --git a/NuGet.config b/NuGet.config
index 80dd215a4bf01b..4ec29de552c2b6 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -20,6 +20,8 @@
+
+
diff --git a/docs/coding-guidelines/mono-code-guide.md b/docs/coding-guidelines/mono-code-guide.md
index 839c3cc365e277..334aebab25a956 100644
--- a/docs/coding-guidelines/mono-code-guide.md
+++ b/docs/coding-guidelines/mono-code-guide.md
@@ -61,6 +61,49 @@ There are actually three boolean types to keep in mind:
* `MonoBoolean` used as an interop type with C# bool in internal calls
* `mono_bool` used by the public C API - generally new code shouldn't use it except when adding a new public API function.
+## Newer features of C11 and later
+
+Mono is currently (2023) written in C11.
+
+### Static asserts
+
+Use `static_assert` liberally. Include ``. If you cannot include `` (for
+example because it introduces conflicting symbols or macros), use `g_static_assert`. Do not use
+`_Static_assert` directly (see how `g_static_assert` is defined). Rationale: C23 deprecates
+`_Static_assert`.
+
+### Threads, locks, `call_once`
+
+Due to mono's threading model and cooperative GC, using C threading and locking primitives directly
+is not ok. Prefer `MonoCoopMutex`, `MonoCoopCond` that have GC-aware locking/waiting operations.
+If you need them, use `mono_mutex_t`, `mono_cond_t`, etc for cases where GC transitions are
+prohibitively costly and you can guarantee that the lock will never be taken by a GC initiator or by
+a mix of threads in GC cooperative and GC preemptive mode.
+
+Using standard C threads and `call_once` in native library PInvokes outside the runtime is okay.
+
+Using standard C mutexes and condition variables in native library PInvokes outside the runtime is
+okay if the locks are not shared with the runtime internals.
+
+### Thread locals
+
+FIXME: no guidance yet
+
+### Atomics
+
+The C standard atomics are not guaranteed to be lock-free. Use the mono `mono_atomic_` functions
+(some of which may be implemented in terms of standard C atomics on some platforms). We do not in
+general want locking because it would not be GC aware and may deadlock the cooperative GC.
+
+Uses of `_Atomic` are a code smell in Mono.
+
+Using standard C atomics in native library PInvokes outside the runtime is okay provided the atomics
+aren't also accessed inside the runtime internals.
+
+### Generic operations
+
+FIXME: no guidance for `_Generic` yet.
+
## Utility and platform abstraction functions
Mono generally tries to fill in POSIX-like abstractions on platforms that lack them (for example, Windows).
@@ -251,3 +294,4 @@ calling Mono internals.
In general new code should not do this. When modifying existing code, mysterious WASM failures may
be attributed to symbol signature mismatches between WASM and the Mono runtime.
+
diff --git a/docs/deep-dive-blog-posts.md b/docs/deep-dive-blog-posts.md
index b0927c9eb242a8..56e29a1f587f52 100644
--- a/docs/deep-dive-blog-posts.md
+++ b/docs/deep-dive-blog-posts.md
@@ -3,12 +3,13 @@
### Posts that take a high-level overview of releases
- [Corestart 2.0: What's new for performance in .NET Core 2.0](https://www.ageofascent.com/2017/11/05/perfromance-dotnet-core-2-corestart-conference/)
-- [Performance improvements in .NET Core 2.0](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core/)
-- [Performance improvements in .NET Core 2.1](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-2-1/)
-- [Performance improvements in .NET Core 3.0](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/)
-- [Performance improvements in .NET 5](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/)
-- [Performance improvements in .NET 6](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/)
-- [Performance improvements in .NET 7](https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/)
+- [Performance Improvements in .NET Core 2.0](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core/)
+- [Performance Improvements in .NET Core 2.1](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-2-1/)
+- [Performance Improvements in .NET Core 3.0](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/)
+- [Performance Improvements in .NET 5](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/)
+- [Performance Improvements in .NET 6](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/)
+- [Performance Improvements in .NET 7](https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/)
+- [Performance Improvements in .NET 8](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/)
### Posts that take a high-level look at the entire source:
diff --git a/docs/design/features/host-runtime-information.md b/docs/design/features/host-runtime-information.md
index be57e04f8b7c27..d15009272072d7 100644
--- a/docs/design/features/host-runtime-information.md
+++ b/docs/design/features/host-runtime-information.md
@@ -12,7 +12,7 @@ Relying on key-value strings as part of initialization of the runtime comes with
- Each property comes with non-trivial overhead. As the properties flow through the hosting layer, runtime, and libraries, multiple copies are made of each name and value.
- Properties are pre-computed and set at startup. Every application, regardless of whether or not it requires a specific property, must pay the cost of all properties.
-To allow a more flexible and less costly way to pass information between the host and runtime, in .NET 8+, the host passes a contract to the runtime as a property. This contract servers as a mechanism for runtime to query for information from the host and for the host to provide structured information to the runtime.
+To allow a more flexible and less costly way to pass information between the host and runtime, in .NET 8+, the host passes a contract to the runtime as a property. This contract serves as a mechanism for runtime to query for information from the host and for the host to provide structured information to the runtime.
`HOST_RUNTIME_CONTRACT`
@@ -90,4 +90,4 @@ Indicates whether or not [`hostpolicy`](./host-components.md#host-policy) is emb
`PINVOKE_OVERRIDE`
-Hex string representation of a function pointer. It is set when running a self-contained single-file application. The function is called by the runtime to check for redirected p/invokes. The expected signature is defined as `PInvokeOverrideFn` in [`coreclrhost.h`](/src/coreclr/hosts/inc/coreclrhost.h) and [`mono-private-unstable-types.h`](/src/native/public/mono/metadata/details/mono-private-unstable-types.h).
\ No newline at end of file
+Hex string representation of a function pointer. It is set when running a self-contained single-file application. The function is called by the runtime to check for redirected p/invokes. The expected signature is defined as `PInvokeOverrideFn` in [`coreclrhost.h`](/src/coreclr/hosts/inc/coreclrhost.h) and [`mono-private-unstable-types.h`](/src/native/public/mono/metadata/details/mono-private-unstable-types.h).
diff --git a/docs/design/features/native-hosting.md b/docs/design/features/native-hosting.md
index f4c8625e3f45b2..6c636b12feea58 100644
--- a/docs/design/features/native-hosting.md
+++ b/docs/design/features/native-hosting.md
@@ -369,6 +369,7 @@ int hostfxr_get_runtime_delegate(const hostfxr_handle host_context_handle, hostf
```
Starts the runtime and returns a function pointer to specified functionality of the runtime.
* `host_context_handle` - handle to the initialized host context.
+ * **[.NET 8 and above]** If set to `NULL` the function will operate on the active host context in the process.
* `type` - the type of runtime functionality requested
* `hdt_load_assembly_and_get_function_pointer` - entry point which loads an assembly (with dependencies) and returns function pointer for a specified static method. See below for details (Loading and calling managed components)
* `hdt_com_activation`, `hdt_com_register`, `hdt_com_unregister` - COM activation entry-points - see [COM activation](https://github.com/dotnet/runtime/tree/main/docs/design/features/COM-activation.md) for more details.
diff --git a/docs/design/features/unloadability.md b/docs/design/features/unloadability.md
index 877336baa8201e..7ca316e0887b5c 100644
--- a/docs/design/features/unloadability.md
+++ b/docs/design/features/unloadability.md
@@ -11,7 +11,7 @@
After investigating all the details, it was decided that we won't support the following scenarios in unloadable `AssemblyLoadContext` unless we get strong feedback on a need to support those.
* Loading IJW assemblies
* Using R2R generated code from assemblies. R2R assemblies will be loaded as plain IL ones.
-* Implementation of the FixedAddressValueTypeAttribute
+* ~~Implementation of the FixedAddressValueTypeAttribute~~ Support added in .NET 9
## General scenarios
Based on various discussions and feedback on github, the following general scenarios were often mentioned as use cases for unloadability.
* Plugin scenarios when dynamic plugin loading and unloading is required.
@@ -84,11 +84,9 @@ We can reuse the `ComCallableWrapperCache` with only a very minor modifications
The After the `AssemblyLoadContext` unload is initiated and the managed `LoaderAllocator` is collected, the `ComCallableWrapperCache` is destroyed in the `LoaderAllocator::Destroy` method.
#### FixedAddressValueTypeAttribute for fields in collectible types
-After investigating all the details, it was decided that we won't add support for the FixedAddressValueTypeAttribute unless we get strong feedback on a need to support it.
+The fields with `FixedAddressValueTypeAttribute` are always pinned, so their address in memory never changes. Historically for non-collectible types, these fields are held pinned by a pinned `GCHandle`. But we could not use that for collectible types, since the `MethodTable` whose pointer is stored in the respective boxed instance of the value type would prevent the managed `LoaderAllocator` from being collected.
-If we decided to add support for it, we could do it as follows. The fields with `FixedAddressValueTypeAttribute` are always pinned, so their address in memory never changes. For non-collectible types, these fields are held pinned by a pinned `GCHandle`. But we cannot use that for collectible types, since the `MethodTable` whose pointer is stored in the respective boxed instance of the value type would prevent the managed `LoaderAllocator` from being collected.
-
-For collectible types, a new handle table can be added to `LoaderAllocator`. This handle table would be scanned during GC in a special way and all the objects the handles point to will be reported as pinned. The special scanning would be done in `Module::EnumRegularStaticGCRefs`. To pin the objects, the `promote_func` needs to be passed `GC_CALL_PINNED` in the third argument.
+Since .NET 9, we always allocate these fields in the Pinned Object Heap. That way, they are pinned without being held by a handle, and are able to be collected.
## AssemblyLoadContext unloading process
For better understanding of the unloading process, it is important to understand relations between several components that play role in the lifetime management. The picture below shows these components and the ways they reference each other.
The green marked relations and blocks are the new ones that were added to enable unloadable `AssemblyLoadContext`. The black ones were already present before.
diff --git a/docs/design/mono/profiled-aot.md b/docs/design/mono/profiled-aot.md
new file mode 100644
index 00000000000000..336089163086ec
--- /dev/null
+++ b/docs/design/mono/profiled-aot.md
@@ -0,0 +1,51 @@
+Profiled Ahead-Of-Time Compilation on Mono
+===
+
+# Background
+
+Mobile applications built using .NET typically leverage the Mono runtime to load and execute native machine code. The native machine code is generated from common intermediate language (CIL) assemblies using the Mono compiler with a variety of compilation strategies available including ahead-of-time (AOT) compilation, just-in-time (JIT) compilation, and interpreter. In addition to these strategies, .NET 7 introduced Profiled Ahead-Of-Time Compilation on Mono, a combination of AOT compilation and profile-guided-optimization (PGO) that leverages "profiles" to select which CIL code to AOT rather than an all-or-nothing approach. These profiles are obtained through [tracing](https://github.com/dotnet/runtime/blob/main/docs/design/mono/diagnostics-tracing.md) previous runs of an application, and the resulting trace is analyzed by the [dotnet-pgo tool](https://github.com/dotnet/runtime/blob/main/docs/design/features/dotnet-pgo.md) to generate a profile that tells the Mono AOT Compiler which methods to AOT.
+
+# How it works
+
+The advantages of Profiled AOT stem from its flexibility to AOT select code paths, leaving the rest to be compiled on the fly by the JIT compiler or Mono Interpreter. With an analysis of an application's trace, a record capturing a sequence of events during the application's execution, profiles can be generated to tailor optimizations for each application and environment. For example, profiles may target frequently executed (hot) code paths, minimizing the amount of runtime compilations and reducing application size, which are especially important in environments where full AOT compilation would strain storage space. Moreover, profiles may target startup code to optimize startup performance.
+
+Within .NET, traces can be collected by [diagnostic tooling](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/eventpipe#tools-that-use-eventpipe) that use the [EventPipe](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/eventpipe) runtime component. [Existing diagnostic tooling only supports `NamedPipes`/`UnixDomainSockets`](https://github.com/dotnet/runtime/blob/main/docs/design/mono/diagnostics-tracing.md), so the [diagnostics tool dotnet-dsrouter](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dsrouter) is required to bridge the EventPipe-based diagnostic tooling with .NET applications on mobile platforms and other remote sandboxed environments.
+
+Events collected by EventPipe-based diagnostic tooling are emitted with a `.nettrace` file format. Among the [various events supported by Mono runtime](https://github.com/dotnet/runtime/blob/main/src/mono/mono/eventpipe/gen-eventing-event-inc.lst), [method jitting and method loading](https://github.com/dotnet/runtime/blob/096b2499fe6939d635c35edaa607a180eb578fbb/src/mono/mono/eventpipe/gen-eventing-event-inc.lst#L39-L41) are crucial to [inform the Mono AOT Compiler what methods to AOT](https://github.com/dotnet/runtime/blob/6b67caaedfbfeaf7707478e50ccc9e8bc929e591/src/mono/mono/mini/aot-compiler.c#L13818-L13880). To collect a trace containing such events, it is imperative that dotnet-trace is provided either the appropriate [event provider](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/well-known-event-providers) with [keyword flags](https://github.com/dotnet/runtime/blob/c59aef7622c9a2499abb1b7d262ed0c90f4b0c7f/src/coreclr/vm/ClrEtwAll.man#L14-L92) through `--providers` or the appropriate list of keywords through `--clrevents`. That way, the [events relevant to the keywords are captured](https://github.com/dotnet/runtime/blob/c59aef7622c9a2499abb1b7d262ed0c90f4b0c7f/src/coreclr/vm/ClrEtwAll.man#L3133). In the example workflows below, `--providers Microsoft-Windows-DotNETRuntime:0x1F000080018:5` is used.
+
+Profiles [ingested by the Mono AOT Compiler](https://github.com/dotnet/runtime/blob/6b67caaedfbfeaf7707478e50ccc9e8bc929e591/src/tasks/AotCompilerTask/MonoAOTCompiler.cs#L174) are generated through .NET runtime's [`dotnet-pgo` tool](https://github.com/dotnet/runtime/blob/main/docs/design/features/dotnet-pgo.md). As such, profiles passed to the Mono AOT Compiler are expected to adhere to the [`.mibc` file format](https://github.com/dotnet/runtime/blob/main/src/coreclr/tools/dotnet-pgo/dotnet-pgo-experiment.md#mibc-file-format). The Mono AOT Compiler [reads `.mibc` profiles](https://github.com/dotnet/runtime/blob/c59aef7622c9a2499abb1b7d262ed0c90f4b0c7f/src/mono/mono/mini/aot-compiler.c#L14085-L14162) to determine [which methods to AOT](https://github.com/dotnet/runtime/blob/6b67caaedfbfeaf7707478e50ccc9e8bc929e591/src/mono/mono/mini/aot-compiler.c#L13818-L13880) when compiling CIL assemblies.
+
+# Example Workflows
+
+## Android -- Running through the [Android Profiled AOT Functional Test](https://github.com/dotnet/runtime/tree/main/src/tests/FunctionalTests/Android/Device_Emulator/AOT_PROFILED)
+
+### Requirements:
+- [Prerequisites](https://github.com/dotnet/runtime/blob/main/docs/workflow/testing/libraries/testing-android.md#prerequisites)
+- [Building mono and libs](https://github.com/dotnet/runtime/blob/main/docs/workflow/testing/libraries/testing-android.md#building-libs-and-tests-for-android)
+- [dotnet-dsrouter](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dsrouter)
+- [dotnet-trace](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-trace)
+
+### Tracing (if not using provided .nettrace/.mibc files)
+(informational) [Understanding diagnostics_tracing runtime component](https://github.com/dotnet/runtime/blob/main/docs/design/mono/diagnostics-tracing.md)
+
+1. Startup dotnet-dsrouter to bridge device/emulator with diagnostic tooling either in a separate window or launch background instance with a `&` at the end.
+```C#
+dotnet-dsrouter client-server -tcps 127.0.0.1:9001 -ipcc ~/myport --verbose debug
+```
+
+2. Startup dotnet-trace tool to collect a .nettrace in a separate window
+```C#
+dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:0x1F000080018:5 --diagnostic-port ~/myport
+```
+
+3. Run the Android application enabling `RuntimeComponents` + `DiagnosticPorts` and disabling `NetTraceFilePath` + `ProfiledAOTProfilePaths` in the `.csproj`. These properties are consumed in the Android [build](https://github.com/dotnet/runtime/blob/main/src/mono/msbuild/android/build/AndroidBuild.targets).
+```Shell
+./dotnet.sh build /t:Test /p:TargetOS=android /p:TargetArchitecture=arm64 /p:Configuration=Debug src/tests/FunctionalTests/Android/Device_Emulator/AOT_PROFILED/Android.Device_Emulator.Aot_Profiled.Test.csproj
+```
+
+### Profiled AOT
+
+1. Run the Android application supplying either the default or your own `.nettrace file` in `NetTraceFilePath` and/or `.mibc files` in `ProfiledAOTProfilePaths` and disabling `RuntimeComponents` + `DiagnosticPorts` in the `.csproj`. These properties are consumed in the Android [build](https://github.com/dotnet/runtime/blob/main/src/mono/msbuild/android/build/AndroidBuild.targets).
+```Shell
+./dotnet.sh build /t:Test /p:TargetOS=android /p:TargetArchitecture=arm64 /p:Configuration=Debug src/tests/FunctionalTests/Android/Device_Emulator/AOT_PROFILED/Android.Device_Emulator.Aot_Profiled.Test.csproj
+```
diff --git a/docs/project/list-of-diagnostics.md b/docs/project/list-of-diagnostics.md
index 3c9a9afb9c4199..4b46d49f5813f0 100644
--- a/docs/project/list-of-diagnostics.md
+++ b/docs/project/list-of-diagnostics.md
@@ -208,7 +208,7 @@ The diagnostic id values reserved for .NET Libraries analyzer warnings are `SYSL
| __`SYSLIB1089`__ | _`SYSLIB1070`-`SYSLIB1089` reserved for System.Runtime.InteropServices.JavaScript.JSImportGenerator._ |
| __`SYSLIB1090`__ | Invalid 'GeneratedComInterfaceAttribute' usage |
| __`SYSLIB1091`__ | Method is declared in different partial declaration than the 'GeneratedComInterface' attribute. |
-| __`SYSLIB1092`__ | 'GenerateComInterfaceAttribute' usage not recommended. See aka.ms/GeneratedComInterfaceUsage for recommended usage. |
+| __`SYSLIB1092`__ | Usage of '[LibraryImport|GeneratedComInterface]' does not follow recommendation. See aka.ms/[LibraryImport|GeneratedComInterface]Usage for best practices. |
| __`SYSLIB1093`__ | Analysis for COM interface generation has failed |
| __`SYSLIB1094`__ | The base COM interface failed to generate source. Code will not be generated for this interface. |
| __`SYSLIB1095`__ | Invalid 'GeneratedComClassAttribute' usage |
diff --git a/docs/workflow/building/mono/README.md b/docs/workflow/building/mono/README.md
index 19dfcc4a4c482b..8e67434610b095 100644
--- a/docs/workflow/building/mono/README.md
+++ b/docs/workflow/building/mono/README.md
@@ -55,11 +55,11 @@ build.cmd mono --build
### Useful Build Arguments
Here are a list of build arguments that may be of use:
-`/p:MonoEnableLlvm=true` - Builds mono w/ LLVM
+`/p:MonoEnableLLVM=true` - Builds mono w/ LLVM
-`/p:MonoEnableLlvm=true /p:MonoLLVMDir=path/to/llvm` - Builds mono w/ LLVM from a custom path
+`/p:MonoEnableLLVM=true /p:MonoLLVMDir=path/to/llvm` - Builds mono w/ LLVM from a custom path
-`/p:MonoEnableLlvm=true /p:MonoLLVMDir=path/to/llvm /p:MonoLLVMUseCxx11Abi=true` - Builds mono w/ LLVM
+`/p:MonoEnableLLVM=true /p:MonoLLVMDir=path/to/llvm /p:MonoLLVMUseCxx11Abi=true` - Builds mono w/ LLVM
from a custom path (and that LLVM was built with C++11 ABI)
For `build.sh`
diff --git a/docs/workflow/ci/pr-guide.md b/docs/workflow/ci/pr-guide.md
index 4c391c66438d64..680cff15cdd1c2 100644
--- a/docs/workflow/ci/pr-guide.md
+++ b/docs/workflow/ci/pr-guide.md
@@ -8,7 +8,7 @@ To merge pull requests, you must have write permissions in the repository. If yo
## Quick Code Review Rules
* Do not mix unrelated changes in one pull request. For example, a code style change should never be mixed with a bug fix.
-* All changes should follow the existing code style. You can read more about different code styles at [docs/coding-guidelines](coding-guidelines/).
+* All changes should follow the existing code style. You can read more about different code styles at [docs/coding-guidelines](../../coding-guidelines/).
* Use Draft pull requests for changes you are still working on but want early CI loop feedback. When you think your changes are ready for review, [change the status](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/changing-the-stage-of-a-pull-request) of your pull request.
* Avoid rebasing your changes. If you are asked to make changes during the review process do them as a new commit.
* To resolve merge conflicts, use "merge" instead of "rebase".
diff --git a/docs/workflow/trimming/feature-switches.md b/docs/workflow/trimming/feature-switches.md
index 87d8fa4c5ec425..2c25a36230d4d2 100644
--- a/docs/workflow/trimming/feature-switches.md
+++ b/docs/workflow/trimming/feature-switches.md
@@ -13,6 +13,7 @@ configurations but their defaults might vary as any SDK can set the defaults dif
| EnableUnsafeBinaryFormatterSerialization | System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization | BinaryFormatter serialization support is trimmed when set to false |
| EventSourceSupport | System.Diagnostics.Tracing.EventSource.IsSupported | Any EventSource related code or logic is trimmed when set to false |
| InvariantGlobalization | System.Globalization.Invariant | All globalization specific code and data is trimmed when set to true |
+| MetricsSupport | System.Diagnostics.Metrics.Meter.IsSupported | Any Metrics related code or logic is trimmed when set to false |
| PredefinedCulturesOnly | System.Globalization.PredefinedCulturesOnly | Don't allow creating a culture for which the platform does not have data |
| HybridGlobalization | System.Globalization.Hybrid | Properties connected with the mixed: platform-specific + icu-based globalization will be trimmed |
| UseSystemResourceKeys | System.Resources.UseSystemResourceKeys | Any localizable resources for system assemblies is trimmed when set to true |
@@ -27,11 +28,13 @@ configurations but their defaults might vary as any SDK can set the defaults dif
| MetadataUpdaterSupport | System.Reflection.Metadata.MetadataUpdater.IsSupported | Metadata update related code to be trimmed when set to false |
| _EnableConsumingManagedCodeFromNativeHosting | System.Runtime.InteropServices.EnableConsumingManagedCodeFromNativeHosting | Getting a managed function from native hosting is disabled when set to false and related functionality can be trimmed. |
| VerifyDependencyInjectionOpenGenericServiceTrimmability | Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability | When set to true, DependencyInjection will verify trimming annotations applied to open generic services are correct |
+| DisableDependencyInjectionDynamicEngine | Microsoft.Extensions.DependencyInjection.DisableDynamicEngine | When set to true, DependencyInjection will avoid using System.Reflection.Emit when realizing services |
| NullabilityInfoContextSupport | System.Reflection.NullabilityInfoContext.IsSupported | Nullable attributes can be trimmed when set to false |
| DynamicCodeSupport | System.Runtime.CompilerServices.RuntimeFeature.IsDynamicCodeSupported | Changes RuntimeFeature.IsDynamicCodeSupported to false to allow testing AOT-safe fallback code without publishing for Native AOT. |
| _AggressiveAttributeTrimming | System.AggressiveAttributeTrimming | When set to true, aggressively trims attributes to allow for the most size savings possible, even if it could result in runtime behavior changes |
| JsonSerializerIsReflectionEnabledByDefault | System.Text.Json.JsonSerializer.IsReflectionEnabledByDefault | When set to false, disables using reflection as the default contract resolver in System.Text.Json |
| EnableGeneratedComInterfaceComImportInterop | System.Runtime.InteropServices.Marshalling.EnableGeneratedComInterfaceComImportInterop | When set to true, enables casting source-generated COM object wrappers to built-in COM-based COM interfaces. |
+| _UseManagedNtlm | System.Net.Security.UseManagedNtlm | When set to true, uses built-in managed implementation of NTLM and SPNEGO algorithm for HTTP, SMTP authentication, and NegotiateAuthentication API instead of system provided GSSAPI implementation. |
Any feature-switch which defines property can be set in csproj file or
on the command line as any other MSBuild property. Those without predefined property name
diff --git a/eng/Analyzers.targets b/eng/Analyzers.targets
index 4ca3df7737280a..eb82aa8dcad972 100644
--- a/eng/Analyzers.targets
+++ b/eng/Analyzers.targets
@@ -1,4 +1,11 @@
+
+
+ false
+
false
@@ -14,6 +21,7 @@
+
diff --git a/eng/AvoidRestoreCycleOnSelfReference.targets b/eng/AvoidRestoreCycleOnSelfReference.targets
deleted file mode 100644
index cb665cb070d988..00000000000000
--- a/eng/AvoidRestoreCycleOnSelfReference.targets
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- <_PackageIdTemp>$(PackageId)
- $(PackageId)_temp
-
-
-
-
- $(_PackageIdTemp)
-
-
-
\ No newline at end of file
diff --git a/eng/CodeAnalysis.src.globalconfig b/eng/CodeAnalysis.src.globalconfig
index aee934588b9a25..d06bf337e234c7 100644
--- a/eng/CodeAnalysis.src.globalconfig
+++ b/eng/CodeAnalysis.src.globalconfig
@@ -475,7 +475,7 @@ dotnet_diagnostic.CA1860.severity = warning
dotnet_diagnostic.CA1861.severity = warning
# CA1862: Prefer using 'StringComparer'/'StringComparison' to perform case-insensitive string comparisons
-dotnet_diagnostic.CA1862.severity = info
+dotnet_diagnostic.CA1862.severity = suggestion
# CA1863: Use 'CompositeFormat'
dotnet_diagnostic.CA1863.severity = suggestion
@@ -486,6 +486,12 @@ dotnet_diagnostic.CA1864.severity = warning
# CA1868: Unnecessary call to 'Contains' for sets
dotnet_diagnostic.CA1868.severity = warning
+# CA1869: Cache and reuse 'JsonSerializerOptions' instances
+dotnet_diagnostic.CA1869.severity = warning
+
+# CA1870: Use a cached 'SearchValues' instance
+dotnet_diagnostic.CA1870.severity = warning
+
# CA2000: Dispose objects before losing scope
dotnet_diagnostic.CA2000.severity = none
@@ -955,6 +961,147 @@ dotnet_diagnostic.IL3001.severity = warning
# IL3002: Using member with RequiresAssemblyFilesAttribute can break functionality when embedded in a single-file app
dotnet_diagnostic.IL3002.severity = warning
+# RS1001: Missing diagnostic analyzer attribute
+dotnet_diagnostic.RS1001.severity = warning
+
+# RS1002: Missing kind argument when registering an analyzer action
+dotnet_diagnostic.RS1002.severity = warning
+
+# RS1003: Unsupported SymbolKind argument when registering a symbol analyzer action
+dotnet_diagnostic.RS1003.severity = warning
+
+# RS1004: Recommend adding language support to diagnostic analyzer
+dotnet_diagnostic.RS1004.severity = warning
+
+# RS1005: ReportDiagnostic invoked with an unsupported DiagnosticDescriptor
+dotnet_diagnostic.RS1005.severity = warning
+
+# RS1006: Invalid type argument for DiagnosticAnalyzer's Register method
+dotnet_diagnostic.RS1006.severity = warning
+
+# RS1007: Provide localizable arguments to diagnostic descriptor constructor
+dotnet_diagnostic.RS1007.severity = none
+
+# RS1008: Avoid storing per-compilation data into the fields of a diagnostic analyzer
+dotnet_diagnostic.RS1008.severity = warning
+
+# RS1009: Only internal implementations of this interface are allowed
+dotnet_diagnostic.RS1009.severity = error
+
+# RS1010: Create code actions should have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1010.severity = warning
+
+# RS1011: Use code actions that have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1011.severity = warning
+
+# RS1012: Start action has no registered actions
+dotnet_diagnostic.RS1012.severity = warning
+
+# RS1013: Start action has no registered non-end actions
+dotnet_diagnostic.RS1013.severity = warning
+
+# RS1014: Do not ignore values returned by methods on immutable objects
+dotnet_diagnostic.RS1014.severity = warning
+
+# RS1015: Provide non-null 'helpLinkUri' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1015.severity = none
+
+# RS1016: Code fix providers should provide FixAll support
+dotnet_diagnostic.RS1016.severity = suggestion
+
+# RS1017: DiagnosticId for analyzers must be a non-null constant
+dotnet_diagnostic.RS1017.severity = warning
+
+# RS1018: DiagnosticId for analyzers must be in specified format
+dotnet_diagnostic.RS1018.severity = warning
+
+# RS1019: DiagnosticId must be unique across analyzers
+dotnet_diagnostic.RS1019.severity = warning
+
+# RS1020: Category for analyzers must be from the specified values
+dotnet_diagnostic.RS1020.severity = none
+
+# RS1021: Invalid entry in analyzer category and diagnostic ID range specification file
+dotnet_diagnostic.RS1021.severity = warning
+
+# RS1022: Do not use types from Workspaces assembly in an analyzer
+dotnet_diagnostic.RS1022.severity = warning
+
+# RS1023: Upgrade MSBuildWorkspace
+dotnet_diagnostic.RS1023.severity = warning
+
+# RS1024: Symbols should be compared for equality
+dotnet_diagnostic.RS1024.severity = warning
+
+# RS1025: Configure generated code analysis
+dotnet_diagnostic.RS1025.severity = warning
+
+# RS1026: Enable concurrent execution
+dotnet_diagnostic.RS1026.severity = warning
+
+# RS1027: Types marked with DiagnosticAnalyzerAttribute(s) should inherit from DiagnosticAnalyzer
+dotnet_diagnostic.RS1027.severity = warning
+
+# RS1028: Provide non-null 'customTags' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1028.severity = none
+
+# RS1029: Do not use reserved diagnostic IDs
+dotnet_diagnostic.RS1029.severity = warning
+
+# RS1030: Do not invoke Compilation.GetSemanticModel() method within a diagnostic analyzer
+dotnet_diagnostic.RS1030.severity = warning
+
+# RS1031: Define diagnostic title correctly
+dotnet_diagnostic.RS1031.severity = warning
+
+# RS1032: Define diagnostic message correctly
+dotnet_diagnostic.RS1032.severity = warning
+
+# RS1033: Define diagnostic description correctly
+dotnet_diagnostic.RS1033.severity = warning
+
+# RS1034: Prefer 'IsKind' for checking syntax kinds
+dotnet_diagnostic.RS1034.severity = warning
+
+# RS1035: Do not use APIs banned for analyzers
+dotnet_diagnostic.RS1035.severity = error
+
+# RS1036: Specify analyzer banned API enforcement setting
+dotnet_diagnostic.RS1036.severity = warning
+
+# RS1037: Add "CompilationEnd" custom tag to compilation end diagnostic descriptor
+dotnet_diagnostic.RS1037.severity = warning
+
+# RS1038: Compiler extensions should be implemented in assemblies with compiler-provided references
+dotnet_diagnostic.RS1038.severity = suggestion
+
+# RS2000: Add analyzer diagnostic IDs to analyzer release
+dotnet_diagnostic.RS2000.severity = warning
+
+# RS2001: Ensure up-to-date entry for analyzer diagnostic IDs are added to analyzer release
+dotnet_diagnostic.RS2001.severity = warning
+
+# RS2002: Do not add removed analyzer diagnostic IDs to unshipped analyzer release
+dotnet_diagnostic.RS2002.severity = warning
+
+# RS2003: Shipped diagnostic IDs that are no longer reported should have an entry in the 'Removed Rules' table in unshipped file
+dotnet_diagnostic.RS2003.severity = warning
+
+# RS2004: Diagnostic IDs marked as removed in analyzer release file should not be reported by analyzers
+dotnet_diagnostic.RS2004.severity = warning
+
+# RS2005: Remove duplicate entries for diagnostic ID in the same analyzer release
+dotnet_diagnostic.RS2005.severity = warning
+
+# RS2006: Remove duplicate entries for diagnostic ID between analyzer releases
+dotnet_diagnostic.RS2006.severity = warning
+
+# RS2007: Invalid entry in analyzer release file
+dotnet_diagnostic.RS2007.severity = warning
+
+# RS2008: Enable analyzer release tracking
+dotnet_diagnostic.RS2008.severity = warning
+
# SA0001: XML comments
dotnet_diagnostic.SA0001.severity = none
diff --git a/eng/CodeAnalysis.test.globalconfig b/eng/CodeAnalysis.test.globalconfig
index baa75bc6c54fba..76afd46a0b7b53 100644
--- a/eng/CodeAnalysis.test.globalconfig
+++ b/eng/CodeAnalysis.test.globalconfig
@@ -483,6 +483,12 @@ dotnet_diagnostic.CA1864.severity = none
# CA1868: Unnecessary call to 'Contains' for sets
dotnet_diagnostic.CA1868.severity = none
+# CA1869: Cache and reuse 'JsonSerializerOptions' instances
+dotnet_diagnostic.CA1869.severity = none
+
+# CA1870: Use a cached 'SearchValues' instance
+dotnet_diagnostic.CA1870.severity = none
+
# CA2000: Dispose objects before losing scope
dotnet_diagnostic.CA2000.severity = none
@@ -951,6 +957,147 @@ dotnet_diagnostic.IL3001.severity = none
# IL3002: Using member with RequiresAssemblyFilesAttribute can break functionality when embedded in a single-file app
dotnet_diagnostic.IL3002.severity = none
+# RS1001: Missing diagnostic analyzer attribute
+dotnet_diagnostic.RS1001.severity = none
+
+# RS1002: Missing kind argument when registering an analyzer action
+dotnet_diagnostic.RS1002.severity = none
+
+# RS1003: Unsupported SymbolKind argument when registering a symbol analyzer action
+dotnet_diagnostic.RS1003.severity = none
+
+# RS1004: Recommend adding language support to diagnostic analyzer
+dotnet_diagnostic.RS1004.severity = none
+
+# RS1005: ReportDiagnostic invoked with an unsupported DiagnosticDescriptor
+dotnet_diagnostic.RS1005.severity = none
+
+# RS1006: Invalid type argument for DiagnosticAnalyzer's Register method
+dotnet_diagnostic.RS1006.severity = none
+
+# RS1007: Provide localizable arguments to diagnostic descriptor constructor
+dotnet_diagnostic.RS1007.severity = none
+
+# RS1008: Avoid storing per-compilation data into the fields of a diagnostic analyzer
+dotnet_diagnostic.RS1008.severity = none
+
+# RS1009: Only internal implementations of this interface are allowed
+dotnet_diagnostic.RS1009.severity = none
+
+# RS1010: Create code actions should have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1010.severity = none
+
+# RS1011: Use code actions that have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1011.severity = none
+
+# RS1012: Start action has no registered actions
+dotnet_diagnostic.RS1012.severity = none
+
+# RS1013: Start action has no registered non-end actions
+dotnet_diagnostic.RS1013.severity = none
+
+# RS1014: Do not ignore values returned by methods on immutable objects
+dotnet_diagnostic.RS1014.severity = none
+
+# RS1015: Provide non-null 'helpLinkUri' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1015.severity = none
+
+# RS1016: Code fix providers should provide FixAll support
+dotnet_diagnostic.RS1016.severity = suggestion
+
+# RS1017: DiagnosticId for analyzers must be a non-null constant
+dotnet_diagnostic.RS1017.severity = none
+
+# RS1018: DiagnosticId for analyzers must be in specified format
+dotnet_diagnostic.RS1018.severity = none
+
+# RS1019: DiagnosticId must be unique across analyzers
+dotnet_diagnostic.RS1019.severity = none
+
+# RS1020: Category for analyzers must be from the specified values
+dotnet_diagnostic.RS1020.severity = none
+
+# RS1021: Invalid entry in analyzer category and diagnostic ID range specification file
+dotnet_diagnostic.RS1021.severity = none
+
+# RS1022: Do not use types from Workspaces assembly in an analyzer
+dotnet_diagnostic.RS1022.severity = none
+
+# RS1023: Upgrade MSBuildWorkspace
+dotnet_diagnostic.RS1023.severity = none
+
+# RS1024: Symbols should be compared for equality
+dotnet_diagnostic.RS1024.severity = none
+
+# RS1025: Configure generated code analysis
+dotnet_diagnostic.RS1025.severity = none
+
+# RS1026: Enable concurrent execution
+dotnet_diagnostic.RS1026.severity = none
+
+# RS1027: Types marked with DiagnosticAnalyzerAttribute(s) should inherit from DiagnosticAnalyzer
+dotnet_diagnostic.RS1027.severity = none
+
+# RS1028: Provide non-null 'customTags' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1028.severity = none
+
+# RS1029: Do not use reserved diagnostic IDs
+dotnet_diagnostic.RS1029.severity = none
+
+# RS1030: Do not invoke Compilation.GetSemanticModel() method within a diagnostic analyzer
+dotnet_diagnostic.RS1030.severity = none
+
+# RS1031: Define diagnostic title correctly
+dotnet_diagnostic.RS1031.severity = none
+
+# RS1032: Define diagnostic message correctly
+dotnet_diagnostic.RS1032.severity = none
+
+# RS1033: Define diagnostic description correctly
+dotnet_diagnostic.RS1033.severity = none
+
+# RS1034: Prefer 'IsKind' for checking syntax kinds
+dotnet_diagnostic.RS1034.severity = none
+
+# RS1035: Do not use APIs banned for analyzers
+dotnet_diagnostic.RS1035.severity = none
+
+# RS1036: Specify analyzer banned API enforcement setting
+dotnet_diagnostic.RS1036.severity = none
+
+# RS1037: Add "CompilationEnd" custom tag to compilation end diagnostic descriptor
+dotnet_diagnostic.RS1037.severity = none
+
+# RS1038: Compiler extensions should be implemented in assemblies with compiler-provided references
+dotnet_diagnostic.RS1038.severity = suggestion
+
+# RS2000: Add analyzer diagnostic IDs to analyzer release
+dotnet_diagnostic.RS2000.severity = none
+
+# RS2001: Ensure up-to-date entry for analyzer diagnostic IDs are added to analyzer release
+dotnet_diagnostic.RS2001.severity = none
+
+# RS2002: Do not add removed analyzer diagnostic IDs to unshipped analyzer release
+dotnet_diagnostic.RS2002.severity = none
+
+# RS2003: Shipped diagnostic IDs that are no longer reported should have an entry in the 'Removed Rules' table in unshipped file
+dotnet_diagnostic.RS2003.severity = none
+
+# RS2004: Diagnostic IDs marked as removed in analyzer release file should not be reported by analyzers
+dotnet_diagnostic.RS2004.severity = none
+
+# RS2005: Remove duplicate entries for diagnostic ID in the same analyzer release
+dotnet_diagnostic.RS2005.severity = none
+
+# RS2006: Remove duplicate entries for diagnostic ID between analyzer releases
+dotnet_diagnostic.RS2006.severity = none
+
+# RS2007: Invalid entry in analyzer release file
+dotnet_diagnostic.RS2007.severity = none
+
+# RS2008: Enable analyzer release tracking
+dotnet_diagnostic.RS2008.severity = none
+
# SA0001: XML comments
dotnet_diagnostic.SA0001.severity = none
diff --git a/eng/SourceBuild.props b/eng/SourceBuild.props
index 1e9d5cf8906491..4f7c9487a44c21 100644
--- a/eng/SourceBuild.props
+++ b/eng/SourceBuild.props
@@ -63,10 +63,12 @@
+
+
diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml
index 46dd7457d764aa..0f3958675010e8 100644
--- a/eng/SourceBuildPrebuiltBaseline.xml
+++ b/eng/SourceBuildPrebuiltBaseline.xml
@@ -9,7 +9,6 @@
-
@@ -17,6 +16,14 @@
+
+
+
+
+
+
diff --git a/eng/Subsets.props b/eng/Subsets.props
index 77268ffa7b5d09..6f2bfd8be05e24 100644
--- a/eng/Subsets.props
+++ b/eng/Subsets.props
@@ -82,7 +82,7 @@
tools.illink
host.native+host.tools+host.pkg
- $(DefaultHostSubsets)+host.tests
+ $(DefaultHostSubsets)+host.pretest+host.tests
host.native
@@ -168,6 +168,7 @@
+
@@ -352,7 +353,7 @@
Test="true" Category="clr" Condition="'$(DotNetBuildFromSource)' != 'true'"/>
-
@@ -485,6 +486,12 @@
+
+
+
+
+
+
@@ -504,7 +511,7 @@
-
+
@@ -558,11 +565,13 @@
%(AdditionalProperties);Configuration=$(LibrariesConfiguration)
%(AdditionalProperties);Configuration=$(HostConfiguration)
%(AdditionalProperties);Configuration=$(TasksConfiguration)
+ %(AdditionalProperties);Configuration=$(ToolsConfiguration)
%(AdditionalProperties);LibrariesConfiguration=$(LibrariesConfiguration)
%(AdditionalProperties);HostConfiguration=$(HostConfiguration)
%(AdditionalProperties);TasksConfiguration=$(TasksConfiguration)
+ %(AdditionalProperties);ToolsConfiguration=$(ToolsConfiguration)
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index ab67345d0fe5b3..68a296dc447a80 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -1,8 +1,8 @@
-
+
https://github.com/dotnet/icu
- 92124838d3f0efde3ac483a904691a611babb9a0
+ cd1393cad6efacd354328571da8107fb3cbc3a48
https://github.com/dotnet/msquic
@@ -12,69 +12,69 @@
https://github.com/dotnet/wcf
7f504aabb1988e9a093c1e74d8040bd52feb2f01
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
https://github.com/dotnet/command-line-api
@@ -85,312 +85,316 @@
02fe27cd6a9b001c8feb7938e6ef4b3799745759b
-
+
https://github.com/dotnet/cecil
- 2f4ef297939628143389ddeea569874ded0b1c1b
+ 89be445dd4936157533ad96bafb95f701430653a
-
+
https://github.com/dotnet/emsdk
- abfa03c97f4175d4d209435cd0e71f558e36c3fd
+ bebe955e9f7d392fbca594b1c76c54ba2e27027e
-
+
https://github.com/dotnet/source-build-reference-packages
- 5a1492557c8717b428b69fd4b7ca8c91d5d18cd3
+ b88b567fbf54c5404d039b80cfb86f09a681f604
-
+
https://github.com/dotnet/source-build-externals
- de4dda48d0cf31e13182bc24107b2246c61ed483
+ e9d6489787a5ea5400a31dfa34aa6ad6b590de9b
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/xliff-tasks
- 493329204079519072f0241ed26f692bdee0d60c
+ 194f32828726c3f1f63f79f3dc09b9e99c157b11
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
+ https://github.com/dotnet/arcade
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
+
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/llvm-project
- 9b77c16a6061fb1160ec12bd307badb4c58dff98
+ dc18ea8f36885b70da5e7853aa6b5278ce8d0de4
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/runtime
- edbd5c769a19798b6955050baccf99e6797d3208
+ ebe6f541ca2adea41f4b1dfc97774af371654bab
-
+
https://github.com/dotnet/xharness
- 480b9159eb7e69b182a87581d5a336e97e0b6dae
+ a3a749a7056623c665bba226fe843152f413f044
-
+
https://github.com/dotnet/xharness
- 480b9159eb7e69b182a87581d5a336e97e0b6dae
+ a3a749a7056623c665bba226fe843152f413f044
-
+
https://github.com/dotnet/xharness
- 480b9159eb7e69b182a87581d5a336e97e0b6dae
+ a3a749a7056623c665bba226fe843152f413f044
-
+
https://github.com/dotnet/arcade
- 9b2af35a6702526dc8a7c5fcadcc44efd0dca170
+ 1d451c32dda2314c721adbf8829e1c0cd4e681ff
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 068998a5d91f55a619d1d072ab3094dacd5d6a4f
+ 5b0a8abbba75c63e20e42f778650dd1448aef62c
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 068998a5d91f55a619d1d072ab3094dacd5d6a4f
+ 5b0a8abbba75c63e20e42f778650dd1448aef62c
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 068998a5d91f55a619d1d072ab3094dacd5d6a4f
+ 5b0a8abbba75c63e20e42f778650dd1448aef62c
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 068998a5d91f55a619d1d072ab3094dacd5d6a4f
+ 5b0a8abbba75c63e20e42f778650dd1448aef62c
-
+
https://github.com/dotnet/hotreload-utils
- 696312fd2a60671797b12311a4cf387d3cd14dd0
+ 821048c1587d0384826230cdddf292570b8e430f
-
+
https://github.com/dotnet/runtime-assets
- 48270e734aa881c737b80c4fe0459e68aaf08ad6
+ b7d8e946c831e79435054f65e49c2eebb74b55c6
-
+
https://github.com/dotnet/roslyn
- 93ce610622875b8e843f348e96496abd7056360d
+ a19fe34b7266ab7638a12c2b54748d89d35a21a7
-
+
https://github.com/dotnet/roslyn
- 93ce610622875b8e843f348e96496abd7056360d
+ a19fe34b7266ab7638a12c2b54748d89d35a21a7
-
+
https://github.com/dotnet/roslyn
- 93ce610622875b8e843f348e96496abd7056360d
+ a19fe34b7266ab7638a12c2b54748d89d35a21a7
-
+
https://github.com/dotnet/roslyn-analyzers
- 76d99c5f3e11f0600fae074270c0d89042c360f0
+ 837c22a23433f441fa56d96eb45d13c65408f7c3
-
+
https://github.com/dotnet/roslyn-analyzers
- 76d99c5f3e11f0600fae074270c0d89042c360f0
+ 837c22a23433f441fa56d96eb45d13c65408f7c3
-
+
https://github.com/dotnet/sdk
- d10b02ae5cc670609d920a672985ed4456bdd6b6
+ 4bc3b410401010fb7844fee0479f9b12f52500b3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 068998a5d91f55a619d1d072ab3094dacd5d6a4f
+ 5b0a8abbba75c63e20e42f778650dd1448aef62c
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 068998a5d91f55a619d1d072ab3094dacd5d6a4f
+ 5b0a8abbba75c63e20e42f778650dd1448aef62c
@@ -398,5 +402,9 @@
https://github.com/NuGet/NuGet.Client
8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8
+
+ https://github.com/dotnet/installer
+ 1f0982b7f469aa0d693d1ad6744a7fde5263ef1b
+
diff --git a/eng/Versions.props b/eng/Versions.props
index 335b628baa5b2a..f70c21cf3ca6c7 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -7,6 +7,7 @@
0
0
9.0.100
+ 8.0.0-rc.1.23414.4
7.0.8
6.0.$([MSBuild]::Add($([System.Version]::Parse('$(PackageVersionNet7)').Build),11))
alpha
@@ -15,16 +16,13 @@
$(SdkBandVersion)$(WorkloadVersionSuffix)
-
- 8.0.0.0
+ $(MajorVersion).$(MinorVersion).0.0
false
release
- true
false
false
- $(AssemblyVersion)
true
@@ -33,17 +31,17 @@
- 3.11.0-beta1.23420.2
- 8.0.0-preview.23420.2
+ 3.11.0-beta1.23462.3
+ 9.0.0-preview.23462.3
- 4.8.0-2.23422.14
- 4.8.0-2.23422.14
- 4.8.0-2.23422.14
+ 4.8.0-3.23468.4
+ 4.8.0-3.23468.4
+ 4.8.0-3.23468.4
- 4.5.0
+ 4.7.0
3.3.5-beta1.23270.2
@@ -82,39 +80,40 @@
0.2.0
- 8.0.100-preview.7.23329.3
+ 9.0.100-alpha.1.23468.31
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 2.5.1-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
- 8.0.0-beta.23411.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 2.5.1-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
+ 8.0.0-beta.23463.1
6.0.0-preview.1.102
- 8.0.0-rc.1.23406.6
+ 9.0.0-alpha.1.23466.6
6.0.0
- 8.0.0-rc.1.23406.6
+ 9.0.0-alpha.1.23466.6
8.0.0-preview.7.23325.2
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
6.0.0
1.1.1
@@ -133,34 +132,34 @@
5.0.0
5.0.0
7.0.0
- 8.0.0-rc.1.23406.6
+ 9.0.0-alpha.1.23466.6
6.0.0
7.0.0
4.5.4
4.5.0
- 8.0.0-rc.1.23406.6
+ 9.0.0-alpha.1.23466.6
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
- 8.0.0-beta.23408.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
+ 8.0.0-beta.23456.1
- 1.0.0-prerelease.23362.5
- 1.0.0-prerelease.23362.5
- 1.0.0-prerelease.23362.5
- 1.0.0-prerelease.23362.5
- 1.0.0-prerelease.23362.5
- 1.0.0-prerelease.23362.5
+ 1.0.0-prerelease.23464.6
+ 1.0.0-prerelease.23464.6
+ 1.0.0-prerelease.23464.6
+ 1.0.0-prerelease.23464.6
+ 1.0.0-prerelease.23464.6
+ 1.0.0-prerelease.23464.6
16.11.27-beta1.23180.1
2.0.0-beta4.23307.1
@@ -180,17 +179,17 @@
1.1.0
17.4.0-preview-20220707-01
- 8.0.0-prerelease.23407.2
- 8.0.0-prerelease.23407.2
- 8.0.0-prerelease.23407.2
- 8.0.0-alpha.0.23407.2
+ 8.0.0-prerelease.23456.2
+ 8.0.0-prerelease.23456.2
+ 8.0.0-prerelease.23456.2
+ 8.0.0-alpha.0.23461.1
2.4.2
1.0.0
2.4.5
3.12.0
4.1.0
6.0.0
- 13.0.1
+ 13.0.3
1.0.2
2.0.4
4.18.4
@@ -204,57 +203,58 @@
2.46.3
2.45.0
2.45.0
-
-
1.1.2-beta1.23323.1
- 7.0.0-preview-20221010.1
+ 8.0.0-preview-20230918.1
- 8.0.0-rc.1.23406.6
+ 9.0.0-alpha.1.23466.6
- 0.11.4-alpha.23407.2
+ 0.11.4-alpha.23468.2
- 8.0.0-rc.1.23406.6
+ 9.0.0-alpha.1.23466.6
- 8.0.0-rc.1.23407.2
+ 9.0.0-alpha.1.23454.1
2.2.2
8.0.0-alpha.1.23180.2
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
- 9.0.0-alpha.1.23415.2
+ 9.0.0-alpha.1.23465.3
$(MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportVersion)
1.1.87-gba258badda
1.0.0-v3.14.0.5722
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
- 16.0.5-alpha.1.23408.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
+ 16.0.5-alpha.1.23452.1
3.1.7
1.0.406601
+
+ 9.0.100-alpha.1.23469.3
+ $(MicrosoftDotnetSdkInternalVersion)
diff --git a/eng/build.ps1 b/eng/build.ps1
index 67440febafd5ce..fc771e7635d1fa 100644
--- a/eng/build.ps1
+++ b/eng/build.ps1
@@ -78,8 +78,8 @@ function Get-Help() {
Write-Host "Libraries settings:"
Write-Host " -allconfigurations Build packages for all build configurations."
Write-Host " -coverage Collect code coverage when testing."
- Write-Host " -framework (-f) Build framework: net8.0 or net48."
- Write-Host " [Default: net8.0]"
+ Write-Host " -framework (-f) Build framework: net9.0 or net48."
+ Write-Host " [Default: net9.0]"
Write-Host " -testnobuild Skip building tests when invoking -test."
Write-Host " -testscope Scope tests, allowed values: innerloop, outerloop, all."
Write-Host ""
diff --git a/eng/build.sh b/eng/build.sh
index e86cd084367c05..c68a742ffbebc8 100755
--- a/eng/build.sh
+++ b/eng/build.sh
@@ -32,7 +32,7 @@ usage()
echo " [Default: Debug]"
echo " --os Target operating system: windows, linux, freebsd, osx, maccatalyst, tvos,"
echo " tvossimulator, ios, iossimulator, android, browser, wasi, netbsd, illumos, solaris"
- echo " linux-musl, linux-bionic or haiku."
+ echo " linux-musl, linux-bionic, tizen, or haiku."
echo " [Default: Your machine's OS.]"
echo " --outputrid Optional argument that overrides the target rid name."
echo " --projects Project or solution file(s) to build."
@@ -67,8 +67,8 @@ usage()
echo "Libraries settings:"
echo " --allconfigurations Build packages for all build configurations."
echo " --coverage Collect code coverage when testing."
- echo " --framework (-f) Build framework: net8.0 or net48."
- echo " [Default: net8.0]"
+ echo " --framework (-f) Build framework: net9.0 or net48."
+ echo " [Default: net9.0]"
echo " --testnobuild Skip building tests when invoking -test."
echo " --testscope Test scope, allowed values: innerloop, outerloop, all."
echo ""
@@ -139,13 +139,12 @@ initDistroRid()
local targetOs="$1"
local targetArch="$2"
local isCrossBuild="$3"
- local isPortableBuild="$4"
# Only pass ROOTFS_DIR if __DoCrossArchBuild is specified and the current platform is not an Apple platform (that doesn't use rootfs)
if [[ $isCrossBuild == 1 && "$targetOs" != "osx" && "$targetOs" != "ios" && "$targetOs" != "iossimulator" && "$targetOs" != "tvos" && "$targetOs" != "tvossimulator" && "$targetOs" != "maccatalyst" ]]; then
passedRootfsDir=${ROOTFS_DIR}
fi
- initDistroRidGlobal "${targetOs}" "${targetArch}" "${isPortableBuild}" "${passedRootfsDir}"
+ initDistroRidGlobal "${targetOs}" "${targetArch}" "${passedRootfsDir}"
}
showSubsetHelp()
@@ -549,7 +548,7 @@ if [[ "${TreatWarningsAsErrors:-}" == "false" ]]; then
arguments="$arguments -warnAsError 0"
fi
-initDistroRid "$os" "$arch" "$crossBuild" "$portableBuild"
+initDistroRid "$os" "$arch" "$crossBuild"
# Disable targeting pack caching as we reference a partially constructed targeting pack and update it later.
# The later changes are ignored when using the cache.
diff --git a/eng/collect_vsinfo.ps1 b/eng/collect_vsinfo.ps1
new file mode 100644
index 00000000000000..e2178fe4b24f8f
--- /dev/null
+++ b/eng/collect_vsinfo.ps1
@@ -0,0 +1,65 @@
+<#
+.PARAMETER ArchiveRunName
+Name of the run for vs logs
+
+.NOTES
+Returns 0 if succeeds, 1 otherwise
+#>
+[CmdletBinding(PositionalBinding=$false)]
+Param (
+ [Parameter(Mandatory=$True)]
+ [string] $ArchiveRunName
+)
+
+. $PSScriptRoot/common/tools.ps1
+
+$ProgressPreference = "SilentlyContinue"
+$LogDir = Join-Path $LogDir $ArchiveRunName
+mkdir $LogDir
+
+$vscollect_uri="http://aka.ms/vscollect.exe"
+$vscollect="$env:TEMP\vscollect.exe"
+
+if (-not (Test-Path $vscollect)) {
+ Retry({
+ Write-Host "GET $vscollect_uri"
+ Invoke-WebRequest $vscollect_uri -OutFile $vscollect -UseBasicParsing
+ })
+
+ if (-not (Test-Path $vscollect)) {
+ Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unable to download vscollect."
+ exit 1
+ }
+}
+
+&"$vscollect"
+Move-Item $env:TEMP\vslogs.zip "$LogDir"
+
+$vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
+if (-not (Test-Path -Path "$vswhere" -PathType Leaf))
+{
+ Write-Error "Couldn't locate vswhere at $vswhere"
+ exit 1
+}
+
+&"$vswhere" -all -prerelease -products * | Tee-Object -FilePath "$LogDir\vs_where.log"
+
+$vsdir = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
+
+if (-not (Test-Path $vsdir))
+{
+ $procDumpDir = Join-Path $ToolsDir "procdump"
+ $procDumpToolPath = Join-Path $procDumpDir "procdump.exe"
+ $procdump_uri = "https://download.sysinternals.com/files/Procdump.zip"
+
+ if (-not (Test-Path $procDumpToolPath)) {
+ Retry({
+ Write-Host "GET $procdump_uri"
+ Invoke-WebRequest $procdump_uri -OutFile "$TempDir\Procdump.zip" -UseBasicParsing
+ })
+
+ Expand-Archive -Path "$TempDir\Procdump.zip" $procDumpDir
+ }
+
+ &"$procDumpToolPath" -ma -accepteula VSIXAutoUpdate.exe "$LogDir"
+}
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 6e99723945183e..2dc86ea2cdda1a 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -2,7 +2,7 @@
# This file should be removed as part of this issue: https://github.com/dotnet/arcade/issues/4080
#
# What the script does is iterate over all package sources in the pointed NuGet.config and add a credential entry
-# under for each Maestro managed private feed. Two additional credential
+# under for each Maestro managed private feed. Two additional credential
# entries are also added for the two private static internal feeds: dotnet3-internal and dotnet3-internal-transport.
#
# This script needs to be called in every job that will restore packages and which the base repo has
@@ -37,7 +37,7 @@ Set-StrictMode -Version 2.0
# Add source entry to PackageSources
function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) {
$packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
-
+
if ($packageSource -eq $null)
{
$packageSource = $doc.CreateElement("add")
@@ -48,7 +48,7 @@ function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Usern
else {
Write-Host "Package source $SourceName already present."
}
-
+
AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password
}
@@ -89,7 +89,7 @@ function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $Passw
$maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
-
+
ForEach ($PackageSource in $maestroPrivateSources) {
Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key
AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password
@@ -153,7 +153,7 @@ if ($dotnet31Source -ne $null) {
AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -Password $Password
}
-$dotnetVersions = @('5','6','7')
+$dotnetVersions = @('5','6','7','8')
foreach ($dotnetVersion in $dotnetVersions) {
$feedPrefix = "dotnet" + $dotnetVersion;
diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh
index 8af7d899db1212..a8bb8acd3be180 100644
--- a/eng/common/SetupNugetSources.sh
+++ b/eng/common/SetupNugetSources.sh
@@ -4,7 +4,7 @@
# This file should be removed as part of this issue: https://github.com/dotnet/arcade/issues/4080
#
# What the script does is iterate over all package sources in the pointed NuGet.config and add a credential entry
-# under for each Maestro's managed private feed. Two additional credential
+# under for each Maestro's managed private feed. Two additional credential
# entries are also added for the two private static internal feeds: dotnet3-internal and dotnet3-internal-transport.
#
# This script needs to be called in every job that will restore packages and which the base repo has
@@ -68,7 +68,7 @@ if [ "$?" != "0" ]; then
sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile
fi
-# Ensure there is a ... section.
+# Ensure there is a ... section.
grep -i "" $ConfigFile
if [ "$?" != "0" ]; then
echo "Adding ... section."
@@ -105,7 +105,7 @@ if [ "$?" == "0" ]; then
PackageSources+=('dotnet3.1-internal-transport')
fi
-DotNetVersions=('5' '6' '7')
+DotNetVersions=('5' '6' '7' '8')
for DotNetVersion in ${DotNetVersions[@]} ; do
FeedPrefix="dotnet${DotNetVersion}";
@@ -142,7 +142,7 @@ IFS=$PrevIFS
for FeedName in ${PackageSources[@]} ; do
# Check if there is no existing credential for this FeedName
- grep -i "<$FeedName>" $ConfigFile
+ grep -i "<$FeedName>" $ConfigFile
if [ "$?" != "0" ]; then
echo "Adding credentials for $FeedName."
diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake
index a88d643c8a765e..0998e875e5f78d 100644
--- a/eng/common/cross/toolchain.cmake
+++ b/eng/common/cross/toolchain.cmake
@@ -207,6 +207,7 @@ elseif(ILLUMOS)
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
elseif(HAIKU)
set(CMAKE_SYSROOT "${CROSS_ROOTFS}")
+ set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin")
set(TOOLSET_PREFIX ${TOOLCHAIN}-)
function(locate_toolchain_exec exec var)
@@ -217,7 +218,6 @@ elseif(HAIKU)
endif()
find_program(EXEC_LOCATION_${exec}
- PATHS "${CROSS_ROOTFS}/cross-tools-x86_64/bin"
NAMES
"${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}"
"${TOOLSET_PREFIX}${exec}")
diff --git a/eng/common/loc/P22DotNetHtmlLocalization.lss b/eng/common/loc/P22DotNetHtmlLocalization.lss
index 858a0b237c62ce..5d892d619398f9 100644
Binary files a/eng/common/loc/P22DotNetHtmlLocalization.lss and b/eng/common/loc/P22DotNetHtmlLocalization.lss differ
diff --git a/eng/common/native/init-compiler.sh b/eng/common/native/init-compiler.sh
index 517401b688bf76..f5c1ec7eafeb28 100644
--- a/eng/common/native/init-compiler.sh
+++ b/eng/common/native/init-compiler.sh
@@ -63,7 +63,7 @@ if [ -z "$CLR_CC" ]; then
# Set default versions
if [ -z "$majorVersion" ]; then
# note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero.
- if [ "$compiler" = "clang" ]; then versions="16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5"
+ if [ "$compiler" = "clang" ]; then versions="17 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5"
elif [ "$compiler" = "gcc" ]; then versions="13 12 11 10 9 8 7 6 5 4.9"; fi
for version in $versions; do
diff --git a/eng/common/native/init-distro-rid.sh b/eng/common/native/init-distro-rid.sh
index aba9fe24028b0f..de1687b2ccbe79 100644
--- a/eng/common/native/init-distro-rid.sh
+++ b/eng/common/native/init-distro-rid.sh
@@ -79,7 +79,6 @@ getNonPortableDistroRid()
# Input:
# os: (str)
# arch: (str)
-# isPortable: (int)
# rootfsDir?: (nullable:string)
#
# Return:
@@ -97,10 +96,9 @@ initDistroRidGlobal()
{
local targetOs="$1"
local targetArch="$2"
- local isPortable="$3"
local rootfsDir=""
- if [ "$#" -ge 4 ]; then
- rootfsDir="$4"
+ if [ "$#" -ge 3 ]; then
+ rootfsDir="$3"
fi
if [ -n "${rootfsDir}" ]; then
diff --git a/eng/common/sdl/trim-assets-version.ps1 b/eng/common/sdl/trim-assets-version.ps1
new file mode 100644
index 00000000000000..a2e0048770452f
--- /dev/null
+++ b/eng/common/sdl/trim-assets-version.ps1
@@ -0,0 +1,75 @@
+<#
+.SYNOPSIS
+Install and run the 'Microsoft.DotNet.VersionTools.Cli' tool with the 'trim-artifacts-version' command to trim the version from the NuGet assets file name.
+
+.PARAMETER InputPath
+Full path to directory where artifact packages are stored
+
+.PARAMETER Recursive
+Search for NuGet packages recursively
+
+#>
+
+Param(
+ [string] $InputPath,
+ [bool] $Recursive = $true
+)
+
+$CliToolName = "Microsoft.DotNet.VersionTools.Cli"
+
+function Install-VersionTools-Cli {
+ param(
+ [Parameter(Mandatory=$true)][string]$Version
+ )
+
+ Write-Host "Installing the package '$CliToolName' with a version of '$version' ..."
+ $feed = "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json"
+
+ $argumentList = @("tool", "install", "--local", "$CliToolName", "--add-source $feed", "--no-cache", "--version $Version", "--create-manifest-if-needed")
+ Start-Process "$dotnet" -Verbose -ArgumentList $argumentList -NoNewWindow -Wait
+}
+
+# -------------------------------------------------------------------
+
+if (!(Test-Path $InputPath)) {
+ Write-Host "Input Path '$InputPath' does not exist"
+ ExitWithExitCode 1
+}
+
+$ErrorActionPreference = 'Stop'
+Set-StrictMode -Version 2.0
+
+$disableConfigureToolsetImport = $true
+$global:LASTEXITCODE = 0
+
+# `tools.ps1` checks $ci to perform some actions. Since the SDL
+# scripts don't necessarily execute in the same agent that run the
+# build.ps1/sh script this variable isn't automatically set.
+$ci = $true
+. $PSScriptRoot\..\tools.ps1
+
+try {
+ $dotnetRoot = InitializeDotNetCli -install:$true
+ $dotnet = "$dotnetRoot\dotnet.exe"
+
+ $toolsetVersion = Read-ArcadeSdkVersion
+ Install-VersionTools-Cli -Version $toolsetVersion
+
+ $cliToolFound = (& "$dotnet" tool list --local | Where-Object {$_.Split(' ')[0] -eq $CliToolName})
+ if ($null -eq $cliToolFound) {
+ Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "The '$CliToolName' tool is not installed."
+ ExitWithExitCode 1
+ }
+
+ Exec-BlockVerbosely {
+ & "$dotnet" $CliToolName trim-assets-version `
+ --assets-path $InputPath `
+ --recursive $Recursive
+ Exit-IfNZEC "Sdl"
+ }
+}
+catch {
+ Write-Host $_
+ Write-PipelineTelemetryError -Force -Category 'Sdl' -Message $_
+ ExitWithExitCode 1
+}
\ No newline at end of file
diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml
index 7aabaa18017bf6..7870f93bc17652 100644
--- a/eng/common/templates/job/execute-sdl.yml
+++ b/eng/common/templates/job/execute-sdl.yml
@@ -105,6 +105,11 @@ jobs:
downloadPath: $(Build.ArtifactStagingDirectory)\artifacts
checkDownloadedFiles: true
+ - powershell: eng/common/sdl/trim-assets-version.ps1
+ -InputPath $(Build.ArtifactStagingDirectory)\artifacts
+ displayName: Trim the version from the NuGet packages
+ continueOnError: ${{ parameters.sdlContinueOnError }}
+
- powershell: eng/common/sdl/extract-artifact-packages.ps1
-InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
-ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index c9eced9f7df4c6..aa74ab4a81e782 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -671,6 +671,10 @@ function InitializeNativeTools() {
}
}
+function Read-ArcadeSdkVersion() {
+ return $GlobalJson.'msbuild-sdks'.'Microsoft.DotNet.Arcade.Sdk'
+}
+
function InitializeToolset() {
if (Test-Path variable:global:_ToolsetBuildProj) {
return $global:_ToolsetBuildProj
@@ -678,7 +682,7 @@ function InitializeToolset() {
$nugetCache = GetNuGetPackageCachePath
- $toolsetVersion = $GlobalJson.'msbuild-sdks'.'Microsoft.DotNet.Arcade.Sdk'
+ $toolsetVersion = Read-ArcadeSdkVersion
$toolsetLocationFile = Join-Path $ToolsetDir "$toolsetVersion.txt"
if (Test-Path $toolsetLocationFile) {
diff --git a/eng/disable_vsupdate.ps1 b/eng/disable_vsupdate.ps1
new file mode 100644
index 00000000000000..d8d365f0577103
--- /dev/null
+++ b/eng/disable_vsupdate.ps1
@@ -0,0 +1,23 @@
+schtasks /change /tn "\Microsoft\VisualStudio\VSIX Auto Update" /disable
+
+$vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
+if (-not (Test-Path -Path "$vswhere" -PathType Leaf))
+{
+ Write-Error "Couldn't locate vswhere at $vswhere"
+ exit 1
+}
+
+$vsdir = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
+$vsregedit = "$vsdir\Common7\IDE\VsRegEdit.exe"
+
+if (-not (Test-Path -Path "$vsregedit" ))
+{
+ Write-Error "VSWhere returned path: $vsdir, but regedit $vsregedit doesn't exist."
+ exit 1
+}
+
+Write-Output "VSWhere returned path: $vsdir, using regedit $vsregedit"
+Write-Output "Disabling updates through VS Registry:"
+
+&"$vsdir\Common7\IDE\VsRegEdit.exe" set local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword 0
+&"$vsdir\Common7\IDE\VsRegEdit.exe" read local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword
diff --git a/eng/empty.csproj b/eng/empty.csproj
deleted file mode 100644
index 55eefdef1ada48..00000000000000
--- a/eng/empty.csproj
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
- $(NetCoreAppToolCurrent)
-
-
-
-
-
diff --git a/eng/illink.targets b/eng/illink.targets
index c837c96e51dc47..95dfef07654d08 100644
--- a/eng/illink.targets
+++ b/eng/illink.targets
@@ -1,12 +1,36 @@
+
+ <_ILLinkTasksSourceDir>$(ToolsProjectRoot)illink\src\ILLink.Tasks\
+ $(ToolsProjectRoot)illink\src\ILLink.RoslynAnalyzer\build\Microsoft.NET.ILLink.Analyzers.props
+
+
+
+
+
+
+ TargetFramework=$(NetCoreAppToolCurrent)
+ TargetFramework=$(NetFrameworkToolCurrent)
+
+
+
+
+
true
-
- <_IsTrimmingEnabled>false
-
+
<_RequiresILLinkPack>false
+ $(ToolsILLinkDir)$(NetCoreAppToolCurrent)/ILLink.Tasks.dll
_EmbedILLinkXmls;$(PrepareResourcesDependsOn)
$(TargetsTriggeredByCompilation);ILLinkTrimAssembly
diff --git a/eng/liveBuilds.targets b/eng/liveBuilds.targets
index 370e19805cc3a0..5c5b6f841f90fa 100644
--- a/eng/liveBuilds.targets
+++ b/eng/liveBuilds.targets
@@ -29,7 +29,7 @@
$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'aotsdk'))
$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'build'))
- $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'ILLink.Tasks', '$(Configuration)'))
+ $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'ILLink.Tasks', '$(ToolsConfiguration)'))
$([MSBuild]::NormalizeDirectory('$(MonoArtifactsPath)', 'cross', $(TargetOS)-$(TargetArchitecture.ToLowerInvariant())))
$([MSBuild]::NormalizeDirectory('$(LibrariesArtifactsPath)', 'obj', 'grpcserver', 'docker'))
diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh
index 072325a6b22f9a..1cd4ea0ed1231d 100755
--- a/eng/native/build-commons.sh
+++ b/eng/native/build-commons.sh
@@ -11,7 +11,7 @@ initTargetDistroRid()
passedRootfsDir="$ROOTFS_DIR"
fi
- initDistroRidGlobal "$__TargetOS" "$__TargetArch" "$__PortableBuild" "$passedRootfsDir"
+ initDistroRidGlobal "$__TargetOS" "$__TargetArch" "$passedRootfsDir"
}
setup_dirs()
@@ -311,7 +311,7 @@ while :; do
lowerI="$(echo "${1/--/-}" | tr "[:upper:]" "[:lower:]")"
case "$lowerI" in
- -\?|-h|--help)
+ -\?|-h|-help)
usage
exit 1
;;
diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake
index 0be4937c7f8d46..6fe1e183e62112 100644
--- a/eng/native/configurecompiler.cmake
+++ b/eng/native/configurecompiler.cmake
@@ -54,7 +54,22 @@ add_compile_definitions("$<$:DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDL
add_compile_definitions("$<$,$>:NDEBUG;URTBLDENV_FRIENDLY=Retail>")
if (MSVC)
- add_linker_flag(/guard:cf)
+
+ define_property(TARGET PROPERTY CLR_CONTROL_FLOW_GUARD INHERITED BRIEF_DOCS "Controls the /guard:cf flag presence" FULL_DOCS "Set this property to ON or OFF to indicate if the /guard:cf compiler and linker flag should be present")
+ define_property(TARGET PROPERTY CLR_EH_CONTINUATION INHERITED BRIEF_DOCS "Controls the /guard:ehcont flag presence" FULL_DOCS "Set this property to ON or OFF to indicate if the /guard:ehcont compiler flag should be present")
+ define_property(TARGET PROPERTY CLR_EH_OPTION INHERITED BRIEF_DOCS "Defines the value of the /EH option" FULL_DOCS "Set this property to one of the valid /EHxx options (/EHa, /EHsc, /EHa-, ...)")
+
+ set_property(GLOBAL PROPERTY CLR_CONTROL_FLOW_GUARD ON)
+
+ # Remove the /EHsc from the CXX flags so that the compile options are the only source of truth for that
+ string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ set_property(GLOBAL PROPERTY CLR_EH_OPTION /EHsc)
+
+ add_compile_options($<$:$>)
+ add_link_options($<$>:/guard:cf>)
+
+ # Load all imported DLLs from the System32 directory.
+ add_linker_flag(/DEPENDENTLOADFLAG:0x800)
# Linker flags
#
@@ -841,7 +856,9 @@ if (MSVC)
add_compile_options($<$:/Gz>)
endif (CLR_CMAKE_HOST_ARCH_I386)
- add_compile_options($<$,$,$>>:/GL>)
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_CHECKED OFF)
if (CLR_CMAKE_HOST_ARCH_AMD64)
# The generator expression in the following command means that the /homeparams option is added only for debug builds for C and C++ source files
@@ -850,16 +867,15 @@ if (MSVC)
# enable control-flow-guard support for native components for non-Arm64 builds
# Added using variables instead of add_compile_options to let individual projects override it
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /guard:cf")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /guard:cf")
+ add_compile_options($<$,$>>:/guard:cf>)
# Enable EH-continuation table and CET-compatibility for native components for amd64 builds except for components of the Mono
# runtime. Added some switches using variables instead of add_compile_options to let individual projects override it.
if (CLR_CMAKE_HOST_ARCH_AMD64 AND NOT CLR_CMAKE_RUNTIME_MONO)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /guard:ehcont")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /guard:ehcont")
- set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /guard:ehcont")
- add_linker_flag(/guard:ehcont)
+ set_property(GLOBAL PROPERTY CLR_EH_CONTINUATION ON)
+
+ add_compile_options($<$,$>>:/guard:ehcont>)
+ add_link_options($<$>:/guard:ehcont>)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT")
endif (CLR_CMAKE_HOST_ARCH_AMD64 AND NOT CLR_CMAKE_RUNTIME_MONO)
@@ -888,7 +904,9 @@ if (MSVC)
endif (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_ARM64)
# Don't display the output header when building RC files.
- add_compile_options($<$:/nologo>)
+ set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} /nologo")
+ # Don't display the output header when building asm files.
+ set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /nologo")
endif (MSVC)
# Configure non-MSVC compiler flags that apply to all platforms (unix-like or otherwise)
diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake
index d5ef9ed625996a..c9f8a619a52913 100644
--- a/eng/native/functions.cmake
+++ b/eng/native/functions.cmake
@@ -588,21 +588,6 @@ function(disable_pax_mprotect targetName)
endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
endfunction()
-if (CMAKE_VERSION VERSION_LESS "3.12")
- # Polyfill add_compile_definitions when it is unavailable
- function(add_compile_definitions)
- get_directory_property(DIR_COMPILE_DEFINITIONS COMPILE_DEFINITIONS)
- list(APPEND DIR_COMPILE_DEFINITIONS ${ARGV})
- set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "${DIR_COMPILE_DEFINITIONS}")
- endfunction()
-endif()
-
-if (CMAKE_VERSION VERSION_LESS "3.16")
- # Provide a no-op polyfill for precompiled headers on old CMake versions
- function(target_precompile_headers)
- endfunction()
-endif()
-
# add_linker_flag(Flag [Config1 Config2 ...])
function(add_linker_flag Flag)
if (ARGN STREQUAL "")
diff --git a/eng/native/ijw/IJW.cmake b/eng/native/ijw/IJW.cmake
index 9ef90525dda8ba..4b580aff599c88 100644
--- a/eng/native/ijw/IJW.cmake
+++ b/eng/native/ijw/IJW.cmake
@@ -2,19 +2,13 @@ if (CLR_CMAKE_HOST_WIN32)
function(remove_ijw_incompatible_options options updatedOptions)
# IJW isn't compatible with Ehsc, which CMake enables by default
- if(options MATCHES "/EHsc")
- string(REPLACE "/EHsc" "" options "${options}")
- endif()
+ set_property(DIRECTORY PROPERTY CLR_EH_OPTION "")
# IJW isn't compatible with CFG
- if(options MATCHES "/guard:cf")
- string(REPLACE "/guard:cf" "" options "${options}")
- endif()
+ set_property(DIRECTORY PROPERTY CLR_CONTROL_FLOW_GUARD OFF)
# IJW isn't compatible with EHCONT, which requires CFG
- if(options MATCHES "/guard:ehcont")
- string(REPLACE "/guard:ehcont" "" options "${options}")
- endif()
+ set_property(DIRECTORY PROPERTY CLR_EH_CONTINUATION OFF)
# IJW isn't compatible with GR-
if(options MATCHES "/GR-")
@@ -70,6 +64,10 @@ if (CLR_CMAKE_HOST_WIN32)
remove_ijw_incompatible_options("${dirCompileOptions}" dirCompileOptions)
set_directory_properties(PROPERTIES COMPILE_OPTIONS "${dirCompileOptions}")
+ # IJW tests needs to load DLLs from somewhere other than System32
+ string(REPLACE "/DEPENDENTLOADFLAG:0x800" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
+ string(REPLACE "/DEPENDENTLOADFLAG:0x800" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
+
set(CLR_SDK_REF_PACK_OUTPUT "")
set(CLR_SDK_REF_PACK_DISCOVERY_ERROR "")
set(CLR_SDK_REF_PACK_DISCOVERY_RESULT 0)
diff --git a/eng/native/init-vs-env.cmd b/eng/native/init-vs-env.cmd
index 273f49b3392c2d..befe98ab407f72 100644
--- a/eng/native/init-vs-env.cmd
+++ b/eng/native/init-vs-env.cmd
@@ -26,6 +26,8 @@ if defined VisualStudioVersion goto :VSDetected
set "__VSWhere=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
set "__VSCOMNTOOLS="
+if not exist "%__VSWhere%" goto :VSWhereMissing
+
if exist "%__VSWhere%" (
for /f "tokens=*" %%p in (
'"%__VSWhere%" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath'
@@ -56,6 +58,10 @@ echo %__MsgPrefix%Error: Visual Studio 2022 with C++ tools required. ^
Please see https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/windows-requirements.md for build requirements.
exit /b 1
+:VSWhereMissing
+echo %__MsgPrefix%Error: vswhere couldn not be found in Visual Studio Installer directory at "%__VSWhere%"
+exit /b 1
+
:SetVCEnvironment
if "%__VCBuildArch%"=="" exit /b 0
diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake
index 97947fe887936f..cee5dbfcc37da7 100644
--- a/eng/native/tryrun.cmake
+++ b/eng/native/tryrun.cmake
@@ -170,8 +170,6 @@ else()
message(FATAL_ERROR "Unsupported platform. OS: ${CMAKE_SYSTEM_NAME}, arch: ${TARGET_ARCH_NAME}")
endif()
-if(TARGET_ARCH_NAME MATCHES "^(x86|x64|s390x|armv6|loongarch64|ppc64le)$")
+if(TARGET_ARCH_NAME MATCHES "^(x86|x64|s390x|armv6|loongarch64|riscv64|ppc64le)$")
set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0)
-elseif (TARGET_ARCH_NAME STREQUAL "riscv64")
- set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 1)
endif()
diff --git a/eng/pipelines/common/evaluate-default-paths.yml b/eng/pipelines/common/evaluate-default-paths.yml
index cc01ca33c6afb0..c5bebbf8aeb4a3 100644
--- a/eng/pipelines/common/evaluate-default-paths.yml
+++ b/eng/pipelines/common/evaluate-default-paths.yml
@@ -32,6 +32,7 @@ parameters:
src/tasks/WasmBuildTasks/*
src/tasks/WorkloadBuildTasks/*
src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/*
+ src/tasks/Microsoft.NET.WebAssembly.Webcil/*
src/tests/Common/wasm-test-runner/*
]
_wasm_pipelines: [
diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml
index 41cce9e1534f94..6a8d680ca3ae70 100644
--- a/eng/pipelines/common/global-build-job.yml
+++ b/eng/pipelines/common/global-build-job.yml
@@ -14,7 +14,6 @@ parameters:
dependsOn: []
pool: ''
platform: ''
- pgoType: ''
condition: true
useContinueOnErrorDuringBuild: false
shouldContinueOnError: false
@@ -68,6 +67,7 @@ jobs:
variables:
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- group: DotNet-HelixApi-Access
+ - group: AzureDevOps-Artifact-Feeds-Pats
- name: _osParameter
value: -os ${{ parameters.osGroup }}
@@ -133,7 +133,6 @@ jobs:
targetRid: ${{ parameters.targetRid }}
nameSuffix: ${{ parameters.nameSuffix }}
platform: ${{ parameters.platform }}
- pgoType: ${{ parameters.pgoType }}
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
${{ if ne(variableTemplate.forwardedParameters, '') }}:
${{ each parameter in variableTemplate.forwardedParameters }}:
@@ -144,13 +143,62 @@ jobs:
- ${{ each variable in parameters.variables }}:
- ${{ variable }}
steps:
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - powershell: |
+ schtasks /change /tn "\Microsoft\VisualStudio\VSIX Auto Update" /disable
+
+ $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
+ if (-not (Test-Path -Path "$vswhere" -PathType Leaf))
+ {
+ Write-Error "Couldn't locate vswhere at $vswhere"
+ exit 1
+ }
+
+ $vsdir = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
+ $vsregedit = "$vsdir\Common7\IDE\VsRegEdit.exe"
+
+ if (-not (Test-Path -Path "$vsregedit" ))
+ {
+ Write-Error "VSWhere returned path: $vsdir, but regedit $vsregedit doesn't exist."
+ exit 1
+ }
+
+ Write-Output "VSWhere returned path: $vsdir, using regedit $vsregedit"
+ Write-Output "Disabling updates through VS Registry:"
+
+ &"$vsdir\Common7\IDE\VsRegEdit.exe" set local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword 0
+ &"$vsdir\Common7\IDE\VsRegEdit.exe" read local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword
+ displayName: Disable VSIX updates
+ condition: always()
+
- checkout: self
clean: true
- fetchDepth: $(checkoutFetchDepth)
+ # If running in source build mode, a git stash will be used for the inner clone. Avoid setting a fetch depth,
+ # as a stash of a shallow cloned repo is not currently supported.
+ ${{ if ne(parameters.isSourceBuild, true) }}:
+ fetchDepth: $(checkoutFetchDepth)
- ${{ if and(eq(parameters.isOfficialBuild, true), notin(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator')) }}:
- template: /eng/pipelines/common/restore-internal-tools.yml
+ - ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - ${{ if and(ne(parameters.osGroup, 'windows'), ne(parameters.hostedOs, 'windows')) }}:
+ - task: Bash@3
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
+ arguments: $(Build.SourcesDirectory)/NuGet.config $Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
+ - ${{ else }}:
+ - task: PowerShell@2
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
+
- ${{ each monoCrossAOTTargetOS in parameters.monoCrossAOTTargetOS }}:
- task: DownloadPipelineArtifact@2
displayName: Download ${{monoCrossAOTTargetOS}} AOT offset files
@@ -225,18 +273,22 @@ jobs:
targetRid: ${{ parameters.targetRid }}
nameSuffix: ${{ parameters.nameSuffix }}
platform: ${{ parameters.platform }}
- pgoType: ${{ parameters.pgoType }}
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
${{ insert }}: ${{ parameters.extraStepsParameters }}
+ - ${{ if and(eq(parameters.isOfficialBuild, true), eq(parameters.osGroup, 'windows')) }}:
+ - powershell: ./eng/collect_vsinfo.ps1 -ArchiveRunName postbuild_log
+ displayName: Collect vslogs on exit
+ condition: always()
+
- task: PublishBuildArtifacts@1
displayName: Publish Logs
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/'
PublishLocation: Container
${{ if notin(parameters.osGroup, 'browser', 'wasi') }}:
- ArtifactName: Logs_Build_${{ parameters.osGroup }}_${{ parameters.osSubGroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}_${{ parameters.nameSuffix }}
+ ArtifactName: Logs_Build_Attempt$(System.JobAttempt)_${{ parameters.osGroup }}_${{ parameters.osSubGroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}_${{ parameters.nameSuffix }}
${{ if in(parameters.osGroup, 'browser', 'wasi') }}:
- ArtifactName: Logs_Build_${{ parameters.osGroup }}_${{ parameters.archType }}_${{ parameters.hostedOs }}_${{ parameters.buildConfig }}_${{ parameters.nameSuffix }}
+ ArtifactName: Logs_Build_Attempt$(System.JobAttempt)_${{ parameters.osGroup }}_${{ parameters.archType }}_${{ parameters.hostedOs }}_${{ parameters.buildConfig }}_${{ parameters.nameSuffix }}
continueOnError: true
condition: always()
diff --git a/eng/pipelines/common/macos-sign-with-entitlements.yml b/eng/pipelines/common/macos-sign-with-entitlements.yml
index 6c65193845d70c..4879c5410ea0bd 100644
--- a/eng/pipelines/common/macos-sign-with-entitlements.yml
+++ b/eng/pipelines/common/macos-sign-with-entitlements.yml
@@ -1,12 +1,14 @@
parameters:
filesToSign: []
+ timeoutInMinutes: '30'
steps:
- task: UseDotNet@2
- displayName: 'Use .NET Core SDK 2.1.808'
+ displayName: Install .NET 6 SDK for signing.
inputs:
- packageType: sdk
- version: 2.1.808
+ packageType: 'sdk'
+ version: '6.0.x'
+ installationPath: '$(Agent.TempDirectory)/dotnet'
- ${{ each file in parameters.filesToSign }}:
- script: codesign -s - -f --entitlements ${{ file.entitlementsFile }} ${{ file.path }}/${{ file.name }}
@@ -28,7 +30,7 @@ steps:
includeRootFolder: true
replaceExistingArchive: true
- - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
+ - task: EsrpCodeSigning@4
displayName: 'ESRP CodeSigning'
inputs:
ConnectedServiceName: 'ESRP CodeSigning'
@@ -48,6 +50,14 @@ steps:
"toolVersion": "1.0"
}
]
+ SessionTimeout: ${{ parameters.timeoutInMinutes }}
+ MaxConcurrency: '50'
+ MaxRetryAttempts: '5'
+ PendingAnalysisWaitTimeoutMinutes: '5'
+ env:
+ DOTNET_MULTILEVEL_LOOKUP: 0
+ DOTNET_ROOT: '$(Agent.TempDirectory)/dotnet'
+ DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR: '$(Agent.TempDirectory)/dotnet'
- task: ExtractFiles@1
displayName: 'Extract MacOS after signing'
diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml
index 8399c82ecd7695..c2f754d6ee2385 100644
--- a/eng/pipelines/common/platform-matrix.yml
+++ b/eng/pipelines/common/platform-matrix.yml
@@ -883,7 +883,7 @@ jobs:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
variables: ${{ parameters.variables }}
- osGroup: tizen
+ osGroup: linux # Our build scripts don't support Tizen and have always used Linux as the OS parameter.
archType: armel
targetRid: tizen-armel
platform: tizen_armel
diff --git a/eng/pipelines/common/templates/pipeline-with-resources.yml b/eng/pipelines/common/templates/pipeline-with-resources.yml
index c30ce8597808d8..d50977f1bf08e8 100644
--- a/eng/pipelines/common/templates/pipeline-with-resources.yml
+++ b/eng/pipelines/common/templates/pipeline-with-resources.yml
@@ -15,8 +15,9 @@ resources:
ROOTFS_DIR: /crossrootfs/armv6
- container: linux_arm64
- image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm64
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-biarch-amd64-arm64
env:
+ ROOTFS_HOST_DIR: /crossrootfs/x64
ROOTFS_DIR: /crossrootfs/arm64
- container: linux_musl_x64
@@ -85,12 +86,12 @@ resources:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8
- container: browser_wasm
- image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-webassembly
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-webassembly-20230913040940-1edc1c6
env:
ROOTFS_DIR: /crossrootfs/x64
- container: wasi_wasm
- image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-webassembly
+ image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-webassembly-20230917141449-2aaa02c
env:
ROOTFS_DIR: /crossrootfs/x64
diff --git a/eng/pipelines/common/templates/runtimes/build-test-job.yml b/eng/pipelines/common/templates/runtimes/build-test-job.yml
index 2b9871f183f766..e249e8ac922a7f 100644
--- a/eng/pipelines/common/templates/runtimes/build-test-job.yml
+++ b/eng/pipelines/common/templates/runtimes/build-test-job.yml
@@ -14,7 +14,6 @@ parameters:
dependsOn: []
dependOnEvaluatePaths: false
crossBuild: false
- pgoType: ''
### Build managed test components (native components are getting built as part
### of the product build job).
@@ -149,6 +148,6 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: '${{ parameters.runtimeFlavor }}_Common_Runtime_TestBuildLogs_AnyOS_AnyCPU_$(buildConfig)_${{ parameters.testGroup }}'
+ artifactName: '${{ parameters.runtimeFlavor }}_Common_Runtime_TestBuildLogs_Attempt$(System.JobAttempt)_AnyOS_AnyCPU_$(buildConfig)_${{ parameters.testGroup }}'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/common/templates/runtimes/run-test-job.yml b/eng/pipelines/common/templates/runtimes/run-test-job.yml
index a137b7c796e6b2..c7628f67e0fa1b 100644
--- a/eng/pipelines/common/templates/runtimes/run-test-job.yml
+++ b/eng/pipelines/common/templates/runtimes/run-test-job.yml
@@ -7,6 +7,7 @@ parameters:
testGroup: ''
crossBuild: false
readyToRun: false
+ hotColdSplitting: false
liveLibrariesBuildConfig: ''
compositeBuildMode: false
useCodeFlowEnforcement: ''
@@ -119,6 +120,9 @@ jobs:
value: 'composite'
- name: LogNamePrefix
value: TestRunLogs_R2R_CG2_Composite
+ - ${{ if eq(parameters.hotColdSplitting, true) }}:
+ - name: LogNamePrefix
+ value: TestRunLogs_R2R_CG2_HotColdSplitting
- name: testTreeFilterArg
value: ''
@@ -341,14 +345,11 @@ jobs:
timeoutPerTestInMinutes: $(timeoutPerTestInMinutes)
timeoutPerTestCollectionInMinutes: $(timeoutPerTestCollectionInMinutes)
-
runCrossGen2: ${{ eq(parameters.readyToRun, true) }}
- ${{ if and(ne(parameters.testGroup, 'innerloop'), eq(parameters.runtimeFlavor, 'coreclr')) }}:
- runPALTestsDir: '$(coreClrProductRootFolderPath)/paltests'
-
compositeBuildMode: ${{ parameters.compositeBuildMode }}
runInUnloadableContext: ${{ parameters.runInUnloadableContext }}
tieringTest: ${{ parameters.tieringTest }}
+ hotColdSplitting: ${{ parameters.hotColdSplitting }}
${{ if eq(variables['System.TeamProject'], 'internal') }}:
# Access token variable for internal project from the
@@ -603,7 +604,7 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: '${{ parameters.runtimeFlavor }}_${{ parameters.runtimeVariant }}_$(LogNamePrefix)_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.testGroup }}'
+ artifactName: '${{ parameters.runtimeFlavor }}_${{ parameters.runtimeVariant }}_$(LogNamePrefix)_Attempt$(System.JobAttempt)_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.testGroup }}'
continueOnError: true
condition: always()
@@ -631,7 +632,7 @@ jobs:
displayName: Create SuperPMI directories
condition: always()
- - script: $(PythonScript) $(Build.SourcesDirectory)/src/coreclr/scripts/superpmi.py merge-mch -log_level DEBUG -pattern $(MchFilesLocation)$(CollectionName).$(CollectionType)*.mch -output_mch_path $(MergedMchFileLocation)$(CollectionName).$(CollectionType).$(MchFileTag).mch
+ - script: $(PythonScript) $(Build.SourcesDirectory)/src/coreclr/scripts/superpmi.py merge-mch -log_level DEBUG -pattern $(MchFilesLocation)$(CollectionName).$(CollectionType)*.mch -output_mch_path $(MergedMchFileLocation)$(CollectionName).$(CollectionType).$(MchFileTag).mch
displayName: 'Merge $(CollectionName)-$(CollectionType) SuperPMI collections'
condition: always()
diff --git a/eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml b/eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml
index bd147de7e77264..12e3f68baafb94 100644
--- a/eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml
+++ b/eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml
@@ -1,6 +1,5 @@
parameters:
osGroup: ''
- restoreParams: ''
sendParams: ''
condition: ''
displayName: ''
@@ -9,28 +8,14 @@ parameters:
steps:
- ${{ if eq(parameters.osGroup, 'windows') }}:
- # TODO: Remove and consolidate this when we move to arcade via init-tools.cmd.
- - powershell: $(Build.SourcesDirectory)\eng\common\build.ps1 -ci -warnaserror 0 ${{ parameters.restoreParams }}
- displayName: Restore blob feed tasks (Windows)
- condition: and(succeeded(), ${{ and(ne(parameters.condition, false), ne(parameters.restoreParams, '')) }})
-
- - powershell: $(Build.SourcesDirectory)\eng\common\msbuild.ps1 -ci -warnaserror 0 ${{ parameters.sendParams }}
+ - powershell: $(Build.SourcesDirectory)\eng\common\msbuild.ps1 --restore -ci -warnaserror 0 ${{ parameters.sendParams }}
displayName: ${{ parameters.displayName }} (Windows)
condition: and(succeeded(), ${{ and(ne(parameters.condition, false), ne(parameters.sendParams, '')) }})
env: ${{ parameters.environment }}
continueOnError: ${{ eq(parameters.shouldContinueOnError, true) }}
- ${{ if ne(parameters.osGroup, 'windows') }}:
- # TODO: Remove and consolidate this when we move to arcade via init-tools.sh.
- - script: $(Build.SourcesDirectory)/eng/common/build.sh --ci --warnaserror false ${{ parameters.restoreParams }}
- displayName: Restore blob feed tasks (Unix)
- condition: and(succeeded(), ${{ and(ne(parameters.condition, false), ne(parameters.restoreParams, '')) }})
- ${{ if eq(parameters.osGroup, 'freebsd') }}:
- env:
- # Arcade uses this SDK instead of trying to restore one.
- DotNetCoreSdkDir: /usr/local/dotnet
-
- - script: $(Build.SourcesDirectory)/eng/common/msbuild.sh --ci --warnaserror false ${{ parameters.sendParams }}
+ - script: $(Build.SourcesDirectory)/eng/common/msbuild.sh --restore --ci --warnaserror false ${{ parameters.sendParams }}
displayName: ${{ parameters.displayName }} (Unix)
condition: and(succeeded(), ${{ and(ne(parameters.condition, false), ne(parameters.sendParams, '')) }})
env: ${{ parameters.environment }}
diff --git a/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml b/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
index 37b455b19d8300..a45c3817d13b53 100644
--- a/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
+++ b/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
@@ -17,11 +17,11 @@ parameters:
timeoutPerTestCollectionInMinutes: ''
timeoutPerTestInMinutes: ''
runCrossGen2: ''
- runPALTestsDir: ''
compositeBuildMode: false
helixProjectArguments: ''
runInUnloadableContext: ''
tieringTest: ''
+ hotColdSplitting: ''
nativeAotTest: ''
longRunningGcTests: ''
gcSimulatorTests: ''
@@ -38,7 +38,6 @@ steps:
- template: send-to-helix-inner-step.yml
parameters:
osGroup: ${{ parameters.osGroup }}
- restoreParams: /p:DotNetPublishToBlobFeed=true -restore -projects $(Build.SourcesDirectory)$(dir)eng$(dir)empty.csproj
sendParams: ${{ parameters.helixProjectArguments }} ${{ parameters.msbuildParallelism }} /bl:$(Build.SourcesDirectory)/artifacts/log/SendToHelix.binlog /p:TargetArchitecture=${{ parameters.archType }} /p:TargetOS=${{ parameters.osGroup }} /p:TargetOSSubgroup=${{ parameters.osSubgroup }} /p:Configuration=${{ parameters.buildConfig }}
condition: and(succeeded(), ${{ parameters.condition }})
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
@@ -55,11 +54,11 @@ steps:
_CompositeBuildMode: ${{ parameters.compositeBuildMode }}
_RunInUnloadableContext: ${{ parameters.runInUnloadableContext }}
_TieringTest: ${{ parameters.tieringTest }}
+ _HotColdSplitting: ${{ parameters.hotColdSplitting }}
_NativeAotTest: ${{ parameters.nativeAotTest }}
_LongRunningGcTests: ${{ parameters.longRunningGcTests }}
_GcSimulatorTests: ${{ parameters.gcSimulatorTests }}
_Scenarios: ${{ join(',', parameters.scenarios) }}
- _PALTestsDir: ${{ parameters.runPALTestsDir }}
_TimeoutPerTestCollectionInMinutes: ${{ parameters.timeoutPerTestCollectionInMinutes }}
_TimeoutPerTestInMinutes: ${{ parameters.timeoutPerTestInMinutes }}
RuntimeFlavor: ${{ parameters.runtimeFlavor }}
diff --git a/eng/pipelines/common/templates/runtimes/xplat-job.yml b/eng/pipelines/common/templates/runtimes/xplat-job.yml
index 7249125648cf32..921dfc5d8bb25d 100644
--- a/eng/pipelines/common/templates/runtimes/xplat-job.yml
+++ b/eng/pipelines/common/templates/runtimes/xplat-job.yml
@@ -106,6 +106,34 @@ jobs:
- ${{insert}}: ${{ variable }}
steps:
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - powershell: |
+ schtasks /change /tn "\Microsoft\VisualStudio\VSIX Auto Update" /disable
+
+ $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
+ if (-not (Test-Path -Path "$vswhere" -PathType Leaf))
+ {
+ Write-Error "Couldn't locate vswhere at $vswhere"
+ exit 1
+ }
+
+ $vsdir = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
+ $vsregedit = "$vsdir\Common7\IDE\VsRegEdit.exe"
+
+ if (-not (Test-Path -Path "$vsregedit" ))
+ {
+ Write-Error "VSWhere returned path: $vsdir, but regedit $vsregedit doesn't exist."
+ exit 1
+ }
+
+ Write-Output "VSWhere returned path: $vsdir, using regedit $vsregedit"
+ Write-Output "Disabling updates through VS Registry:"
+
+ &"$vsdir\Common7\IDE\VsRegEdit.exe" set local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword 0
+ &"$vsdir\Common7\IDE\VsRegEdit.exe" read local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword
+ displayName: Disable VSIX updates
+ condition: always()
+
- checkout: self
clean: true
fetchDepth: $(checkoutFetchDepth)
diff --git a/eng/pipelines/common/xplat-setup.yml b/eng/pipelines/common/xplat-setup.yml
index 28257b05265ba0..a09e428e765cd2 100644
--- a/eng/pipelines/common/xplat-setup.yml
+++ b/eng/pipelines/common/xplat-setup.yml
@@ -154,12 +154,12 @@ jobs:
# Public Linux Build Pool
${{ if and(or(in(parameters.osGroup, 'linux', 'freebsd', 'android', 'tizen'), eq(parameters.jobParameters.hostedOs, 'linux')), eq(variables['System.TeamProject'], 'public')) }}:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
+ demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
# Official Build Linux Pool
${{ if and(or(in(parameters.osGroup, 'linux', 'freebsd', 'android', 'tizen'), eq(parameters.jobParameters.hostedOs, 'linux')), ne(variables['System.TeamProject'], 'public')) }}:
name: $(DncEngInternalBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
+ demands: ImageOverride -equals Build.Ubuntu.2204.Amd64
# OSX Build Pool (we don't have on-prem OSX BuildPool).
${{ if in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator') }}:
diff --git a/eng/pipelines/coreclr/ci.yml b/eng/pipelines/coreclr/ci.yml
index 209314a136702f..e277bf0f483fd4 100644
--- a/eng/pipelines/coreclr/ci.yml
+++ b/eng/pipelines/coreclr/ci.yml
@@ -165,3 +165,23 @@ extends:
platforms:
- linux_x64
- windows_x64
+
+ #
+ # PAL Tests
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: Debug
+ platforms:
+ - linux_x64
+ - linux_musl_x64
+ - linux_arm64
+ - linux_musl_arm64
+ - osx_x64
+ - osx_arm64
+ jobParameters:
+ buildArgs: -s clr.paltests+clr.paltestlist
+ nameSuffix: PALTests
+ extraStepsTemplate: /eng/pipelines/coreclr/templates/run-paltests-step.yml
diff --git a/eng/pipelines/coreclr/crossgen2.yml b/eng/pipelines/coreclr/crossgen2.yml
index 479dfc5f1121d5..1448474004cd81 100644
--- a/eng/pipelines/coreclr/crossgen2.yml
+++ b/eng/pipelines/coreclr/crossgen2.yml
@@ -56,3 +56,21 @@ extends:
readyToRun: true
displayNameArgs: R2R_CG2
liveLibrariesBuildConfig: Release
+
+ # Run pri0 tests with hot/cold splitting enabled (only supported on x64 at the moment)
+ # TODO: test on arm64 once supported
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
+ helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
+ buildConfig: checked
+ platforms:
+ - linux_x64
+ - osx_x64
+ - windows_x64
+ jobParameters:
+ testGroup: innerloop
+ readyToRun: true
+ hotColdSplitting: true
+ displayNameArgs: R2R_CG2_HotColdSplitting
+ liveLibrariesBuildConfig: Release
diff --git a/eng/pipelines/coreclr/jitrollingbuild.yml b/eng/pipelines/coreclr/jitrollingbuild.yml
index 687b37d4819006..579e353864c8b3 100644
--- a/eng/pipelines/coreclr/jitrollingbuild.yml
+++ b/eng/pipelines/coreclr/jitrollingbuild.yml
@@ -13,6 +13,11 @@ trigger:
# and should not be triggerable from a PR.
pr: none
+variables:
+# disable CodeQL here, we have a separate pipeline for it
+- name: Codeql.Enabled
+ value: False
+
extends:
template: /eng/pipelines/common/templates/pipeline-with-resources.yml
parameters:
diff --git a/eng/pipelines/coreclr/perf-wasm-jobs.yml b/eng/pipelines/coreclr/perf-wasm-jobs.yml
index aea24283deeb88..9bed189cab67e1 100644
--- a/eng/pipelines/coreclr/perf-wasm-jobs.yml
+++ b/eng/pipelines/coreclr/perf-wasm-jobs.yml
@@ -115,8 +115,8 @@ jobs:
runJobTemplate: /eng/pipelines/coreclr/templates/run-performance-job.yml
logicalmachine: 'perftiger'
javascriptEngine: 'v8'
- # passed to ci_setup.py to work with 8.0 sdk when using tfm!=net8.0
- #additionalSetupParameters: '--dotnet-versions 8.0.0'
+ # For working with a newer sdk, and previous tfm (eg. 9.0 sdk, and net8.0 tfm)
+ additionalSetupParameters: '--dotnet-versions 8.0.0'
collectHelixLogsScript: ${{ parameters.collectHelixLogsScript }}
compare: ${{ parameters.compare }}
onlySanityCheck: ${{ parameters.onlySanityCheck }}
@@ -142,8 +142,8 @@ jobs:
runjobtemplate: /eng/pipelines/coreclr/templates/run-performance-job.yml
logicalmachine: 'perftiger'
javascriptEngine: 'v8'
- # passed to ci_setup.py to work with 8.0 sdk when using tfm!=net8.0
- #additionalSetupParameters: '--dotnet-versions 8.0.0' # passed to ci_setup.py
+ # For working with a newer sdk, and previous tfm (eg. 9.0 sdk, and net8.0 tfm)
+ additionalSetupParameters: '--dotnet-versions 8.0.0' # passed to ci_setup.py
collectHelixLogsScript: ${{ parameters.collectHelixLogsScript }}
compare: ${{ parameters.compare }}
onlySanityCheck: ${{ parameters.onlySanityCheck }}
@@ -166,8 +166,8 @@ jobs:
projectFile: blazor_perf.proj
runKind: blazor_scenarios
runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
- # passed to ci_setup.py to work with 8.0 sdk when using tfm!=net8.0
- # additionalSetupParameters: '--dotnetversions 8.0.0' # passed to performance-setup.sh
+ # For working with a newer sdk, and previous tfm (eg. 9.0 sdk, and net8.0 tfm)
+ additionalSetupParameters: '--dotnetversions 8.0.0' # passed to performance-setup.sh
logicalmachine: 'perftiger'
downloadSpecificBuild: ${{ parameters.downloadSpecificBuild }}
perfForkToUse: ${{ parameters.perfForkToUse }}
diff --git a/eng/pipelines/coreclr/perf_slow.yml b/eng/pipelines/coreclr/perf_slow.yml
index 91e3ad34f38c80..318bc25915d555 100644
--- a/eng/pipelines/coreclr/perf_slow.yml
+++ b/eng/pipelines/coreclr/perf_slow.yml
@@ -35,7 +35,7 @@ extends:
jobs:
- ${{ if and(ne(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'Schedule')) }}:
-
+
# build mono
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -74,27 +74,6 @@ extends:
logicalmachine: 'perfampere'
timeoutInMinutes: 720
- # build mono on wasm
- - template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- buildConfig: release
- runtimeFlavor: mono
- platforms:
- - browser_wasm
- jobParameters:
- buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
- nameSuffix: wasm
- isOfficialBuild: false
- extraStepsTemplate: /eng/pipelines/common/upload-artifact-step.yml
- extraStepsParameters:
- rootFolder: '$(Build.SourcesDirectory)/artifacts/'
- includeRootFolder: true
- displayName: Browser Wasm Artifacts
- artifactName: BrowserWasm
- archiveType: zip
- archiveExtension: .zip
-
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'Schedule')) }}:
# build coreclr and libraries
@@ -110,27 +89,6 @@ extends:
jobParameters:
testGroup: perf
- # build mono on wasm
- - template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- buildConfig: release
- runtimeFlavor: mono
- platforms:
- - browser_wasm
- jobParameters:
- buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
- nameSuffix: wasm
- isOfficialBuild: false
- extraStepsTemplate: /eng/pipelines/common/upload-artifact-step.yml
- extraStepsParameters:
- rootFolder: '$(Build.SourcesDirectory)/artifacts/'
- includeRootFolder: true
- displayName: Browser Wasm Artifacts
- artifactName: BrowserWasm
- archiveType: zip
- archiveExtension: .zip
-
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/global-build-job.yml
diff --git a/eng/pipelines/coreclr/runtime-nativeaot-outerloop.yml b/eng/pipelines/coreclr/runtime-nativeaot-outerloop.yml
new file mode 100644
index 00000000000000..d7e0443561d837
--- /dev/null
+++ b/eng/pipelines/coreclr/runtime-nativeaot-outerloop.yml
@@ -0,0 +1,178 @@
+
+# This pipeline includes the Native AOT tests that we don't have resources to
+# run on every PR but that we want to still have test coverage, we run this
+# pipeline on a schedule and also developers can run it via /azp run command on
+# PRs. This pipeline permits us to have the main runtime pipeline run the same
+# platforms in PRs and Scheduled builds.
+
+# Setting batch to true, triggers one build at a time.
+# if there is a push while a build in progress, it will wait,
+# until the running build finishes, and produce a build with all the changes
+# that happened during the last build.
+trigger:
+ batch: true
+ branches:
+ include:
+ - release/*.*
+ paths:
+ include:
+ - '*'
+ exclude:
+ - '**.md'
+ - eng/Version.Details.xml
+ - .devcontainer/*
+ - .github/*
+ - docs/*
+ - LICENSE.TXT
+ - PATENTS.TXT
+ - THIRD-PARTY-NOTICES.TXT
+
+schedules:
+ - cron: "0 9,21 * * *" # run at 9:00 and 21:00 (UTC) which is 1:00 and 13:00 (PST).
+ displayName: Nativeaot-outerloop main schedule
+ branches:
+ include:
+ - main
+ always: false # run only if there were changes since the last successful scheduled run.
+
+
+extends:
+ template: /eng/pipelines/common/templates/pipeline-with-resources.yml
+ parameters:
+ stages:
+ - stage: Build
+ jobs:
+
+ #
+ # CoreCLR NativeAOT release build and libraries tests
+ # Only when CoreCLR or library is changed
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ platforms:
+ - windows_x64
+ - windows_arm64
+ - osx_x64
+ - osx_arm64
+ - linux_x64
+ - linux_arm64
+ - linux_musl_x64
+ jobParameters:
+ testGroup: innerloop
+ isSingleFile: true
+ nameSuffix: NativeAOT_Libs
+ buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) /p:TestNativeAot=true /p:ArchiveTests=true
+ timeoutInMinutes: 300 # doesn't normally take this long, but I've seen Helix queues backed up for 160 minutes
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: NativeAOT_$(_BuildConfig)
+
+ #
+ # CoreCLR NativeAOT release build (checked runtime) and libraries tests
+ # Only when CoreCLR or library is changed
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ platforms:
+ - windows_x64
+ - linux_arm64
+ jobParameters:
+ testGroup: innerloop
+ isSingleFile: true
+ nameSuffix: NativeAOT_Checked_Libs
+ buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:TestNativeAot=true /p:ArchiveTests=true
+ timeoutInMinutes: 360
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: NativeAOT_Checked_$(_BuildConfig)
+
+ #
+ # CoreCLR NativeAOT release build (checked runtime) - SizeOpt and libraries tests
+ # Only when CoreCLR or library is changed
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ platforms:
+ - windows_x64
+ - linux_x64
+ jobParameters:
+ testGroup: innerloop
+ isSingleFile: true
+ nameSuffix: NativeAOT_Checked_Libs_SizeOpt
+ buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:TestNativeAot=true /p:ArchiveTests=true /p:OptimizationPreference=Size
+ timeoutInMinutes: 240
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: NativeAOT_Checked_SizeOpt_$(_BuildConfig)
+
+ #
+ # CoreCLR NativeAOT release build (checked runtime) - SpeedOpt and libraries tests
+ # Only when CoreCLR or library is changed
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ platforms:
+ - windows_x64
+ - linux_x64
+ jobParameters:
+ testGroup: innerloop
+ isSingleFile: true
+ nameSuffix: NativeAOT_Checked_Libs_SpeedOpt
+ buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:TestNativeAot=true /p:ArchiveTests=true /p:OptimizationPreference=Speed
+ timeoutInMinutes: 240
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: NativeAOT_Checked_SpeedOpt_$(_BuildConfig)
+
+ #
+ # CoreCLR NativeAOT checked build and Pri0 tests
+ # Only when CoreCLR is changed
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
+ buildConfig: Checked
+ platforms:
+ - windows_x64
+ - linux_x64
+ variables:
+ - name: timeoutPerTestInMinutes
+ value: 60
+ - name: timeoutPerTestCollectionInMinutes
+ value: 180
+ jobParameters:
+ timeoutInMinutes: 240
+ nameSuffix: NativeAOT_Pri0
+ buildArgs: -s clr.aot+host.native+libs -rc $(_BuildConfig) -lc Release -hc Release
+ extraStepsTemplate: /eng/pipelines/coreclr/nativeaot-post-build-steps.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testBuildArgs: 'nativeaot /p:IlcUseServerGc=false'
+ liveLibrariesBuildConfig: Release
+ testRunNamePrefixSuffix: NativeAOT_Pri0_$(_BuildConfig)
+ extraVariablesTemplates:
+ - template: /eng/pipelines/common/templates/runtimes/test-variables.yml
+ parameters:
+ testGroup: innerloop
+ liveLibrariesBuildConfig: Release
diff --git a/eng/pipelines/coreclr/superpmi-collect.yml b/eng/pipelines/coreclr/superpmi-collect.yml
index 4c66b20aecbc76..0ebf400f83cc6c 100644
--- a/eng/pipelines/coreclr/superpmi-collect.yml
+++ b/eng/pipelines/coreclr/superpmi-collect.yml
@@ -110,8 +110,8 @@ extends:
jobParameters:
testGroup: outerloop
liveLibrariesBuildConfig: Release
- collectionType: pmi
- collectionName: libraries_tests
+ collectionType: crossgen2
+ collectionName: libraries
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -130,8 +130,8 @@ extends:
jobParameters:
testGroup: outerloop
liveLibrariesBuildConfig: Release
- collectionType: crossgen2
- collectionName: libraries
+ collectionType: run
+ collectionName: realworld
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -151,7 +151,7 @@ extends:
testGroup: outerloop
liveLibrariesBuildConfig: Release
collectionType: run
- collectionName: realworld
+ collectionName: benchmarks
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -170,7 +170,7 @@ extends:
jobParameters:
testGroup: outerloop
liveLibrariesBuildConfig: Release
- collectionType: run
+ collectionType: run_tiered
collectionName: benchmarks
- template: /eng/pipelines/common/platform-matrix.yml
@@ -190,12 +190,15 @@ extends:
jobParameters:
testGroup: outerloop
liveLibrariesBuildConfig: Release
- collectionType: run_tiered
+ collectionType: run_pgo
collectionName: benchmarks
+ #
+ # Collection of coreclr test run
+ #
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
- jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
+ jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
buildConfig: checked
platforms:
- osx_arm64
@@ -205,21 +208,38 @@ extends:
- windows_x64
- windows_x86
- windows_arm64
+ helixQueueGroup: superpmi
+ helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
+ jobParameters:
+ testGroup: outerloop
+ liveLibrariesBuildConfig: Release
+ SuperPmiCollect: true
+
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/superpmi-collect-job.yml
+ buildConfig: checked
+ platforms:
+ - linux_arm64
+ - linux_x64
+ - windows_x64
+ - windows_arm64
helixQueueGroup: ci
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
jobParameters:
testGroup: outerloop
liveLibrariesBuildConfig: Release
- collectionType: run_pgo
- collectionName: benchmarks
+ collectionType: nativeaot
+ collectionName: smoke_tests
#
- # Collection of coreclr test run
+ # Collection of libraries test run: normal
+ # Libraries Test Run using Release libraries, and Checked CoreCLR
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
- jobTemplate: /eng/pipelines/common/templates/runtimes/run-test-job.yml
- buildConfig: checked
+ jobTemplate: /eng/pipelines/libraries/run-test-job.yml
+ buildConfig: Release
platforms:
- osx_arm64
- linux_arm
@@ -231,6 +251,37 @@ extends:
helixQueueGroup: superpmi
helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
jobParameters:
- testGroup: outerloop
- liveLibrariesBuildConfig: Release
+ testScope: innerloop
+ liveRuntimeBuildConfig: checked
+ dependsOnTestBuildConfiguration: Release
+ dependsOnTestArchitecture: x64
+ coreclrTestGroup: superpmi_collection
+ SuperPmiCollect: true
+ SuperPmiCollectionName: libraries_tests
+
+ #
+ # Collection of libraries test run: no_tiered_compilation
+ # Libraries Test Run using Release libraries, and Checked CoreCLR
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/libraries/run-test-job.yml
+ buildConfig: Release
+ platforms:
+ - osx_arm64
+ - linux_arm
+ - linux_arm64
+ - linux_x64
+ - windows_x64
+ - windows_x86
+ - windows_arm64
+ helixQueueGroup: superpmi
+ helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
+ jobParameters:
+ testScope: innerloop
+ liveRuntimeBuildConfig: checked
+ dependsOnTestBuildConfiguration: Release
+ dependsOnTestArchitecture: x64
+ coreclrTestGroup: superpmi_collection_no_tiered_compilation
SuperPmiCollect: true
+ SuperPmiCollectionName: libraries_tests_no_tiered_compilation
diff --git a/eng/pipelines/coreclr/templates/build-jit-job.yml b/eng/pipelines/coreclr/templates/build-jit-job.yml
index 5566f228b2f0e8..2f78d87bf81633 100644
--- a/eng/pipelines/coreclr/templates/build-jit-job.yml
+++ b/eng/pipelines/coreclr/templates/build-jit-job.yml
@@ -132,6 +132,6 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: '$(publishLogsArtifactPrefix)_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ artifactName: '$(publishLogsArtifactPrefix)_Attempt$(System.JobAttempt)_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/coreclr/templates/build-job.yml b/eng/pipelines/coreclr/templates/build-job.yml
index 99379f80a5d9ce..655de0091457c2 100644
--- a/eng/pipelines/coreclr/templates/build-job.yml
+++ b/eng/pipelines/coreclr/templates/build-job.yml
@@ -17,7 +17,6 @@ parameters:
testGroup: ''
timeoutInMinutes: ''
variables: {}
- pgoType: ''
### Product build
jobs:
@@ -36,21 +35,18 @@ jobs:
dependOnEvaluatePaths: ${{ parameters.dependOnEvaluatePaths }}
disableComponentGovernance: ${{ parameters.disableComponentGovernance }}
disableClrTest: ${{ parameters.disableClrTest }}
- pgoType: ${{ parameters.pgoType }}
# Compute job name from template parameters
- name: ${{ format('coreclr_{0}_product_build_{1}{2}_{3}_{4}{5}',
+ name: ${{ format('coreclr_{0}_product_build_{1}{2}_{3}_{4}',
parameters.runtimeVariant,
parameters.osGroup,
parameters.osSubgroup,
parameters.archType,
- parameters.buildConfig,
- parameters.pgoType) }}
- displayName: ${{ format('CoreCLR {0} Product Build {1}{2} {3} {4} {5}',
+ parameters.buildConfig) }}
+ displayName: ${{ format('CoreCLR {0} Product Build {1}{2} {3} {4}',
parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup,
parameters.archType,
- parameters.buildConfig,
- parameters.pgoType) }}
+ parameters.buildConfig) }}
# Run all steps in the container.
# Note that the containers are defined in platform-matrix.yml
@@ -70,15 +66,6 @@ jobs:
value: ''
- name: publishLogsArtifactPrefix
value: 'BuildLogs_CoreCLR'
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest')) }}:
- # Variables used to publish packages to blob feed
- - name: dotnetfeedUrl
- value: https://dotnetfeed.blob.core.windows.net/dotnet-coreclr/index.json
- - name: dotnetfeedPAT
- value: $(dotnetfeed-storage-access-key-1)
- # Variables used by arcade to gather asset manifests
- - name: _DotNetPublishToBlobFeed
- value: true
- name: officialBuildIdArg
value: ''
- ${{ if eq(parameters.isOfficialBuild, true) }}:
@@ -87,7 +74,7 @@ jobs:
- name: enforcePgoArg
value: ''
# The EnforcePGO script is only supported on Windows and is not supported on arm64.
- - ${{ if and(eq(parameters.buildConfig, 'Release'), and(eq(parameters.osGroup, 'windows'), ne(parameters.archType, 'arm64')), ne(parameters.pgoType, 'pgo')) }}:
+ - ${{ if and(eq(parameters.buildConfig, 'Release'), and(eq(parameters.osGroup, 'windows'), ne(parameters.archType, 'arm64'))) }}:
- name: enforcePgoArg
value: '-enforcepgo'
@@ -101,26 +88,11 @@ jobs:
value: ''
- ${{ if ne(parameters.testGroup, 'innerloop') }}:
- name: clrRuntimeComponentsBuildArg
- value: '-component runtime -component alljits -component paltests -component nativeaot -component spmi '
- - ${{ if and(eq(parameters.osGroup, 'linux'), eq(parameters.archType, 'x86')) }}:
- - name: clrRuntimeComponentsBuildArg
- value: '-component runtime -component jit -component iltools -component spmi '
-
- - name: pgoInstrumentArg
- value: ''
- - ${{ if eq(parameters.pgoType, 'PGO' )}}:
- - name: pgoInstrumentArg
- value: '-pgoinstrument '
+ value: '-component runtime -component alljits -component nativeaot -component spmi '
- name: SignType
value: $[ coalesce(variables.OfficialSignType, 'real') ]
- - name: clrRuntimePortableBuildArg
- value: ''
- - ${{ if eq(parameters.osGroup, 'tizen') }}:
- - name: clrRuntimePortableBuildArg
- value: '-portablebuild=false'
-
# Set a default empty argument for the pgo path.
# This will be set during the 'native prerequisites' step if PGO optimization is enabled.
- name: CoreClrPgoDataArg
@@ -135,7 +107,6 @@ jobs:
- ${{ parameters.variables }}
steps:
-
# Install native dependencies
# Linux builds use docker images with dependencies preinstalled,
# and FreeBSD builds use a build agent with dependencies
@@ -162,6 +133,24 @@ jobs:
continueOnError: false
condition: and(succeeded(), in(variables['SignType'], 'real', 'test'))
+ - ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - ${{ if ne(parameters.osGroup, 'windows') }}:
+ - task: Bash@3
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
+ arguments: $(Build.SourcesDirectory)/NuGet.config $Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - task: PowerShell@2
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
+
- ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
@@ -174,14 +163,14 @@ jobs:
# Build CoreCLR Runtime
- ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) $(crossArg) $(osArg) -ci $(compilerArg) $(clrRuntimeComponentsBuildArg) $(pgoInstrumentArg) $(officialBuildIdArg) $(clrInterpreterBuildArg) $(clrRuntimePortableBuildArg) $(CoreClrPgoDataArg) $(nativeSymbols)
+ - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) $(crossArg) $(osArg) -ci $(compilerArg) $(clrRuntimeComponentsBuildArg) $(officialBuildIdArg) $(clrInterpreterBuildArg) $(CoreClrPgoDataArg) $(nativeSymbols)
displayName: Build CoreCLR Runtime
- ${{ if eq(parameters.osGroup, 'windows') }}:
- - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) -ci $(enforcePgoArg) $(pgoInstrumentArg) $(officialBuildIdArg) $(clrInterpreterBuildArg) $(CoreClrPgoDataArg)
+ - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) -ci $(enforcePgoArg) $(officialBuildIdArg) $(clrInterpreterBuildArg) $(CoreClrPgoDataArg)
displayName: Build CoreCLR Runtime
- ${{ if or(eq(parameters.crossBuild, 'true'), ne(parameters.archType, 'x64')) }}:
- - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) -hostarch x64 $(osArg) -ci $(compilerArg) -component crosscomponents -cmakeargs "-DCLR_CROSS_COMPONENTS_BUILD=1" $(officialBuildIdArg) $(clrRuntimePortableBuildArg)
+ - script: $(Build.SourcesDirectory)/src/coreclr/build-runtime$(scriptExt) $(buildConfig) $(archType) -hostarch x64 $(osArg) -ci $(compilerArg) -component crosscomponents -cmakeargs "-DCLR_CROSS_COMPONENTS_BUILD=1" $(officialBuildIdArg)
displayName: Build CoreCLR Cross-Arch Tools (Tools that run on x64 targeting x86)
- ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos') }}:
@@ -191,12 +180,8 @@ jobs:
displayName: Disk Usage after Build
# Build CoreCLR Managed Components
- - ${{ if or(ne(parameters.osGroup, 'linux'), ne(parameters.archType, 'x86')) }}:
- - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -subset clr.corelib+clr.nativecorelib+clr.nativeaotlibs+clr.tools+clr.packages+clr.paltestlist $(crossArg) $(compilerArg) -arch $(archType) $(osArg) -c $(buildConfig) $(pgoInstrumentArg) $(officialBuildIdArg) -ci
- displayName: Build managed product components and packages
- - ${{ if and(eq(parameters.osGroup, 'linux'), eq(parameters.archType, 'x86')) }}:
- - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -subset clr.corelib $(crossArg) -arch $(archType) $(osArg) -c $(buildConfig) $(pgoInstrumentArg) $(officialBuildIdArg) -ci
- displayName: Build managed product components and packages
+ - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -subset clr.corelib+clr.nativecorelib+clr.nativeaotlibs+clr.tools+clr.packages $(crossArg) $(compilerArg) -arch $(archType) $(osArg) -c $(buildConfig) $(officialBuildIdArg) -ci
+ displayName: Build managed product components and packages
# Build native test components
- ${{ if and(ne(parameters.isOfficialBuild, true), ne(parameters.disableClrTest, true)) }}:
@@ -244,7 +229,7 @@ jobs:
artifactName: $(buildProductArtifactName)
displayName: 'product build'
- - ${{ if and(in(parameters.osGroup, 'windows', 'linux'), ne(parameters.archType, 'x86'), eq(parameters.pgoType, '')) }}:
+ - ${{ if and(in(parameters.osGroup, 'windows', 'linux'), ne(parameters.archType, 'x86')) }}:
- template: /eng/pipelines/coreclr/templates/crossdac-build.yml
parameters:
archType: ${{ parameters.archType }}
@@ -256,7 +241,7 @@ jobs:
${{ else }}:
hostArchType: x64
- - ${{ if and(in(parameters.osGroup, 'windows'), eq(parameters.archType, 'x86'), eq(parameters.pgoType, '')) }}:
+ - ${{ if and(in(parameters.osGroup, 'windows'), eq(parameters.archType, 'x86')) }}:
- template: /eng/pipelines/coreclr/templates/crossdac-build.yml
parameters:
archType: arm
@@ -267,7 +252,7 @@ jobs:
- ${{ if and(ne(parameters.testGroup, ''), ne(parameters.disableClrTest, true)) }}:
# Publish test native components for consumption by test execution.
- - ${{ if and(ne(parameters.isOfficialBuild, true), eq(parameters.pgoType, '')) }}:
+ - ${{ if ne(parameters.isOfficialBuild, true) }}:
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(nativeTestArtifactRootFolderPath)
@@ -278,25 +263,23 @@ jobs:
artifactName: $(nativeTestArtifactName)
displayName: 'native test components'
- # Get key vault secrets for publishing
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest')) }}:
- - task: AzureKeyVault@1
- inputs:
- azureSubscription: 'DotNet-Engineering-Services_KeyVault'
- KeyVaultName: EngKeyVault
- SecretsFilter: 'dotnetfeed-storage-access-key-1,microsoft-symbol-server-pat,symweb-symbol-server-pat'
-
# Save packages using the prepare-signed-artifacts format.
- - ${{ if and(eq(parameters.isOfficialBuild, true), eq(parameters.pgoType, '')) }}:
+ - ${{ if eq(parameters.isOfficialBuild, true) }}:
- template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
parameters:
name: ${{ parameters.platform }}
+ - ${{ if and(eq(parameters.isOfficialBuild, true), eq(parameters.osGroup, 'windows')) }}:
+ - powershell: ./eng/collect_vsinfo.ps1 -ArchiveRunName postbuild_log
+ displayName: Collect vslogs on exit
+ condition: always()
+
+
# Publish Logs
- task: PublishPipelineArtifact@1
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: '$(publishLogsArtifactPrefix)${{ parameters.pgoType }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ artifactName: '$(publishLogsArtifactPrefix)_Attempt$(System.JobAttempt)_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/coreclr/templates/crossdac-pack.yml b/eng/pipelines/coreclr/templates/crossdac-pack.yml
index 7489ceeedad056..520eb65fb337e6 100644
--- a/eng/pipelines/coreclr/templates/crossdac-pack.yml
+++ b/eng/pipelines/coreclr/templates/crossdac-pack.yml
@@ -70,6 +70,6 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'CrossDacPackagingLogs'
+ artifactName: 'CrossDacPackagingLogs_Attempt$(System.JobAttempt)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/coreclr/templates/helix-queues-setup.yml b/eng/pipelines/coreclr/templates/helix-queues-setup.yml
index e264588ee78c91..1f27b9e1ab94ed 100644
--- a/eng/pipelines/coreclr/templates/helix-queues-setup.yml
+++ b/eng/pipelines/coreclr/templates/helix-queues-setup.yml
@@ -48,11 +48,11 @@ jobs:
# Android x64
- ${{ if in(parameters.platform, 'android_x64') }}:
- - Ubuntu.1804.Amd64.Android.29.Open
+ - Ubuntu.2204.Amd64.Android.29.Open
# Browser wasm
- ${{ if eq(parameters.platform, 'browser_wasm') }}:
- - (Ubuntu.1804.Amd64)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-webassembly
+ - (Ubuntu.2204.Amd64)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
# iOS devices
- ${{ if in(parameters.platform, 'ios_arm64') }}:
@@ -79,9 +79,9 @@ jobs:
# Linux musl x64
- ${{ if eq(parameters.platform, 'linux_musl_x64') }}:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- - (Alpine.315.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-helix-amd64
+ - (Alpine.315.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-helix-amd64
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- - (Alpine.315.Amd64)ubuntu.1804.amd64@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-helix-amd64
+ - (Alpine.315.Amd64)Ubuntu.2204.Amd64@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-helix-amd64
# Linux musl arm32
- ${{ if eq(parameters.platform, 'linux_musl_arm') }}:
@@ -100,9 +100,9 @@ jobs:
# Linux x64
- ${{ if eq(parameters.platform, 'linux_x64') }}:
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- - Ubuntu.1804.Amd64.Open
+ - Ubuntu.2204.Amd64.Open
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- - Ubuntu.1804.Amd64
+ - Ubuntu.2204.Amd64
# OSX arm64
- ${{ if eq(parameters.platform, 'osx_arm64') }}:
diff --git a/eng/pipelines/coreclr/templates/perf-job.yml b/eng/pipelines/coreclr/templates/perf-job.yml
index be3a871ad4020e..8eef7bcffdcaaf 100644
--- a/eng/pipelines/coreclr/templates/perf-job.yml
+++ b/eng/pipelines/coreclr/templates/perf-job.yml
@@ -5,7 +5,7 @@ parameters:
osSubgroup: ''
container: ''
runtimeVariant: ''
- framework: net8.0 # Specify the appropriate framework when running release branches (ie net6.0 for release/6.0)
+ framework: net9.0 # Specify the appropriate framework when running release branches (ie net6.0 for release/6.0)
liveLibrariesBuildConfig: ''
variables: {}
runtimeType: 'coreclr'
@@ -229,7 +229,7 @@ jobs:
artifactFileName: 'AndroidBDNApk.tar.gz'
artifactName: 'AndroidBDNApk'
displayName: 'Mono Android BDN Apk'
-
+
# Download iOSMono and Native AOT tests
- ${{ if or(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.runtimeType, 'iOSNativeAOT')) }}:
- template: /eng/pipelines/common/download-artifact-step.yml
@@ -282,10 +282,10 @@ jobs:
condition: and(succeeded(), ne(variables.runtimeFlavorName, 'Mono'), ne('${{ parameters.runtimeType }}', 'wasm'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
# Copy the runtime directory into the testhost folder to include OOBs.
- - script: "build.cmd -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)\\bin\\mono\\$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\runtime\\net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)\\shared\\Microsoft.NETCore.App\\$(productVersion) /E /I /Y;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\.dotnet-mono /E /I /Y;copy $(Build.SourcesDirectory)\\artifacts\\bin\\coreclr\\$(osGroup).$(archType).$(buildConfigUpper)\\corerun.exe $(Build.SourcesDirectory)\\.dotnet-mono\\shared\\Microsoft.NETCore.App\\$(productVersion)\\corerun.exe"
+ - script: "build.cmd -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)\\bin\\mono\\$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\runtime\\${{parameters.framework}}-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\${{parameters.framework}}-$(osGroup)-$(buildConfigUpper)-$(archType)\\shared\\Microsoft.NETCore.App\\$(productVersion) /E /I /Y;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\${{parameters.framework}}-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\.dotnet-mono /E /I /Y;copy $(Build.SourcesDirectory)\\artifacts\\bin\\coreclr\\$(osGroup).$(archType).$(buildConfigUpper)\\corerun.exe $(Build.SourcesDirectory)\\.dotnet-mono\\shared\\Microsoft.NETCore.App\\$(productVersion)\\corerun.exe"
displayName: "Create mono dotnet (Windows)"
condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), eq(variables.osGroup, 'windows'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
- - script: "mkdir $(Build.SourcesDirectory)/.dotnet-mono;./build.sh -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)/bin/mono/$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;cp $(Build.SourcesDirectory)/artifacts/bin/runtime/net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/artifacts/bin/testhost/net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)/shared/Microsoft.NETCore.App/$(productVersion) -rf;cp $(Build.SourcesDirectory)/artifacts/bin/testhost/net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/.dotnet-mono -r;cp $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)/corerun $(Build.SourcesDirectory)/.dotnet-mono/shared/Microsoft.NETCore.App/$(productVersion)/corerun"
+ - script: "mkdir $(Build.SourcesDirectory)/.dotnet-mono;./build.sh -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)/bin/mono/$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;cp $(Build.SourcesDirectory)/artifacts/bin/runtime/${{parameters.framework}}-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/artifacts/bin/testhost/${{parameters.framework}}-$(osGroup)-$(buildConfigUpper)-$(archType)/shared/Microsoft.NETCore.App/$(productVersion) -rf;cp $(Build.SourcesDirectory)/artifacts/bin/testhost/${{parameters.framework}}-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/.dotnet-mono -r;cp $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)/corerun $(Build.SourcesDirectory)/.dotnet-mono/shared/Microsoft.NETCore.App/$(productVersion)/corerun"
displayName: "Create mono dotnet (Linux)"
condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), ne(variables.osGroup, 'windows'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
diff --git a/eng/pipelines/coreclr/templates/run-paltests-step.yml b/eng/pipelines/coreclr/templates/run-paltests-step.yml
new file mode 100644
index 00000000000000..3b3881986f7d15
--- /dev/null
+++ b/eng/pipelines/coreclr/templates/run-paltests-step.yml
@@ -0,0 +1,23 @@
+parameters:
+ continueOnError: 'false' # optional -- determines whether to continue the build if the step errors
+ helixQueues: '' # required -- Helix queues
+ buildConfig: '' # required -- build configuration
+ archType: '' # required -- targeting CPU architecture
+ osGroup: '' # required -- operating system for the job
+ osSubgroup: '' # optional -- operating system subgroup
+ dependOnEvaluatePaths: false
+
+steps:
+ - template: /eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
+ parameters:
+ displayName: 'Send job to Helix'
+ helixBuild: $(Build.BuildNumber)
+ helixSource: $(_HelixSource)
+ helixType: 'build/tests/'
+ helixQueues: ${{ parameters.helixQueues }}
+ creator: dotnet-bot
+ helixProjectArguments: '$(Build.SourcesDirectory)/src/coreclr/scripts/paltests.proj'
+ BuildConfig: ${{ parameters.buildConfig }}
+ osGroup: ${{ parameters.osGroup }}
+ archType: ${{ parameters.archType }}
+ shouldContinueOnError: ${{ parameters.continueOnError }}
diff --git a/eng/pipelines/coreclr/templates/run-performance-job.yml b/eng/pipelines/coreclr/templates/run-performance-job.yml
index 51d67a7c0ff941..794659045388c1 100644
--- a/eng/pipelines/coreclr/templates/run-performance-job.yml
+++ b/eng/pipelines/coreclr/templates/run-performance-job.yml
@@ -62,14 +62,21 @@ jobs:
- ${{ if and(notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.osGroup, 'windows')) }}:
- HelixPerfUploadTokenValue: '$(PerfCommandUploadToken)'
- ${{ if eq(parameters.runtimeType, 'wasm') }}:
+ # nodejs installation steps from https://github.com/nodesource/distributions
- HelixPreCommandsWasmOnLinux: >-
sudo apt-get -y remove nodejs &&
- curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&
- sudo apt-get -y install nodejs &&
+ sudo apt-get update &&
+ sudo apt-get install -y ca-certificates curl gnupg &&
+ sudo mkdir -p /etc/apt/keyrings &&
+ sudo rm -f /etc/apt/keyrings/nodesource.gpg &&
+ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor --batch -o /etc/apt/keyrings/nodesource.gpg &&
+ export NODE_MAJOR=18 &&
+ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list &&
+ sudo apt-get update &&
+ sudo apt-get install nodejs -y &&
test -n "$(V8Version)" &&
npm install --prefix $HELIX_WORKITEM_PAYLOAD jsvu -g &&
$HELIX_WORKITEM_PAYLOAD/bin/jsvu --os=linux64 v8@$(V8Version) &&
- find ~/.jsvu -ls &&
export V8_ENGINE_PATH=~/.jsvu/bin/v8-$(V8Version) &&
${V8_ENGINE_PATH} -e 'console.log(`V8 version: ${this.version()}`)'
- ${{ if ne(parameters.runtimeType, 'wasm') }}:
diff --git a/eng/pipelines/coreclr/templates/run-superpmi-collect-job.yml b/eng/pipelines/coreclr/templates/run-superpmi-collect-job.yml
index ab401a83f6959f..93f0450d168910 100644
--- a/eng/pipelines/coreclr/templates/run-superpmi-collect-job.yml
+++ b/eng/pipelines/coreclr/templates/run-superpmi-collect-job.yml
@@ -100,6 +100,9 @@ jobs:
- ${{ if eq(parameters.collectionName, 'libraries_tests') }}:
- name: InputDirectory
value: '$(Build.SourcesDirectory)/artifacts/tests/libraries/$(osGroup).$(archType).$(buildConfigUpper)'
+ - ${{ if eq(parameters.collectionName, 'smoke_tests') }}:
+ - name: InputDirectory
+ value: '$(Build.SourcesDirectory)/artifacts/tests/coreclr/obj/${{ parameters.osGroup }}.${{ parameters.archType }}.$(buildConfigUpper)/Managed/nativeaot/SmokeTests'
workspace:
clean: all
diff --git a/eng/pipelines/coreclr/templates/run-superpmi-diffs-job.yml b/eng/pipelines/coreclr/templates/run-superpmi-diffs-job.yml
index b987c25cb89a27..da61351842a58a 100644
--- a/eng/pipelines/coreclr/templates/run-superpmi-diffs-job.yml
+++ b/eng/pipelines/coreclr/templates/run-superpmi-diffs-job.yml
@@ -11,7 +11,7 @@ parameters:
osSubgroup: '' # optional -- operating system subgroup
continueOnError: 'false' # optional -- determines whether to continue the build if the step errors
dependsOn: '' # optional -- dependencies of the job
- timeoutInMinutes: 120 # optional -- timeout for the job
+ timeoutInMinutes: 180 # optional -- timeout for the job
enableTelemetry: false # optional -- enable for telemetry
liveLibrariesBuildConfig: '' # optional -- live-live libraries configuration to use for the run
helixQueues: '' # required -- Helix queues
@@ -119,7 +119,7 @@ jobs:
helixType: 'build/tests/'
helixQueues: ${{ join(',', parameters.helixQueues) }}
creator: dotnet-bot
- WorkItemTimeout: 2:00 # 2 hours
+ WorkItemTimeout: 3:00 # 3 hours
WorkItemDirectory: '$(WorkItemDirectory)'
CorrelationPayloadDirectory: '$(CorrelationPayloadDirectory)'
helixProjectArguments: '$(Build.SourcesDirectory)/src/coreclr/scripts/superpmi-diffs.proj'
diff --git a/eng/pipelines/coreclr/templates/sign-diagnostic-files.yml b/eng/pipelines/coreclr/templates/sign-diagnostic-files.yml
index 89cbbec6390df9..6b65962ceaa5a5 100644
--- a/eng/pipelines/coreclr/templates/sign-diagnostic-files.yml
+++ b/eng/pipelines/coreclr/templates/sign-diagnostic-files.yml
@@ -12,7 +12,7 @@ steps:
version: '6.0.x'
installationPath: '$(Agent.TempDirectory)/dotnet'
- - task: EsrpCodeSigning@1
+ - task: EsrpCodeSigning@4
displayName: Sign Diagnostic Binaries
inputs:
ConnectedServiceName: 'dotnetesrp-diagnostics-dnceng'
@@ -48,6 +48,7 @@ steps:
SessionTimeout: ${{ parameters.timeoutInMinutes }}
MaxConcurrency: '50'
MaxRetryAttempts: '5'
+ PendingAnalysisWaitTimeoutMinutes: '5'
env:
DOTNET_MULTILEVEL_LOOKUP: 0
DOTNET_ROOT: '$(Agent.TempDirectory)/dotnet'
diff --git a/eng/pipelines/coreclr/templates/superpmi-asmdiffs-checked-release-job.yml b/eng/pipelines/coreclr/templates/superpmi-asmdiffs-checked-release-job.yml
index 396fe5077f5988..659483c9bc302b 100644
--- a/eng/pipelines/coreclr/templates/superpmi-asmdiffs-checked-release-job.yml
+++ b/eng/pipelines/coreclr/templates/superpmi-asmdiffs-checked-release-job.yml
@@ -34,7 +34,7 @@ jobs:
- name: releaseProductRootFolderPath
value: '$(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).Release'
- name: releaseProductArtifactName
- value: 'CoreCLRProduct_${{ parameters.pgoType }}_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_release'
+ value: 'CoreCLRProduct_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_release'
steps:
diff --git a/eng/pipelines/coreclr/templates/superpmi-diffs-job.yml b/eng/pipelines/coreclr/templates/superpmi-diffs-job.yml
index aace201eb96613..2375089e250b9a 100644
--- a/eng/pipelines/coreclr/templates/superpmi-diffs-job.yml
+++ b/eng/pipelines/coreclr/templates/superpmi-diffs-job.yml
@@ -5,7 +5,7 @@ parameters:
osSubgroup: '' # optional -- operating system subgroup
condition: true
pool: ''
- timeoutInMinutes: 180 # build timeout
+ timeoutInMinutes: 240 # build timeout
variables: {}
helixQueues: ''
dependOnEvaluatePaths: false
@@ -49,7 +49,7 @@ jobs:
- name: releaseProductRootFolderPath
value: '$(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).Release'
- name: releaseProductArtifactName
- value: 'CoreCLRProduct_${{ parameters.pgoType }}_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_release'
+ value: 'CoreCLRProduct_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_release'
steps:
diff --git a/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml b/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml
index 83347d78b8b1cc..162f5e9f0ed1c8 100644
--- a/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml
+++ b/eng/pipelines/coreclr/templates/xplat-pipeline-job.yml
@@ -38,7 +38,6 @@ jobs:
crossBuild: ${{ parameters.crossBuild }}
strategy: ${{ parameters.strategy }}
pool: ${{ parameters.pool }}
- pgoType: ${{ parameters.pgoType }}
# arcade-specific parameters
condition: and(succeeded(), ${{ parameters.condition }})
@@ -65,7 +64,7 @@ jobs:
# Build product defines what we are trying to build, either coreclr or mono
- name: buildProductArtifactName
- value: 'CoreCLRProduct_${{ parameters.pgoType }}_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ value: 'CoreCLRProduct_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
- name: buildProductRootFolderPath
value: '$(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)'
@@ -78,13 +77,13 @@ jobs:
# We need this because both mono and coreclr build currently depends on CoreClr
- name: coreClrProductArtifactName
- value: 'CoreCLRProduct_${{ parameters.pgoType }}_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ value: 'CoreCLRProduct_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
- name: coreClrProductRootFolderPath
value: '$(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)'
- name: corelibProductArtifactName
- value: 'CoreLib_${{ parameters.pgoType }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ value: 'CoreLib_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
- name: managedGenericTestArtifactName
value: 'CoreCLRManagedTestArtifacts_AnyOS_AnyCPU_$(buildConfig)'
diff --git a/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml b/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml
index c279c318e34d59..42900f2e36ff28 100644
--- a/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml
+++ b/eng/pipelines/extra-platforms/runtime-extra-platforms-other.yml
@@ -72,165 +72,6 @@ jobs:
eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
eq(variables['isRollingBuild'], true))
-#
-# CoreCLR NativeAOT release build and libraries tests
-# Only when CoreCLR or library is changed
-#
-- template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
- buildConfig: Release
- platforms:
- - windows_x64
- - windows_arm64
- - osx_x64
- - osx_arm64
- - linux_x64
- - linux_arm64
- - linux_musl_x64
- jobParameters:
- testGroup: innerloop
- isSingleFile: true
- nameSuffix: NativeAOT_Libs
- buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) /p:TestNativeAot=true /p:ArchiveTests=true
- timeoutInMinutes: 300 # doesn't normally take this long, but I've seen Helix queues backed up for 160 minutes
- # extra steps, run tests
- extraStepsTemplate: /eng/pipelines/libraries/helix.yml
- extraStepsParameters:
- creator: dotnet-bot
- testRunNamePrefixSuffix: NativeAOT_$(_BuildConfig)
- condition: >-
- or(
- eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
- eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
- eq(variables['isRollingBuild'], true))
-
-#
-# CoreCLR NativeAOT release build (checked runtime) and libraries tests
-# Only when CoreCLR or library is changed
-#
-- template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
- buildConfig: Release
- platforms:
- - windows_x64
- - linux_arm64
- jobParameters:
- testGroup: innerloop
- isSingleFile: true
- nameSuffix: NativeAOT_Checked_Libs
- buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:TestNativeAot=true /p:ArchiveTests=true
- timeoutInMinutes: 360
- # extra steps, run tests
- extraStepsTemplate: /eng/pipelines/libraries/helix.yml
- extraStepsParameters:
- creator: dotnet-bot
- testRunNamePrefixSuffix: NativeAOT_Checked_$(_BuildConfig)
- condition: >-
- or(
- eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
- eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
- eq(variables['isRollingBuild'], true))
-
-#
-# CoreCLR NativeAOT release build (checked runtime) - SizeOpt and libraries tests
-# Only when CoreCLR or library is changed
-#
-- template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
- buildConfig: Release
- platforms:
- - windows_x64
- - linux_x64
- jobParameters:
- testGroup: innerloop
- isSingleFile: true
- nameSuffix: NativeAOT_Checked_Libs_SizeOpt
- buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:TestNativeAot=true /p:ArchiveTests=true /p:OptimizationPreference=Size
- timeoutInMinutes: 240
- # extra steps, run tests
- extraStepsTemplate: /eng/pipelines/libraries/helix.yml
- extraStepsParameters:
- creator: dotnet-bot
- testRunNamePrefixSuffix: NativeAOT_Checked_SizeOpt_$(_BuildConfig)
- condition: >-
- or(
- eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
- eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
- eq(variables['isRollingBuild'], true))
-
-#
-# CoreCLR NativeAOT release build (checked runtime) - SpeedOpt and libraries tests
-# Only when CoreCLR or library is changed
-#
-- template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
- buildConfig: Release
- platforms:
- - windows_x64
- - linux_x64
- jobParameters:
- testGroup: innerloop
- isSingleFile: true
- nameSuffix: NativeAOT_Checked_Libs_SpeedOpt
- buildArgs: -s clr.aot+host.native+libs+libs.tests -c $(_BuildConfig) -rc Checked /p:TestNativeAot=true /p:ArchiveTests=true /p:OptimizationPreference=Speed
- timeoutInMinutes: 240
- # extra steps, run tests
- extraStepsTemplate: /eng/pipelines/libraries/helix.yml
- extraStepsParameters:
- creator: dotnet-bot
- testRunNamePrefixSuffix: NativeAOT_Checked_SpeedOpt_$(_BuildConfig)
- condition: >-
- or(
- eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
- eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
- eq(variables['isRollingBuild'], true))
-
-#
-# CoreCLR NativeAOT checked build and Pri0 tests
-# Only when CoreCLR is changed
-#
-- template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/common/global-build-job.yml
- helixQueuesTemplate: /eng/pipelines/coreclr/templates/helix-queues-setup.yml
- buildConfig: Checked
- platforms:
- - windows_x64
- - linux_x64
- variables:
- - name: timeoutPerTestInMinutes
- value: 60
- - name: timeoutPerTestCollectionInMinutes
- value: 180
- jobParameters:
- timeoutInMinutes: 240
- nameSuffix: NativeAOT_Pri0
- buildArgs: -s clr.aot+host.native+libs -rc $(_BuildConfig) -lc Release -hc Release
- extraStepsTemplate: /eng/pipelines/coreclr/nativeaot-post-build-steps.yml
- extraStepsParameters:
- creator: dotnet-bot
- testBuildArgs: 'nativeaot /p:IlcUseServerGc=false'
- liveLibrariesBuildConfig: Release
- testRunNamePrefixSuffix: NativeAOT_Pri0_$(_BuildConfig)
- extraVariablesTemplates:
- - template: /eng/pipelines/common/templates/runtimes/test-variables.yml
- parameters:
- testGroup: innerloop
- liveLibrariesBuildConfig: Release
- condition: >-
- or(
- eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
- eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
- eq(variables['isRollingBuild'], true))
-
# Run net48 tests on win-x64
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -362,7 +203,7 @@ jobs:
runtimeFlavor: mono
platforms:
- linux_x64
- # - linux_arm64
+ - linux_arm64
variables:
- name: timeoutPerTestInMinutes
value: 60
diff --git a/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml b/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
index 3fe2e54610d925..c641821da3855a 100644
--- a/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
+++ b/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
@@ -105,22 +105,6 @@ jobs:
- WasmTestOnBrowser
- WasmTestOnNodeJS
- # Smoke tests only with full threading
- - template: /eng/pipelines/common/templates/wasm-library-tests.yml
- parameters:
- platforms:
- - browser_wasm
- #- browser_wasm_win
- nameSuffix: _Threading_Smoke
- extraBuildArgs: /p:MonoWasmBuildVariant=multithread /p:WasmEnableThreads=true /p:_WasmPThreadPoolSize=8 /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
- shouldRunSmokeOnly: true
- isExtraPlatformsBuild: ${{ parameters.isExtraPlatformsBuild }}
- isWasmOnlyBuild: ${{ parameters.isWasmOnlyBuild }}
- # Always run for runtime-wasm because browser testing is not on runtime
- alwaysRun: ${{ parameters.isWasmOnlyBuild }}
- scenarios:
- - WasmTestOnBrowser
-
# Library tests with full threading
- template: /eng/pipelines/common/templates/wasm-library-tests.yml
parameters:
@@ -134,7 +118,7 @@ jobs:
# Always run for runtime-wasm because tests are not run in runtime
alwaysRun: ${{ parameters.isWasmOnlyBuild }}
- # NOTE - Since threading is experimental, we don't want to block mainline work
+ # NOTE - Since threading is experimental, we don't want to block mainline work
shouldContinueOnError: true
scenarios:
- WasmTestOnBrowser
diff --git a/eng/pipelines/installer/jobs/build-job.yml b/eng/pipelines/installer/jobs/build-job.yml
index 5ae2122f70571d..7d7653e7d0d027 100644
--- a/eng/pipelines/installer/jobs/build-job.yml
+++ b/eng/pipelines/installer/jobs/build-job.yml
@@ -19,7 +19,6 @@ parameters:
displayName: ''
runtimeVariant: ''
pool: ''
- pgoType: ''
runOnlyIfDependenciesSucceeded: false
# The target names here should match container names in the resources section in our pipelines, like runtime.yml
@@ -59,11 +58,10 @@ jobs:
dependOnEvaluatePaths: ${{ parameters.dependOnEvaluatePaths }}
disableClrTest: ${{ parameters.disableClrTest }}
- pgoType: ${{ parameters.pgoType }}
# Compute job name from template parameters
- name: ${{ format('installer_{0}_{1}_{2}_{3}_{4}_', parameters.pgoType, parameters.runtimeFlavor, parameters.runtimeVariant, coalesce(parameters.name, parameters.platform), parameters.buildConfig) }}
- displayName: ${{ format('{0} Installer Build and Test {1} {2} {3} {4}', parameters.pgoType, parameters.runtimeFlavor, parameters.runtimeVariant, coalesce(parameters.name, parameters.platform), parameters.buildConfig) }}
+ name: ${{ format('installer_{0}_{1}_{2}_{3}_', parameters.runtimeFlavor, parameters.runtimeVariant, coalesce(parameters.name, parameters.platform), parameters.buildConfig) }}
+ displayName: ${{ format('Installer Build and Test {0} {1} {2} {3}', parameters.runtimeFlavor, parameters.runtimeVariant, coalesce(parameters.name, parameters.platform), parameters.buildConfig) }}
# Run all steps in the container.
# Note that the containers are defined in platform-matrix.yml
@@ -99,25 +97,18 @@ jobs:
not(and(
eq(parameters.osGroup, 'linux'),
eq(parameters.osSubgroup, ''))
- )),
- eq(parameters.pgoType, 'PGO')) }}
+ ))) }}
- name: BuildAction
value: -test
- - ${{ if eq(or(not(in(parameters.archType, 'x64', 'x86')), eq(parameters.runtimeFlavor, 'mono'), eq(parameters.isOfficialBuild, true), and(eq(parameters.crossBuild, true), not(and(eq(parameters.osGroup, 'linux'), eq(parameters.osSubgroup, '')))), eq(parameters.pgoType, 'PGO')), true) }}:
+ - ${{ if eq(or(not(in(parameters.archType, 'x64', 'x86')), eq(parameters.runtimeFlavor, 'mono'), eq(parameters.isOfficialBuild, true), and(eq(parameters.crossBuild, true), not(and(eq(parameters.osGroup, 'linux'), eq(parameters.osSubgroup, ''))))), true) }}:
- name: BuildAction
value: ''
- name: SignType
value: test
- - name: pgoInstrumentArg
- value: ''
- - ${{ if eq(parameters.pgoType, 'PGO' )}}:
- - name: pgoInstrumentArg
- value: '-pgoinstrument '
-
# Set up non-PR build from internal project
- ${{ if eq(parameters.isOfficialBuild, true) }}:
- name: SignType
@@ -153,7 +144,6 @@ jobs:
build.cmd -subset host+packs -ci
$(BuildAction)
-configuration $(_BuildConfig)
- $(pgoInstrumentArg)
$(LiveOverridePathArgs)
$(CommonMSBuildArgs)
$(MsbuildSigningArguments)
@@ -225,7 +215,6 @@ jobs:
/p:CrossBuild=${{ parameters.crossBuild }}
/p:PortableBuild=$(_PortableBuild)
/p:SkipTests=$(SkipTests)
- $(pgoInstrumentArg)
$(LiveOverridePathArgs)
$(CommonMSBuildArgs)
@@ -265,7 +254,7 @@ jobs:
/p:RuntimeArtifactsPath=$(buildCommandSourcesDirectory)$(RuntimeDownloadPath)
/p:RuntimeConfiguration=${{ parameters.liveRuntimeBuildConfig }}
- name: RuntimeArtifactName
- value: $(runtimeFlavorName)Product_${{ parameters.pgoType }}_${{ parameters.runtimeVariant }}_$(liveRuntimeLegName)
+ value: $(runtimeFlavorName)Product_${{ parameters.runtimeVariant }}_$(liveRuntimeLegName)
- ${{ if ne(parameters.liveLibrariesBuildConfig, '') }}:
- name: liveLibrariesLegName
@@ -286,14 +275,13 @@ jobs:
- evaluate_paths
- ${{ parameters.dependsOn }}
- ${{ if ne(parameters.liveRuntimeBuildConfig, '') }}:
- - ${{ format('{0}_{1}_product_build_{2}{3}_{4}_{5}{6}',
+ - ${{ format('{0}_{1}_product_build_{2}{3}_{4}_{5}',
parameters.runtimeFlavor,
parameters.runtimeVariant,
parameters.osGroup,
parameters.osSubgroup,
parameters.archType,
- parameters.liveRuntimeBuildConfig,
- parameters.pgoType) }}
+ parameters.liveRuntimeBuildConfig) }}
- ${{ if ne(parameters.liveLibrariesBuildConfig, '') }}:
- libraries_build_${{ format('{0}{1}_{2}_{3}',
parameters.osGroup,
@@ -301,6 +289,33 @@ jobs:
parameters.archType,
parameters.liveLibrariesBuildConfig) }}
steps:
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - powershell: |
+ schtasks /change /tn "\Microsoft\VisualStudio\VSIX Auto Update" /disable
+
+ $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
+ if (-not (Test-Path -Path "$vswhere" -PathType Leaf))
+ {
+ Write-Error "Couldn't locate vswhere at $vswhere"
+ exit 1
+ }
+
+ $vsdir = &"$vswhere" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
+ $vsregedit = "$vsdir\Common7\IDE\VsRegEdit.exe"
+
+ if (-not (Test-Path -Path "$vsregedit" ))
+ {
+ Write-Error "VSWhere returned path: $vsdir, but regedit $vsregedit doesn't exist."
+ exit 1
+ }
+
+ Write-Output "VSWhere returned path: $vsdir, using regedit $vsregedit"
+ Write-Output "Disabling updates through VS Registry:"
+
+ &"$vsdir\Common7\IDE\VsRegEdit.exe" set local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword 0
+ &"$vsdir\Common7\IDE\VsRegEdit.exe" read local HKCU ExtensionManager AutomaticallyCheckForUpdates2Override dword
+ displayName: Disable VSIX updates
+ condition: always()
- checkout: self
clean: true
fetchDepth: $(checkoutFetchDepth)
@@ -372,10 +387,16 @@ jobs:
path: $(Build.SourcesDirectory)/artifacts/bin/osx-${{ parameters.archType }}.$(_BuildConfig)/corehost
entitlementsFile: $(Build.SourcesDirectory)/eng/pipelines/common/entitlements.plist
- - script: $(BaseJobBuildCommand) -subset host.pkg+host.tools+host.tests+packs
+ - script: $(BaseJobBuildCommand) -subset host.pkg+host.tools+host.pretest+host.tests+packs
displayName: Build and Package
continueOnError: ${{ and(eq(variables.SkipTests, false), eq(parameters.shouldContinueOnError, true)) }}
+ - ${{ if and(eq(parameters.isOfficialBuild, true), eq(parameters.osGroup, 'windows')) }}:
+ - powershell: ./eng/collect_vsinfo.ps1 -ArchiveRunName postbuild_log
+ displayName: Collect vslogs on exit
+ condition: always()
+
+
- ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
@@ -383,7 +404,7 @@ jobs:
displayName: Disk Usage after Build
# Only in glibc leg, we produce RPMs and Debs
- - ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), or(eq(parameters.platform, 'linux_x64'), eq(parameters.platform, 'linux_arm64')), eq(parameters.osSubgroup, ''), eq(parameters.pgoType, ''))}}:
+ - ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), or(eq(parameters.platform, 'linux_x64'), eq(parameters.platform, 'linux_arm64')), eq(parameters.osSubgroup, ''))}}:
- ${{ each packageBuild in parameters.packageDistroList }}:
# This leg's RID matches the build image. Build its distro-dependent packages, as well as
# the distro-independent installers. (There's no particular reason to build the distro-
@@ -404,7 +425,6 @@ jobs:
runtimeFlavor: ${{ parameters.runtimeFlavor }}
runtimeVariant: ${{ parameters.runtimeVariant }}
isOfficialBuild: ${{ eq(parameters.isOfficialBuild, true) }}
- pgoType: ${{ parameters.pgoType }}
skipTests: ${{ eq(variables.SkipTests, true) }}
- ${{ if ne(parameters.osGroup, 'windows') }}:
diff --git a/eng/pipelines/installer/jobs/steps/upload-job-artifacts.yml b/eng/pipelines/installer/jobs/steps/upload-job-artifacts.yml
index 6029ba00571977..4012b9a4fa34cb 100644
--- a/eng/pipelines/installer/jobs/steps/upload-job-artifacts.yml
+++ b/eng/pipelines/installer/jobs/steps/upload-job-artifacts.yml
@@ -3,7 +3,6 @@ parameters:
runtimeFlavor: 'coreclr'
runtimeVariant: ''
isOfficialBuild: false
- pgoType: ''
steps:
# Upload build artifacts (packages) to pipeline only if official, to save storage space.
@@ -51,7 +50,7 @@ steps:
displayName: Publish binaries
inputs:
pathtoPublish: '$(Build.StagingDirectory)/corehost-bin-${{ parameters.name }}-$(_BuildConfig)$(archiveExtension)'
- artifactName: Installer-Binaries-${{parameters.pgoType }}${{ parameters.runtimeFlavor }}-${{ parameters.runtimeVariant }}-${{ parameters.name }}-$(_BuildConfig)
+ artifactName: Installer-Binaries-${{ parameters.runtimeFlavor }}-${{ parameters.runtimeVariant }}-${{ parameters.name }}-$(_BuildConfig)
continueOnError: true
condition: failed()
@@ -71,6 +70,6 @@ steps:
displayName: Publish BuildLogs
inputs:
targetPath: '$(Build.StagingDirectory)/BuildLogs'
- artifactName: Installer-Logs-${{parameters.pgoType }}${{ parameters.runtimeFlavor }}-${{ parameters.runtimeVariant }}-${{ parameters.name }}-$(_BuildConfig)
+ artifactName: Installer-Logs_Attempt$(System.JobAttempt)-${{ parameters.runtimeFlavor }}-${{ parameters.runtimeVariant }}-${{ parameters.name }}-$(_BuildConfig)
continueOnError: true
condition: always()
diff --git a/eng/pipelines/libraries/base-job.yml b/eng/pipelines/libraries/base-job.yml
index 9dea30f61c455d..1726ebb26bd88d 100644
--- a/eng/pipelines/libraries/base-job.yml
+++ b/eng/pipelines/libraries/base-job.yml
@@ -4,7 +4,7 @@ parameters:
archType: ''
osSubgroup: ''
crossBuild: false
- framework: 'net8.0'
+ framework: 'net9.0'
isOfficialAllConfigurations: false
isSourceBuild: false
liveRuntimeBuildConfig: ''
@@ -23,7 +23,7 @@ parameters:
testScope: ''
pool: ''
runTests: false
- pgoType: ''
+ SuperPmiCollect: false
jobs:
- template: /eng/common/templates/job/job.yml
@@ -48,6 +48,7 @@ jobs:
variables:
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- group: DotNet-HelixApi-Access
+ - group: AzureDevOps-Artifact-Feeds-Pats
- _buildScriptFileName: build
@@ -97,7 +98,7 @@ jobs:
- _runtimeDownloadPath: '$(Build.SourcesDirectory)/artifacts/transport/${{ parameters.runtimeFlavor }}'
- _runtimeConfigurationArg: -rc ${{ parameters.liveRuntimeBuildConfig }}
- ${{ if eq(parameters.runTests, true) }}:
- - _runtimeArtifactName: '$(runtimeFlavorName)Product_${{ parameters.pgoType }}_${{ parameters.runtimeVariant}}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.liveRuntimeBuildConfig }}'
+ - _runtimeArtifactName: '$(runtimeFlavorName)Product_${{ parameters.runtimeVariant}}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.liveRuntimeBuildConfig }}'
- _runtimeArtifactsPathArg: ' /p:RuntimeArtifactsPath=$(_runtimeDownloadPath)'
- ${{ if eq(parameters.testDisplayName, '') }}:
- _testRunNamePrefixSuffix: $(runtimeFlavorName)_${{ parameters.liveRuntimeBuildConfig }}
@@ -136,4 +137,22 @@ jobs:
artifactName: '$(_runtimeArtifactName)'
displayName: '$(runtimeFlavorName) build drop'
+ - ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - ${{ if ne(parameters.osGroup, 'windows') }}:
+ - task: Bash@3
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
+ arguments: $(Build.SourcesDirectory)/NuGet.config $Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - task: PowerShell@2
+ displayName: Setup Private Feeds Credentials
+ inputs:
+ filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
+ env:
+ Token: $(dn-bot-dnceng-artifact-feeds-rw)
+
- ${{ parameters.steps }}
diff --git a/eng/pipelines/libraries/build-job.yml b/eng/pipelines/libraries/build-job.yml
index 19eeba653c37ae..cd76d5b1920bb8 100644
--- a/eng/pipelines/libraries/build-job.yml
+++ b/eng/pipelines/libraries/build-job.yml
@@ -5,7 +5,7 @@ parameters:
archType: ''
targetRid: ''
crossBuild: false
- framework: 'net8.0'
+ framework: 'net9.0'
isOfficialBuild: false
isOfficialAllConfigurations: false
runtimeVariant: ''
diff --git a/eng/pipelines/libraries/enterprise/linux.yml b/eng/pipelines/libraries/enterprise/linux.yml
index ccfda9fcaebe40..40552c1a0e18f8 100644
--- a/eng/pipelines/libraries/enterprise/linux.yml
+++ b/eng/pipelines/libraries/enterprise/linux.yml
@@ -39,7 +39,7 @@ extends:
timeoutInMinutes: 120
pool:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
+ demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
steps:
- bash: |
cd $(enterpriseTestsSetup)
diff --git a/eng/pipelines/libraries/helix-queues-setup.yml b/eng/pipelines/libraries/helix-queues-setup.yml
index 987d7f99c41f4a..dfc98e12f89cf9 100644
--- a/eng/pipelines/libraries/helix-queues-setup.yml
+++ b/eng/pipelines/libraries/helix-queues-setup.yml
@@ -47,9 +47,9 @@ jobs:
# Linux musl x64
- ${{ if eq(parameters.platform, 'linux_musl_x64') }}:
- ${{ if or(ne(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- - (Alpine.315.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-helix-amd64
+ - (Alpine.315.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.15-helix-amd64
- ${{ if or(eq(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- - (Alpine.317.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.17-helix-amd64
+ - (Alpine.317.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.17-helix-amd64
# Linux musl arm64
- ${{ if and(eq(parameters.platform, 'linux_musl_arm64'), or(eq(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true))) }}:
@@ -61,25 +61,25 @@ jobs:
- ${{ if and(eq(parameters.jobParameters.interpreter, ''), ne(parameters.jobParameters.isSingleFile, true)) }}:
- ${{ if and(eq(parameters.jobParameters.testScope, 'outerloop'), eq(parameters.jobParameters.runtimeFlavor, 'mono')) }}:
- SLES.15.Amd64.Open
- - (Centos.8.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8-helix
- - (Fedora.38.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38-helix
- - (Ubuntu.2204.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-amd64
+ - (Centos.8.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8-helix
+ - (Fedora.38.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38-helix
+ - (Ubuntu.2204.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-amd64
- (Debian.11.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
- ${{ if or(ne(parameters.jobParameters.testScope, 'outerloop'), ne(parameters.jobParameters.runtimeFlavor, 'mono')) }}:
- ${{ if or(eq(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- SLES.15.Amd64.Open
- - (Fedora.38.Amd64.Open)ubuntu.1804.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38-helix
+ - (Fedora.38.Amd64.Open)ubuntu.2204.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38-helix
- Ubuntu.2204.Amd64.Open
- - (Debian.11.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
- - (Mariner.2.0.Amd64.Open)ubuntu.1804.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-helix-amd64
- - (openSUSE.15.2.Amd64.Open)ubuntu.1804.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:opensuse-15.2-helix-amd64
+ - (Debian.11.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
+ - (Mariner.2.0.Amd64.Open)Ubuntu.2204.Amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-helix-amd64
+ - (openSUSE.15.2.Amd64.Open)Ubuntu.2204.Amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:opensuse-15.2-helix-amd64
- ${{ if or(ne(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- - (Centos.8.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8-helix
- - (Debian.11.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
- - Ubuntu.1804.Amd64.Open
+ - (Centos.8.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8-helix
+ - (Debian.11.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
+ - Ubuntu.2204.Amd64.Open
- ${{ if or(eq(parameters.jobParameters.interpreter, 'true'), eq(parameters.jobParameters.isSingleFile, true)) }}:
# Limiting interp runs as we don't need as much coverage.
- - (Debian.11.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
+ - (Debian.11.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64
# Linux s390x
- ${{ if eq(parameters.platform, 'linux_s390x') }}:
@@ -99,7 +99,7 @@ jobs:
# Android
- ${{ if in(parameters.platform, 'android_x86', 'android_x64', 'linux_bionic_x64') }}:
- - Ubuntu.1804.Amd64.Android.29.Open
+ - Ubuntu.2204.Amd64.Android.29.Open
- ${{ if in(parameters.platform, 'android_arm', 'android_arm64', 'linux_bionic_arm64') }}:
- Windows.10.Amd64.Android.Open
@@ -173,15 +173,15 @@ jobs:
# WASI
- ${{ if eq(parameters.platform, 'wasi_wasm') }}:
- - (Ubuntu.2004.Amd64)Ubuntu.2004.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-20.04-helix-wasm-amd64
+ - (Ubuntu.2204.Amd64)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
# Browser WebAssembly
- ${{ if eq(parameters.platform, 'browser_wasm') }}:
- - (Ubuntu.1804.Amd64)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-webassembly
+ - (Ubuntu.2204.Amd64)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
# Browser WebAssembly Firefox
- ${{ if eq(parameters.platform, 'browser_wasm_firefox') }}:
- - (Ubuntu.1804.Amd64)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-webassembly
+ - (Ubuntu.2204.Amd64)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-webassembly
# Browser WebAssembly windows
- ${{ if in(parameters.platform, 'browser_wasm_win', 'wasi_wasm_win') }}:
diff --git a/eng/pipelines/libraries/helix.yml b/eng/pipelines/libraries/helix.yml
index f63792367fe78b..03b3cf1ebaffca 100644
--- a/eng/pipelines/libraries/helix.yml
+++ b/eng/pipelines/libraries/helix.yml
@@ -13,6 +13,9 @@ parameters:
extraHelixArguments: ''
shouldContinueOnError: false
scenarios: ''
+ SuperPmiCollect: ''
+ SuperPmiCollectionType: ''
+ SuperPmiCollectionName: ''
steps:
- script: $(_msbuildCommand) $(_warnAsErrorParamHelixOverride) -restore
@@ -34,6 +37,9 @@ steps:
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
_Scenarios: ${{ join(',', parameters.scenarios) }} # Pass scenarios to MSBuild as env var to avoid need of escaping comma separated list
+ _SuperPmiCollect: ${{ parameters.SuperPmiCollect }}
+ _SuperPmiCollectionType: ${{ parameters.SuperPmiCollectionType }}
+ _SuperPmiCollectionName: ${{ parameters.SuperPmiCollectionName }}
${{ if eq(variables['System.TeamProject'], 'internal') }}:
HelixAccessToken: $(HelixApiAccessToken)
diff --git a/eng/pipelines/libraries/run-test-job.yml b/eng/pipelines/libraries/run-test-job.yml
index 4fe91d22a9312f..cbc53deaed4c16 100644
--- a/eng/pipelines/libraries/run-test-job.yml
+++ b/eng/pipelines/libraries/run-test-job.yml
@@ -4,7 +4,7 @@ parameters:
osSubgroup: ''
archType: ''
targetRid: ''
- framework: 'net8.0'
+ framework: 'net9.0'
isOfficialBuild: false
liveRuntimeBuildConfig: ''
runtimeFlavor: 'coreclr'
@@ -23,6 +23,9 @@ parameters:
# stress modes that each test will be run with. This is the same usage as 'testGroup' in
# eng/pipelines/common/templates/runtimes/run-test-job.yml.
coreclrTestGroup: ''
+ SuperPmiCollect: false
+ SuperPmiCollectionType: 'run'
+ SuperPmiCollectionName: 'libraries_tests'
dependsOn: []
jobs:
@@ -42,13 +45,18 @@ jobs:
container: ${{ parameters.container }}
condition: ${{ parameters.condition }}
testScope: ${{ parameters.testScope }}
+ SuperPmiCollect: ${{ parameters.SuperPmiCollect }}
runTests: true
- ${{ if ne(parameters.liveRuntimeBuildConfig, '') }}:
- displayName: ${{ format('Test Run {0} {1}', parameters.liveRuntimeBuildConfig, parameters.runtimeDisplayName) }}
- name: ${{ format('test_run_{0}_{1}', parameters.liveRuntimeBuildConfig, parameters.runtimeDisplayName) }}
- ${{ if eq(parameters.liveRuntimeBuildConfig, '') }}:
- displayName: 'Test Run'
- name: test_run
+ ${{ if eq(parameters.SuperPmiCollect, true) }}:
+ displayName: ${{ format('SuperPMI collection {0} {1} {2}', parameters.SuperPmiCollectionName, parameters.liveRuntimeBuildConfig, parameters.runtimeDisplayName) }}
+ name: ${{ format('spmi_{0}_{1}_{2}', parameters.SuperPmiCollectionName, parameters.liveRuntimeBuildConfig, parameters.runtimeDisplayName) }}
+ ${{ else }}:
+ ${{ if ne(parameters.liveRuntimeBuildConfig, '') }}:
+ displayName: ${{ format('Test Run {0} {1}', parameters.liveRuntimeBuildConfig, parameters.runtimeDisplayName) }}
+ name: ${{ format('test_run_{0}_{1}', parameters.liveRuntimeBuildConfig, parameters.runtimeDisplayName) }}
+ ${{ if eq(parameters.liveRuntimeBuildConfig, '') }}:
+ displayName: 'Test Run'
+ name: test_run
${{ if eq(parameters.interpreter, 'true') }}:
testDisplayName: ${{ parameters.runtimeFlavor }}_interpreter_${{ parameters.liveRuntimeBuildConfig }}
@@ -64,14 +72,36 @@ jobs:
- ${{ format('libraries_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
- ${{ if ne(parameters.liveRuntimeBuildConfig, '') }}:
- ${{ format('{0}_{1}_product_build_{2}{3}_{4}_{5}', parameters.runtimeFlavor, parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveRuntimeBuildConfig) }}
+ # SuperPMI collection needs to run mcs.exe on the AzDO machine. Assume that's an x64 machine, and download an x64 product build if needed.
+ - ${{ if and(eq(parameters.SuperPmiCollect, true), ne(parameters.archType, 'x64')) }}:
+ - ${{ format('{0}_{1}_product_build_{2}{3}_{4}_{5}', 'coreclr', '', parameters.osGroup, parameters.osSubgroup, 'x64', parameters.liveRuntimeBuildConfig) }}
variables:
+
- librariesTestsArtifactName: ${{ format('libraries_test_assets_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
- _archiveTestsParameter: /p:ArchiveTests=true
+ - ${{ if eq(parameters.SuperPmiCollect, true) }}:
+ - template: /eng/pipelines/libraries/superpmi-collect-variables.yml
+ parameters:
+ buildConfig: ${{ parameters.buildConfig }}
+ osGroup: ${{ parameters.osGroup }}
+ archType: ${{ parameters.archType }}
+ runtimeFlavor: ${{ parameters.runtimeFlavor }}
+
- ${{ parameters.variables }}
steps:
+
+ # SuperPMI collection: Download x64 coreclr if running on non-x64 configuration (needed for mcs.exe on AzDO machine; see `SuperPmiMcsPath`.
+ - ${{ if and(eq(parameters.SuperPmiCollect, true), ne(parameters.archType, 'x64')) }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(_runtimeX64DownloadPath)
+ artifactFileName: 'CoreCLRProduct___${{ parameters.osGroup }}${{ parameters.osSubgroup }}_x64_${{ parameters.liveRuntimeBuildConfig }}$(archiveExtension)'
+ artifactName: 'CoreCLRProduct___${{ parameters.osGroup }}${{ parameters.osSubgroup }}_x64_${{ parameters.liveRuntimeBuildConfig }}'
+ displayName: 'CoreCLR product build (x64)'
+
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
displayName: Build Assets
@@ -113,6 +143,9 @@ jobs:
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
creator: dotnet-bot
testRunNamePrefixSuffix: $(_testRunNamePrefixSuffix)
+ SuperPmiCollect: ${{ parameters.SuperPmiCollect }}
+ SuperPmiCollectionType: ${{ parameters.SuperPmiCollectionType }}
+ SuperPmiCollectionName: ${{ parameters.SuperPmiCollectionName }}
# coreclrTestGroup: The following mappings of 'coreclrTestGroup' to 'scenarios' is copied from
# eng/pipelines/common/templates/runtimes/run-test-job.yml (with 'testGroup' replaced by 'coreclrTestGroup'
@@ -137,6 +170,12 @@ jobs:
${{ else }}:
extraHelixArguments: $(_extraHelixArguments)
+ ${{ if in(parameters.coreclrTestGroup, 'superpmi_collection') }}:
+ scenarios:
+ - normal
+ ${{ if in(parameters.coreclrTestGroup, 'superpmi_collection_no_tiered_compilation') }}:
+ scenarios:
+ - no_tiered_compilation
${{ if in(parameters.coreclrTestGroup, 'jitstress') }}:
scenarios:
- no_tiered_compilation
@@ -205,3 +244,19 @@ jobs:
- syntheticpgo
- syntheticpgo_blend
+ - ${{ if eq(parameters.SuperPmiCollect, true) }}:
+ - template: /eng/pipelines/libraries/superpmi-postprocess-step.yml
+ parameters:
+ buildConfig: ${{ parameters.buildConfig }}
+ buildConfigUpper: $(buildConfigUpper)
+ osGroup: ${{ parameters.osGroup }}
+ osSubgroup: ${{ parameters.osSubgroup }}
+ archType: ${{ parameters.archType }}
+ SuperPmiCollectionType: ${{ parameters.SuperPmiCollectionType }}
+ SuperPmiCollectionName: ${{ parameters.SuperPmiCollectionName }}
+ MergedMchFileLocation: $(MergedMchFileLocation)
+ MchFilesLocation: $(MchFilesLocation)
+ SpmiLogsLocation: $(SpmiLogsLocation)
+ SuperPmiMcsPath: $(SuperPmiMcsPath)
+ PythonScript: $(PythonScript)
+ PipScript: $(PipScript)
\ No newline at end of file
diff --git a/eng/pipelines/libraries/stress/ssl.yml b/eng/pipelines/libraries/stress/ssl.yml
index ab93994400d346..1052d3b04285c7 100644
--- a/eng/pipelines/libraries/stress/ssl.yml
+++ b/eng/pipelines/libraries/stress/ssl.yml
@@ -37,7 +37,7 @@ extends:
timeoutInMinutes: 120
pool:
name: $(DncEngPublicBuildPool)
- demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open
+ demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open
steps:
- checkout: self
diff --git a/eng/pipelines/libraries/superpmi-collect-variables.yml b/eng/pipelines/libraries/superpmi-collect-variables.yml
new file mode 100644
index 00000000000000..509bd609424507
--- /dev/null
+++ b/eng/pipelines/libraries/superpmi-collect-variables.yml
@@ -0,0 +1,46 @@
+parameters:
+ buildConfig: ''
+ osGroup: ''
+ archType: ''
+ runtimeFlavor: 'coreclr'
+
+variables:
+
+ - name: buildConfigUpper
+ ${{ if eq(parameters.buildConfig, 'debug') }}:
+ value: 'Debug'
+ ${{ if eq(parameters.buildConfig, 'release') }}:
+ value: 'Release'
+ - name: _runtimeX64DownloadPath
+ value: ''
+ # superpmi.py 'merge-mch' needs to be able to find the mcs tool. Point SuperPmiMcsPath at the downloaded CoreCLR binaries. For non-x64 targets, download an x64
+ # build and point at that. Pass this to superpmi.py as the '-core_root' argument. It's not actually a "Core_Root" directory, but all it needs is to find mcs.
+ - name: SuperPmiMcsPath
+ value: $(_runtimeDownloadPath)
+ - ${{ if ne(parameters.archType, 'x64') }}:
+ - name: _runtimeX64DownloadPath
+ value: '$(Build.SourcesDirectory)/artifacts/transport/${{ parameters.runtimeFlavor }}.x64'
+ - name: SuperPmiMcsPath
+ value: $(_runtimeX64DownloadPath)
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - name: PythonScript
+ value: 'py -3'
+ - name: PipScript
+ value: 'py -3 -m pip'
+ - name: MchFilesLocation
+ value: '$(Build.SourcesDirectory)\artifacts\helixresults\'
+ - name: MergedMchFileLocation
+ value: '$(Build.SourcesDirectory)\artifacts\spmi_collection\'
+ - name: SpmiLogsLocation
+ value: '$(Build.SourcesDirectory)\artifacts\spmi_logs\'
+ - ${{ if ne(parameters.osGroup, 'windows') }}:
+ - name: PythonScript
+ value: 'python3'
+ - name: PipScript
+ value: 'pip3'
+ - name: MchFilesLocation
+ value: '$(Build.SourcesDirectory)/artifacts/helixresults/'
+ - name: MergedMchFileLocation
+ value: '$(Build.SourcesDirectory)/artifacts/spmi_collection/'
+ - name: SpmiLogsLocation
+ value: '$(Build.SourcesDirectory)/artifacts/spmi_logs/'
\ No newline at end of file
diff --git a/eng/pipelines/libraries/superpmi-postprocess-step.yml b/eng/pipelines/libraries/superpmi-postprocess-step.yml
new file mode 100644
index 00000000000000..ef29b332c75170
--- /dev/null
+++ b/eng/pipelines/libraries/superpmi-postprocess-step.yml
@@ -0,0 +1,87 @@
+########################################################################################################
+#
+# Finalize SuperPMI collection: (1) merge all MCH files generated by all Helix jobs, (2) upload MCH file
+# to Azure Storage, (3) upload log files. Note that the steps are "condition: always()" because we want
+# to upload as much of the collection as possible, even if there were test failures.
+#
+########################################################################################################
+
+parameters:
+ buildConfig: ''
+ buildConfigUpper: ''
+ osGroup: ''
+ osSubgroup: ''
+ archType: ''
+ SuperPmiCollectionType: 'run'
+ SuperPmiCollectionName: 'libraries_tests'
+ MergedMchFileLocation: ''
+ MchFilesLocation: ''
+ SpmiLogsLocation: ''
+ SuperPmiMcsPath: ''
+ PythonScript: ''
+ PipScript: ''
+
+steps:
+
+ # Create required directories for merged mch collection and superpmi logs
+ - ${{ if ne(parameters.osGroup, 'windows') }}:
+ - script: |
+ mkdir -p ${{ parameters.MergedMchFileLocation }}
+ mkdir -p ${{ parameters.SpmiLogsLocation }}
+ displayName: 'Create SuperPMI directories'
+ condition: always()
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - script: |
+ mkdir ${{ parameters.MergedMchFileLocation }}
+ mkdir ${{ parameters.SpmiLogsLocation }}
+ displayName: 'Create SuperPMI directories'
+ condition: always()
+
+ - script: ${{ parameters.PythonScript }} $(Build.SourcesDirectory)/src/coreclr/scripts/superpmi.py merge-mch -log_level DEBUG -pattern ${{ parameters.MchFilesLocation }}${{ parameters.SuperPmiCollectionName }}.${{ parameters.SuperPmiCollectionType }}*.mch -output_mch_path ${{ parameters.MergedMchFileLocation }}${{ parameters.SuperPmiCollectionName }}.${{ parameters.SuperPmiCollectionType }}.${{ parameters.osGroup }}.${{ parameters.archType }}.${{ parameters.buildConfig }}.mch -core_root ${{ parameters.SuperPmiMcsPath }}
+ displayName: 'Merge ${{ parameters.SuperPmiCollectionName }}-${{ parameters.SuperPmiCollectionType }} SuperPMI collections'
+ condition: always()
+
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: ${{ parameters.MergedMchFileLocation }}
+ includeRootFolder: false
+ archiveType: $(archiveType)
+ tarCompression: $(tarCompression)
+ archiveExtension: $(archiveExtension)
+ artifactName: 'SuperPMI_Collection_${{ parameters.SuperPmiCollectionName }}_${{ parameters.SuperPmiCollectionType }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}'
+ displayName: 'Upload artifacts SuperPMI ${{ parameters.SuperPmiCollectionName }}-${{ parameters.SuperPmiCollectionType }} collection'
+ condition: always()
+
+ # Add authenticated pip feed
+ - task: PipAuthenticate@1
+ displayName: 'Pip Authenticate'
+ inputs:
+ artifactFeeds: public/dotnet-public-pypi
+ onlyAddExtraIndex: false
+ condition: always()
+
+ # Ensure the Python azure-storage-blob package is installed before doing the upload.
+ - script: ${{ parameters.PipScript }} install --user --upgrade pip && ${{ parameters.PipScript }} install --user azure.storage.blob==12.5.0 --force-reinstall
+ displayName: Upgrade Pip to latest and install azure-storage-blob Python package
+ condition: always()
+
+ - script: ${{ parameters.PythonScript }} $(Build.SourcesDirectory)/src/coreclr/scripts/superpmi.py upload -log_level DEBUG -arch ${{ parameters.archType }} -build_type ${{ parameters.buildConfig }} -mch_files ${{ parameters.MergedMchFileLocation }}${{ parameters.SuperPmiCollectionName }}.${{ parameters.SuperPmiCollectionType }}.${{ parameters.osGroup }}.${{ parameters.archType }}.${{ parameters.buildConfig }}.mch -core_root $(Build.SourcesDirectory)/artifacts/bin/coreclr/${{ parameters.osGroup }}.x64.${{ parameters.buildConfigUpper }}
+ displayName: 'Upload SuperPMI ${{ parameters.SuperPmiCollectionName }}-${{ parameters.SuperPmiCollectionType }} collection to Azure Storage'
+ condition: always()
+ env:
+ CLRJIT_AZ_KEY: $(clrjit_key1) # secret key stored as variable in pipeline
+
+ - task: CopyFiles@2
+ displayName: Copying superpmi.log of all partitions
+ inputs:
+ sourceFolder: '${{ parameters.MchFilesLocation }}'
+ contents: '**/${{ parameters.SuperPmiCollectionName }}.${{ parameters.SuperPmiCollectionType }}*.log'
+ targetFolder: '${{ parameters.SpmiLogsLocation }}'
+ condition: always()
+
+ - task: PublishPipelineArtifact@1
+ displayName: Publish SuperPMI logs
+ inputs:
+ targetPath: ${{ parameters.SpmiLogsLocation }}
+ artifactName: 'SuperPMI_Logs_${{ parameters.SuperPmiCollectionName }}_${{ parameters.SuperPmiCollectionType }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}'
+ condition: always()
\ No newline at end of file
diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml
index b1ac9c1cc6554e..86e0813c7c7e5c 100644
--- a/eng/pipelines/mono/templates/build-job.yml
+++ b/eng/pipelines/mono/templates/build-job.yml
@@ -15,7 +15,6 @@ parameters:
dependsOn: []
monoCrossAOTTargetOS: []
dependOnEvaluatePaths: false
- pgoType: ''
### Product build
jobs:
@@ -171,30 +170,15 @@ jobs:
- script: build$(scriptExt) -subset mono+clr.hosts -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) -pack $(OutputRidArg)
displayName: Build nupkg
- # Publish official build
- - ${{ if eq(parameters.publishToBlobFeed, 'true') }}:
- - ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: $(Build.SourcesDirectory)/eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) /p:DotNetPublishUsingPipelines=true /p:DotNetPublishToBlobFeed=true /p:DotNetPublishBlobFeedUrl=$(dotnetfeedUrl) /p:DotNetPublishBlobFeedKey=$(dotnetfeedPAT) /p:Configuration=$(_BuildConfig) /p:TargetArchitecture=$(archType) /p:TargetOS=$(osGroup) /p:OSIdentifier=$(osGroup)$(osSubgroup) /bl:"$(Build.SourcesDirectory)/artifacts/log/publish-pkgs.binlog" --projects $(Build.SourcesDirectory)/eng/empty.csproj
- displayName: Publish packages to blob feed
- env:
- # TODO: remove NUGET_PACKAGES once https://github.com/dotnet/arcade/issues/1578 is fixed
- NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
- ${{ if eq(parameters.osGroup, 'freebsd') }}:
- # Arcade uses this SDK instead of trying to restore one.
- DotNetCoreSdkDir: /usr/local/dotnet
- - ${{ if eq(parameters.osGroup, 'windows') }}:
- # TODO: pass publish feed url and access token in from the internal pipeline
- - powershell: eng\common\build.ps1 -ci -restore -publish -configuration $(_BuildConfig) /p:DotNetPublishUsingPipelines=true /p:DotNetPublishToBlobFeed=true /p:DotNetPublishBlobFeedUrl=$(dotnetfeedUrl) /p:DotNetPublishBlobFeedKey=$(dotnetfeedPAT) /p:Configuration=$(_BuildConfig) /p:TargetArchitecture=$(archType) /p:TargetOS=$(osGroup) /p:OSIdentifier=$(osGroup)$(osSubgroup) /bl:"$(Build.SourcesDirectory)\artifacts\log\publish-pkgs.binlog" -projects $(Build.SourcesDirectory)\eng\empty.csproj
- displayName: Publish packages to blob feed
- env:
- # TODO: remove NUGET_PACKAGES once https://github.com/dotnet/arcade/issues/1578 is fixed
- NUGET_PACKAGES: $(Build.SourcesDirectory)\.packages
-
+ - ${{ if and(eq(parameters.isOfficialBuild, true), eq(parameters.osGroup, 'windows')) }}:
+ - powershell: ./eng/collect_vsinfo.ps1 -ArchiveRunName postbuild_log
+ displayName: Collect vslogs on exit
+ condition: always()
# Publish Logs
- task: PublishPipelineArtifact@1
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'BuildLogs_Mono_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ artifactName: 'BuildLogs_Attempt$(System.JobAttempt)_Mono_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/mono/templates/generate-offsets.yml b/eng/pipelines/mono/templates/generate-offsets.yml
index ddc67f0cc0b7b8..c68adfe67a9e6b 100644
--- a/eng/pipelines/mono/templates/generate-offsets.yml
+++ b/eng/pipelines/mono/templates/generate-offsets.yml
@@ -87,6 +87,6 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'BuildLogs_Mono_Offsets_$(osGroup)$(osSubGroup)'
+ artifactName: 'BuildLogs_Attempt$(System.JobAttempt)_Mono_Offsets_$(osGroup)$(osSubGroup)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/mono/templates/workloads-build.yml b/eng/pipelines/mono/templates/workloads-build.yml
index b962dcb65d178a..4a50ed665e24ee 100644
--- a/eng/pipelines/mono/templates/workloads-build.yml
+++ b/eng/pipelines/mono/templates/workloads-build.yml
@@ -96,7 +96,7 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'WorkloadLogs'
+ artifactName: 'WorkloadLogs_Attempt$(System.JobAttempt)'
continueOnError: true
condition: always()
diff --git a/eng/pipelines/mono/templates/xplat-pipeline-job.yml b/eng/pipelines/mono/templates/xplat-pipeline-job.yml
index 2c369f71f30bb6..1ca84d9caac1bb 100644
--- a/eng/pipelines/mono/templates/xplat-pipeline-job.yml
+++ b/eng/pipelines/mono/templates/xplat-pipeline-job.yml
@@ -52,22 +52,22 @@ jobs:
variables:
- name: coreClrProductArtifactName
- value: 'CoreCLRProduct___$(osGroup)$(osSubgroup)_$(archType)_${{ parameters.liveRuntimeBuildConfig }}'
+ value: 'CoreCLRProduct__$(osGroup)$(osSubgroup)_$(archType)_${{ parameters.liveRuntimeBuildConfig }}'
- name: coreClrProductRootFolderPath
value: '$(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(liveRuntimeBuildConfigUpper)'
- name: buildProductArtifactName
- value: 'MonoProduct__${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ value: 'MonoProduct_${{ parameters.runtimeVariant }}_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
# minijit and monointerpreter do not use separate product builds.
- ${{ if or(eq(parameters.runtimeVariant, 'minijit'), eq(parameters.runtimeVariant, 'monointerpreter')) }}:
- name : buildProductArtifactName
- value : 'MonoProduct___$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ value : 'MonoProduct__$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
- ${{ if eq(parameters.runtimeVariant, 'llvmfullaot') }}:
- name : buildProductArtifactName
- value : 'MonoProduct__llvmaot_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
+ value : 'MonoProduct_llvmaot_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)'
- name: binTestsPath
value: '$(Build.SourcesDirectory)/artifacts/tests/coreclr'
diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml
index 9c341a04791289..0579ef0feda81c 100644
--- a/eng/pipelines/runtime-official.yml
+++ b/eng/pipelines/runtime-official.yml
@@ -425,12 +425,13 @@ extends:
- windows_arm64
#
- # Build PGO CoreCLR release
+ # Build PGO Instrumented CoreCLR Release
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
- jobTemplate: /eng/pipelines/coreclr/templates/build-job.yml
- buildConfig: release
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: Release
+ helixQueueGroup: ci
platforms:
- windows_x64
- windows_x86
@@ -438,29 +439,13 @@ extends:
- windows_arm64
- linux_arm64
jobParameters:
+ buildArgs: -s clr.native+clr.corelib+clr.tools+clr.nativecorelib+libs+host+packs -c $(_BuildConfig) -pgoinstrument
isOfficialBuild: ${{ variables.isOfficialBuild }}
- signBinaries: false
- testGroup: innerloop
- pgoType: 'PGO'
-
- #
- # PGO Build
- #
- - template: /eng/pipelines/common/platform-matrix.yml
- parameters:
- jobTemplate: /eng/pipelines/installer/jobs/build-job.yml
- buildConfig: Release
- jobParameters:
- isOfficialBuild: ${{ variables.isOfficialBuild }}
- liveRuntimeBuildConfig: release
- liveLibrariesBuildConfig: Release
- pgoType: 'PGO'
- platforms:
- - windows_x64
- - windows_x86
- - linux_x64
- - windows_arm64
- - linux_arm64
+ nameSuffix: PGO
+ extraStepsTemplate: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
+ extraStepsParameters:
+ name: PGO
+ timeoutInMinutes: 95
#
# Build Workloads
@@ -490,9 +475,9 @@ extends:
- Build_tvossimulator_arm64_release_AllSubsets_Mono
- Build_tvossimulator_x64_release_AllSubsets_Mono
- Build_windows_x64_release_CrossAOT_Mono
- - installer__coreclr__windows_x64_Release_
- - installer__coreclr__windows_x86_Release_
- - installer__coreclr__windows_arm64_Release_
+ - installer_coreclr__windows_x64_Release_
+ - installer_coreclr__windows_x86_Release_
+ - installer_coreclr__windows_arm64_Release_
- ${{ if eq(variables.isOfficialBuild, true) }}:
- template: /eng/pipelines/official/stages/publish.yml
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 0f1f9610c60349..0552d3d4814478 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -70,7 +70,6 @@ extends:
jobTemplate: /eng/pipelines/coreclr/templates/build-job.yml
buildConfig: checked
platforms:
- - linux_x86
- linux_x64
- linux_arm
- linux_arm64
@@ -79,7 +78,6 @@ extends:
- linux_musl_arm64
- linux_musl_x64
- osx_arm64
- - tizen_armel
- windows_x86
- windows_x64
- windows_arm64
@@ -188,6 +186,48 @@ extends:
eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr_jit.containsChange'], true),
eq(variables['isRollingBuild'], true)))
+ #
+ # Build CoreCLR with no R2R
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: checked
+ runtimeFlavor: coreclr
+ platforms:
+ - linux_x86
+ jobParameters:
+ testScope: innerloop
+ nameSuffix: CoreCLR_NoR2R
+ buildArgs: -s clr.runtime+clr.jit+clr.iltools+clr.spmi+clr.corelib -c $(_BuildConfig)
+ timeoutInMinutes: 120
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
+ eq(variables['isRollingBuild'], true))
+
+ #
+ # Build CoreCLR as a non-portable build
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: checked
+ runtimeFlavor: coreclr
+ platforms:
+ - tizen_armel
+ jobParameters:
+ testScope: innerloop
+ nameSuffix: CoreCLR_NonPortable
+ buildArgs: -s clr.native+clr.tools+clr.corelib+clr.nativecorelib+clr.aot+clr.packages -c $(_BuildConfig) /p:PortableBuild=false
+ timeoutInMinutes: 120
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
+ eq(variables['isRollingBuild'], true))
+
#
# CoreCLR NativeAOT debug build and smoke tests
# Only when CoreCLR is changed
@@ -556,6 +596,47 @@ extends:
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
alwaysRun: ${{ variables.isRollingBuild }}
+ #
+ # Android devices
+ # Build the whole product using Mono and run libraries tests
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ runtimeFlavor: mono
+ platforms:
+ - android_arm
+ - android_arm64
+ variables:
+ # map dependencies variables to local variables
+ - name: librariesContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
+ - name: monoContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono_excluding_wasm.containsChange'] ]
+ jobParameters:
+ testGroup: innerloop
+ nameSuffix: AllSubsets_Mono
+ buildArgs: -s mono+libs+libs.tests+host+packs -c $(_BuildConfig) /p:ArchiveTests=true /p:RunSmokeTestsOnly=true /p:EnableAdditionalTimezoneChecks=true
+ timeoutInMinutes: 480
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_mono_excluding_wasm.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isRollingBuild'], true))
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ condition: >-
+ or(
+ eq(variables['librariesContainsChange'], true),
+ eq(variables['monoContainsChange'], true),
+ eq(variables['isRollingBuild'], true))
+
#
# iOS/tvOS devices - Full AOT + AggressiveTrimming to reduce size
# Build the whole product using Mono and run libraries tests
diff --git a/eng/pipelines/runtimelab/runtimelab-post-build-steps.yml b/eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
index a6187638cd3461..97c007ba4b3074 100644
--- a/eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
+++ b/eng/pipelines/runtimelab/runtimelab-post-build-steps.yml
@@ -5,7 +5,6 @@ parameters:
osSubgroup: ''
nameSuffix: ''
platform: ''
- pgoType: ''
runtimeVariant: ''
librariesBinArtifactName: ''
isOfficialBuild: false
@@ -32,7 +31,7 @@ steps:
tarCompression: $(tarCompression)
includeRootFolder: false
archiveExtension: $(archiveExtension)
- artifactName: CoreCLRProduct_${{ parameters.pgoType }}_${{ parameters.runtimeVariant }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}
+ artifactName: CoreCLRProduct_${{ parameters.runtimeVariant }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}
displayName: 'CoreCLR product build'
# Zip Test Build
diff --git a/eng/restore/optimizationData.targets b/eng/restore/optimizationData.targets
index 4d6b773bf201ab..009d6c8bca1e60 100644
--- a/eng/restore/optimizationData.targets
+++ b/eng/restore/optimizationData.targets
@@ -1,4 +1,4 @@
-
+
@@ -25,6 +25,9 @@
+
+ <_MergeMibcFilesCacheFile>$(MibcOptimizationDataDir)/$(TargetOS)/$(TargetArchitecture)/merge_mibc_files.cache
+
$(NuGetPackageRoot)%(MIBCPackage.Identity)/%(MIBCPackage.Version)
@@ -32,7 +35,7 @@
<_optimizationMibcFile Include="%(MIBCPackage.PackagePath)/**/*.mibc" SubdirectoryName="$(TargetOS)/$(TargetArchitecture)" />
<_optimizationMibcDestinationFile Include="@(_optimizationMibcFile->'$(MibcOptimizationDataDir)%(SubdirectoryName)/%(RecursiveDir)%(Filename)%(Extension)')" />
+ Exclude="@(_optimizationMibcDestinationFile);$(_MergeMibcFilesCacheFile)"/>
diff --git a/eng/slngen.targets b/eng/slngen.targets
index 59e2565b3817f4..551f4fc486cd12 100644
--- a/eng/slngen.targets
+++ b/eng/slngen.targets
@@ -1,8 +1,10 @@
+
- gen
- ref
- tests
- src
+ $(SlnGenSolutionFolder)gen
+ $(SlnGenSolutionFolder)ref
+ $(SlnGenSolutionFolder)tests
+ $(SlnGenSolutionFolder)src
+
diff --git a/eng/targetingpacks.targets b/eng/targetingpacks.targets
index b3ad8560d63b1c..2c34b5817b9950 100644
--- a/eng/targetingpacks.targets
+++ b/eng/targetingpacks.targets
@@ -72,6 +72,13 @@
Condition="'@(KnownAppHostPack)' == '' or !@(KnownAppHostPack->AnyHaveMetadataValue('TargetFramework', '$(NetCoreAppCurrent)'))" />
+
+
+
+ $(NetCoreAppCurrent)
+
+
+
@@ -92,7 +99,7 @@
-
@@ -106,12 +113,13 @@
Condition="'$(UsePackageDownload)' != 'true' and $([System.String]::Copy('%(Identity)').StartsWith('$(LocalFrameworkOverrideName).Runtime'))" />
+
+ Condition="$([System.String]::Copy('%(Identity)').EndsWith('Microsoft.DotNet.ILCompiler'))" />
-
-
+
- 116.0.5845.96
+ 116.0.5845.179
1160321
https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/1160321
- 11.6.189.18
+ 11.6.189.20
- 116.0.5845.97
+ 116.0.5845.180
1160321
https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1160375
- 11.6.189.18
+ 11.6.189.20
diff --git a/eng/testing/RunnerTemplate.cmd b/eng/testing/RunnerTemplate.cmd
index 3833fd569d1996..4f4646a72315d6 100644
--- a/eng/testing/RunnerTemplate.cmd
+++ b/eng/testing/RunnerTemplate.cmd
@@ -47,6 +47,26 @@ set DOTNET_MULTILEVEL_LOOKUP=0
:: Assume failure
set HAS_TEST_RESULTS=0
+:: Support for SuperPMI collection
+REM SuperPMI collection
+if not defined spmi_enable_collection goto :skip_spmi_enable_collection
+echo SuperPMI collection enabled
+REM spmi_collect_dir and spmi_core_root need to be set before this script is run, if SuperPMI collection is enabled.
+if not defined spmi_collect_dir echo ERROR: spmi_collect_dir not defined&exit /b 1
+if not defined spmi_core_root echo ERROR: spmi_core_root not defined&exit /b 1
+if not exist %spmi_collect_dir% mkdir %spmi_collect_dir%
+set SuperPMIShimLogPath=%spmi_collect_dir%
+set SuperPMIShimPath=%spmi_core_root%\clrjit.dll
+if not exist %SuperPMIShimPath% echo ERROR: %SuperPMIShimPath% not found&exit /b 1
+set DOTNET_EnableExtraSuperPmiQueries=1
+set DOTNET_JitPath=%spmi_core_root%\superpmi-shim-collector.dll
+if not exist %DOTNET_JitPath% echo ERROR: %DOTNET_JitPath% not found&exit /b 1
+echo SuperPMIShimLogPath=%SuperPMIShimLogPath%
+echo SuperPMIShimPath=%SuperPMIShimPath%
+echo DOTNET_EnableExtraSuperPmiQueries=%DOTNET_EnableExtraSuperPmiQueries%
+echo DOTNET_JitPath=%DOTNET_JitPath%
+:skip_spmi_enable_collection
+
:: ========================= BEGIN Test Execution =============================
echo ----- start %DATE% %TIME% =============== To repro directly: =====================================================
echo pushd %EXECUTION_DIR%
diff --git a/eng/testing/RunnerTemplate.sh b/eng/testing/RunnerTemplate.sh
index 7c534f72b5e867..9252c30576ed96 100644
--- a/eng/testing/RunnerTemplate.sh
+++ b/eng/testing/RunnerTemplate.sh
@@ -157,6 +157,42 @@ elif [[ "$(uname -s)" == "Linux" ]]; then
fi
# ========================= END Core File Setup ==============================
+# ========================= BEGIN support for SuperPMI collection ==============================
+if [ ! -z $spmi_enable_collection ]; then
+ echo "SuperPMI collection enabled"
+ # spmi_collect_dir and spmi_core_root need to be set before this script is run, if SuperPMI collection is enabled.
+ if [ -z $spmi_collect_dir ]; then
+ echo "ERROR - spmi_collect_dir not defined"
+ exit 1
+ fi
+ if [ -z $spmi_core_root ]; then
+ echo "ERROR - spmi_core_root not defined"
+ exit 1
+ fi
+ mkdir -p $spmi_collect_dir
+ export spmi_file_extension=so
+ if [[ "$(uname -s)" == "Darwin" ]]; then
+ export spmi_file_extension=dylib
+ fi
+ export SuperPMIShimLogPath=$spmi_collect_dir
+ export SuperPMIShimPath=$spmi_core_root/libclrjit.$spmi_file_extension
+ export DOTNET_EnableExtraSuperPmiQueries=1
+ export DOTNET_JitPath=$spmi_core_root/libsuperpmi-shim-collector.$spmi_file_extension
+ if [ ! -e $SuperPMIShimPath ]; then
+ echo "ERROR - $SuperPMIShimPath not found"
+ exit 1
+ fi
+ if [ ! -e $DOTNET_JitPath ]; then
+ echo "ERROR - $DOTNET_JitPath not found"
+ exit 1
+ fi
+ echo "SuperPMIShimLogPath=$SuperPMIShimLogPath"
+ echo "SuperPMIShimPath=$SuperPMIShimPath"
+ echo "DOTNET_EnableExtraSuperPmiQueries=$DOTNET_EnableExtraSuperPmiQueries"
+ echo "DOTNET_JitPath=$DOTNET_JitPath"
+fi
+# ========================= END support for SuperPMI collection ==============================
+
# ========================= BEGIN Test Execution =============================
echo ----- start $(date) =============== To repro directly: =====================================================
echo pushd $EXECUTION_DIR
diff --git a/eng/testing/bump-chrome-version.proj b/eng/testing/bump-chrome-version.proj
index 3541217da3b13a..d042948d2903f8 100644
--- a/eng/testing/bump-chrome-version.proj
+++ b/eng/testing/bump-chrome-version.proj
@@ -17,7 +17,7 @@
$(RunSettingsIntermediateOutputFilePath)
+ $(GenerateRunSettingsFileDependsOn);SetupCoverageFilter
GenerateRunSettingsFile;$(PrepareForRunDependsOn)
-
+
<_testFilter Condition="'$(_withCategories)' != ''">$(_withCategories.Replace(';', '&category='))
<_testFilter Condition="'$(_withoutCategories)' != ''">$(_testFilter)$(_withoutCategories.Replace(';', '&category!='))
<_testFilter>$(_testFilter.Trim('&'))
+ DependsOnTargets="$(GenerateRunSettingsFileDependsOn)">
+ $(NetCoreAppCurrentTestHostPath)$([System.IO.Path]::GetFileName('$(DotNetTool)'))
+ $(_testFilter)
+
$([System.IO.File]::ReadAllText('$(RunSettingsInputFilePath)'))
$(RunSettingsFileContent.Replace('$$MAXCPUCOUNT$$', '1'))
$(RunSettingsFileContent.Replace('$$MAXCPUCOUNT$$', '0'))
@@ -38,21 +42,21 @@
.Replace('$$COVERAGE_ENABLED$$', '$([MSBuild]::ValueOrDefault('$(Coverage)', 'false'))')
.Replace('$$DISABLEPARALLELIZATION$$', '$([MSBuild]::ValueOrDefault('$(TestDisableParallelization)', 'false'))')
.Replace('$$DISABLEAPPDOMAIN$$', '$([MSBuild]::ValueOrDefault('$(TestDisableAppDomain)', 'false'))')
- .Replace('$$TESTCASEFILTER$$', '$(_testFilter)')
- .Replace('$$DOTNETHOSTPATH$$', '$(NetCoreAppCurrentTestHostPath)$([System.IO.Path]::GetFileName('$(DotNetTool)'))'))
+ .Replace('$$TESTCASEFILTER$$', '$(RunSettingsTestCaseFilter)')
+ .Replace('$$DOTNETHOSTPATH$$', '$(RunSettingsDotNetHostPath)'))
-
+
-
+
$(RunSettingsOutputFilePath)
diff --git a/eng/testing/tests.singlefile.targets b/eng/testing/tests.singlefile.targets
index 2a0a439dd26f08..0bb1f4ec5fd0a3 100644
--- a/eng/testing/tests.singlefile.targets
+++ b/eng/testing/tests.singlefile.targets
@@ -74,6 +74,8 @@
+
+
diff --git a/eng/testing/wasm-provisioning.targets b/eng/testing/wasm-provisioning.targets
index fd3bbc50c06bb5..d1c9bda6653fe6 100644
--- a/eng/testing/wasm-provisioning.targets
+++ b/eng/testing/wasm-provisioning.targets
@@ -5,8 +5,8 @@
-->
stable
- win
- linux
+ Windows
+ Linux
unsupported-platform
@@ -25,7 +25,7 @@
firefox
-
+
chrome-linux
chromedriver_linux64
chrome
@@ -40,7 +40,7 @@
$(linux_ChromeBaseSnapshotUrl)/chromedriver_linux64.zip
-
+
chrome-win
chromedriver_win32
chrome.exe
diff --git a/eng/testing/workloads-testing.targets b/eng/testing/workloads-testing.targets
index d5ccce0f64322b..5b8e0abce741eb 100644
--- a/eng/testing/workloads-testing.targets
+++ b/eng/testing/workloads-testing.targets
@@ -190,6 +190,7 @@
LocalNuGetsPath="$(LibrariesShippingPackagesDir)"
TemplateNuGetConfigPath="$(RepoRoot)NuGet.config"
SdkWithNoWorkloadInstalledPath="$(_SdkWithNoWorkloadPath)"
+ SkipUpdateAppRefPack="true"
/>
diff --git a/global.json b/global.json
index b4ca83d356c283..d9233ff3dc9fd9 100644
--- a/global.json
+++ b/global.json
@@ -1,18 +1,18 @@
{
"sdk": {
- "version": "8.0.100-preview.7.23376.3",
+ "version": "8.0.100-rc.1.23415.11",
"allowPrerelease": true,
"rollForward": "major"
},
"tools": {
- "dotnet": "8.0.100-preview.7.23376.3"
+ "dotnet": "8.0.100-rc.1.23415.11"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23411.1",
- "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23411.1",
- "Microsoft.DotNet.SharedFramework.Sdk": "8.0.0-beta.23411.1",
+ "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23463.1",
+ "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23463.1",
+ "Microsoft.DotNet.SharedFramework.Sdk": "8.0.0-beta.23463.1",
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0",
- "Microsoft.NET.Sdk.IL": "8.0.0-rc.1.23406.6"
+ "Microsoft.NET.Sdk.IL": "9.0.0-alpha.1.23466.6"
}
}
diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt
index 7946ca99b0df5f..ade1e03c92efd6 100644
--- a/src/coreclr/CMakeLists.txt
+++ b/src/coreclr/CMakeLists.txt
@@ -1,10 +1,5 @@
cmake_minimum_required(VERSION 3.20)
-cmake_policy(SET CMP0042 NEW) # MACOSX_RPATH is enabled by default.
-cmake_policy(SET CMP0066 NEW) # Honor per-config flags in try_compile() source-file signature.
-cmake_policy(SET CMP0067 NEW) # Honor language standard in try_compile() source-file signature
-cmake_policy(SET CMP0091 NEW) # MSVC runtime library flags are selected by an abstraction.
-
# Set the project name
project(CoreCLR)
@@ -73,8 +68,7 @@ endif()
# Enable C++ EH with SEH
#-------------------------
if (MSVC)
- string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
- add_compile_options($<$:/EHa>) # enable C++ EH (w/ SEH exceptions)
+ set_property(DIRECTORY PROPERTY CLR_EH_OPTION /EHa) # enable C++ EH (w/ SEH exceptions)
endif()
#-------------------------------
diff --git a/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml b/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml
index 276be3a543e343..97b65a2748409e 100644
--- a/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml
+++ b/src/coreclr/System.Private.CoreLib/CompatibilitySuppressions.xml
@@ -1,45 +1,32 @@
+
CP0015
M:System.Diagnostics.Tracing.EventSource.Write``1(System.String,``0):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
CP0015
M:System.Diagnostics.Tracing.EventSource.Write``1(System.String,System.Diagnostics.Tracing.EventSourceOptions@,``0@):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
CP0015
M:System.Diagnostics.Tracing.EventSource.Write``1(System.String,System.Diagnostics.Tracing.EventSourceOptions@,System.Guid@,System.Guid@,``0@):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
CP0015
M:System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Object[]):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
CP0015
M:System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
CP0015
M:System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityId(System.Int32,System.Guid,System.Object[]):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
CP0015
M:System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*):[T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute]
- ref/net8.0/System.Private.CoreLib.dll
- lib/net8.0/System.Private.CoreLib.dll
\ No newline at end of file
diff --git a/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj
index 14936ccfa6479f..888f3f8b1498e0 100644
--- a/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj
+++ b/src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj
@@ -210,6 +210,12 @@
+
+
+
+
+
+
diff --git a/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs b/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
index 6d2fff235fa7d0..db8d4ead4659b9 100644
--- a/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
+++ b/src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
@@ -201,7 +201,7 @@ private static void ClassRegistrationScenarioForType(ComActivationContext cxt, b
}
// Finally validate signature
- ParameterInfo[] methParams = method.GetParameters();
+ ReadOnlySpan methParams = method.GetParametersAsSpan();
if (method.ReturnType != typeof(void)
|| methParams == null
|| methParams.Length != 1
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Attribute.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Attribute.CoreCLR.cs
index 9365f8ba0b8695..7fbb594a1844de 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Attribute.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Attribute.CoreCLR.cs
@@ -227,8 +227,7 @@ private static bool InternalIsDefined(EventInfo element, Type attributeType, boo
}
else
{
- ParameterInfo[] parameters = rtMethod.GetParameters();
- return parameters[position]; // Point to the correct ParameterInfo of the method
+ return rtMethod.GetParametersAsSpan()[position]; // Point to the correct ParameterInfo of the method
}
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs
index 7fd8ed40d57b82..555b40216b7358 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs
@@ -200,7 +200,7 @@ protected virtual MethodInfo GetMethodImpl()
{
// it's an open one, need to fetch the first arg of the instantiation
MethodInfo invoke = this.GetType().GetMethod("Invoke")!;
- declaringType = (RuntimeType)invoke.GetParameters()[0].ParameterType;
+ declaringType = (RuntimeType)invoke.GetParametersAsSpan()[0].ParameterType;
}
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/GC.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/GC.CoreCLR.cs
index dbbb6758593b0c..e3e091bb872a2b 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/GC.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/GC.CoreCLR.cs
@@ -899,13 +899,10 @@ internal enum RefreshMemoryStatus
///
/// This API will only handle configs that could be handled when the runtime is loaded, for example, for configs that don't have any effects on 32-bit systems (like the GCHeapHardLimit* ones), this API will not handle it.
///
- /// As of now, this API is feature preview only and subject to changes as necessary.
- ///
/// If the hard limit is too low. This can happen if the heap hard limit that the refresh will set, either because of new AppData settings or implied by the container memory limit changes, is lower than what is already committed.
/// If the hard limit is invalid. This can happen, for example, with negative heap hard limit percentages.
///
///
- [RequiresPreviewFeatures("RefreshMemoryLimit is in preview.")]
public static void RefreshMemoryLimit()
{
ulong heapHardLimit = (AppContext.GetData("GCHeapHardLimit") as ulong?) ?? ulong.MaxValue;
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicILGenerator.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicILGenerator.cs
index ad564aad7e3dde..81372c76ce2ec8 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicILGenerator.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicILGenerator.cs
@@ -94,7 +94,7 @@ public override void Emit(OpCode opcode, MethodInfo meth)
}
if (opcode.StackBehaviourPop == StackBehaviour.Varpop)
{
- stackchange -= meth.GetParametersNoCopy().Length;
+ stackchange -= meth.GetParametersAsSpan().Length;
}
// Pop the "this" parameter if the method is non-static,
// and the instruction is not newobj/ldtoken/ldftn.
@@ -416,7 +416,7 @@ private int GetMemberRefToken(MethodInfo methodInfo, Type[]? optionalParameterTy
if (rtMeth == null && dm == null)
throw new ArgumentException(SR.Argument_MustBeRuntimeMethodInfo, nameof(methodInfo));
- ParameterInfo[] paramInfo = methodInfo.GetParametersNoCopy();
+ ReadOnlySpan paramInfo = methodInfo.GetParametersAsSpan();
if (paramInfo != null && paramInfo.Length != 0)
{
parameterTypes = new Type[paramInfo.Length];
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs
index 496c24bb105ae9..4fd4bd49c88a88 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs
@@ -458,7 +458,7 @@ internal SignatureHelper GetMemberRefSignature(MethodBase? method, int cGenericP
}
Debug.Assert(method is RuntimeMethodInfo || method is RuntimeConstructorInfo);
- ParameterInfo[] parameters = method.GetParametersNoCopy();
+ ReadOnlySpan parameters = method.GetParametersAsSpan();
Type[] parameterTypes = new Type[parameters.Length];
Type[][] requiredCustomModifiers = new Type[parameterTypes.Length][];
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/MethodBase.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/MethodBase.CoreCLR.cs
index e8bb0fa1814939..26383704e39277 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/MethodBase.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/MethodBase.CoreCLR.cs
@@ -47,7 +47,7 @@ public abstract partial class MethodBase : MemberInfo
// used by EE
private IntPtr GetMethodDesc() { return MethodHandle.Value; }
- internal virtual ParameterInfo[] GetParametersNoCopy() { return GetParameters(); }
+ internal virtual ReadOnlySpan GetParametersAsSpan() { return GetParameters(); }
#endregion
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.CoreCLR.cs
index 500581553a3cb1..c16d10e97b38d5 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.CoreCLR.cs
@@ -180,20 +180,11 @@ public override IList GetCustomAttributesData()
// This seems to always returns System.Void.
internal override Type GetReturnType() { return Signature.ReturnType; }
- internal override ParameterInfo[] GetParametersNoCopy() =>
+ internal override ReadOnlySpan GetParametersAsSpan() =>
m_parameters ??= RuntimeParameterInfo.GetParameters(this, this, Signature);
- public override ParameterInfo[] GetParameters()
- {
- ParameterInfo[] parameters = GetParametersNoCopy();
-
- if (parameters.Length == 0)
- return parameters;
-
- ParameterInfo[] ret = new ParameterInfo[parameters.Length];
- Array.Copy(parameters, ret, parameters.Length);
- return ret;
- }
+ public override ParameterInfo[] GetParameters() =>
+ GetParametersAsSpan().ToArray();
public override MethodImplAttributes GetMethodImplementationFlags()
{
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeCustomAttributeData.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeCustomAttributeData.cs
index ce9182cc4785bc..434f50a7370a1e 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeCustomAttributeData.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeCustomAttributeData.cs
@@ -278,7 +278,7 @@ private RuntimeCustomAttributeData(RuntimeModule scope, MetadataToken caCtorToke
m_ctor = (RuntimeConstructorInfo)scope.ResolveMethod(caCtorToken, attributeType.GenericTypeArguments, null)!.MethodHandle.GetMethodInfo();
}
- ParameterInfo[] parameters = m_ctor.GetParametersNoCopy();
+ ReadOnlySpan parameters = m_ctor.GetParametersAsSpan();
if (parameters.Length != 0)
{
m_ctorParams = new CustomAttributeCtorParameter[parameters.Length];
@@ -412,7 +412,7 @@ private void Init(object pca)
// Ensure there is only a single constructor for 'pca', so it is safe to suppress IL2075
ConstructorInfo[] allCtors = type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
Debug.Assert(allCtors.Length == 1);
- Debug.Assert(allCtors[0].GetParameters().Length == 0);
+ Debug.Assert(allCtors[0].GetParametersAsSpan().Length == 0);
#endif
m_ctor = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance)[0];
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeEventInfo.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeEventInfo.cs
index 2f69ff6b0c009f..34b5f378cbdbb1 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeEventInfo.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeEventInfo.cs
@@ -63,10 +63,14 @@ o is RuntimeEventInfo m &&
#region Object Overrides
public override string ToString()
{
- if (m_addMethod == null || m_addMethod.GetParametersNoCopy().Length == 0)
+ ReadOnlySpan parameters;
+ if (m_addMethod == null ||
+ (parameters = m_addMethod.GetParametersAsSpan()).Length == 0)
+ {
throw new InvalidOperationException(SR.InvalidOperation_NoPublicAddMethod);
+ }
- return m_addMethod.GetParametersNoCopy()[0].ParameterType.FormatTypeName() + " " + Name;
+ return parameters[0].ParameterType.FormatTypeName() + " " + Name;
}
public override bool Equals(object? obj) =>
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs
index 1fd8da7fe5f66d..de60e189ac918d 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs
@@ -240,7 +240,7 @@ public override Type? ReflectedType
#endregion
#region MethodBase Overrides
- internal override ParameterInfo[] GetParametersNoCopy() =>
+ internal override ReadOnlySpan GetParametersAsSpan() =>
FetchNonReturnParameters();
public override ParameterInfo[] GetParameters()
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimePropertyInfo.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimePropertyInfo.cs
index eb83e8f410d6c8..933e05d0bf7854 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimePropertyInfo.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimePropertyInfo.cs
@@ -261,23 +261,10 @@ public override MethodInfo[] GetAccessors(bool nonPublic)
return m_setterMethod;
}
- public override ParameterInfo[] GetIndexParameters()
- {
- ParameterInfo[] indexParams = GetIndexParametersNoCopy();
-
- int numParams = indexParams.Length;
-
- if (numParams == 0)
- return indexParams;
-
- ParameterInfo[] ret = new ParameterInfo[numParams];
-
- Array.Copy(indexParams, ret, numParams);
-
- return ret;
- }
+ public override ParameterInfo[] GetIndexParameters() =>
+ GetIndexParametersSpan().ToArray();
- internal ParameterInfo[] GetIndexParametersNoCopy()
+ internal ReadOnlySpan GetIndexParametersSpan()
{
// @History - Logic ported from RTM
@@ -285,14 +272,14 @@ internal ParameterInfo[] GetIndexParametersNoCopy()
if (m_parameters == null)
{
int numParams = 0;
- ParameterInfo[]? methParams = null;
+ ReadOnlySpan methParams = default;
// First try to get the Get method.
RuntimeMethodInfo? m = GetGetMethod(true);
if (m != null)
{
// There is a Get method so use it.
- methParams = m.GetParametersNoCopy();
+ methParams = m.GetParametersAsSpan();
numParams = methParams.Length;
}
else
@@ -302,7 +289,7 @@ internal ParameterInfo[] GetIndexParametersNoCopy()
if (m != null)
{
- methParams = m.GetParametersNoCopy();
+ methParams = m.GetParametersAsSpan();
numParams = methParams.Length - 1;
}
}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/ExceptionServices/AsmOffsets.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/ExceptionServices/AsmOffsets.cs
new file mode 100644
index 00000000000000..6965742ece2835
--- /dev/null
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/ExceptionServices/AsmOffsets.cs
@@ -0,0 +1,216 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+// NOTE: This file is included also during native runtime compilation by the C++ compiler for verification purposes.
+// The static asserts at the end are compiled only when this file is included in native build by c++ compiler. They
+// provide compile time verification that all the sizes and offsets match between the managed and native code.
+
+#if !__cplusplus
+internal static
+#endif
+class AsmOffsets
+{
+
+ // Offsets / sizes that are different in Release / Debug builds
+#if DEBUG
+ // Debug build offsets
+#if TARGET_AMD64
+#if TARGET_UNIX
+ public const int SIZEOF__REGDISPLAY = 0x1a90;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x1a78;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x1a80;
+#else // TARGET_UNIX
+ public const int SIZEOF__REGDISPLAY = 0xbf0;
+ public const int OFFSETOF__REGDISPLAY__SP = 0xbd8;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0xbe0;
+#endif // TARGET_UNIX
+#elif TARGET_ARM64
+ public const int SIZEOF__REGDISPLAY = 0x940;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x898;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x8a0;
+#elif TARGET_ARM
+ public const int SIZEOF__REGDISPLAY = 0x410;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x3ec;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x3f0;
+#elif TARGET_X86
+ public const int SIZEOF__REGDISPLAY = 0x5fc;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x5f0;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x5f4;
+#elif TARGET_RISCV64
+ public const int SIZEOF__REGDISPLAY = 0x6C0;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x628;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x630;
+#elif TARGET_LOONGARCH64
+ public const int SIZEOF__REGDISPLAY = 0xc70;
+ public const int OFFSETOF__REGDISPLAY__SP = 0xbb8;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0xbc0;
+#endif
+
+#if TARGET_64BIT
+ public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x8;
+ public const int SIZEOF__StackFrameIterator = 0x370;
+ public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x352;
+ public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x368;
+#else // TARGET_64BIT
+ public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x4;
+ public const int SIZEOF__StackFrameIterator = 0x2d8;
+ public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x2c2;
+ public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x2d0;
+#endif // TARGET_64BIT
+
+#else // DEBUG
+ // Release build offsets
+#if TARGET_AMD64
+#if TARGET_UNIX
+ public const int SIZEOF__REGDISPLAY = 0x1a80;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x1a70;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x1a78;
+#else // TARGET_UNIX
+ public const int SIZEOF__REGDISPLAY = 0xbe0;
+ public const int OFFSETOF__REGDISPLAY__SP = 0xbd0;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0xbd8;
+#endif // TARGET_UNIX
+#elif TARGET_ARM64
+ public const int SIZEOF__REGDISPLAY = 0x930;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x890;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x898;
+#elif TARGET_ARM
+ public const int SIZEOF__REGDISPLAY = 0x408;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x3e8;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x3ec;
+#elif TARGET_X86
+ public const int SIZEOF__REGDISPLAY = 0x5f8;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x5ec;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x5f0;
+#elif TARGET_RISCV64
+ public const int SIZEOF__REGDISPLAY = 0x6B0;
+ public const int OFFSETOF__REGDISPLAY__SP = 0x620;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0x628;
+#elif TARGET_LOONGARCH64
+ public const int SIZEOF__REGDISPLAY = 0xc60;
+ public const int OFFSETOF__REGDISPLAY__SP = 0xbb0;
+ public const int OFFSETOF__REGDISPLAY__ControlPC = 0xbb8;
+#endif
+
+#if TARGET_64BIT
+ public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x8;
+ public const int SIZEOF__StackFrameIterator = 0x370;
+ public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x34a;
+ public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x360;
+#else // TARGET_64BIT
+ public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x4;
+ public const int SIZEOF__StackFrameIterator = 0x2d0;
+ public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x2ba;
+ public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x2c8;
+#endif // TARGET_64BIT
+
+#endif // DEBUG
+
+#if TARGET_AMD64
+#if TARGET_UNIX
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0xc20;
+#else // TARGET_UNIX
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x4d0;
+#endif // TARGET_UNIx
+#elif TARGET_ARM64
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x390;
+#elif TARGET_ARM
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x1a0;
+#elif TARGET_X86
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x2cc;
+#elif TARGET_RISCV64
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x220;
+#elif TARGET_LOONGARCH64
+ public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x520;
+#endif
+
+#if TARGET_AMD64
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0xf8;
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xa0;
+#elif TARGET_ARM64
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x108;
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xf0;
+#elif TARGET_ARM
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x40;
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0x30;
+#elif TARGET_X86
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0xb8;
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xb4;
+#elif TARGET_RISCV64
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x108;
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0x48;
+#elif TARGET_LOONGARCH64
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x108;
+ public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xb8;
+#endif
+
+ // Offsets / sizes that are different in 64 / 32 bit mode
+
+#if TARGET_64BIT
+ public const int SIZEOF__EHEnum = 0x20;
+ public const int OFFSETOF__StackFrameIterator__m_pRegDisplay = 0x228;
+ public const int OFFSETOF__ExInfo__m_pPrevExInfo = 0;
+ public const int OFFSETOF__ExInfo__m_pExContext = 8;
+ public const int OFFSETOF__ExInfo__m_exception = 0x10;
+ public const int OFFSETOF__ExInfo__m_kind = 0x18;
+ public const int OFFSETOF__ExInfo__m_passNumber = 0x19;
+ public const int OFFSETOF__ExInfo__m_idxCurClause = 0x1c;
+ public const int OFFSETOF__ExInfo__m_frameIter = 0x20;
+ public const int OFFSETOF__ExInfo__m_notifyDebuggerSP = OFFSETOF__ExInfo__m_frameIter + SIZEOF__StackFrameIterator;
+#else // TARGET_64BIT
+ public const int SIZEOF__EHEnum = 0x10;
+ public const int OFFSETOF__StackFrameIterator__m_pRegDisplay = 0x218;
+ public const int OFFSETOF__ExInfo__m_pPrevExInfo = 0;
+ public const int OFFSETOF__ExInfo__m_pExContext = 4;
+ public const int OFFSETOF__ExInfo__m_exception = 8;
+ public const int OFFSETOF__ExInfo__m_kind = 0xC;
+ public const int OFFSETOF__ExInfo__m_passNumber = 0xD;
+ public const int OFFSETOF__ExInfo__m_idxCurClause = 0x10;
+ public const int OFFSETOF__ExInfo__m_frameIter = 0x18;
+ public const int OFFSETOF__ExInfo__m_notifyDebuggerSP = OFFSETOF__ExInfo__m_frameIter + SIZEOF__StackFrameIterator;
+#endif // TARGET_64BIT
+
+#if __cplusplus
+ static_assert_no_msg(sizeof(CONTEXT) == AsmOffsets::SIZEOF__PAL_LIMITED_CONTEXT);
+#if TARGET_AMD64
+ static_assert_no_msg(offsetof(CONTEXT, Rip) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP);
+ static_assert_no_msg(offsetof(CONTEXT, Rbp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP);
+#elif TARGET_ARM64
+ static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP);
+ static_assert_no_msg(offsetof(CONTEXT, Fp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP);
+#elif TARGET_ARM
+ static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP);
+ static_assert_no_msg(offsetof(CONTEXT, R11) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP);
+#elif TARGET_X86
+ static_assert_no_msg(offsetof(CONTEXT, Eip) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP);
+ static_assert_no_msg(offsetof(CONTEXT, Ebp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP);
+#elif TARGET_RISCV64
+ static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP);
+ static_assert_no_msg(offsetof(CONTEXT, Fp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP);
+#elif TARGET_LOONGARCH64
+ static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP);
+ static_assert_no_msg(offsetof(CONTEXT, Fp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP);
+#endif
+ static_assert_no_msg(sizeof(REGDISPLAY) == AsmOffsets::SIZEOF__REGDISPLAY);
+ static_assert_no_msg(offsetof(REGDISPLAY, SP) == AsmOffsets::OFFSETOF__REGDISPLAY__SP);
+ static_assert_no_msg(offsetof(REGDISPLAY, ControlPC) == AsmOffsets::OFFSETOF__REGDISPLAY__ControlPC);
+ static_assert_no_msg(offsetof(REGDISPLAY, pCurrentContext) == AsmOffsets::OFFSETOF__REGDISPLAY__m_pCurrentContext);
+ static_assert_no_msg(sizeof(StackFrameIterator) == AsmOffsets::SIZEOF__StackFrameIterator);
+ static_assert_no_msg(offsetof(StackFrameIterator, m_crawl) + offsetof(CrawlFrame, pRD) == OFFSETOF__StackFrameIterator__m_pRegDisplay);
+ static_assert_no_msg(offsetof(StackFrameIterator, m_isRuntimeWrappedExceptions) == OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions);
+ static_assert_no_msg(offsetof(StackFrameIterator, m_AdjustedControlPC) == OFFSETOF__StackFrameIterator__m_AdjustedControlPC);
+ static_assert_no_msg(sizeof(ExtendedEHClauseEnumerator) == AsmOffsets::SIZEOF__EHEnum);
+ static_assert_no_msg(offsetof(ExInfo, m_pPrevExInfo) == OFFSETOF__ExInfo__m_pPrevExInfo);
+ static_assert_no_msg(offsetof(ExInfo, m_pExContext) == OFFSETOF__ExInfo__m_pExContext);
+ static_assert_no_msg(offsetof(ExInfo, m_exception) == OFFSETOF__ExInfo__m_exception);
+ static_assert_no_msg(offsetof(ExInfo, m_kind) == OFFSETOF__ExInfo__m_kind);
+ static_assert_no_msg(offsetof(ExInfo, m_passNumber) == OFFSETOF__ExInfo__m_passNumber);
+ static_assert_no_msg(offsetof(ExInfo, m_idxCurClause) == OFFSETOF__ExInfo__m_idxCurClause);
+ static_assert_no_msg(offsetof(ExInfo, m_frameIter) == OFFSETOF__ExInfo__m_frameIter);
+ static_assert_no_msg(offsetof(ExInfo, m_notifyDebuggerSP) == OFFSETOF__ExInfo__m_notifyDebuggerSP);
+#endif
+
+}
+#if __cplusplus
+;
+#endif
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/ExceptionServices/InternalCalls.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/ExceptionServices/InternalCalls.cs
new file mode 100644
index 00000000000000..563c5b3704119a
--- /dev/null
+++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/ExceptionServices/InternalCalls.cs
@@ -0,0 +1,48 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+//
+// This is where we group together all the internal calls.
+//
+
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+
+namespace System.Runtime.ExceptionServices
+{
+ internal static partial class InternalCalls
+ {
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "SfiInit")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static unsafe partial bool RhpSfiInit(ref StackFrameIterator pThis, void* pStackwalkCtx, [MarshalAs(UnmanagedType.Bool)] bool instructionFault);
+
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "SfiNext")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static unsafe partial bool RhpSfiNext(ref StackFrameIterator pThis, uint* uExCollideClauseIdx, bool* fUnwoundReversePInvoke);
+
+#pragma warning disable CS8500
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "CallCatchFunclet")]
+ internal static unsafe partial IntPtr RhpCallCatchFunclet(
+ ObjectHandleOnStack exceptionObj, byte* pHandlerIP, void* pvRegDisplay, EH.ExInfo* exInfo);
+
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "CallFinallyFunclet")]
+ internal static unsafe partial void RhpCallFinallyFunclet(byte* pHandlerIP, void* pvRegDisplay, EH.ExInfo* exInfo);
+
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "CallFilterFunclet")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static unsafe partial bool RhpCallFilterFunclet(
+ ObjectHandleOnStack exceptionObj, byte* pFilterIP, void* pvRegDisplay);
+
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "AppendExceptionStackFrame")]
+ internal static unsafe partial void RhpAppendExceptionStackFrame(ObjectHandleOnStack exceptionObj, IntPtr ip, UIntPtr sp, int flags, EH.ExInfo* exInfo);
+#pragma warning restore CS8500
+
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "EHEnumInitFromStackFrameIterator")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static unsafe partial bool RhpEHEnumInitFromStackFrameIterator(ref StackFrameIterator pFrameIter, byte** pMethodStartAddress, void* pEHEnum);
+
+ [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "EHEnumNext")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static unsafe partial bool RhpEHEnumNext(void* pEHEnum, void* pEHClause);
+ }
+}
diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs
index 959489be1c7bb7..e7e8b2508a8518 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs
@@ -2290,7 +2290,7 @@ private static bool FilterApplyMethodBase(
// Check if argumentTypes supplied
if (argumentTypes != null)
{
- ParameterInfo[] parameterInfos = methodBase.GetParametersNoCopy();
+ ReadOnlySpan parameterInfos = methodBase.GetParametersAsSpan();
if (argumentTypes.Length != parameterInfos.Length)
{
@@ -2848,8 +2848,7 @@ public override InterfaceMapping GetInterfaceMap([DynamicallyAccessedMembers(Dyn
{
ConstructorInfo firstCandidate = candidates[0];
- ParameterInfo[] parameters = firstCandidate.GetParametersNoCopy();
- if (parameters == null || parameters.Length == 0)
+ if (firstCandidate.GetParametersAsSpan().IsEmpty)
{
return firstCandidate;
}
@@ -3817,7 +3816,7 @@ private void CreateInstanceCheckThis()
throw new MissingMethodException(SR.Format(SR.MissingConstructor_Name, FullName));
}
- if (invokeMethod.GetParametersNoCopy().Length == 0)
+ if (invokeMethod.GetParametersAsSpan().Length == 0)
{
if (args.Length != 0)
{
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs
index c643a566d10bd6..889bb0d492c746 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs
@@ -60,11 +60,10 @@ public sealed partial class Thread
private Thread() { }
- public extern int ManagedThreadId
+ public int ManagedThreadId
{
[Intrinsic]
- [MethodImpl(MethodImplOptions.InternalCall)]
- get;
+ get => _managedThreadId;
}
/// Returns handle for interop with EE. The handle is guaranteed to be non-null.
diff --git a/src/coreclr/binder/bindertracing.cpp b/src/coreclr/binder/bindertracing.cpp
index 90e010e23e76f2..82b31932bd030c 100644
--- a/src/coreclr/binder/bindertracing.cpp
+++ b/src/coreclr/binder/bindertracing.cpp
@@ -119,8 +119,8 @@ namespace BinderTracing
{
static thread_local bool t_AssemblyLoadStartInProgress = false;
- AssemblyBindOperation::AssemblyBindOperation(AssemblySpec *assemblySpec, const SString& assemblyPath)
- : m_bindRequest { assemblySpec, SString::Empty(), assemblyPath }
+ AssemblyBindOperation::AssemblyBindOperation(AssemblySpec *assemblySpec, const WCHAR* assemblyPath)
+ : m_bindRequest { assemblySpec, SString{ SString::Empty() }, SString{ assemblyPath } }
, m_populatedBindRequest { false }
, m_checkedIgnoreBind { false }
, m_ignoreBind { false }
@@ -217,7 +217,13 @@ namespace BinderTracing
// Use the error message that would be reported in the file load exception
StackSString errorMsg;
if (mvidMismatch)
- errorMsg.LoadResource(CCompRC::Error, IDS_HOST_ASSEMBLY_RESOLVER_ASSEMBLY_ALREADY_LOADED_IN_CONTEXT);
+ {
+ StackSString format;
+ format.LoadResource(CCompRC::Error, IDS_EE_FILELOAD_ERROR_GENERIC);
+ StackSString details;
+ details.LoadResource(CCompRC::Error, IDS_HOST_ASSEMBLY_RESOLVER_ASSEMBLY_ALREADY_LOADED_IN_CONTEXT);
+ errorMsg.FormatMessage(FORMAT_MESSAGE_FROM_STRING, format.GetUnicode(), 0, 0, m_assemblyName, details);
+ }
const BindResult::AttemptResult *inContextAttempt = bindResult.GetAttempt(true /*foundInContext*/);
const BindResult::AttemptResult *appAssembliesAttempt = bindResult.GetAttempt(false /*foundInContext*/);
diff --git a/src/coreclr/binder/customassemblybinder.cpp b/src/coreclr/binder/customassemblybinder.cpp
index 02a8d2e918dc79..ac1cf61bcf6a2e 100644
--- a/src/coreclr/binder/customassemblybinder.cpp
+++ b/src/coreclr/binder/customassemblybinder.cpp
@@ -119,7 +119,7 @@ HRESULT CustomAssemblyBinder::BindUsingPEImage( /* in */ PEImage *pPEImage,
// Validate architecture
if (!AssemblyBinderCommon::IsValidArchitecture(pAssemblyName->GetArchitecture()))
{
- IF_FAIL_GO(HRESULT_FROM_WIN32(ERROR_BAD_FORMAT));
+ IF_FAIL_GO(CLR_E_BIND_ARCHITECTURE_MISMATCH);
}
// Disallow attempt to bind to the core library. Aside from that,
diff --git a/src/coreclr/binder/defaultassemblybinder.cpp b/src/coreclr/binder/defaultassemblybinder.cpp
index 2461ca4b1397d6..d4ad4f3265ce8b 100644
--- a/src/coreclr/binder/defaultassemblybinder.cpp
+++ b/src/coreclr/binder/defaultassemblybinder.cpp
@@ -128,7 +128,7 @@ HRESULT DefaultAssemblyBinder::BindUsingPEImage( /* in */ PEImage *pPEImage,
// Validate architecture
if (!AssemblyBinderCommon::IsValidArchitecture(pAssemblyName->GetArchitecture()))
{
- IF_FAIL_GO(HRESULT_FROM_WIN32(ERROR_BAD_FORMAT));
+ IF_FAIL_GO(CLR_E_BIND_ARCHITECTURE_MISMATCH);
}
// Easy out for CoreLib
diff --git a/src/coreclr/binder/inc/bindertracing.h b/src/coreclr/binder/inc/bindertracing.h
index 0d5e0b670b1158..d4442086ffcfc7 100644
--- a/src/coreclr/binder/inc/bindertracing.h
+++ b/src/coreclr/binder/inc/bindertracing.h
@@ -27,7 +27,7 @@ namespace BinderTracing
{
public:
// This class assumes the assembly spec will have a longer lifetime than itself
- AssemblyBindOperation(AssemblySpec *assemblySpec, const SString& assemblyPath = SString::Empty());
+ AssemblyBindOperation(AssemblySpec *assemblySpec, const WCHAR* assemblyPath = NULL);
~AssemblyBindOperation();
void SetResult(PEAssembly *assembly, bool cached = false);
diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd
index ec6887c78d84cb..52910be7f1da29 100644
--- a/src/coreclr/build-runtime.cmd
+++ b/src/coreclr/build-runtime.cmd
@@ -142,7 +142,7 @@ if /i "%1" == "-ninja" (shift&goto Arg_Loop)
if /i "%1" == "-msbuild" (set __Ninja=0&shift&goto Arg_Loop)
if /i "%1" == "-pgoinstrument" (set __PgoInstrument=1&shift&goto Arg_Loop)
if /i "%1" == "-enforcepgo" (set __EnforcePgo=1&shift&goto Arg_Loop)
-if /i "%1" == "-pgodatapath" (set __PgoOptDataPath=%2&set __PgoOptimize=1&shift&shift&goto Arg_Loop)
+if /i "%1" == "-pgodatapath" (set __PgoOptDataPath=%~2&set __PgoOptimize=1&shift&shift&goto Arg_Loop)
if /i "%1" == "-component" (set __RequestedBuildComponents=%__RequestedBuildComponents%-%2&set "__remainingArgs=!__remainingArgs:*%2=!"&shift&shift&goto Arg_Loop)
if /i "%1" == "-fsanitize" (set __CMakeArgs=%__CMakeArgs% "-DCLR_CMAKE_ENABLE_SANITIZERS=%2"&shift&shift&goto Arg_Loop)
@@ -428,6 +428,10 @@ if %__BuildNative% EQU 1 (
goto ExitWithCode
)
+ @REM Temporarily disabling PGO until updated files with new linker flag are available.
+ @REM https://github.com/dotnet/runtime/pull/89311
+ GOTO :SkipNativeBuild
+
if %__EnforcePgo% EQU 1 (
set PgoCheckCmd="!PYTHON!" "!__ProjectDir!\scripts\pgocheck.py" "!__BinDir!\coreclr.dll" "!__BinDir!\clrjit.dll"
echo !PgoCheckCmd!
diff --git a/src/coreclr/classlibnative/bcltype/arraynative.cpp b/src/coreclr/classlibnative/bcltype/arraynative.cpp
index 80298fd13650c1..6faf613c3cf063 100644
--- a/src/coreclr/classlibnative/bcltype/arraynative.cpp
+++ b/src/coreclr/classlibnative/bcltype/arraynative.cpp
@@ -809,7 +809,7 @@ FCIMPL4(Object*, ArrayNative::CreateInstance, ReflectClassBaseObject* pElementTy
// Find the Array class...
TypeHandle typeHnd = ClassLoader::LoadArrayTypeThrowing(elementType, kind, rank);
- _ASSERTE(rank < MAX_RANK); // Ensures that the stack buffer size allocations below won't overlow
+ _ASSERTE(rank <= MAX_RANK); // Ensures that the stack buffer size allocations below won't overflow
DWORD boundsSize = 0;
INT32* bounds;
diff --git a/src/coreclr/clr.featuredefines.props b/src/coreclr/clr.featuredefines.props
index 1bc919b6dc9c8a..0ccfc347d0a0eb 100644
--- a/src/coreclr/clr.featuredefines.props
+++ b/src/coreclr/clr.featuredefines.props
@@ -40,6 +40,10 @@
true
+
+ true
+
+
$(DefineConstants);FEATURE_ARRAYSTUB_AS_IL
$(DefineConstants);FEATURE_MULTICASTSTUB_AS_IL
@@ -59,6 +63,7 @@
$(DefineConstants);FEATURE_BASICFREEZE
$(DefineConstants);FEATURE_PORTABLE_SHUFFLE_THUNKS
$(DefineConstants);FEATURE_ICASTABLE
+ $(DefineConstants);FEATURE_EH_FUNCLETS
$(DefineConstants);PROFILING_SUPPORTED
$(DefineConstants);FEATURE_PROFAPI_ATTACH_DETACH
diff --git a/src/coreclr/clrdefinitions.cmake b/src/coreclr/clrdefinitions.cmake
index 00e6673561eb2e..68212501b6e5b2 100644
--- a/src/coreclr/clrdefinitions.cmake
+++ b/src/coreclr/clrdefinitions.cmake
@@ -54,10 +54,10 @@ if(CLR_CMAKE_HOST_WIN32)
endif(CLR_CMAKE_HOST_WIN32)
if (NOT (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_UNIX))
- add_compile_definitions(EnC_SUPPORTED)
+ add_compile_definitions(FEATURE_METADATA_UPDATER)
endif()
if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_WIN32))
- add_compile_definitions(FEATURE_ENC_SUPPORTED)
+ add_compile_definitions(FEATURE_REMAP_FUNCTION)
endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR (CLR_CMAKE_TARGET_ARCH_I386 AND CLR_CMAKE_TARGET_WIN32))
if(CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_TARGET_ARCH_AMD64)
diff --git a/src/coreclr/debug/createdump/crashinfo.cpp b/src/coreclr/debug/createdump/crashinfo.cpp
index ef903767ba0279..8af6ec4a54f5bd 100644
--- a/src/coreclr/debug/createdump/crashinfo.cpp
+++ b/src/coreclr/debug/createdump/crashinfo.cpp
@@ -195,7 +195,7 @@ CrashInfo::GatherCrashInfo(DumpType dumpType)
return false;
}
// Add the special (fake) memory region for the special diagnostics info
- MemoryRegion special(PF_R, SpecialDiagInfoAddress, SpecialDiagInfoAddress + PAGE_SIZE);
+ MemoryRegion special(PF_R, SpecialDiagInfoAddress, SpecialDiagInfoAddress + SpecialDiagInfoSize);
m_memoryRegions.insert(special);
#ifdef __APPLE__
InitializeOtherMappings();
diff --git a/src/coreclr/debug/createdump/createdump.h b/src/coreclr/debug/createdump/createdump.h
index 50cf53dccfc7aa..4095a5693794af 100644
--- a/src/coreclr/debug/createdump/createdump.h
+++ b/src/coreclr/debug/createdump/createdump.h
@@ -33,8 +33,6 @@ extern void trace_verbose_printf(const char* format, ...);
#endif
#include
-#include
-#include
#include
#include
#include
@@ -84,6 +82,7 @@ typedef int T_CONTEXT;
#define __STDC_FORMAT_MACROS
#include
#else
+#include
#include
#endif
#include