[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, '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

[build] Replace Step_InstallGNUBinutils with MSBuild targets - #11332

Merged
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils
May 14, 2026
Merged

[build] Replace Step_InstallGNUBinutils with MSBuild targets#11332
simonrozsival merged 3 commits into
mainfrom
dev/peppers/xaprepare-binutils

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Migrate the binutils installation from xaprepare to a standard MSBuild Microsoft.Build.NoTargets project (src/binutils), as part of the ongoing migration away from xaprepare.

The new project downloads the toolchain archive, extracts it with 7-zip, and copies binutils to the install directories for both the host OS and Windows (including PDB symbol archiving).

@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

/review

@github-actions

github-actionsBot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ LGTM — Clean migration from xaprepare to MSBuild targets

Summary: This PR replaces the C# Step_InstallGNUBinutils xaprepare step with a standard Microsoft.Build.NoTargets MSBuild project (src/binutils), following the established pattern used by src/aapt2 and src/bundletool. The migration is well-executed.

What's good:

  • ✅ SHA256 hash verification on the downloaded archive — an improvement over the old code which had none
  • ✅ Proper Inputs/Outputs on download and extract targets for incremental builds
  • SkipUnchangedFiles on Copy tasks minimizes redundant I/O
  • ✅ Correct handling of host vs Windows binutils install directories, matching old behavior
  • ✅ PDB+EXE symbol archiving logic is simplified with wildcard globs while preserving correctness
  • ✅ Clean removal of 5 old Step_InstallGNUBinutils files and the scenario registration

Issue counts: 0 ❌ | 1 ⚠️ | 2 💡

⚠️ One concern: The binutils version/URL/path configuration in Configurables.cs is now dead code (neither Step_InstallGNUBinutils nor Step_Get_Windows_Binutils is used), creating a dual source of truth with the new XABinutilsVersion/XABinutilsHash in Configuration.props. Worth cleaning up to prevent version drift.

CI status: All checks passing (dotnet-android ✅, license/cla ✅).

Generated by Android PR Reviewer for issue #11332 · ● 7.8M

Comment threadConfiguration.props
Comment threadsrc/binutils/binutils.targets Outdated
Comment threadsrc/binutils/binutils.targets
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from ad97e61 to 71b5134CompareMay 13, 2026 14:13
@jonathanpeppers
jonathanpeppers marked this pull request as ready for review May 13, 2026 16:34
CopilotAI review requested due to automatic review settings May 13, 2026 16:34
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label May 13, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Migrates GNU binutils installation from the legacy xaprepare C# step (Step_InstallGNUBinutils and Step_Get_Windows_Binutils) to a new Microsoft.Build.NoTargets MSBuild project at src/binutils/. The new project downloads the prebuilt toolchain .7z archive, validates its SHA-256, extracts it via 7za, and installs the host ($(HostOS)\binutils) and Windows (binutils) layouts, including PDB symbol staging. This continues the ongoing migration away from xaprepare toward standard MSBuild projects.

Changes:

  • Adds src/binutils/binutils.csproj + binutils.targets, registers it in the solution, and chains it via a ProjectReference from Xamarin.Android.Build.Tasks; introduces XABinutilsVersion/XABinutilsHash in Configuration.props.
  • Removes Step_InstallGNUBinutils (and its OS-specific partials), Step_Get_Windows_Binutils, and the related BinutilsVersion/BinutilsArchive/*BinutilsInstallDir/BinutilsCacheDir configurables from xaprepare; drops the step from Scenario_Standard.
  • Uses 7-Zip.CommandLine (PackageReference, GeneratePathProperty) on Windows and 7za from PATH on Unix to extract the archive.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.slnRegisters the new binutils project in the solution.
src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csprojAdds non-output ProjectReference so binutils install runs as part of the tasks build.
src/binutils/binutils.csprojNew Microsoft.Build.NoTargets project that pulls in 7-Zip.CommandLine and imports the targets.
src/binutils/binutils.targetsNew download/hash-verify/extract/install/clean targets for host and Windows binutils.
Configuration.propsAdds XABinutilsVersion and XABinutilsHash properties.
build-tools/xaprepare/.../Scenario_Standard.csRemoves Step_InstallGNUBinutils from the standard scenario.
build-tools/xaprepare/.../ConfigAndData/Configurables.csRemoves BinutilsVersion, BinutilsArchive, *BinutilsInstallDir, BinutilsCacheDir.
build-tools/xaprepare/.../Steps/Step_InstallGNUBinutils*.csDeletes the now-unused step and its OS partials.
build-tools/xaprepare/.../Steps/Step_Get_Windows_Binutils.csDeletes the legacy custom ZIP-range download/extract path for Windows binutils.
build-tools/xaprepare/xaprepare/xaprepare.csprojRemoves the orphaned Step_Get_Windows_Binutils.cs Compile item for non-Windows.

Comment threadsrc/binutils/binutils.targets Outdated
jonathanpeppersand others added 3 commits May 13, 2026 16:15
Migrate the binutils installation from xaprepare to a standard
MSBuild `Microsoft.Build.NoTargets` project (`src/binutils`),
as part of the ongoing migration away from xaprepare.
The new project downloads the toolchain archive, extracts it with
7-zip, and copies binutils to the install directories for both the
host OS and Windows (including PDB symbol archiving).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove stale binutils entries from Configurables.cs (BinutilsVersion,
BinutilsArchive, WindowsBinutilsInstallDir, HostBinutilsInstallDir,
BinutilsCacheDir) and delete the unused Step_Get_Windows_Binutils.cs.
Fix MSBuild property function spacing to match repo conventions:
ToLowerInvariant() without a space before the parentheses.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PDBs should only go to windows-toolchain-pdb/ for symbol archiving,
not into the binutils\bin\ directory. This matches the previous
xaprepare behavior and avoids duplicating ~1.3GB of symbol files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers
jonathanpeppersforce-pushed the dev/peppers/xaprepare-binutils branch from d395f36 to 4b4a777CompareMay 13, 2026 21:16
@jonathanpeppers

Copy link
Copy Markdown
MemberAuthor

All binutils files are identical between the branch build and main:

 ┌────────────────────────────────────┬────────────────────────┐
│ Comparison │ Result │
├────────────────────────────────────┼────────────────────────┤
│ Windows binutils\bin\ (18 files) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ Darwin binutils/ (bin + lib) │ ✅ ALL FILES IDENTICAL │
├────────────────────────────────────┼────────────────────────┤
│ No PDBs in binutils\bin\ │ ✅ Confirmed on both │
└────────────────────────────────────┴────────────────────────┘

The new MSBuild targets produce exactly the same output as the old xaprepare step.

@simonrozsival
simonrozsival merged commit e84963b into mainMay 14, 2026
2 of 3 checks passed
@simonrozsival
simonrozsival deleted the dev/peppers/xaprepare-binutils branch May 14, 2026 06:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival