Windows ARM64EC support (replaces 32-bit builds); update iPlug2 to current master#659
Draft
olilarkin wants to merge 8 commits into
Draft
Windows ARM64EC support (replaces 32-bit builds); update iPlug2 to current master#659olilarkin wants to merge 8 commits into
olilarkin wants to merge 8 commits into
Conversation
Port of iPlug2OOS ARM64EC support (iPlug2OOS 38f729e / iPlug2 PR #1238) to the NeuralAmpModeler MSVC projects: - Replace the Win32 platform with ARM64EC in the solution and the app/vst3/aax projects (Debug/Release/Tracer), dropping the x86-only SSE2 EnableEnhancedInstructionSet settings - Rename property macros to the current iPlug2 naming scheme: VST3_32/64_* -> VST3_ARM64EC/X64_*, AAX_32/64_* -> AAX_ARM64EC/X64_* - postbuild-win.bat: ARM64EC binaries go to the arm64ec-win folder of the multi-arch VST3 bundle, NAME_ARM64EC.exe for the standalone - makedist-win.bat: use VS2022 vcvarsall and build both x64 and ARM64EC - makezip-win.py: include ARM64EC vst3/exe binaries and pdbs - Bump iPlug2 submodule (arm64ec branch) with the runtime/bundle-script backport: arm64ec-win VST3 bundle arch folder in BundleResourcePath and create_bundle.bat ARM64EC builds require VS2022 with the MSVC v143 ARM64EC build tools component installed (Microsoft.VisualStudio.Component.VC.Tools.ARM64EC). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Move the iPlug2 submodule from the sdatkinson fork (based on Dec 2023 iPlug2) to a new nam-fixes branch: official iPlug2 master (b64192fe1, which includes upstream ARM64EC support from PR #1238) plus the two NAM-specific fixes cherry-picked from the fork: - Fix standalone app channel selection - Windows: fix VST3 bundle resource path and create_bundle for spaced paths (adapted to also resolve arm64ec-win via _M_ARM64EC, since ARM64EC defines _WIN64/ARCH_64BIT) Plugin-side changes needed for current iPlug2: - Compile WDL/win32_utf8.c in the app/vst3/aax projects (IPlugPlatform.h now routes fopen/strftime etc. through WDL UTF-8 wrappers) - common-win.props: REAPER SDK dependency dir renamed to REAPER_SDK The VST3 SDK under iPlug2/Dependencies/IPlug must be re-downloaded via download-vst3-sdk.sh; other SDK deps (RTAudio, RTMidi, REAPER_SDK, CLAP, AAX stub) and the NanoVG-family IGraphics deps are now vendored in the iPlug2 repo. Verified: Release x64 and ARM64EC builds of APP and VST3 both link, and the ARM64EC binaries are ARM64X hybrids. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pinned commit lives on the nam-fixes branch of olilarkin/iPlug2 (official iPlug2 master + NAM fixes) until it is merged into sdatkinson/iPlug2. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Xcode no longer supports Build Carbon Resources phases. Move IPlugAU.r to the AU target Copy Bundle Resources phase, matching the current iPlug2 template project. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
xcpretty swallows the diagnostics in CI; grep the teed build-mac.log for errors when xcodebuild fails. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… project AudioDSPTools ships its own copy of WDL ptrlist.h/heapbuf.h for the ResamplingContainer. With both copies as project members, the Xcode headermap resolves #include ptrlist.h by basename and could pick the vendored copy, whose InsertSorted comparator signature no longer matches current iPlug2 WDL. AudioDSPTools includes its copy via a relative path, so it does not need project membership. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The previous run passed while the ARM64EC msbuild pass actually failed: makedist-win.bat ignored msbuild/makezip exit codes, so the job went green with an artifact missing the ARM64EC binaries and pdbs. - makedist-win.bat: abort on msbuild or makezip-win.py failure - Workflows: pin the Windows job to windows-2022. windows-latest images now ship VS2026, which provides v143 x64 tools but not the v143 ARM64EC toolset the projects target. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ries The x86_64-win and arm64ec-win inner .vst3 files were added to the zip under the same basename, so one overwrote the other on extraction. Zip the whole NeuralAmpModeler.vst3 bundle with its folder structure (pruning the stale x86-win folder and dev files) so users get a single bundle that works on both x64 and ARM64 Windows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hey steve,
here is an example of how you can add ARM64EC support to NeuralAmplModelerPlugin and update the iPlug2 submodule with a couple of your changes reapplied on master. Should be similar for Gateway.
Oli
Summary
Adds Windows on ARM support by replacing the 32-bit (Win32) MSVC configurations with ARM64EC, and retargets the iPlug2 submodule to a branch based on current official iPlug2 master (which has upstream ARM64EC support) plus the two NAM-specific fixes from the sdatkinson/iPlug2 fork.
ARM64EC binaries run natively on ARM64 Windows while remaining loadable by x64 hosts running under emulation. The VST3 is a single multi-arch bundle (
Contents/x86_64-win+Contents/arm64ec-win), so one bundle serves both architectures.iPlug2 submodule
The submodule now points at the
nam-fixesbranch of olilarkin/iPlug2: official iPlug2 master (b64192fe1) with two cherry-picks from the sdatkinson fork:_M_ARM64EC, fixing ARM64EC VST3 resource resolution — ARM64EC also defines_WIN64, so the previousARCH_64BITcheck picked the wrong folder)The unicode commits from the old fork are already present in current iPlug2 master in updated form.
.gitmodulestemporarily points at olilarkin/iPlug2; oncenam-fixesis merged into sdatkinson/iPlug2 it can be flipped back.Plugin changes
Win32platform →ARM64EC(Debug/Release/Tracer), x86-only SSE2 flags removed; property macros renamed to the current iPlug2 scheme (VST3_32/64_*→VST3_ARM64EC/X64_*, etc.)WDL/win32_utf8.ccompiled into app/vst3/aax projects (current iPlug2 routes fopen/strftime through WDL's UTF-8 wrappers).vst3bundle (previously the two inner binaries collided on the same archive name) plusNeuralAmpModeler_ARM64EC.exe; build failures now abort the script instead of leaving CI greenIPlugAU.rmoved to Copy Bundle Resources); AudioDSPTools' vendored WDL headers removed from Xcode project membership (the headermap let them shadow iPlug2'sptrlist.h, breaking the build against current WDL)windows-2022—windows-latestimages ship VS2026, which lacks the v143 ARM64EC toolsetBuilding ARM64EC
Requires VS2022 with both "MSVC v143 – C++ ARM64EC build tools" and "MSVC v143 – C++ ARM64/ARM64EC build tools" components (the ARM64 component provides
Microsoft.Cpp.BuildAsX.Common.targets).makedist-win.batbuilds x64 and ARM64EC in sequence.Verification
🤖 Generated with Claude Code