Skip to content

[dotnet-linker] Use [DynamicDependency] attributes instead of manual marking when optimizing generated code.#24979

Merged
rolfbjarne merged 6 commits intomainfrom
dev/rolf/use-dynamic-dependency-attributes-optimizegeneratedcode
Apr 1, 2026
Merged

[dotnet-linker] Use [DynamicDependency] attributes instead of manual marking when optimizing generated code.#24979
rolfbjarne merged 6 commits intomainfrom
dev/rolf/use-dynamic-dependency-attributes-optimizegeneratedcode

Conversation

@rolfbjarne
Copy link
Copy Markdown
Member

This makes it easier to move this code out of a custom linker step in the future.

Also simplify a few things:

  • There's no need to compute whether the code is optimizable, because the result
    is never used.
  • Unify code to determine whether the InlineIsARM64CallingConvention optimization
    is to be applied.
  • Any code that modifies the current assembly now returns a boolean saying so (so
    that we know if the current assembly has to be saved).

Contributes towards #17693.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR migrates the “binding optimizer” from a MarkHandler-based approach toward an AssemblyModifierStep (pre-mark) flow, aligning with the longer-term goal of reducing reliance on custom linker steps and enabling future trimmer/NativeAOT scenarios.

Changes:

  • Introduces a new OptimizeGeneratedCodeStep (assembly modifier) and wires it into the SDK targets behind a DynamicDependency-based switch.
  • Refactors OptimizeGeneratedCodeHandler to use a shared OptimizeGeneratedCodeData context and to report whether IL was modified.
  • Extends AssemblyModifierStep with a ProcessMethod hook + helper to iterate methods, and updates smart-enum preservation to use the helper.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
tools/linker/CoreOptimizeGeneratedCode.cs Refactors optimizer logic to be data-driven/static and adds modification tracking + shared data carrier.
tools/dotnet-linker/Steps/AssemblyModifierStep.cs Adds method-level processing hook and helper (ProcessMethods) for modifier steps.
tools/dotnet-linker/PreserveSmartEnumConversionsStep.cs Simplifies type processing by reusing ProcessMethods and overrides the new method hook.
tools/dotnet-linker/OptimizeGeneratedCodeStep.cs New pre-mark step that runs the generated code optimizer as an assembly modifier.
tools/common/Target.cs Centralizes the ABI-specific “inline ARM64 calling convention” determination and caches it.
dotnet/targets/Xamarin.Shared.Sdk.targets Adds build properties and conditions to choose between the old MarkHandler and new pre-mark step.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@rolfbjarne rolfbjarne force-pushed the dev/rolf/use-dynamic-dependency-attributes-preserveblockcode branch from 695e793 to e6cfae9 Compare March 30, 2026 07:13
@rolfbjarne rolfbjarne force-pushed the dev/rolf/use-dynamic-dependency-attributes-optimizegeneratedcode branch from b6ae4b2 to a2d1483 Compare March 30, 2026 07:25
@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@rolfbjarne rolfbjarne enabled auto-merge (squash) March 31, 2026 10:38
@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2

This comment has been minimized.

@vs-mobiletools-engineering-service2
Copy link
Copy Markdown
Collaborator

✅ [CI Build #fd74549] Build passed (Build packages) ✅

Pipeline on Agent
Hash: fd74549824ffee663fcbe99f4dbe8b3e113a9b52 [PR build]

@vs-mobiletools-engineering-service2
Copy link
Copy Markdown
Collaborator

✅ [PR Build #fd74549] Build passed (Detect API changes) ✅

Pipeline on Agent
Hash: fd74549824ffee663fcbe99f4dbe8b3e113a9b52 [PR build]

@vs-mobiletools-engineering-service2
Copy link
Copy Markdown
Collaborator

✅ API diff for current PR / commit

NET (empty diffs)

✅ API diff vs stable

NET (empty diffs)

ℹ️ Generator diff

Generator Diff: vsdrops (html) vsdrops (raw diff) gist (raw diff) - Please review changes)

Pipeline on Agent
Hash: fd74549824ffee663fcbe99f4dbe8b3e113a9b52 [PR build]

@vs-mobiletools-engineering-service2
Copy link
Copy Markdown
Collaborator

✅ [CI Build #fd74549] Build passed (Build macOS tests) ✅

Pipeline on Agent
Hash: fd74549824ffee663fcbe99f4dbe8b3e113a9b52 [PR build]

@vs-mobiletools-engineering-service2
Copy link
Copy Markdown
Collaborator

🚀 [CI Build #fd74549] Test results 🚀

Test results

✅ All tests passed on VSTS: test results.

🎉 All 156 tests passed 🎉

Tests counts

✅ cecil: All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (iOS): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (MacCatalyst): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (macOS): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (Multiple platforms): All 1 tests passed. Html Report (VSDrops) Download
✅ dotnettests (tvOS): All 1 tests passed. Html Report (VSDrops) Download
✅ framework: All 2 tests passed. Html Report (VSDrops) Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops) Download
✅ generator: All 5 tests passed. Html Report (VSDrops) Download
✅ interdependent-binding-projects: All 4 tests passed. Html Report (VSDrops) Download
✅ introspection: All 6 tests passed. Html Report (VSDrops) Download
✅ linker: All 44 tests passed. Html Report (VSDrops) Download
✅ monotouch (iOS): All 11 tests passed. Html Report (VSDrops) Download
✅ monotouch (MacCatalyst): All 15 tests passed. Html Report (VSDrops) Download
✅ monotouch (macOS): All 12 tests passed. Html Report (VSDrops) Download
✅ monotouch (tvOS): All 11 tests passed. Html Report (VSDrops) Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops) Download
✅ sharpie: All 1 tests passed. Html Report (VSDrops) Download
✅ windows: All 3 tests passed. Html Report (VSDrops) Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops) Download
✅ xtro: All 1 tests passed. Html Report (VSDrops) Download

macOS tests

✅ Tests on macOS Monterey (12): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Ventura (13): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Sonoma (14): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Sequoia (15): All 5 tests passed. Html Report (VSDrops) Download
✅ Tests on macOS Tahoe (26): All 5 tests passed. Html Report (VSDrops) Download

Linux Build Verification

Linux build succeeded

Pipeline on Agent
Hash: fd74549824ffee663fcbe99f4dbe8b3e113a9b52 [PR build]

@rolfbjarne rolfbjarne merged commit 5550f7d into main Apr 1, 2026
48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants