Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1e64a22
[net11.0] Make CoreCLR the default runtime.
rolfbjarne Mar 31, 2026
164df35
[tests] Update the BuildStructure test to test both CoreCLR + MonoVM.
rolfbjarne Apr 1, 2026
79dc833
[tests] Fix BundleStructureTest CoreCLR variations.
rolfbjarne Apr 1, 2026
9859bc9
[runtime] Build extension libs for CoreCLR for all platforms.
rolfbjarne Apr 2, 2026
1d9c1fe
[tests] Update the CustomizedCodeSigning to test both CoreCLR + MonoVM.
rolfbjarne Apr 2, 2026
c3e304f
[tests] Fix CustomizedCodeSigning CoreCLR variations.
rolfbjarne Apr 2, 2026
31a68c0
[tests] Dedup tests are only applicable to MonoVM.
rolfbjarne Apr 2, 2026
ef006ef
[msbuild] Don't run R2R framework/dylib creation when IsMacEnabled=false
rolfbjarne Apr 2, 2026
99a5310
[tests] Split IsNotMacBuild into _Mono and _CoreCLR variants
rolfbjarne Apr 2, 2026
fb01092
[tests] Split LinkedWithNativeLibraries into _Mono and _CoreCLR variants
rolfbjarne Apr 2, 2026
de04880
[tests] Reduce duplication in expectedFrameworks arrays
rolfbjarne Apr 2, 2026
231e941
[tests] Format compact array declarations with one element per line
rolfbjarne Apr 2, 2026
a2ad2b1
[msbuild] Fix empty R2R framework name in multi-RID builds; add Mono/…
rolfbjarne Apr 3, 2026
5190dfe
Split CodeChangeSkipsTargets into Mono/CoreCLR variants
rolfbjarne Apr 3, 2026
59d0ab4
Split BuildIpaTest into Mono/CoreCLR variants
rolfbjarne Apr 3, 2026
c5b64cf
[tests] IncrementalBuildTest.Interpreter is mono-only.
rolfbjarne Apr 6, 2026
0e8a883
Split IncrementalBuildTest.Link by runtime
rolfbjarne Apr 6, 2026
c3ec0b9
Fix multi-RID CoreCLR publish and split PublishTest by runtime
rolfbjarne Apr 6, 2026
b8b4597
Fix condition.
rolfbjarne Apr 6, 2026
849588d
Split BundleStructureWithRemoteMac by runtime
rolfbjarne Apr 7, 2026
8e8a3e6
Handle Windows zip separators in CoreCLR bundle filtering
rolfbjarne Apr 7, 2026
bb769ea
Accommodate CoreCLR CI differences
rolfbjarne Apr 8, 2026
bf40a81
Fix CoreCLR resource bundle layout
rolfbjarne Apr 9, 2026
3153a48
Better fix
rolfbjarne Apr 9, 2026
bd3892b
Add one missed case.
rolfbjarne Apr 9, 2026
01c0a2d
Merge branch 'net11.0' into dev/rolf/coreclr-default
rolfbjarne Apr 13, 2026
7aef15b
Merge branch 'net11.0' into dev/rolf/coreclr-default
rolfbjarne Apr 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 26 additions & 23 deletions dotnet/targets/Microsoft.Sdk.R2R.targets
Original file line number Diff line number Diff line change
Expand Up @@ -154,27 +154,34 @@
</_CreateR2RFrameworkDependsOn>
</PropertyGroup>

<!-- Prepare properties and item groups for r2r framework creation -->
<Target Name="_PrepareR2RFrameworkCreation"
DependsOnTargets="CreateReadyToRunImages"
>
<PropertyGroup>
<_DesktopFramework Condition="'$(_PlatformName)' == 'macOS' Or '$(_PlatformName)' == 'MacCatalyst'">true</_DesktopFramework>
<_DesktopFramework Condition="'$(_PlatformName)' != 'macOS' And '$(_PlatformName)' != 'MacCatalyst'">false</_DesktopFramework>
<!-- Properties for R2R framework creation.
Declared outside any target so they are available at evaluation time,
including in multi-RID outer builds where _PrepareR2RFrameworkCreation
may not have run yet (e.g. _CollectR2RFrameworksForPostProcessing). -->
<PropertyGroup>
<_DesktopFramework Condition="'$(_PlatformName)' == 'macOS' Or '$(_PlatformName)' == 'MacCatalyst'">true</_DesktopFramework>
<_DesktopFramework Condition="'$(_PlatformName)' != 'macOS' And '$(_PlatformName)' != 'MacCatalyst'">false</_DesktopFramework>

<_R2RFrameworkBinaryInfix Condition="'$(_DesktopFramework)' == 'true'">/Versions/A</_R2RFrameworkBinaryInfix>
<_R2RFrameworkResourcesInfix Condition="'$(_DesktopFramework)' == 'true'">/Versions/A/Resources</_R2RFrameworkResourcesInfix>
<_R2RFrameworkBinaryInfix Condition="'$(_DesktopFramework)' == 'true'">/Versions/A</_R2RFrameworkBinaryInfix>
<_R2RFrameworkResourcesInfix Condition="'$(_DesktopFramework)' == 'true'">/Versions/A/Resources</_R2RFrameworkResourcesInfix>

<_R2RFrameworkIntermediateOutputPath Condition="'$(_R2RFrameworkIntermediateOutputPath)' == ''">$(DeviceSpecificIntermediateOutputPath)r2rframework/</_R2RFrameworkIntermediateOutputPath>
<_R2RFrameworkName Condition="'$(_R2RFrameworkName)' == ''">$(AssemblyName)</_R2RFrameworkName>
<_R2RFrameworkPath Condition="'$(_R2RFrameworkPath)' == ''">$(_R2RFrameworkIntermediateOutputPath)$(_R2RFrameworkName).framework</_R2RFrameworkPath>
<_R2RFrameworkOutput Condition="'$(_R2RFrameworkOutput)' == ''">$(_R2RFrameworkPath)$(_R2RFrameworkBinaryInfix)/$(_R2RFrameworkName)</_R2RFrameworkOutput>
<_R2RFrameworkIntermediateOutputPath Condition="'$(_R2RFrameworkIntermediateOutputPath)' == ''">$(DeviceSpecificIntermediateOutputPath)r2rframework/</_R2RFrameworkIntermediateOutputPath>
<_R2RFrameworkName Condition="'$(_R2RFrameworkName)' == ''">$(AssemblyName)</_R2RFrameworkName>
<_R2RFrameworkPath Condition="'$(_R2RFrameworkPath)' == ''">$(_R2RFrameworkIntermediateOutputPath)$(_R2RFrameworkName).framework</_R2RFrameworkPath>
<_R2RFrameworkOutput Condition="'$(_R2RFrameworkOutput)' == ''">$(_R2RFrameworkPath)$(_R2RFrameworkBinaryInfix)/$(_R2RFrameworkName)</_R2RFrameworkOutput>

<_R2RFrameworkStructureStampFile>$(_R2RFrameworkIntermediateOutputPath)$(_R2RFrameworkName)-structure.stamp</_R2RFrameworkStructureStampFile>
<_R2RFrameworkStructureStampFile>$(_R2RFrameworkIntermediateOutputPath)$(_R2RFrameworkName)-structure.stamp</_R2RFrameworkStructureStampFile>

<_R2RFrameworkInfoPlistPath>$(_R2RFrameworkPath)$(_R2RFrameworkResourcesInfix)/Info.plist</_R2RFrameworkInfoPlistPath>
</PropertyGroup>
<_R2RFrameworkInfoPlistPath>$(_R2RFrameworkPath)$(_R2RFrameworkResourcesInfix)/Info.plist</_R2RFrameworkInfoPlistPath>

<_R2RFrameworkCachePath>$(_R2RFrameworkIntermediateOutputPath)cache.txt</_R2RFrameworkCachePath>
<_R2RFrameworkCachePath2>$(_R2RFrameworkCachePath).uptodate</_R2RFrameworkCachePath2>
</PropertyGroup>

<!-- Prepare item groups for r2r framework creation -->
<Target Name="_PrepareR2RFrameworkCreation"
DependsOnTargets="CreateReadyToRunImages"
>
<ItemGroup>
<_R2RFrameworkDirectories Include="$(_R2RFrameworkPath)" />

Expand All @@ -195,10 +202,6 @@
</ItemGroup>

<!-- write a hash of all the relevant input so that we can force a re-link if necessary -->
<PropertyGroup>
<_R2RFrameworkCachePath>$(_R2RFrameworkIntermediateOutputPath)cache.txt</_R2RFrameworkCachePath>
<_R2RFrameworkCachePath2>$(_R2RFrameworkCachePath).uptodate</_R2RFrameworkCachePath2>
</PropertyGroup>
<ItemGroup>
<_R2RFrameworkCache Include="@(_R2RFrameworkInputs)" />
<_R2RFrameworkCache Include="@(_R2RFrameworkLinkerFlags)" />
Expand Down Expand Up @@ -305,7 +308,7 @@
</Target>

<Target Name="_CreateR2RFramework"
Condition="'$(CreateR2RFramework)' == 'true'"
Condition="'$(CreateR2RFramework)' == 'true' And '$(IsMacEnabled)' != 'false'"
DependsOnTargets="$(_CreateR2RFrameworkDependsOn)"
AfterTargets="CreateReadyToRunImages"
/>
Expand All @@ -324,7 +327,7 @@
DependsOnTargets="CreateReadyToRunImages"
>
<PropertyGroup>
<_R2RDylibIntermediateOutputPath Condition="'$(_R2RFrameworkIntermediateOutputPath)' == ''">$(DeviceSpecificIntermediateOutputPath)r2rdylib/</_R2RDylibIntermediateOutputPath>
<_R2RDylibIntermediateOutputPath Condition="'$(_R2RDylibIntermediateOutputPath)' == ''">$(DeviceSpecificIntermediateOutputPath)r2rdylib/</_R2RDylibIntermediateOutputPath>
<_R2RDylibName Condition="'$(_R2RDylibName)' == ''">$(AssemblyName)</_R2RDylibName>
<_R2RDylibPath Condition="'$(_R2RDylibPath)' == ''">$(_R2RDylibIntermediateOutputPath)</_R2RDylibPath>
<_R2RDylibOutput Condition="'$(_R2RDylibOutput)' == ''">$(_R2RDylibPath)$(_R2RDylibName).r2r.dylib</_R2RDylibOutput>
Expand Down Expand Up @@ -398,7 +401,7 @@
</Target>

<Target Name="_CreateR2RDylib"
Condition="'$(CreateR2RDylib)' == 'true'"
Condition="'$(CreateR2RDylib)' == 'true' And '$(IsMacEnabled)' != 'false'"
DependsOnTargets="$(_CreateR2RDylibDependsOn)"
AfterTargets="CreateReadyToRunImages"
/>
Expand Down
5 changes: 2 additions & 3 deletions dotnet/targets/Xamarin.Shared.Sdk.props
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,7 @@
-->
<_UseNativeAot Condition="'$(PublishAot)' == 'true' And '$(_IsPublishing)' == 'true'">true</_UseNativeAot>

<UseMonoRuntime Condition=" '$(UseMonoRuntime)' == '' And '$(_PlatformName)' == 'macOS'">false</UseMonoRuntime>
<UseMonoRuntime Condition=" '$(UseMonoRuntime)' == '' And '$(_UseNativeAot)' == 'true'">false</UseMonoRuntime>
<UseMonoRuntime Condition=" '$(UseMonoRuntime)' == ''">true</UseMonoRuntime>
<UseMonoRuntime Condition=" '$(UseMonoRuntime)' == ''">false</UseMonoRuntime>

<AfterMicrosoftNETSdkTargets>$(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)Microsoft.$(_PlatformName).Sdk.targets</AfterMicrosoftNETSdkTargets>

Expand Down Expand Up @@ -91,6 +89,7 @@

<!-- Tell .NET to skip sanity checks that trigger too eagerly for builds with multiple RuntimeIdentifiers -->
<AllowPublishAotWithoutRuntimeIdentifier Condition="'$(AllowPublishAotWithoutRuntimeIdentifier)' == '' And '$(_UseNativeAot)' == 'true'">true</AllowPublishAotWithoutRuntimeIdentifier>
<AllowReadyToRunWithoutRuntimeIdentifier Condition="'$(AllowReadyToRunWithoutRuntimeIdentifier)' == '' And '$(RuntimeIdentifiers)' != '' And '$(RuntimeIdentifier)' == ''">true</AllowReadyToRunWithoutRuntimeIdentifier>
<AllowSelfContainedWithoutRuntimeIdentifier Condition="'$(AllowSelfContainedWithoutRuntimeIdentifier)' == ''">true</AllowSelfContainedWithoutRuntimeIdentifier>

