[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[iOS][tvOS] Fix building runtime tests on iOS-like platforms - #91542

Merged
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator
Sep 7, 2023
Merged

[iOS][tvOS] Fix building runtime tests on iOS-like platforms #91542
simonrozsival merged 4 commits into
dotnet:mainfrom
simonrozsival:disable-trimming-for-xunit-wrapper-generator

Conversation

@simonrozsival

@simonrozsivalsimonrozsival commented Sep 4, 2023

Copy link
Copy Markdown
Member

Closes#91535

@simonrozsivalsimonrozsival added the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 4, 2023
@ghostghost added the area-Infrastructure-coreclr Only use for closed issues label Sep 4, 2023
@ghost

ghost commented Sep 4, 2023

Copy link
Copy Markdown

Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.

Issue Details

Work in progress.

Author:simonrozsival
Assignees:simonrozsival
Labels:

NO-REVIEW, area-Infrastructure-coreclr

Milestone:-

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@vitek-karas

Copy link
Copy Markdown
Member

@sbomer please review this (once it's ready).

<Nullable>enable</Nullable>
<EnableDefaultItems>true</EnableDefaultItems>
<IsRoslynComponent>true</IsRoslynComponent>
<PublishTrimmed>false</PublishTrimmed>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that PublishTrimmed behavior is really only defined for applications, would it instead make sense to modify

<PublishTrimmed>true</PublishTrimmed>
to only enable trimming for executables?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a better way of solving the problem. I'm not very familiar with this part of the build process though so I'm not sure what the implications of that would be. cc @mdh1418

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The property PublishTrimmed set by default for the runtime tests may improve AOT compilation time by excluding unnecessary assemblies. However, according to the comment below it is not intended behavior.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

If we want to set the PublishTrimmed on per-project basis and avoid additional complexity in the MergedRunner , we can remove these props without side effects. I don't expect significant performance changes as AOT Interp mode is used, which compiles the corelib only.

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">
<EnableAggressiveTrimming>true</EnableAggressiveTrimming>
<PublishTrimmed>true</PublishTrimmed>
<SkipTestUtilitiesReference>true</SkipTestUtilitiesReference>
</PropertyGroup>

Other option is to set these props for executables only, as @vitek-karas suggested.

Note: The XUnitWrapperGenerator project may become obsolete soon, as Xunit wrappers are not used for the Mono runtime tests targeting apple mobile platforms due to parallel AOT compilation on Helix. We plan to do the same for the Native AOT runtime tests.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PublishTrimmed is expected to be set on per-project basis, not globally for entire subtrees.

That comment was meant in the context of the SDK - as in "The scenario SDK should focus on is when the property is set on per-project basis". Runtime repo is all kinds of special, so I would not necessarily apply it here.

That said - it should be set only for applications - it makes little sense for libraries.
For libraries you should instead set IsTrimmable=true but it has the same limitations (won't work on netstandard2.0 and you will get a similar error there as well).

@kotlarmiloskotlarmilosSep 5, 2023

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonrozsival You may change the property group condition below to include Condition="'$(TargetsAppleMobile)' == 'true' and '$([System.String]::Copy($(OutputType)).ToLower())' == 'exe'".

<PropertyGroupCondition="'$(TargetOS)' == 'ios' Or '$(TargetOS)' == 'tvos'">

I am not sure if there is a cleaner way for OutputType=Exe.

@simonrozsival

simonrozsival commented Sep 5, 2023

Copy link
Copy Markdown
MemberAuthor

@sbomer even with the change in this PR, the iOS tests build still fail slightly further down the line with an error that I think was caused by the changes in #91233:

Common/mergedrunner.targets#L18
src/tests/Common/mergedrunner.targets(18,5): error : This project has an assembly name identical to another project, if this CoreCLRTestLibrary, you should reference $(TestLibraryProjectPath) instead of constructing the path yourself: /Users/runner/work/1/s/src/tools/illink/src/ILLink.Tasks/ILLink.Tasks.csproj

I'm not sure how to fix that, do you have any suggestions?

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@kotlarmilos

Copy link
Copy Markdown
Member

@simonrozsival You fixed the CI! Let's resolve the comment above and it should be ready for review.

@sbomer

Copy link
Copy Markdown
Member

@simonrozsival I think that check is supposed to validate that multiple merged test runners don't produce the same output assemblies. ILLink.Tasks isn't an output assembly - it's only referenced for the purposes of build ordering. I would try adjusting this check to only include ProjectReferences that have '%(ProjectReference.ReferenceOutputAssembly) != 'false'`:

<_ProjectAssemblyReferencesInclude="@(ProjectReference)"Condition="'%(ProjectReference.OutputItemType)' == ''" />

cc @ViktorHofer@jkoritzinsky

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-ioslike

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/tests/Directory.Build.props
Comment threadsrc/tests/Directory.Build.props
@simonrozsivalsimonrozsival changed the title [WIP] Do not trim XUnitWrapperGenerator[WIP] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@ViktorHofer

Copy link
Copy Markdown
Member

Thanks for fixing.

@simonrozsivalsimonrozsival changed the title [WIP] Fix building runtime tests on iOS-like platforms [iOS][tvOS] Fix building runtime tests on iOS-like platforms Sep 6, 2023
@simonrozsival
simonrozsival marked this pull request as ready for review September 6, 2023 09:50
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

@sbomer thanks for the suggestion!

The runtime tests now build correctly and the test failures all seem unrelated.

@simonrozsivalsimonrozsival removed the NO-REVIEW Experimental/testing PR, do NOT review it label Sep 6, 2023
@simonrozsival
simonrozsival merged commit 54d9fa8 into dotnet:mainSep 7, 2023
@simonrozsival
simonrozsival deleted the disable-trimming-for-xunit-wrapper-generator branch September 7, 2023 07:46
@ghostghost locked as resolved and limited conversation to collaborators Oct 7, 2023
@akoeplinger

Copy link
Copy Markdown
Member

/backport to release/8.0-staging

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/8.0-staging: https://github.com/dotnet/runtime/actions/runs/7531913098

@github-actionsgithub-actionsBot unlocked this conversation Jan 15, 2024
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Jan 15, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-coreclrOnly use for closed issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS][tvOS] Building tests fails with "Trimming assemblies requires .NET Core 3.0 or higher"

6 participants

@simonrozsival@vitek-karas@kotlarmilos@sbomer@ViktorHofer@akoeplinger