From d89b9ae1610d7e8eb9cc08a4f736631a617e88cb Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Thu, 23 Jul 2026 21:47:53 +0200 Subject: [PATCH 1/8] Replace 32 bit Windows builds with ARM64EC 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 --- NeuralAmpModeler/NeuralAmpModeler.sln | 42 ++++----- .../config/NeuralAmpModeler-win.props | 2 +- .../projects/NeuralAmpModeler-aax.vcxproj | 90 +++++++++---------- .../projects/NeuralAmpModeler-app.vcxproj | 60 ++++++------- .../projects/NeuralAmpModeler-vst3.vcxproj | 60 ++++++------- .../NeuralAmpModeler-vst3.vcxproj.user | 32 +++---- NeuralAmpModeler/scripts/makedist-win.bat | 34 +++---- NeuralAmpModeler/scripts/makezip-win.py | 5 ++ NeuralAmpModeler/scripts/postbuild-win.bat | 48 +++++----- common-win.props | 51 +++++------ iPlug2 | 2 +- 11 files changed, 212 insertions(+), 214 deletions(-) diff --git a/NeuralAmpModeler/NeuralAmpModeler.sln b/NeuralAmpModeler/NeuralAmpModeler.sln index cdb7823e2..684881d18 100644 --- a/NeuralAmpModeler/NeuralAmpModeler.sln +++ b/NeuralAmpModeler/NeuralAmpModeler.sln @@ -11,48 +11,48 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NeuralAmpModeler-aax", "pro EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 + Debug|ARM64EC = Debug|ARM64EC Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 + Release|ARM64EC = Release|ARM64EC Release|x64 = Release|x64 - Tracer|Win32 = Tracer|Win32 + Tracer|ARM64EC = Tracer|ARM64EC Tracer|x64 = Tracer|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|Win32.ActiveCfg = Debug|Win32 - {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|Win32.Build.0 = Debug|Win32 + {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|x64.ActiveCfg = Debug|x64 {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|x64.Build.0 = Debug|x64 - {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|Win32.ActiveCfg = Release|Win32 - {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|Win32.Build.0 = Release|Win32 + {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|ARM64EC.Build.0 = Release|ARM64EC {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|x64.ActiveCfg = Release|x64 {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|x64.Build.0 = Release|x64 - {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|Win32.ActiveCfg = Tracer|Win32 - {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|Win32.Build.0 = Tracer|Win32 + {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|ARM64EC.ActiveCfg = Tracer|ARM64EC + {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|ARM64EC.Build.0 = Tracer|ARM64EC {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|x64.ActiveCfg = Tracer|x64 {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|x64.Build.0 = Tracer|x64 - {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|Win32.ActiveCfg = Debug|Win32 - {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|Win32.Build.0 = Debug|Win32 + {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|x64.ActiveCfg = Debug|x64 {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|x64.Build.0 = Debug|x64 - {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|Win32.ActiveCfg = Release|Win32 - {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|Win32.Build.0 = Release|Win32 + {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|ARM64EC.Build.0 = Release|ARM64EC {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|x64.ActiveCfg = Release|x64 {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|x64.Build.0 = Release|x64 - {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|Win32.ActiveCfg = Tracer|Win32 - {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|Win32.Build.0 = Tracer|Win32 + {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|ARM64EC.ActiveCfg = Tracer|ARM64EC + {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|ARM64EC.Build.0 = Tracer|ARM64EC {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|x64.ActiveCfg = Tracer|x64 {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|x64.Build.0 = Tracer|x64 - {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|Win32.ActiveCfg = Debug|Win32 - {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|Win32.Build.0 = Debug|Win32 + {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|x64.ActiveCfg = Debug|x64 {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|x64.Build.0 = Debug|x64 - {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|Win32.ActiveCfg = Release|Win32 - {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|Win32.Build.0 = Release|Win32 + {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|ARM64EC.Build.0 = Release|ARM64EC {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|x64.ActiveCfg = Release|x64 {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|x64.Build.0 = Release|x64 - {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|Win32.ActiveCfg = Tracer|Win32 - {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|Win32.Build.0 = Tracer|Win32 + {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|ARM64EC.ActiveCfg = Tracer|ARM64EC + {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|ARM64EC.Build.0 = Tracer|ARM64EC {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|x64.ActiveCfg = Tracer|x64 {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|x64.Build.0 = Tracer|x64 EndGlobalSection diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-win.props b/NeuralAmpModeler/config/NeuralAmpModeler-win.props index c69767281..ddc57e451 100644 --- a/NeuralAmpModeler/config/NeuralAmpModeler-win.props +++ b/NeuralAmpModeler/config/NeuralAmpModeler-win.props @@ -27,7 +27,7 @@ $(PDB_FILE) - CALL "$(SolutionDir)scripts\postbuild-win.bat" "$(TargetExt)" "$(BINARY_NAME)" "$(Platform)" "$(TargetPath)" "$(VST3_32_PATH)" "$(VST3_64_PATH)" "$(AAX_32_PATH)" "$(AAX_64_PATH)" "$(BUILD_DIR)" "$(VST_ICON)" "$(AAX_ICON)" "$(CREATE_BUNDLE_SCRIPT)" + CALL "$(SolutionDir)scripts\postbuild-win.bat" "$(TargetExt)" "$(BINARY_NAME)" "$(Platform)" "$(TargetPath)" "$(VST3_ARM64EC_PATH)" "$(VST3_X64_PATH)" "$(AAX_ARM64EC_PATH)" "$(AAX_X64_PATH)" "$(BUILD_DIR)" "$(VST_ICON)" "$(AAX_ICON)" "$(CREATE_BUNDLE_SCRIPT)" CALL "$(SolutionDir)scripts\prebuild-win.bat" "$(TargetExt)" "$(BINARY_NAME)" "$(Platform)" "$(TargetPath)" "$(OutDir)" diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj index b4ea647f2..d7057db8d 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj @@ -2,25 +2,25 @@ - + Debug - Win32 + ARM64EC Debug x64 - + Release - Win32 + ARM64EC Release x64 - + Tracer - Win32 + ARM64EC Tracer @@ -34,15 +34,15 @@ 10.0 - + DynamicLibrary v143 - + DynamicLibrary v143 - + DynamicLibrary v143 @@ -61,15 +61,15 @@ - + - + - + @@ -88,15 +88,15 @@ <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ - $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ - false - $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ - $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ - $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ - $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ - false - false + $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ + $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ + false + $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ + $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ + $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ + $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ + false + false $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\aax\$(Platform)\$(Configuration)\int\ false @@ -107,13 +107,13 @@ false false - + .aaxplugin - + .aaxplugin - + .aaxplugin @@ -125,7 +125,7 @@ .aaxplugin - + @@ -161,7 +161,7 @@ - + @@ -203,7 +203,7 @@ - + @@ -381,17 +381,17 @@ - true + true true - true + true true - true + true true - true - true - true + true + true + true true true true @@ -419,9 +419,9 @@ - $(IntDir)%(RelativeDir) - $(IntDir)%(RelativeDir) - $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) @@ -439,28 +439,28 @@ Document - true + true true true Document - true - true + true + true true true Document - true - true - true + true + true + true Document - true - true - true + true + true + true true true diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj index e016cc972..ac09d624d 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj @@ -2,25 +2,25 @@ - + Debug - Win32 + ARM64EC Debug x64 - + Release - Win32 + ARM64EC Release x64 - + Tracer - Win32 + ARM64EC Tracer @@ -34,7 +34,7 @@ 10.0 - + Application true MultiByte @@ -46,7 +46,7 @@ MultiByte v143 - + Application false true @@ -60,7 +60,7 @@ MultiByte v143 - + Application false true @@ -77,7 +77,7 @@ - + @@ -85,7 +85,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -102,13 +102,13 @@ - + $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\ - + $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\int\ @@ -117,31 +117,31 @@ $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\int\ - + $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\ - + $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\int\ $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\int\ - + $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\ - + $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\int\ $(SolutionDir)build-win\app\$(Platform)\$(Configuration)\int\ - + Level3 Disabled @@ -175,7 +175,7 @@ - + Level3 MaxSpeed @@ -217,7 +217,7 @@ SA_API - + Level3 MaxSpeed @@ -363,17 +363,17 @@ - true + true true - true + true true - true + true true - true - true - true + true + true + true true true true @@ -402,9 +402,9 @@ - $(IntDir)%(RelativeDir) - $(IntDir)%(RelativeDir) - $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj index ec59513a1..930942d06 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj @@ -2,25 +2,25 @@ - + Debug - Win32 + ARM64EC Debug x64 - + Release - Win32 + ARM64EC Release x64 - + Tracer - Win32 + ARM64EC Tracer @@ -34,7 +34,7 @@ 10.0 - + DynamicLibrary true MultiByte @@ -46,7 +46,7 @@ MultiByte v143 - + DynamicLibrary false true @@ -60,7 +60,7 @@ MultiByte v143 - + DynamicLibrary false true @@ -77,7 +77,7 @@ - + @@ -85,7 +85,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -102,13 +102,13 @@ - + $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\ - + $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\int\ @@ -119,13 +119,13 @@ .vst3 - + $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\ - + $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\int\ .vst3 @@ -133,13 +133,13 @@ $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\int\ .vst3 - + $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\ $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\ - + $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\int\ .vst3 @@ -147,7 +147,7 @@ $(SolutionDir)build-win\vst3\$(Platform)\$(Configuration)\int\ .vst3 - + Level3 Disabled @@ -176,7 +176,7 @@ - + Level3 MaxSpeed @@ -215,7 +215,7 @@ - + Level3 MaxSpeed @@ -393,17 +393,17 @@ - true - true - true + true + true + true true true true - true - true - true + true + true + true true true true @@ -430,9 +430,9 @@ - $(IntDir)%(RelativeDir) - $(IntDir)%(RelativeDir) - $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) + $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) $(IntDir)%(RelativeDir) diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj.user b/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj.user index da8be2a5b..c5c37de15 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj.user +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj.user @@ -1,33 +1,33 @@ - + - - $(VST3_32_HOST_PATH) - $(VST3_32_COMMAND_ARGS) + + $(VST3_ARM64EC_HOST_PATH) + $(VST3_ARM64EC_COMMAND_ARGS) WindowsLocalDebugger - - $(VST3_32_HOST_PATH) + + $(VST3_ARM64EC_HOST_PATH) WindowsLocalDebugger - $(VST3_32_COMMAND_ARGS) + $(VST3_ARM64EC_COMMAND_ARGS) - - $(VST3_32_HOST_PATH) + + $(VST3_ARM64EC_HOST_PATH) WindowsLocalDebugger - $(VST3_32_COMMAND_ARGS) + $(VST3_ARM64EC_COMMAND_ARGS) - $(VST3_64_HOST_PATH) - $(VST3_64_COMMAND_ARGS) + $(VST3_X64_HOST_PATH) + $(VST3_X64_COMMAND_ARGS) WindowsLocalDebugger - $(VST3_64_HOST_PATH) + $(VST3_X64_HOST_PATH) WindowsLocalDebugger - $(VST3_64_COMMAND_ARGS) + $(VST3_X64_COMMAND_ARGS) - $(VST3_64_HOST_PATH) + $(VST3_X64_HOST_PATH) WindowsLocalDebugger - $(VST3_64_COMMAND_ARGS) + $(VST3_X64_COMMAND_ARGS) \ No newline at end of file diff --git a/NeuralAmpModeler/scripts/makedist-win.bat b/NeuralAmpModeler/scripts/makedist-win.bat index 16c84e995..f4a5ecc4a 100644 --- a/NeuralAmpModeler/scripts/makedist-win.bat +++ b/NeuralAmpModeler/scripts/makedist-win.bat @@ -51,22 +51,16 @@ echo Building ... REM Remove previous build logs if exist "build-win.log" (del build-win.log) -if exist "%ProgramFiles(x86)%" (goto 64-Bit) else (goto 32-Bit) - -if not defined DevEnvDir ( -:32-Bit -echo 32-Bit O/S detected -call "%ProgramFiles%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_x64 -goto END - -:64-Bit -echo 64-Bit Host O/S detected -call "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_x64 -goto END -:END +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" ( + call "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64 +) else if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" ( + call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 +) else if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ( + call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 +) else ( + echo vcvarsall.bat not found, assuming msbuild is already on the PATH ) - REM - set preprocessor macros like this, for instance to set demo preprocessor macro: if %DEMO% == 1 ( set CMDLINE_DEFINES="DEMO_VERSION=1" @@ -77,15 +71,15 @@ if %DEMO% == 1 ( ) REM - Could build individual targets like this: -REM - msbuild NeuralAmpModeler-app.vcxproj /p:configuration=release /p:platform=win32 +REM - msbuild NeuralAmpModeler-app.vcxproj /p:configuration=release /p:platform=x64 -REM echo Building 32 bit binaries... -REM msbuild NeuralAmpModeler.sln /p:configuration=release /p:platform=win32 /nologo /verbosity:minimal /fileLogger /m /flp:logfile=build-win.log;errorsonly - -REM echo Building 64 bit binaries... -REM add projects with /t to build VST3 and AAX +echo Building x64 binaries... +REM add projects with /t to build AAX msbuild NeuralAmpModeler.sln /t:NeuralAmpModeler-app;NeuralAmpModeler-vst3 /p:configuration=release /p:platform=x64 /nologo /verbosity:minimal /fileLogger /m /flp:logfile=build-win.log;errorsonly;append +echo Building ARM64EC binaries... +msbuild NeuralAmpModeler.sln /t:NeuralAmpModeler-app;NeuralAmpModeler-vst3 /p:configuration=release /p:platform=ARM64EC /nologo /verbosity:minimal /fileLogger /m /flp:logfile=build-win.log;errorsonly;append + REM --echo Copying AAX Presets REM --echo ------------------------------------------------------------------ diff --git a/NeuralAmpModeler/scripts/makezip-win.py b/NeuralAmpModeler/scripts/makezip-win.py index b1b2b4aaa..57f86fbb2 100644 --- a/NeuralAmpModeler/scripts/makezip-win.py +++ b/NeuralAmpModeler/scripts/makezip-win.py @@ -43,7 +43,10 @@ def main(): files = [ projectpath + "\\build-win\\NeuralAmpModeler.vst3\\Contents\\x86_64-win\\NeuralAmpModeler.vst3", + projectpath + + "\\build-win\\NeuralAmpModeler.vst3\\Contents\\arm64ec-win\\NeuralAmpModeler.vst3", projectpath + "\\build-win\\NeuralAmpModeler_x64.exe", + projectpath + "\\build-win\\NeuralAmpModeler_ARM64EC.exe", ] zipname = get_archive_name(projectpath, "win", "demo" if demo == 1 else "full") @@ -65,7 +68,9 @@ def main(): files = [ projectpath + "\\build-win\\pdbs\\NeuralAmpModeler-vst3_x64.pdb", + projectpath + "\\build-win\\pdbs\\NeuralAmpModeler-vst3_ARM64EC.pdb", projectpath + "\\build-win\\pdbs\\NeuralAmpModeler-app_x64.pdb", + projectpath + "\\build-win\\pdbs\\NeuralAmpModeler-app_ARM64EC.pdb", ] for f in files: diff --git a/NeuralAmpModeler/scripts/postbuild-win.bat b/NeuralAmpModeler/scripts/postbuild-win.bat index a74b5639c..94e6ae0bd 100644 --- a/NeuralAmpModeler/scripts/postbuild-win.bat +++ b/NeuralAmpModeler/scripts/postbuild-win.bat @@ -1,6 +1,6 @@ @echo off -REM - CALL "$(SolutionDir)scripts\postbuild-win.bat" "$(TargetExt)" "$(BINARY_NAME)" "$(Platform)" "$(TargetPath)" "$(VST3_32_PATH)" "$(VST3_64_PATH)" "$(AAX_32_PATH)" "$(AAX_64_PATH)" "$(BUILD_DIR)" "$(VST_ICON)" "$(AAX_ICON)" " +REM - CALL "$(SolutionDir)scripts\postbuild-win.bat" "$(TargetExt)" "$(BINARY_NAME)" "$(Platform)" "$(TargetPath)" "$(VST3_ARM64EC_PATH)" "$(VST3_X64_PATH)" "$(AAX_ARM64EC_PATH)" "$(AAX_X64_PATH)" "$(BUILD_DIR)" "$(VST_ICON)" "$(AAX_ICON)" " REM $(CREATE_BUNDLE_SCRIPT)" REM Anchor paths to this script: if %0 is relative, %~dp0 can be wrong; %~f0 fixes that. @@ -13,16 +13,16 @@ set "NAME=%~2" set "PLATFORM=%~3" set "BUILT_BINARY=%~4" set "BUILT_BINARY_DIR=%~dp4" -set "VST3_32_PATH=%~5" -set "VST3_64_PATH=%~6" +set "VST3_ARM64EC_PATH=%~5" +set "VST3_X64_PATH=%~6" shift shift shift shift shift shift -set "AAX_32_PATH=%~1" -set "AAX_64_PATH=%~2" +set "AAX_ARM64EC_PATH=%~1" +set "AAX_X64_PATH=%~2" set "BUILD_DIR=%~3" set "VST_ICON=%~4" set "AAX_ICON=%~5" @@ -36,8 +36,10 @@ echo FORMAT %FORMAT% echo NAME %NAME% echo PLATFORM %PLATFORM% echo BUILT_BINARY %BUILT_BINARY% -echo VST3_32_PATH %VST3_32_PATH% -echo VST3_64_PATH %VST3_64_PATH% +echo VST3_ARM64EC_PATH %VST3_ARM64EC_PATH% +echo VST3_X64_PATH %VST3_X64_PATH% +echo AAX_ARM64EC_PATH %AAX_ARM64EC_PATH% +echo AAX_X64_PATH %AAX_X64_PATH% echo BUILD_DIR %BUILD_DIR% echo VST_ICON %VST_ICON% echo AAX_ICON %AAX_ICON% @@ -49,7 +51,7 @@ if not exist "%THIRD_PARTY_NOTICES%" ( ) REM Use quoted IF operands: "if x64 == \"x64\"" is false in cmd.exe; "if \"%VAR%\"==\"x64\"" works. -if /i "%PLATFORM%"=="Win32" ( +if /i "%PLATFORM%"=="ARM64EC" ( if "%FORMAT%"==".exe" ( copy /y "%BUILT_BINARY%" "%BUILD_DIR%\%NAME%_%PLATFORM%.exe" call :CopyThirdPartyNotices "%BUILD_DIR%" @@ -61,26 +63,26 @@ if /i "%PLATFORM%"=="Win32" ( ) if "%FORMAT%"==".vst3" ( - echo copying 32bit binary to VST3 BUNDLE .. + echo copying ARM64EC binary to VST3 BUNDLE .. call "%CREATE_BUNDLE_SCRIPT%" "%BUILD_DIR%\%NAME%.vst3" "%VST_ICON%" "%FORMAT%" - copy /y "%BUILT_BINARY%" "%BUILD_DIR%\%NAME%.vst3\Contents\x86-win" + copy /y "%BUILT_BINARY%" "%BUILD_DIR%\%NAME%.vst3\Contents\arm64ec-win" call :CopyThirdPartyNotices "%BUILD_DIR%\%NAME%.vst3\Contents\Resources" call :CopyThirdPartyNotices "%BUILT_BINARY_DIR%" - if exist "!VST3_32_PATH!" ( - echo copying VST3 bundle to 32bit VST3 Plugins folder ... - call "%CREATE_BUNDLE_SCRIPT%" "!VST3_32_PATH!\%NAME%.vst3" "%VST_ICON%" "%FORMAT%" - xcopy /E /H /Y "%BUILD_DIR%\%NAME%.vst3\Contents\*" "!VST3_32_PATH!\%NAME%.vst3\Contents\" + if exist "!VST3_ARM64EC_PATH!" ( + echo copying VST3 bundle to ARM64EC VST3 Plugins folder ... + call "%CREATE_BUNDLE_SCRIPT%" "!VST3_ARM64EC_PATH!\%NAME%.vst3" "%VST_ICON%" "%FORMAT%" + xcopy /E /H /Y "%BUILD_DIR%\%NAME%.vst3\Contents\*" "!VST3_ARM64EC_PATH!\%NAME%.vst3\Contents\" ) ) if "%FORMAT%"==".aaxplugin" ( - echo copying 32bit binary to AAX BUNDLE .. + echo copying ARM64EC binary to AAX BUNDLE .. call "%CREATE_BUNDLE_SCRIPT%" "%BUILD_DIR%\%NAME%.aaxplugin" "%AAX_ICON%" "%FORMAT%" - copy /y "%BUILT_BINARY%" "%BUILD_DIR%\%NAME%.aaxplugin\Contents\Win32" + if not exist "%BUILD_DIR%\%NAME%.aaxplugin\Contents\Arm64ec" mkdir "%BUILD_DIR%\%NAME%.aaxplugin\Contents\Arm64ec" + copy /y "%BUILT_BINARY%" "%BUILD_DIR%\%NAME%.aaxplugin\Contents\Arm64ec" call :CopyThirdPartyNotices "%BUILD_DIR%\%NAME%.aaxplugin\Contents\Resources" - echo copying 32bit bundle to 32bit AAX Plugins folder ... - call "%CREATE_BUNDLE_SCRIPT%" "%BUILD_DIR%\%NAME%.aaxplugin" "%AAX_ICON%" "%FORMAT%" - xcopy /E /H /Y "%BUILD_DIR%\%NAME%.aaxplugin\Contents\*" "!AAX_32_PATH!\%NAME%.aaxplugin\Contents\" + echo copying ARM64EC bundle to ARM64EC AAX Plugins folder ... + xcopy /E /H /Y "%BUILD_DIR%\%NAME%.aaxplugin\Contents\*" "!AAX_ARM64EC_PATH!\%NAME%.aaxplugin\Contents\" ) ) @@ -101,10 +103,10 @@ if /i "%PLATFORM%"=="x64" ( copy /y "%BUILT_BINARY%" "%BUILD_DIR%\%NAME%.vst3\Contents\x86_64-win" call :CopyThirdPartyNotices "%BUILD_DIR%\%NAME%.vst3\Contents\Resources" call :CopyThirdPartyNotices "%BUILT_BINARY_DIR%" - if exist "!VST3_64_PATH!" ( + if exist "!VST3_X64_PATH!" ( echo copying VST3 bundle to 64bit VST3 Plugins folder ... - call "%CREATE_BUNDLE_SCRIPT%" "!VST3_64_PATH!\%NAME%.vst3" "%VST_ICON%" "%FORMAT%" - xcopy /E /H /Y "%BUILD_DIR%\%NAME%.vst3\Contents\*" "!VST3_64_PATH!\%NAME%.vst3\Contents\" + call "%CREATE_BUNDLE_SCRIPT%" "!VST3_X64_PATH!\%NAME%.vst3" "%VST_ICON%" "%FORMAT%" + xcopy /E /H /Y "%BUILD_DIR%\%NAME%.vst3\Contents\*" "!VST3_X64_PATH!\%NAME%.vst3\Contents\" ) ) @@ -115,7 +117,7 @@ if /i "%PLATFORM%"=="x64" ( call :CopyThirdPartyNotices "%BUILD_DIR%\%NAME%.aaxplugin\Contents\Resources" echo copying 64bit bundle to 64bit AAX Plugins folder ... call "%CREATE_BUNDLE_SCRIPT%" "%BUILD_DIR%\%NAME%.aaxplugin" "%AAX_ICON%" "%FORMAT%" - xcopy /E /H /Y "%BUILD_DIR%\%NAME%.aaxplugin\Contents\*" "!AAX_64_PATH!\%NAME%.aaxplugin\Contents\" + xcopy /E /H /Y "%BUILD_DIR%\%NAME%.aaxplugin\Contents\*" "!AAX_X64_PATH!\%NAME%.aaxplugin\Contents\" ) ) diff --git a/common-win.props b/common-win.props index 6b63c47e3..26fabb30b 100644 --- a/common-win.props +++ b/common-win.props @@ -31,12 +31,12 @@ $(IPLUG_DEPS_PATH)\VST3_SDK $(IPLUG_DEPS_PATH)\RTAudio\include $(IPLUG_DEPS_PATH)\AAX_SDK - $(ProgramFiles)\REAPER\reaper.exe - $(ProgramW6432)\REAPER (x64)\reaper.exe - $(CommonProgramFiles)\VST3 - $(CommonProgramW6432)\VST3 - $(CommonProgramFiles)\Avid\Audio\Plug-Ins - $(CommonProgramW6432)\Avid\Audio\Plug-Ins + $(ProgramW6432)\REAPER (arm64)\reaper.exe + $(ProgramW6432)\REAPER (x64)\reaper.exe + $(CommonProgramW6432)\VST3 + $(CommonProgramW6432)\VST3 + $(CommonProgramW6432)\Avid\Audio\Plug-Ins + $(CommonProgramW6432)\Avid\Audio\Plug-Ins $(APPDATA)\REAPER\UserPlugins APP_API;__WINDOWS_DS__;__WINDOWS_MM__;__WINDOWS_ASIO__;IPLUG_EDITOR=1;IPLUG_DSP=1 VST3_API;IPLUG_EDITOR=1;IPLUG_DSP=1 @@ -52,8 +52,8 @@ WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;NOMINMAX wininet.lib;odbc32.lib;odbccp32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comctl32.lib; dsound.lib;winmm.lib; - $(SolutionDir)$(SolutionName).RPP - $(SolutionDir)$(SolutionName).RPP + $(SolutionDir)$(SolutionName).RPP + $(SolutionDir)$(SolutionName).RPP $(IPLUG_DEPS_PATH)/Reaper;$(IPLUG_PATH)\ReaperExt; $(AAX_SDK)\Utilities\PlugIn.ico $(IPLUG2_ROOT)\Scripts\icons\VST_Logo_Steinberg.ico @@ -71,9 +71,6 @@ stdcpp20 true - - StreamingSIMDExtensions2 - %(AdditionalDependencies) $(STATIC_LIBS_PATH);$(AAX_SDK)\Libs\$(Configuration);$(FAUST_LIB_PATH);%(AdditionalLibraryDirectories) @@ -171,23 +168,23 @@ $(AAX_SDK) - - $(VST3_32_HOST_PATH) + + $(VST3_ARM64EC_HOST_PATH) - - $(VST3_64_HOST_PATH) + + $(VST3_X64_HOST_PATH) - - $(VST3_32_PATH) + + $(VST3_ARM64EC_PATH) - - $(VST3_64_PATH) + + $(VST3_X64_PATH) - - $(AAX_32_PATH) + + $(AAX_ARM64EC_PATH) - - $(AAX_64_PATH) + + $(AAX_X64_PATH) $(REAPER_EXT_PATH) @@ -234,11 +231,11 @@ $(APP_LIBS) - - $(VST3_64_COMMAND_ARGS) + + $(VST3_X64_COMMAND_ARGS) - - $(VST3_32_COMMAND_ARGS) + + $(VST3_ARM64EC_COMMAND_ARGS) $(REAPER_INC_PATHS) diff --git a/iPlug2 b/iPlug2 index 66f9060b5..d32af03b3 160000 --- a/iPlug2 +++ b/iPlug2 @@ -1 +1 @@ -Subproject commit 66f9060b5287afdb2ddb83aab5a2a2a8e66a4d5e +Subproject commit d32af03b3cb55fd5d8d8ad52f5f724d615034916 From 33aefa51ee81bfe44fac93fe9f90ba1729acbeae Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Thu, 23 Jul 2026 23:27:12 +0200 Subject: [PATCH 2/8] Retarget iPlug2 submodule to official master + NAM fixes 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 --- NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj | 3 ++- NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj | 3 ++- NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj | 3 ++- common-win.props | 2 +- iPlug2 | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj index d7057db8d..d4401f679 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-aax.vcxproj @@ -414,7 +414,8 @@ - + + diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj index ac09d624d..4f1e03888 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-app.vcxproj @@ -397,7 +397,8 @@ - + + diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj index 930942d06..8fd8adea6 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-vst3.vcxproj @@ -425,7 +425,8 @@ - + + diff --git a/common-win.props b/common-win.props index 26fabb30b..ecf6e070e 100644 --- a/common-win.props +++ b/common-win.props @@ -54,7 +54,7 @@ dsound.lib;winmm.lib; $(SolutionDir)$(SolutionName).RPP $(SolutionDir)$(SolutionName).RPP - $(IPLUG_DEPS_PATH)/Reaper;$(IPLUG_PATH)\ReaperExt; + $(IPLUG_DEPS_PATH)\REAPER_SDK;$(IPLUG_PATH)\ReaperExt; $(AAX_SDK)\Utilities\PlugIn.ico $(IPLUG2_ROOT)\Scripts\icons\VST_Logo_Steinberg.ico $(DEPS_PATH)\Build\win\Faust\lib diff --git a/iPlug2 b/iPlug2 index d32af03b3..d0f989996 160000 --- a/iPlug2 +++ b/iPlug2 @@ -1 +1 @@ -Subproject commit d32af03b3cb55fd5d8d8ad52f5f724d615034916 +Subproject commit d0f9899962b49ce8cf7e0e327ec9914877d94699 From 0be9d00b6f4b768b167dd2ca0ce5361a4b5e6997 Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Thu, 23 Jul 2026 23:35:12 +0200 Subject: [PATCH 3/8] Point iPlug2 submodule at olilarkin fork (nam-fixes branch) 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 --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index e7f81f8d4..c161aff5b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "iPlug2"] path = iPlug2 - url = https://github.com/sdatkinson/iPlug2.git + url = https://github.com/olilarkin/iPlug2.git [submodule "eigen"] path = eigen url = https://gitlab.com/libeigen/eigen.git From 3eac3af5129e5db8a6b5d4ff1566cae5c93c6e9f Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Thu, 23 Jul 2026 23:40:24 +0200 Subject: [PATCH 4/8] Fix macOS AU build with modern Xcode: drop Rez build phase 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 --- .../project.pbxproj | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj index e4cff679f..f3753fc5a 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj @@ -386,7 +386,7 @@ 4FD16D4213B635AB001D0217 /* swell-wnd.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4FD16D4113B635AB001D0217 /* swell-wnd.mm */; settings = {COMPILER_FLAGS = "-Wno-unreachable-code -Wno-shorten-64-to-32 -Wno-deprecated-implementations"; }; }; 4FD16D4413B635B2001D0217 /* swell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FD16D4313B635B2001D0217 /* swell.cpp */; settings = {COMPILER_FLAGS = "-Wno-unreachable-code -Wno-shorten-64-to-32 -Wno-deprecated-implementations"; }; }; 4FD52131202A5B9B00A4D22A /* IPlugAU_view_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4FD5212E202A5B9B00A4D22A /* IPlugAU_view_factory.mm */; }; - 4FD52133202A5B9B00A4D22A /* IPlugAU.r in Rez */ = {isa = PBXBuildFile; fileRef = 4FD52130202A5B9B00A4D22A /* IPlugAU.r */; }; + 4FD52133202A5B9B00A4D22A /* IPlugAU.r in Resources */ = {isa = PBXBuildFile; fileRef = 4FD52130202A5B9B00A4D22A /* IPlugAU.r */; }; 4FD52136202A5BD000A4D22A /* dfx-au-utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FD52134202A5BD000A4D22A /* dfx-au-utilities.c */; }; 4FDAC0EA207D76C600299363 /* IPlugTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FDAC0E6207D76C600299363 /* IPlugTimer.cpp */; }; 4FDAC0EC207D76C600299363 /* IPlugTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FDAC0E6207D76C600299363 /* IPlugTimer.cpp */; }; @@ -2095,7 +2095,6 @@ 4FBCC1A21FD59C7300EFE550 /* Run Script - prepare_resources-mac.py */, 4F3AE1A212C0E5E2001FD7A4 /* Sources */, 4F25BECE12C61F47005D51F7 /* Resources */, - 4F3AE1DA12C0E5E2001FD7A4 /* Rez */, 4F744D4C14005ADA002FAD90 /* Run Script - clear_audiounit_caches.sh */, 4FBDD26520A319580054B111 /* Frameworks */, ); @@ -2344,6 +2343,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4FD52133202A5B9B00A4D22A /* IPlugAU.r in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2403,17 +2403,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXRezBuildPhase section */ - 4F3AE1DA12C0E5E2001FD7A4 /* Rez */ = { - isa = PBXRezBuildPhase; - buildActionMask = 2147483647; - files = ( - 4FD52133202A5B9B00A4D22A /* IPlugAU.r in Rez */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXRezBuildPhase section */ - /* Begin PBXShellScriptBuildPhase section */ 4F02E1D723144CDA00731A7D /* Run Script - Force register AUv3 */ = { isa = PBXShellScriptBuildPhase; From b024ab55c9cb94698f6a2e57c1efb94ce0aaf7e5 Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Thu, 23 Jul 2026 23:47:30 +0200 Subject: [PATCH 5/8] makedist-mac.sh: print compiler errors from raw log on failure xcpretty swallows the diagnostics in CI; grep the teed build-mac.log for errors when xcodebuild fails. Co-Authored-By: Claude Fable 5 --- NeuralAmpModeler/scripts/makedist-mac.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NeuralAmpModeler/scripts/makedist-mac.sh b/NeuralAmpModeler/scripts/makedist-mac.sh index 5e11d07dc..980b85ee8 100755 --- a/NeuralAmpModeler/scripts/makedist-mac.sh +++ b/NeuralAmpModeler/scripts/makedist-mac.sh @@ -157,7 +157,8 @@ xcodebuild -project ./projects/$PLUGIN_NAME-macOS.xcodeproj -xcconfig ./config/$ if [ "${PIPESTATUS[0]}" -ne "0" ]; then echo "ERROR: build failed, aborting" echo "" - # cat build-mac.log + echo "---- errors from build-mac.log ----" + grep -B 2 -A 8 -E "error:|fatal error" build-mac.log || tail -100 build-mac.log exit 1 else rm build-mac.log From 4ad4466374b7f1a66d694a917178358454c078bf Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Fri, 24 Jul 2026 00:18:38 +0200 Subject: [PATCH 6/8] Fix macOS build: remove AudioDSPTools vendored WDL headers from Xcode 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 --- .../NeuralAmpModeler-macOS.xcodeproj/project.pbxproj | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj b/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj index f3753fc5a..0ec2a0edb 100644 --- a/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj +++ b/NeuralAmpModeler/projects/NeuralAmpModeler-macOS.xcodeproj/project.pbxproj @@ -448,10 +448,6 @@ AA7C85FC2B439AC000B5FB3A /* _LanczosResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F42B439AC000B5FB3A /* _LanczosResampler.h */; }; AA7C85FD2B439AC000B5FB3A /* wdltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F62B439AC000B5FB3A /* wdltypes.h */; }; AA7C85FE2B439AC000B5FB3A /* wdltypes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F62B439AC000B5FB3A /* wdltypes.h */; }; - AA7C85FF2B439AC000B5FB3A /* ptrlist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F72B439AC000B5FB3A /* ptrlist.h */; }; - AA7C86002B439AC000B5FB3A /* ptrlist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F72B439AC000B5FB3A /* ptrlist.h */; }; - AA7C86012B439AC000B5FB3A /* heapbuf.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F82B439AC000B5FB3A /* heapbuf.h */; }; - AA7C86022B439AC000B5FB3A /* heapbuf.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C85F82B439AC000B5FB3A /* heapbuf.h */; }; AAB7BBB72CC4B8C6000B8B6E /* get_dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB7BBB62CC4B8C6000B8B6E /* get_dsp.h */; }; AAB7E0122CC4B8C6000B8B6E /* container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB7E0102CC4B8C6000B8B6E /* container.cpp */; }; AAB7E0132CC4B8C6000B8B6E /* container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB7E0102CC4B8C6000B8B6E /* container.cpp */; }; @@ -1036,8 +1032,6 @@ AA7C85F22B439AC000B5FB3A /* ResamplingContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResamplingContainer.h; sourceTree = ""; }; AA7C85F42B439AC000B5FB3A /* _LanczosResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _LanczosResampler.h; sourceTree = ""; }; AA7C85F62B439AC000B5FB3A /* wdltypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wdltypes.h; sourceTree = ""; }; - AA7C85F72B439AC000B5FB3A /* ptrlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ptrlist.h; sourceTree = ""; }; - AA7C85F82B439AC000B5FB3A /* heapbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = heapbuf.h; sourceTree = ""; }; AAB7BBB62CC4B8C6000B8B6E /* get_dsp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = get_dsp.h; sourceTree = ""; }; AAB7E0102CC4B8C6000B8B6E /* container.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = container.cpp; sourceTree = ""; }; B1D2F7002D0000010027AB66 /* wavenet/slimmable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wavenet/slimmable.cpp; sourceTree = ""; }; @@ -1986,8 +1980,6 @@ isa = PBXGroup; children = ( AA7C85F62B439AC000B5FB3A /* wdltypes.h */, - AA7C85F72B439AC000B5FB3A /* ptrlist.h */, - AA7C85F82B439AC000B5FB3A /* heapbuf.h */, ); path = WDL; sourceTree = ""; @@ -2003,7 +1995,6 @@ 4F2FB19B2A0047430027AB66 /* lstm.h in Headers */, 4F2FB1B02A0047430027AB66 /* dsp.h in Headers */, 4F2FB19A2A0047430027AB66 /* convnet.h in Headers */, - AA7C86022B439AC000B5FB3A /* heapbuf.h in Headers */, AA7C85FE2B439AC000B5FB3A /* wdltypes.h in Headers */, 4F4856862773C3B5005BCF8E /* IPlugAUAudioUnit.h in Headers */, 4F2FB15F2A0047420027AB66 /* NoiseGate.h in Headers */, @@ -2017,7 +2008,6 @@ 4F2FB15E2A0047420027AB66 /* wav.h in Headers */, AAB7BBB72CC4B8C6000B8B6E /* get_dsp.h in Headers */, 4F2FB1902A0047430027AB66 /* version.h in Headers */, - AA7C86002B439AC000B5FB3A /* ptrlist.h in Headers */, 4F4856852773C3B5005BCF8E /* IPlugAUViewController.h in Headers */, AA7C85FC2B439AC000B5FB3A /* _LanczosResampler.h in Headers */, 4F2FB17C2A0047430027AB66 /* ImpulseResponse.h in Headers */, @@ -2046,7 +2036,6 @@ AA7C85FB2B439AC000B5FB3A /* _LanczosResampler.h in Headers */, 4FC3EFF22086CE5700BD11FA /* hostclasses.h in Headers */, 4F03A5D420A4621100EBDFFB /* IGraphicsUtilities.h in Headers */, - AA7C85FF2B439AC000B5FB3A /* ptrlist.h in Headers */, 4F03A5AA20A4621100EBDFFB /* IGraphicsLiveEdit.h in Headers */, 4F6369EA20A466470022C370 /* IControl.h in Headers */, 4F03A5D520A4621100EBDFFB /* IGraphicsConstants.h in Headers */, @@ -2059,7 +2048,6 @@ 4F8C10E720BA2796006320CD /* IGraphicsEditorDelegate.h in Headers */, AA7C85F92B439AC000B5FB3A /* ResamplingContainer.h in Headers */, AA341E272B9E5A530069C260 /* ToneStack.h in Headers */, - AA7C86012B439AC000B5FB3A /* heapbuf.h in Headers */, 4FC3EFFA2086CE5700BD11FA /* parameterchanges.h in Headers */, 4F03A5B320A4621100EBDFFB /* IGraphics_include_in_plug_src.h in Headers */, 4FC3EFFC2086CE5700BD11FA /* plugprovider.h in Headers */, From 7eeedde9c1ff6dcd5d719cbb7bd0bd36c0622394 Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Fri, 24 Jul 2026 00:32:09 +0200 Subject: [PATCH 7/8] CI: fail loudly on Windows build errors and pin windows-2022 runner 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 --- .github/workflows/build-native.yml | 10 ++++++---- .github/workflows/release-native.yml | 16 ++++++++-------- NeuralAmpModeler/scripts/makedist-win.bat | 18 ++++++++++++++---- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-native.yml b/.github/workflows/build-native.yml index 724c27ec4..cc6098aba 100644 --- a/.github/workflows/build-native.yml +++ b/.github/workflows/build-native.yml @@ -18,12 +18,14 @@ jobs: runs-on: ${{matrix.os}} strategy: matrix: - os: [macos-latest, windows-latest] + # windows-2022 pinned: windows-latest images ship VS2026, which lacks + # the v143 ARM64EC toolset the projects target + os: [macos-latest, windows-2022] include: - os: macos-latest build_dir: build-mac artifact_ext: mac - - os: windows-latest + - os: windows-2022 build_dir: build-win artifact_ext: win @@ -53,11 +55,11 @@ jobs: shell: bash - name: Add msbuild to PATH (Windows) - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' uses: microsoft/setup-msbuild@v1.0.2 - name: Build Windows - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' run: | cd ${{env.PROJECT_NAME}}\scripts .\makedist-win.bat full zip diff --git a/.github/workflows/release-native.yml b/.github/workflows/release-native.yml index 2d55f4edf..4e07938f2 100644 --- a/.github/workflows/release-native.yml +++ b/.github/workflows/release-native.yml @@ -38,11 +38,11 @@ jobs: runs-on: ${{matrix.os}} strategy: matrix: - os: [macos-latest, windows-latest] + os: [macos-latest, windows-2022] include: - os: macos-latest build_dir: build-mac - - os: windows-latest + - os: windows-2022 build_dir: build-win steps: @@ -101,11 +101,11 @@ jobs: asset_content_type: application/octet-stream - name: Add msbuild to PATH (Windows) - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' uses: microsoft/setup-msbuild@v1.0.2 - name: Setup Python3 - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' uses: actions/setup-python@v2 with: python-version: '3.x' @@ -113,21 +113,21 @@ jobs: - name: Get Archive Name Windows id: win_archivename_step - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' run: | ARCHIVE_NAME=`python.exe iPlug2/Scripts/get_archive_name.py ${{env.PROJECT_NAME}} win full` echo "archive_name=$ARCHIVE_NAME" >> $GITHUB_OUTPUT shell: bash - name: Build Windows - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' run: | cd ${{env.PROJECT_NAME}}\scripts .\makedist-win.bat full installer shell: pwsh - name: Upload Windows pdb release asset - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} @@ -138,7 +138,7 @@ jobs: asset_content_type: application/zip - name: Upload Windows zip release asset - if: matrix.os == 'windows-latest' + if: matrix.os == 'windows-2022' uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/NeuralAmpModeler/scripts/makedist-win.bat b/NeuralAmpModeler/scripts/makedist-win.bat index f4a5ecc4a..f7c01b43c 100644 --- a/NeuralAmpModeler/scripts/makedist-win.bat +++ b/NeuralAmpModeler/scripts/makedist-win.bat @@ -76,9 +76,19 @@ REM - msbuild NeuralAmpModeler-app.vcxproj /p:configuration=release /p:platform= echo Building x64 binaries... REM add projects with /t to build AAX msbuild NeuralAmpModeler.sln /t:NeuralAmpModeler-app;NeuralAmpModeler-vst3 /p:configuration=release /p:platform=x64 /nologo /verbosity:minimal /fileLogger /m /flp:logfile=build-win.log;errorsonly;append +if %errorlevel% neq 0 ( + echo ERROR: x64 build failed, aborting + type build-win.log + exit /B 1 +) echo Building ARM64EC binaries... msbuild NeuralAmpModeler.sln /t:NeuralAmpModeler-app;NeuralAmpModeler-vst3 /p:configuration=release /p:platform=ARM64EC /nologo /verbosity:minimal /fileLogger /m /flp:logfile=build-win.log;errorsonly;append +if %errorlevel% neq 0 ( + echo ERROR: ARM64EC build failed, aborting + type build-win.log + exit /B 1 +) REM --echo Copying AAX Presets @@ -119,8 +129,10 @@ echo Making Installer ... echo Making Zip File ... ) -FOR /F "tokens=* USEBACKQ" %%F IN (`call python scripts\makezip-win.py %DEMO% %ZIP%`) DO ( -SET ZIP_NAME=%%F +call python scripts\makezip-win.py %DEMO% %ZIP% +if %errorlevel% neq 0 ( + echo ERROR: makezip-win.py failed, aborting + exit /B 1 ) echo ------------------------------------------------------------------ @@ -134,6 +146,4 @@ echo Usage: %0 [demo/full] [zip/installer] exit /B 1 :SUCCESS -echo %ZIP_NAME% - exit /B 0 \ No newline at end of file From 02fffb02faf68992bc18766c45907b6b77ed63f6 Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Fri, 24 Jul 2026 00:42:10 +0200 Subject: [PATCH 8/8] makezip-win.py: ship the multi-arch VST3 bundle instead of loose binaries 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 --- NeuralAmpModeler/scripts/makezip-win.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/NeuralAmpModeler/scripts/makezip-win.py b/NeuralAmpModeler/scripts/makezip-win.py index 57f86fbb2..074555e73 100644 --- a/NeuralAmpModeler/scripts/makezip-win.py +++ b/NeuralAmpModeler/scripts/makezip-win.py @@ -41,10 +41,6 @@ def main(): ] else: files = [ - projectpath - + "\\build-win\\NeuralAmpModeler.vst3\\Contents\\x86_64-win\\NeuralAmpModeler.vst3", - projectpath - + "\\build-win\\NeuralAmpModeler.vst3\\Contents\\arm64ec-win\\NeuralAmpModeler.vst3", projectpath + "\\build-win\\NeuralAmpModeler_x64.exe", projectpath + "\\build-win\\NeuralAmpModeler_ARM64EC.exe", ] @@ -59,6 +55,20 @@ def main(): print("adding " + f) zf.write(f, os.path.basename(f), zipfile.ZIP_DEFLATED) + if zip: + # add the multi-arch VST3 bundle (x86_64-win + arm64ec-win), preserving structure + bundlepath = projectpath + "\\build-win\\NeuralAmpModeler.vst3" + excluded_exts = (".pdb", ".exp", ".lib", ".ilk", ".ico", ".ini") + for root, dirs, bundlefiles in os.walk(bundlepath): + dirs[:] = [d for d in dirs if d != "x86-win"] # stale 32-bit folder from old builds + for bf in bundlefiles: + fullpath = os.path.join(root, bf) + if os.path.splitext(bf)[1].lower() in excluded_exts: + continue + arcname = "NeuralAmpModeler.vst3\\" + os.path.relpath(fullpath, bundlepath) + print("adding " + fullpath) + zf.write(fullpath, arcname, zipfile.ZIP_DEFLATED) + zf.close() print("wrote " + zipname)