<!--
Expand Down
13 changes: 5 additions & 8 deletions msbuild/Xamarin.MacDev.Tasks/Tasks/MergeAppBundles.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,19 +186,16 @@ public bool IsIdenticalTo (Entry other)
return true;
}

public void CopyTo (string outputDirectory, string? subDirectory = null)
public void CopyTo (string outputDirectory, string? subDirectory = null, Entry? dependentOn = null)
{
string outputFile;

if (subDirectory is null) {
outputFile = Path.Combine (outputDirectory, RelativePath);
} else {
var relativeAppDir = Path.GetDirectoryName (RelativePath);
if (string.IsNullOrEmpty (relativeAppDir)) {
outputFile = Path.Combine (outputDirectory, subDirectory, RelativePath);
} else {
outputFile = Path.Combine (outputDirectory, relativeAppDir, subDirectory, Path.GetFileName (RelativePath));
}
var outputRelativePath = Path.GetDirectoryName (dependentOn?.RelativePath ?? RelativePath) ?? "";
var outputRelativeName = RelativePath.Substring (outputRelativePath.Length).TrimStart ('/');
outputFile = Path.Combine (outputDirectory, outputRelativePath, subDirectory, outputRelativeName);
}

if (Type == FileType.Directory) {
Expand All @@ -221,7 +218,7 @@ public void CopyTo (string outputDirectory, string? subDirectory = null)

if (DependentFiles is not null) {
foreach (var file in DependentFiles)
file.CopyTo (outputDirectory, subDirectory);
file.CopyTo (outputDirectory, subDirectory, this);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions runtime/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ MONOTOUCH_ARM64_SOURCE_STEMS = $(patsubst %.s,%,$(patsubst %.m,%,$(SHARED_ARM64_
# .NET
#

DOTNET_iOS_LIBRARIES = libextension-dotnet.a
DOTNET_tvOS_LIBRARIES = libextension-dotnet.a libtvextension-dotnet.a
DOTNET_iOS_LIBRARIES = libextension-dotnet.a libextension-dotnet-coreclr.a
DOTNET_tvOS_LIBRARIES = libextension-dotnet.a libtvextension-dotnet.a libextension-dotnet-coreclr.a libtvextension-dotnet-coreclr.a
DOTNET_macOS_LIBRARIES = libextension-dotnet-coreclr.a
DOTNET_MacCatalyst_LIBRARIES =

Expand Down
8 changes: 5 additions & 3 deletions scripts/run-with-timeout/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
This script runs an external process with a few extra features:

* The process will be killed if it takes longer than the specified timeout.
* The process will be killed if it doesn't launch within 10 seconds. This is
implemented by passing the environment variable `LAUNCH_SENTINEL_FILE` (with
a path to a file) to the process, which has 10 seconds to create said file.
* The process will be killed if it doesn't launch within 10 seconds by default.
This is implemented by passing the environment variable
`LAUNCH_SENTINEL_FILE` (with a path to a file) to the process, which has 10
seconds to create said file. Set `LAUNCH_TIMEOUT_SECONDS` to override the
default launch timeout when needed.
* If the launch timed out, the process will be relaunched, up to a maximum of
10 attempts.

Expand Down
3 changes: 3 additions & 0 deletions scripts/run-with-timeout/run-with-timeout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
}

var launchTimeout = TimeSpan.FromSeconds (10); // must launch within a few seconds.
var launchTimeoutValue = Environment.GetEnvironmentVariable ("LAUNCH_TIMEOUT_SECONDS");
if (int.TryParse (launchTimeoutValue, out var launchTimeoutSeconds) && launchTimeoutSeconds > 0)
launchTimeout = TimeSpan.FromSeconds (launchTimeoutSeconds);
var argIndex = 0;
var executionTimeout = TimeSpan.FromSeconds (int.Parse (args [argIndex++]));
var commands = args.Skip (argIndex).ToArray ();
Expand Down
Loading
Loading