View Issue Details

IDProjectCategoryView StatusLast Update
0001120OpenMPT[All Projects] Generalpublic2019-05-27 11:01
ReportermanxAssigned Tomanx 
PrioritylowSeverityminorReproducibilityhave not tried
Status resolvedResolutionfixed 
Product Version 
Target VersionOpenMPT 1.29 / libopenmpt 0.5 (goals)Fixed in VersionOpenMPT 1.29.00.* (current testing) 
Summary0001120: Rethink PluginBridge naming
Description

When targeting Windows on ARM, which can run native ARM and ARM64 desktop applications, separating VST plugins only by bitness makes no sense. The distinguishing feature the plugin bridge should be concerned with is architecture. Thus, it should support x86, x86-64, arm, arm64 (or other equivalent naming).
I.e., it would totally make sense to run OpenMPT ARM64 or ARM and use bridged x86 32bit VST plugins via the x86 emulation built into Windows.

TagsNo tags attached.
Has the bug occurred in previous versions?
Tested code revision (in case you know it)

Relationships

related to 0001123 assignedmanx Provide unified multi-arch installer 
related to 0001185 resolvedmanx Restructure MSVC bin directory layout 
related to 0001186 assignedmanx Remove Windows XP support 

Activities

manx

manx

2019-02-21 15:40

administrator  

pluginbridge-multiarch-v1.patch (108,127 bytes)
Index: build/auto/build_openmpt_release_packages.py
===================================================================
--- build/auto/build_openmpt_release_packages.py	(revision 11390)
+++ build/auto/build_openmpt_release_packages.py	(working copy)
@@ -72,8 +72,8 @@
 def copy_binaries(from_path, to_path):
     os.makedirs(to_path)
     copy_file(from_path, to_path, "mptrack.exe")
-    copy_file(from_path, to_path, "PluginBridge32.exe")
-    copy_file(from_path, to_path, "PluginBridge64.exe")
+    copy_file(from_path, to_path, "PluginBridge-x86.exe")
+    copy_file(from_path, to_path, "PluginBridge-amd64.exe")
     copy_file(from_path, to_path, "openmpt-lame.dll")
     copy_file(from_path, to_path, "openmpt-mpg123.dll")
     copy_file(from_path, to_path, "openmpt-soundtouch.dll")
Index: build/auto/package_openmpt_args.cmd
===================================================================
--- build/auto/package_openmpt_args.cmd	(revision 11390)
+++ build/auto/package_openmpt_args.cmd	(working copy)
@@ -46,10 +46,10 @@
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-mpg123.pdb .\ || goto error
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-soundtouch.dll .\ || goto error
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-soundtouch.pdb .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge32.exe .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge32.pdb .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge64.exe .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge64.pdb .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\x86\PluginBridge-x86.exe .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\x86\PluginBridge-x86.pdb .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\amd64\PluginBridge-amd64.exe .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\amd64\PluginBridge-amd64.pdb .\ || goto error
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-wine-support.zip .\ || goto error
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT% -mx=9 ..\openmpt\bin.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%.%MPT_PKG_FORMAT% ^
  LICENSE.txt ^
@@ -58,8 +58,8 @@
  openmpt-lame.dll ^
  openmpt-mpg123.dll ^
  openmpt-soundtouch.dll ^
- PluginBridge32.exe ^
- PluginBridge64.exe ^
+ PluginBridge-x86.exe ^
+ PluginBridge-amd64.exe ^
  openmpt-wine-support.zip ^
  extraKeymaps ^
  || goto error
@@ -68,8 +68,8 @@
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\openmpt-lame.pdb.%MPT_PKG_FORMAT_SYMBOLS% openmpt-lame.pdb || goto error
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\openmpt-mpg123.pdb.%MPT_PKG_FORMAT_SYMBOLS% openmpt-mpg123.pdb || goto error
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\openmpt-soundtouch.pdb.%MPT_PKG_FORMAT_SYMBOLS% openmpt-soundtouch.pdb || goto error
-..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge32.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge32.pdb || goto error
-..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge64.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge64.pdb || goto error
+..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge-x86.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge-x86.pdb || goto error
+..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge-amd64.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge-amd64.pdb || goto error
 cd .. || goto error
 ..\build\tools\7zip\7z.exe a -ttar openmpt-%MPT_DIST_VARIANT_TRK%.tar openmpt || goto error
 del /f /q openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%.%MPT_PKG_FORMAT%
Index: build/premake/mpt-PluginBridge.lua
===================================================================
--- build/premake/mpt-PluginBridge.lua	(revision 11390)
+++ build/premake/mpt-PluginBridge.lua	(working copy)
@@ -41,90 +41,14 @@
   warnings "Extra"
   prebuildcommands { "..\\..\\build\\svn_version\\update_svn_version_vs_premake.cmd $(IntDir)" }
   filter { "architecture:x86" }
-   targetsuffix "32"
+   targetsuffix "-x86"
   filter { "architecture:x86_64" }
-   targetsuffix "64"
+   targetsuffix "-amd64"
+  filter { "architecture:ARM" }
+   targetsuffix "-arm"
+  filter { "architecture:ARM64" }
+   targetsuffix "-arm64"
   filter {}
 	filter { "action:vs*", "architecture:x86_64" }
 		linkoptions { "/HIGHENTROPYVA:NO" }
 	filter {}
-
-	if _OPTIONS["win10"] then
-		filter { "architecture:x86", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\\$(TargetName).pdb\"",
-			}
-	elseif _OPTIONS["xp"] then
-		filter { "architecture:x86", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\\$(TargetName).pdb\"",
-			}
-	else
-		filter { "architecture:x86", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\\$(TargetName).pdb\"",
-			}
-	end
-
-	filter {}
-
Index: build/vs2015win7/PluginBridge.vcxproj
===================================================================
--- build/vs2015win7/PluginBridge.vcxproj	(revision 11390)
+++ build/vs2015win7/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -285,11 +285,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -319,11 +314,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -361,11 +351,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -403,11 +388,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -445,11 +425,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -487,11 +462,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -522,11 +492,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -558,11 +523,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -600,11 +560,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -642,11 +597,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -684,11 +634,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -726,11 +671,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: build/vs2015winxp/PluginBridge.vcxproj
===================================================================
--- build/vs2015winxp/PluginBridge.vcxproj	(revision 11390)
+++ build/vs2015winxp/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -287,11 +287,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -322,11 +317,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -365,11 +355,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -408,11 +393,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -451,11 +431,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -494,11 +469,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -531,11 +501,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -568,11 +533,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -611,11 +571,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -654,11 +609,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -697,11 +647,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -740,11 +685,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: build/vs2017win10/PluginBridge.vcxproj
===================================================================
--- build/vs2017win10/PluginBridge.vcxproj	(revision 11390)
+++ build/vs2017win10/PluginBridge.vcxproj	(working copy)
@@ -351,7 +351,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -358,7 +358,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
@@ -365,7 +365,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\Debug\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
@@ -372,7 +372,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\Debug\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -379,7 +379,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -386,7 +386,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
@@ -393,7 +393,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\Release\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
@@ -400,7 +400,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\Release\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -407,7 +407,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -414,7 +414,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|ARM'">
@@ -421,7 +421,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\Checked\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|ARM64'">
@@ -428,7 +428,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\Checked\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -435,7 +435,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -442,7 +442,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|ARM'">
@@ -449,7 +449,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\DebugShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|ARM64'">
@@ -456,7 +456,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\DebugShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -463,7 +463,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -470,7 +470,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|ARM'">
@@ -477,7 +477,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|ARM64'">
@@ -484,7 +484,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -491,7 +491,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -498,7 +498,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|ARM'">
@@ -505,7 +505,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\CheckedShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|ARM64'">
@@ -512,7 +512,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -545,11 +545,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -582,11 +577,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
     <ClCompile>
@@ -688,11 +678,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -732,11 +717,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
     <ClCompile>
@@ -852,11 +832,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -896,11 +871,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|ARM'">
     <ClCompile>
@@ -1009,11 +979,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -1047,11 +1012,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|ARM'">
     <ClCompile>
@@ -1155,11 +1115,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -1199,11 +1154,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|ARM'">
     <ClCompile>
@@ -1319,11 +1269,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -1363,11 +1308,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|ARM'">
     <ClCompile>
Index: build/vs2017win7/PluginBridge.vcxproj
===================================================================
--- build/vs2017win7/PluginBridge.vcxproj	(revision 11390)
+++ build/vs2017win7/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -288,11 +288,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -325,11 +320,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -369,11 +359,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -413,11 +398,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -457,11 +437,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -501,11 +476,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -538,11 +508,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -576,11 +541,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -620,11 +580,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -664,11 +619,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -708,11 +658,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -752,11 +697,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: build/vs2017winxp/PluginBridge.vcxproj
===================================================================
--- build/vs2017winxp/PluginBridge.vcxproj	(revision 11390)
+++ build/vs2017winxp/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -289,11 +289,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -326,11 +321,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -370,11 +360,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -414,11 +399,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -458,11 +438,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -502,11 +477,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -540,11 +510,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -578,11 +543,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -622,11 +582,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -666,11 +621,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -710,11 +660,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -754,11 +699,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: installer/install.iss
===================================================================
--- installer/install.iss	(revision 11390)
+++ installer/install.iss	(working copy)
@@ -59,15 +59,15 @@
 ; preserve file type order for best solid compression results (first binary, then text)
 ; base folder
 Source: ..\bin\{#PlatformFolder}\mptrack.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
-Source: ..\bin\{#PlatformFolder}\PluginBridge32.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
-Source: ..\bin\{#PlatformFolder}\PluginBridge64.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
+Source: ..\bin\{#PlatformFolder}\..\x86\PluginBridge-x86.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
+Source: ..\bin\{#PlatformFolder}\..\amd64\PluginBridge-amd64.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 Source: ..\bin\{#PlatformFolder}\openmpt-lame.dll; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 Source: ..\bin\{#PlatformFolder}\openmpt-mpg123.dll; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 Source: ..\bin\{#PlatformFolder}\openmpt-soundtouch.dll; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 ; Additional binaries for XP-/Vista-compatible version
 Source: ..\bin\{#PlatformFolderOld}\mptrack.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
-Source: ..\bin\{#PlatformFolderOld}\PluginBridge32.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
-Source: ..\bin\{#PlatformFolderOld}\PluginBridge64.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
+Source: ..\bin\{#PlatformFolderOld}\..\x86\PluginBridge-x86.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
+Source: ..\bin\{#PlatformFolderOld}\..\amd64\PluginBridge-amd64.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
 Source: ..\bin\{#PlatformFolderOld}\openmpt-lame.dll; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
 Source: ..\bin\{#PlatformFolderOld}\openmpt-mpg123.dll; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
 Source: ..\bin\{#PlatformFolderOld}\openmpt-soundtouch.dll; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
@@ -143,6 +143,9 @@
 Type: files; Name: {app}\Plugins\MIDI\MIDI Input Output.dll
 Type: dirifempty; Name: {app}\Plugins\MIDI
 Type: dirifempty; Name: {app}\Plugins
+; PLuginBridge uses arch naming now
+Type: files; Name: {app}\PluginBridge32.exe
+Type: files; Name: {app}\PluginBridge64.exe
 
 [UninstallDelete]
 ; internet shortcut has to be deleted manually
Index: mptrack/AbstractVstEditor.cpp
===================================================================
--- mptrack/AbstractVstEditor.cpp	(revision 11390)
+++ mptrack/AbstractVstEditor.cpp	(working copy)
@@ -457,7 +457,7 @@
 #ifndef NO_VST
 		const CVstPlugin *vstPlugin = dynamic_cast<CVstPlugin *>(&m_VstPlugin);
 		if(vstPlugin != nullptr && vstPlugin->isBridged)
-			title += mpt::cformat(_T(" (%1-Bit Bridged)"))(m_VstPlugin.GetPluginFactory().GetDllBits());
+			title += mpt::cformat(_T(" (%1 Bridged)"))(m_VstPlugin.GetPluginFactory().GetDllArchName());
 #endif // NO_VST
 
 		SetWindowText(title);
Index: mptrack/MainFrm.cpp
===================================================================
--- mptrack/MainFrm.cpp	(revision 11390)
+++ mptrack/MainFrm.cpp	(working copy)
@@ -2902,7 +2902,7 @@
 		if(vstPlug != nullptr && vstPlug->isBridged)
 		{
 			VSTPluginLib &lib = vstPlug->GetPluginFactory();
-			str += mpt::format(U_(" (%1-Bit Bridged)"))(lib.GetDllBits());
+			str += mpt::format(U_(" (%1 Bridged)"))(lib.GetDllArchName());
 		}
 
 		CBox.SetItemData(static_cast<int>(::SendMessageW(CBox.m_hWnd, CB_ADDSTRING, 0, (LPARAM)str.c_str())), iPlug + 1);
Index: mptrack/SelectPluginDialog.cpp
===================================================================
--- mptrack/SelectPluginDialog.cpp	(revision 11390)
+++ mptrack/SelectPluginDialog.cpp	(working copy)
@@ -389,7 +389,7 @@
 			CString title = plug.libraryName.ToCString();
 			if(!plug.IsNativeFromCache())
 			{
-				title += mpt::cformat(_T(" (%1-Bit)"))(plug.GetDllBits());
+				title += mpt::cformat(_T(" (%1)"))(plug.GetDllArchName());
 			}
 			HTREEITEM h = AddTreeItem(title, plug.isInstrument ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN, true, categoryFolders[plug.category], reinterpret_cast<LPARAM>(&plug));
 			categoryUsed[plug.category] = true;
@@ -512,9 +512,13 @@
 		if(pPlug->pluginId1 == Vst::kEffectMagic && !pPlug->isBuiltIn)
 		{
 			bool isBridgeAvailable =
-					((pPlug->GetDllBits() == 32) && IsComponentAvailable(pluginBridge32))
+					((pPlug->GetDllArch() == PluginArch_x86) && IsComponentAvailable(pluginBridge_x86))
 				||
-					((pPlug->GetDllBits() == 64) && IsComponentAvailable(pluginBridge64))
+					((pPlug->GetDllArch() == PluginArch_amd64) && IsComponentAvailable(pluginBridge_amd64))
+				||
+					((pPlug->GetDllArch() == PluginArch_arm) && IsComponentAvailable(pluginBridge_arm))
+				||
+					((pPlug->GetDllArch() == PluginArch_arm64) && IsComponentAvailable(pluginBridge_arm64))
 				;
 			if(TrackerSettings::Instance().bridgeAllPlugins || !isBridgeAvailable)
 			{
Index: mptrack/SelectPluginDialog.h
===================================================================
--- mptrack/SelectPluginDialog.h	(revision 11390)
+++ mptrack/SelectPluginDialog.h	(working copy)
@@ -20,8 +20,10 @@
 class CModDoc;
 struct SNDMIXPLUGIN;
 struct VSTPluginLib;
-class ComponentPluginBridge32;
-class ComponentPluginBridge64;
+class ComponentPluginBridge_x86;
+class ComponentPluginBridge_amd64;
+class ComponentPluginBridge_arm;
+class ComponentPluginBridge_arm64;
 
 class CSelectPluginDlg: public CDialog
 {
@@ -32,8 +34,10 @@
 	CButton m_chkBridge, m_chkShare;
 	mpt::ustring m_nameFilter;
 #ifndef NO_VST
-	ComponentHandle<ComponentPluginBridge32> pluginBridge32;
-	ComponentHandle<ComponentPluginBridge64> pluginBridge64;
+	ComponentHandle<ComponentPluginBridge_x86> pluginBridge_x86;
+	ComponentHandle<ComponentPluginBridge_amd64> pluginBridge_amd64;
+	ComponentHandle<ComponentPluginBridge_arm> pluginBridge_arm;
+	ComponentHandle<ComponentPluginBridge_arm64> pluginBridge_arm64;
 #endif
 	PLUGINDEX m_nPlugSlot;
 
Index: pluginBridge/BridgeWrapper.cpp
===================================================================
--- pluginBridge/BridgeWrapper.cpp	(revision 11390)
+++ pluginBridge/BridgeWrapper.cpp	(working copy)
@@ -27,9 +27,34 @@
 OPENMPT_NAMESPACE_BEGIN
 
 
-ComponentPluginBridge::ComponentPluginBridge(int bitness)
+std::size_t GetPluginArchPointerSize(PluginArch arch)
+{
+	std::size_t result = 0;
+	switch(arch)
+	{
+	case PluginArch_x86:
+		result = 4;
+		break;
+	case PluginArch_amd64:
+		result = 8;
+		break;
+	case PluginArch_arm:
+		result = 4;
+		break;
+	case PluginArch_arm64:
+		result = 8;
+		break;
+	default:
+		result = 0;
+		break;
+	}
+	return result;
+}
+
+
+ComponentPluginBridge::ComponentPluginBridge(PluginArch arch)
 	: ComponentBase(ComponentTypeBundled)
-	, bitness(bitness)
+	, arch(arch)
 	, availability(AvailabilityUnknown)
 {
 	return;
@@ -38,22 +63,70 @@
 
 bool ComponentPluginBridge::DoInitialize()
 {
-	if(bitness != 32 && bitness != 64)
+	mpt::PathString archName;
+	switch(arch)
 	{
+	case PluginArch_x86:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::x86) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("x86");
+		break;
+	case PluginArch_amd64:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::amd64) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("amd64");
+		break;
+	case PluginArch_arm:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::arm) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("arm");
+		break;
+	case PluginArch_arm64:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::arm64) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("arm64");
+		break;
+	default:
+		break;
+	}
+	if(archName.empty())
+	{
 		return false;
 	}
-	exeName = theApp.GetAppDirPath();
-	if(bitness == 32)
+	if(exeName.empty())
 	{
-		exeName += P_("PluginBridge32.exe");
+		mpt::PathString exeNameLocal = theApp.GetAppDirPath() + P_("PluginBridge-") + archName + P_(".exe");
+		if(exeNameLocal.IsFile())
+		{
+			exeName = exeNameLocal;
+		}
 	}
-	if(bitness == 64)
+	if(exeName.empty())
 	{
-		exeName += P_("PluginBridge64.exe");
+		mpt::PathString exeNameMultiArch = theApp.GetAppDirPath() + P_("..") + P_("\\") + archName + P_("\\") + P_("PluginBridge.exe");
+		if(exeNameMultiArch.IsFile())
+		{
+			exeName = exeNameMultiArch;
+		}
 	}
-	// First, check for validity of the bridge executable.
-	if(!exeName.IsFile())
+	if(exeName.empty())
 	{
+		mpt::PathString exeNameMultiArchTransitional = theApp.GetAppDirPath() + P_("..") + P_("\\") + archName + P_("\\") + P_("PluginBridge-") + archName + P_(".exe");
+		if(exeNameMultiArchTransitional.IsFile())
+		{
+			exeName = exeNameMultiArchTransitional;
+		}
+	}
+	if(exeName.empty())
+	{
 		availability = AvailabilityMissing;
 		return false;
 	}
@@ -74,15 +147,44 @@
 }
 
 
-MPT_REGISTERED_COMPONENT(ComponentPluginBridge32, "PluginBridge32")
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_x86, "PluginBridge-x86")
 
-MPT_REGISTERED_COMPONENT(ComponentPluginBridge64, "PluginBridge64")
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_amd64, "PluginBridge-amd64")
 
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_arm, "PluginBridge-arm")
 
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_arm64, "PluginBridge-arm64")
+
+
+PluginArch BridgeWrapper::GetNativePluginBinaryType()
+{
+	PluginArch result = PluginArch_unknown;
+	switch(mpt::Windows::GetProcessArchitecture())
+	{
+	case mpt::Windows::Architecture::x86:
+		result = PluginArch_x86;
+		break;
+	case mpt::Windows::Architecture::amd64:
+		result = PluginArch_amd64;
+		break;
+	case mpt::Windows::Architecture::arm:
+		result = PluginArch_arm;
+		break;
+	case mpt::Windows::Architecture::arm64:
+		result = PluginArch_arm64;
+		break;
+	default:
+		result = PluginArch_unknown;
+		break;
+	}
+	return result;
+}
+
+
 // Check whether we need to load a 32-bit or 64-bit wrapper.
-BridgeWrapper::BinaryType BridgeWrapper::GetPluginBinaryType(const mpt::PathString &pluginPath)
+PluginArch BridgeWrapper::GetPluginBinaryType(const mpt::PathString &pluginPath)
 {
-	BinaryType type = binUnknown;
+	PluginArch type = PluginArch_unknown;
 	mpt::ifstream file(pluginPath, std::ios::in | std::ios::binary);
 	if(file.is_open())
 	{
@@ -95,10 +197,26 @@
 			file.read(reinterpret_cast<char *>(&ntHeader), sizeof(ntHeader));
 
 			ASSERT((ntHeader.FileHeader.Characteristics & IMAGE_FILE_DLL) != 0);
-			if(ntHeader.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
-				type = bin32Bit;
-			else if(ntHeader.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
-				type = bin64Bit;
+			switch(ntHeader.FileHeader.Machine)
+			{
+			case IMAGE_FILE_MACHINE_I386:
+				type = PluginArch_x86;
+				break;
+			case IMAGE_FILE_MACHINE_AMD64:
+				type = PluginArch_amd64;
+				break;
+#if (_WIN32_WINNT >= 0x0A00) // Win10
+			case IMAGE_FILE_MACHINE_ARM:
+				type = PluginArch_arm;
+				break;
+			case IMAGE_FILE_MACHINE_ARM64:
+				type = PluginArch_arm64;
+				break;
+#endif // Win10
+			default:
+				type = PluginArch_unknown;
+				break;
+			}
 		}
 	}
 	return type;
@@ -193,16 +311,37 @@
 	if(sharedInstace == nullptr)
 	{
 		// Create a new bridge instance
-		BinaryType binType;
-		if((binType = GetPluginBinaryType(pluginPath)) == binUnknown)
+		const PluginArch arch = GetPluginBinaryType(pluginPath);
+		bool available = false;
+		switch(arch)
 		{
+		case PluginArch_x86:
+			available = IsComponentAvailable(pluginBridge_x86);
+			break;
+		case PluginArch_amd64:
+			available = IsComponentAvailable(pluginBridge_amd64);
+			break;
+		case PluginArch_arm:
+			available = IsComponentAvailable(pluginBridge_arm);
+			break;
+		case PluginArch_arm64:
+			available = IsComponentAvailable(pluginBridge_arm64);
+			break;
+		default:
+			break;
+		}
+		if(arch == PluginArch_unknown)
+		{
 			return false;
 		}
-
-		const bool available = (binType == bin32Bit) ? IsComponentAvailable(pluginBridge32) : IsComponentAvailable(pluginBridge64);
 		if(!available)
 		{
-			ComponentPluginBridge::Availability availability = (binType == bin32Bit) ? pluginBridge32->GetAvailability() : pluginBridge64->GetAvailability();
+			ComponentPluginBridge::Availability availability =
+				(arch == PluginArch_x86) ? pluginBridge_x86->GetAvailability() :
+				(arch == PluginArch_amd64) ? pluginBridge_amd64->GetAvailability() :
+				(arch == PluginArch_arm) ? pluginBridge_arm->GetAvailability() :
+				(arch == PluginArch_arm64) ? pluginBridge_arm64->GetAvailability() :
+				ComponentPluginBridge::AvailabilityUnknown;
 			switch(availability)
 			{
 				case ComponentPluginBridge::AvailabilityMissing:
@@ -217,10 +356,15 @@
 					break;
 			}
 		}
-
-		const mpt::PathString exeName = (binType == bin32Bit) ? pluginBridge32->GetFileName() : pluginBridge64->GetFileName();
+		const ComponentPluginBridge * const pluginBridge =
+			(arch == PluginArch_x86) ? static_cast<const ComponentPluginBridge*>(pluginBridge_x86.get()) :
+			(arch == PluginArch_amd64) ? static_cast<const ComponentPluginBridge*>(pluginBridge_amd64.get()) :
+			(arch == PluginArch_arm) ? static_cast<const ComponentPluginBridge*>(pluginBridge_arm.get()) :
+			(arch == PluginArch_arm64) ? static_cast<const ComponentPluginBridge*>(pluginBridge_arm64.get()) :
+			nullptr;
+		const mpt::PathString exeName = pluginBridge->GetFileName();
 	
-		otherPtrSize = binType;
+		otherPtrSize = static_cast<int32>(GetPluginArchPointerSize(arch));
 
 		// Command-line must be a modifiable string...
 		wchar_t cmdLine[128];
Index: pluginBridge/BridgeWrapper.h
===================================================================
--- pluginBridge/BridgeWrapper.h	(revision 11390)
+++ pluginBridge/BridgeWrapper.h	(working copy)
@@ -21,6 +21,17 @@
 
 struct VSTPluginLib;
 
+enum PluginArch : int
+{
+	PluginArch_unknown =        0,
+	PluginArch_x86     =       32,
+	PluginArch_amd64   =       64,
+	PluginArch_arm     = 128 + 32,
+	PluginArch_arm64   = 128 + 64,
+};
+
+std::size_t GetPluginArchPointerSize(PluginArch arch);
+
 class ComponentPluginBridge
 	: public ComponentBase
 {
@@ -33,11 +44,11 @@
 		AvailabilityWrongVersion = -2,
 	};
 private:
-	const int bitness;
+	const PluginArch arch;
 	mpt::PathString exeName;
 	Availability availability;
 protected:
-	ComponentPluginBridge(int bitness);
+	ComponentPluginBridge(PluginArch arch);
 protected:
 	bool DoInitialize() override;
 public:
@@ -45,22 +56,38 @@
 	mpt::PathString GetFileName() const { return exeName; }
 };
 
-class ComponentPluginBridge32
+class ComponentPluginBridge_x86
 	: public ComponentPluginBridge
 {
 	MPT_DECLARE_COMPONENT_MEMBERS
 public:
-	ComponentPluginBridge32() : ComponentPluginBridge(32) { }
+	ComponentPluginBridge_x86() : ComponentPluginBridge(PluginArch_x86) { }
 };
 
-class ComponentPluginBridge64
+class ComponentPluginBridge_amd64
 	: public ComponentPluginBridge
 {
 	MPT_DECLARE_COMPONENT_MEMBERS
 public:
-	ComponentPluginBridge64() : ComponentPluginBridge(64) { }
+	ComponentPluginBridge_amd64() : ComponentPluginBridge(PluginArch_amd64) { }
 };
 
+class ComponentPluginBridge_arm
+	: public ComponentPluginBridge
+{
+	MPT_DECLARE_COMPONENT_MEMBERS
+public:
+	ComponentPluginBridge_arm() : ComponentPluginBridge(PluginArch_arm) { }
+};
+
+class ComponentPluginBridge_arm64
+	: public ComponentPluginBridge
+{
+	MPT_DECLARE_COMPONENT_MEMBERS
+public:
+	ComponentPluginBridge_arm64() : ComponentPluginBridge(PluginArch_arm64) { }
+};
+
 class BridgeWrapper : protected BridgeCommon
 {
 protected:
@@ -88,17 +115,13 @@
 	Vst::ERect editRect;
 	Vst::VstSpeakerArrangement speakers[2];
 
-	ComponentHandle<ComponentPluginBridge32> pluginBridge32;
-	ComponentHandle<ComponentPluginBridge64> pluginBridge64;
+	ComponentHandle<ComponentPluginBridge_x86> pluginBridge_x86;
+	ComponentHandle<ComponentPluginBridge_amd64> pluginBridge_amd64;
+	ComponentHandle<ComponentPluginBridge_arm> pluginBridge_arm;
+	ComponentHandle<ComponentPluginBridge_arm64> pluginBridge_arm64;
 
 public:
-	enum BinaryType
-	{
-		binUnknown = 0,
-		bin32Bit = 32,
-		bin64Bit = 64,
-	};
-
+	
 	// Generic bridge exception
 	class BridgeException : public std::exception
 	{
@@ -120,8 +143,9 @@
 	};
 
 public:
-	static BinaryType GetPluginBinaryType(const mpt::PathString &pluginPath);
-	static bool IsPluginNative(const mpt::PathString &pluginPath) { return GetPluginBinaryType(pluginPath) == mpt::arch_bits; }
+	static PluginArch GetNativePluginBinaryType();
+	static PluginArch GetPluginBinaryType(const mpt::PathString &pluginPath);
+	static bool IsPluginNative(const mpt::PathString &pluginPath) { return GetPluginBinaryType(pluginPath) == GetNativePluginBinaryType(); }
 	static uint64 GetFileVersion(const WCHAR *exePath);
 
 	static Vst::AEffect *Create(const VSTPluginLib &plugin);
Index: soundlib/plugins/PluginManager.cpp
===================================================================
--- soundlib/plugins/PluginManager.cpp	(revision 11390)
+++ soundlib/plugins/PluginManager.cpp	(working copy)
@@ -70,23 +70,91 @@
 #endif // MODPLUG_TRACKER
 
 
-uint8 VSTPluginLib::GetDllBits(bool fromCache) const
+uint8 VSTPluginLib::GetNativePluginArch()
 {
+	uint8 result = 0;
+	switch(mpt::Windows::GetProcessArchitecture())
+	{
+	case mpt::Windows::Architecture::x86:
+		result = PluginArch_x86;
+		break;
+	case mpt::Windows::Architecture::amd64:
+		result = PluginArch_amd64;
+		break;
+	case mpt::Windows::Architecture::arm:
+		result = PluginArch_arm;
+		break;
+	case mpt::Windows::Architecture::arm64:
+		result = PluginArch_arm64;
+		break;
+	default:
+		result = 0;
+		break;
+	}
+	return result;
+}
+
+
+mpt::ustring VSTPluginLib::GetPluginArchName(uint8 arch)
+{
+	mpt::ustring result;
+	switch(arch)
+	{
+	case PluginArch_x86:
+		result = U_("x86");
+		break;
+	case PluginArch_amd64:
+		result = U_("amd64");
+		break;
+	case PluginArch_arm:
+		result = U_("arm");
+		break;
+	case PluginArch_arm64:
+		result = U_("arm64");
+		break;
+	default:
+		result = U_("");
+		break;
+	}
+	return result;
+}
+
+
+uint8 VSTPluginLib::GetDllArch(bool fromCache) const
+{
 	// Built-in plugins are always native.
 	if(dllPath.empty())
-		return mpt::arch_bits;
+		return GetNativePluginArch();
 #ifndef NO_VST
-	if(!dllBits || !fromCache)
+	if(!dllArch || !fromCache)
 	{
-		dllBits = static_cast<uint8>(BridgeWrapper::GetPluginBinaryType(dllPath));
+		dllArch = static_cast<uint8>(BridgeWrapper::GetPluginBinaryType(dllPath));
 	}
 #else
 	MPT_UNREFERENCED_PARAMETER(fromCache);
 #endif // NO_VST
-	return dllBits;
+	return dllArch;
 }
 
 
+mpt::ustring VSTPluginLib::GetDllArchName(bool fromCache) const
+{
+	return GetPluginArchName(GetDllArch(fromCache));
+}
+
+
+bool VSTPluginLib::IsNative(bool fromCache) const
+{
+	return GetDllArch(fromCache) == GetNativePluginArch();
+}
+
+
+bool VSTPluginLib::IsNativeFromCache() const
+{
+	return dllArch == GetNativePluginArch() || dllArch == 0;
+}
+
+
 // PluginCache format:
 // FullDllPath = <ID1><ID2><CRC32> (hex-encoded)
 // <ID1><ID2><CRC32>.Flags = Plugin Flags (see VSTPluginLib::DecodeCacheFlags).
Index: soundlib/plugins/PluginManager.h
===================================================================
--- soundlib/plugins/PluginManager.h	(revision 11390)
+++ soundlib/plugins/PluginManager.h	(working copy)
@@ -23,6 +23,7 @@
 class CSoundFile;
 class IMixPlugin;
 struct SNDMIXPLUGIN;
+enum PluginArch;
 
 struct VSTPluginLib
 {
@@ -66,7 +67,7 @@
 	bool isInstrument : 1;
 	bool useBridge : 1, shareBridgeInstance : 1;
 protected:
-	mutable uint8 dllBits = 0;
+	mutable uint8 dllArch = 0;
 
 public:
 	VSTPluginLib(CreateProc factoryProc, bool isBuiltIn, const mpt::PathString &dllPath, const mpt::PathString &libraryName
@@ -86,23 +87,28 @@
 	{
 	}
 
+	// GEt native phost process arch encoded as plugin arch
+	static uint8 GetNativePluginArch();
+	static mpt::ustring GetPluginArchName(uint8 arch);
+
 	// Check whether a plugin can be hosted inside OpenMPT or requires bridging
-	uint8 GetDllBits(bool fromCache = true) const;
-	bool IsNative(bool fromCache = true) const { return GetDllBits(fromCache) == mpt::arch_bits; }
+	uint8 GetDllArch(bool fromCache = true) const;
+	mpt::ustring GetDllArchName(bool fromCache = true) const;
+	bool IsNative(bool fromCache = true) const;
 	// Check if a plugin is native, and if it is currently unknown, assume that it is native. Use this function only for performance reasons
 	// (e.g. if tons of unscanned plugins would slow down generation of the plugin selection dialog)
-	bool IsNativeFromCache() const { return dllBits == mpt::arch_bits || dllBits == 0; }
+	bool IsNativeFromCache() const;
 
 	void WriteToCache() const;
 
 	uint32 EncodeCacheFlags() const
 	{
-		// Format: 00000000.00000000.DDDDDDSB.CCCCCCCI
+		// Format: 00000000.00000000.AAAAAASB.CCCCCCCI
 		return (isInstrument ? 1 : 0)
 			| (category << 1)
 			| (useBridge ? 0x100 : 0)
 			| (shareBridgeInstance ? 0x200 : 0)
-			| ((dllBits / 8) << 10);
+			| ((dllArch / 8) << 10);
 	}
 
 	void DecodeCacheFlags(uint32 flags)
@@ -119,7 +125,7 @@
 		}
 		useBridge = (flags & 0x100) != 0;
 		shareBridgeInstance = (flags & 0x200) != 0;
-		dllBits = ((flags >> 10) & 0x3F) * 8;
+		dllArch = ((flags >> 10) & 0x3F) * 8;
 	}
 };
 
manx

manx

2019-02-22 07:54

administrator  

pluginbridge-multiarch-v2.patch (109,153 bytes)
Index: build/auto/build_openmpt_release_packages.py
===================================================================
--- build/auto/build_openmpt_release_packages.py	(revision 11392)
+++ build/auto/build_openmpt_release_packages.py	(working copy)
@@ -72,8 +72,8 @@
 def copy_binaries(from_path, to_path):
     os.makedirs(to_path)
     copy_file(from_path, to_path, "mptrack.exe")
-    copy_file(from_path, to_path, "PluginBridge32.exe")
-    copy_file(from_path, to_path, "PluginBridge64.exe")
+    copy_file(from_path, to_path, "PluginBridge-x86.exe")
+    copy_file(from_path, to_path, "PluginBridge-amd64.exe")
     copy_file(from_path, to_path, "openmpt-lame.dll")
     copy_file(from_path, to_path, "openmpt-mpg123.dll")
     copy_file(from_path, to_path, "openmpt-soundtouch.dll")
Index: build/auto/package_openmpt_args.cmd
===================================================================
--- build/auto/package_openmpt_args.cmd	(revision 11392)
+++ build/auto/package_openmpt_args.cmd	(working copy)
@@ -46,10 +46,10 @@
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-mpg123.pdb .\ || goto error
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-soundtouch.dll .\ || goto error
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-soundtouch.pdb .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge32.exe .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge32.pdb .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge64.exe .\ || goto error
-copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\PluginBridge64.pdb .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\x86\PluginBridge-x86.exe .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\x86\PluginBridge-x86.pdb .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\amd64\PluginBridge-amd64.exe .\ || goto error
+copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\amd64\PluginBridge-amd64.pdb .\ || goto error
 copy /y ..\..\bin\%MPT_BIN_CONF%\%MPT_VS_VER%-%MPT_BIN_TARGET%-%MPT_BIN_RUNTIME%\%MPT_BIN_ARCH_TRK%\openmpt-wine-support.zip .\ || goto error
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT% -mx=9 ..\openmpt\bin.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%.%MPT_PKG_FORMAT% ^
  LICENSE.txt ^
@@ -58,8 +58,8 @@
  openmpt-lame.dll ^
  openmpt-mpg123.dll ^
  openmpt-soundtouch.dll ^
- PluginBridge32.exe ^
- PluginBridge64.exe ^
+ PluginBridge-x86.exe ^
+ PluginBridge-amd64.exe ^
  openmpt-wine-support.zip ^
  extraKeymaps ^
  || goto error
@@ -68,8 +68,8 @@
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\openmpt-lame.pdb.%MPT_PKG_FORMAT_SYMBOLS% openmpt-lame.pdb || goto error
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\openmpt-mpg123.pdb.%MPT_PKG_FORMAT_SYMBOLS% openmpt-mpg123.pdb || goto error
 ..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\openmpt-soundtouch.pdb.%MPT_PKG_FORMAT_SYMBOLS% openmpt-soundtouch.pdb || goto error
-..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge32.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge32.pdb || goto error
-..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge64.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge64.pdb || goto error
+..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge-x86.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge-x86.pdb || goto error
+..\..\build\tools\7zip\7z.exe a -t%MPT_PKG_FORMAT_SYMBOLS% -mx=9 ..\openmpt\dbg.%MPT_DIST_VARIANT_TRK%\%OPENMPT_VERSION_MAJORMAJOR%.%OPENMPT_VERSION_MAJOR%\openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%-symbols\PluginBridge-amd64.pdb.%MPT_PKG_FORMAT_SYMBOLS% PluginBridge-amd64.pdb || goto error
 cd .. || goto error
 ..\build\tools\7zip\7z.exe a -ttar openmpt-%MPT_DIST_VARIANT_TRK%.tar openmpt || goto error
 del /f /q openmpt-%MPT_DIST_VARIANT_TRK%-%MPT_REVISION%.%MPT_PKG_FORMAT%
Index: build/premake/mpt-PluginBridge.lua
===================================================================
--- build/premake/mpt-PluginBridge.lua	(revision 11392)
+++ build/premake/mpt-PluginBridge.lua	(working copy)
@@ -41,90 +41,14 @@
   warnings "Extra"
   prebuildcommands { "..\\..\\build\\svn_version\\update_svn_version_vs_premake.cmd $(IntDir)" }
   filter { "architecture:x86" }
-   targetsuffix "32"
+   targetsuffix "-x86"
   filter { "architecture:x86_64" }
-   targetsuffix "64"
+   targetsuffix "-amd64"
+  filter { "architecture:ARM" }
+   targetsuffix "-arm"
+  filter { "architecture:ARM64" }
+   targetsuffix "-arm64"
   filter {}
 	filter { "action:vs*", "architecture:x86_64" }
 		linkoptions { "/HIGHENTROPYVA:NO" }
 	filter {}
-
-	if _OPTIONS["win10"] then
-		filter { "architecture:x86", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-shared\\x86\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win10-static\\x86\\$(TargetName).pdb\"",
-			}
-	elseif _OPTIONS["xp"] then
-		filter { "architecture:x86", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-shared\\x86\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-winxp-static\\x86\\$(TargetName).pdb\"",
-			}
-	else
-		filter { "architecture:x86", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-shared\\x86\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\amd64\\$(TargetName).pdb\"",
-			}
-		filter { "architecture:x86_64", "not configurations:*Shared" }
-			postbuildcommands {
-				"if not exist \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\" mkdir \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\"",
-				"copy /y \"$(TargetDir)\\$(TargetFileName)\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\\$(TargetFileName)\"",
-				"copy /y \"$(TargetDir)\\$(TargetName).pdb\" \"$(TargetDir)\\..\\..\\" .. _ACTION .. "-win7-static\\x86\\$(TargetName).pdb\"",
-			}
-	end
-
-	filter {}
-
Index: build/vs2015win7/PluginBridge.vcxproj
===================================================================
--- build/vs2015win7/PluginBridge.vcxproj	(revision 11392)
+++ build/vs2015win7/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015win7\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -285,11 +285,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -319,11 +314,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -361,11 +351,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -403,11 +388,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -445,11 +425,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -487,11 +462,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -522,11 +492,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -558,11 +523,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -600,11 +560,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -642,11 +597,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -684,11 +634,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -726,11 +671,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: build/vs2015winxp/PluginBridge.vcxproj
===================================================================
--- build/vs2015winxp/PluginBridge.vcxproj	(revision 11392)
+++ build/vs2015winxp/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2015-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2015-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2015-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2015winxp\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -287,11 +287,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -322,11 +317,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -365,11 +355,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -408,11 +393,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -451,11 +431,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -494,11 +469,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -531,11 +501,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -568,11 +533,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -611,11 +571,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -654,11 +609,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -697,11 +647,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -740,11 +685,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2015-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2015-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2015-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: build/vs2017win10/PluginBridge.vcxproj
===================================================================
--- build/vs2017win10/PluginBridge.vcxproj	(revision 11392)
+++ build/vs2017win10/PluginBridge.vcxproj	(working copy)
@@ -351,7 +351,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -358,7 +358,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
@@ -365,7 +365,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\Debug\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
@@ -372,7 +372,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-static\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\Debug\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -379,7 +379,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -386,7 +386,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
@@ -393,7 +393,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\Release\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
@@ -400,7 +400,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-static\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\Release\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -407,7 +407,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -414,7 +414,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|ARM'">
@@ -421,7 +421,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\Checked\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|ARM64'">
@@ -428,7 +428,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-static\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\Checked\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -435,7 +435,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -442,7 +442,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|ARM'">
@@ -449,7 +449,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\DebugShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|ARM64'">
@@ -456,7 +456,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win10-shared\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\DebugShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -463,7 +463,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -470,7 +470,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|ARM'">
@@ -477,7 +477,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|ARM64'">
@@ -484,7 +484,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win10-shared\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -491,7 +491,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -498,7 +498,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|ARM'">
@@ -505,7 +505,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\arm\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm\CheckedShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|ARM64'">
@@ -512,7 +512,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win10-shared\arm64\</OutDir>
     <IntDir>..\obj\vs2017win10\PluginBridge\arm64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge</TargetName>
+    <TargetName>PluginBridge-arm64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -545,11 +545,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -582,11 +577,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
     <ClCompile>
@@ -688,11 +678,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -732,11 +717,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
     <ClCompile>
@@ -852,11 +832,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -896,11 +871,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|ARM'">
     <ClCompile>
@@ -1009,11 +979,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -1047,11 +1012,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|ARM'">
     <ClCompile>
@@ -1155,11 +1115,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -1199,11 +1154,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|ARM'">
     <ClCompile>
@@ -1319,11 +1269,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -1363,11 +1308,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win10-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win10-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win10-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|ARM'">
     <ClCompile>
Index: build/vs2017win7/PluginBridge.vcxproj
===================================================================
--- build/vs2017win7/PluginBridge.vcxproj	(revision 11392)
+++ build/vs2017win7/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-static\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-win7-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017win7\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -288,11 +288,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -325,11 +320,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -369,11 +359,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -413,11 +398,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -457,11 +437,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -501,11 +476,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-static\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -538,11 +508,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -576,11 +541,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -620,11 +580,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -664,11 +619,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -708,11 +658,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -752,11 +697,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-win7-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-win7-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-win7-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: build/vs2017winxp/PluginBridge.vcxproj
===================================================================
--- build/vs2017winxp/PluginBridge.vcxproj	(revision 11392)
+++ build/vs2017winxp/PluginBridge.vcxproj	(working copy)
@@ -178,7 +178,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\Debug\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -185,7 +185,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\Debug\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -192,7 +192,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\Release\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -199,7 +199,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\Release\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
@@ -206,7 +206,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-static\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\Checked\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
@@ -213,7 +213,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-static\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\Checked\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
@@ -220,7 +220,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\DebugShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
@@ -227,7 +227,7 @@
     <LinkIncremental>true</LinkIncremental>
     <OutDir>..\..\bin\debug\vs2017-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\DebugShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
@@ -234,7 +234,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
@@ -241,7 +241,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\release\vs2017-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\ReleaseShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
@@ -248,7 +248,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-shared\x86\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86\CheckedShared\</IntDir>
-    <TargetName>PluginBridge32</TargetName>
+    <TargetName>PluginBridge-x86</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
@@ -255,7 +255,7 @@
     <LinkIncremental>false</LinkIncremental>
     <OutDir>..\..\bin\checked\vs2017-winxp-shared\amd64\</OutDir>
     <IntDir>..\obj\vs2017winxp\PluginBridge\x86_64\CheckedShared\</IntDir>
-    <TargetName>PluginBridge64</TargetName>
+    <TargetName>PluginBridge-amd64</TargetName>
     <TargetExt>.exe</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -289,11 +289,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -326,11 +321,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
@@ -370,11 +360,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -414,11 +399,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|Win32'">
     <ClCompile>
@@ -458,11 +438,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
     <ClCompile>
@@ -502,11 +477,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-static\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-static\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-static\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|Win32'">
     <ClCompile>
@@ -540,11 +510,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugShared|x64'">
     <ClCompile>
@@ -578,11 +543,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|Win32'">
     <ClCompile>
@@ -622,11 +582,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseShared|x64'">
     <ClCompile>
@@ -666,11 +621,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|Win32'">
     <ClCompile>
@@ -710,11 +660,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\amd64" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\amd64"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\amd64\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CheckedShared|x64'">
     <ClCompile>
@@ -754,11 +699,6 @@
     <PreBuildEvent>
       <Command>..\..\build\svn_version\update_svn_version_vs_premake.cmd $(IntDir)</Command>
     </PreBuildEvent>
-    <PostBuildEvent>
-      <Command>if not exist "$(TargetDir)\..\..\vs2017-winxp-shared\x86" mkdir "$(TargetDir)\..\..\vs2017-winxp-shared\x86"
-copy /y "$(TargetDir)\$(TargetFileName)" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetFileName)"
-copy /y "$(TargetDir)\$(TargetName).pdb" "$(TargetDir)\..\..\vs2017-winxp-shared\x86\$(TargetName).pdb"</Command>
-    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="..\..\common\versionNumber.h" />
Index: common/BuildSettings.h
===================================================================
--- common/BuildSettings.h	(revision 11392)
+++ common/BuildSettings.h	(working copy)
@@ -132,6 +132,11 @@
 //#define MPT_WITH_STBVORBIS
 #define MPT_WITH_VORBIS
 #define MPT_WITH_VORBISFILE
+#if MPT_OS_WINDOWS
+#if (_WIN32_WINNT >= 0x0A00)
+#define MPT_WITH_WINDOWS10
+#endif
+#endif
 #define MPT_WITH_ZLIB
 
 #endif // MODPLUG_TRACKER
Index: installer/install.iss
===================================================================
--- installer/install.iss	(revision 11392)
+++ installer/install.iss	(working copy)
@@ -59,15 +59,15 @@
 ; preserve file type order for best solid compression results (first binary, then text)
 ; base folder
 Source: ..\bin\{#PlatformFolder}\mptrack.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
-Source: ..\bin\{#PlatformFolder}\PluginBridge32.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
-Source: ..\bin\{#PlatformFolder}\PluginBridge64.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
+Source: ..\bin\{#PlatformFolder}\..\x86\PluginBridge-x86.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
+Source: ..\bin\{#PlatformFolder}\..\amd64\PluginBridge-amd64.exe; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 Source: ..\bin\{#PlatformFolder}\openmpt-lame.dll; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 Source: ..\bin\{#PlatformFolder}\openmpt-mpg123.dll; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 Source: ..\bin\{#PlatformFolder}\openmpt-soundtouch.dll; DestDir: {app}; Flags: ignoreversion; Check: not InstallWinOld
 ; Additional binaries for XP-/Vista-compatible version
 Source: ..\bin\{#PlatformFolderOld}\mptrack.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
-Source: ..\bin\{#PlatformFolderOld}\PluginBridge32.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
-Source: ..\bin\{#PlatformFolderOld}\PluginBridge64.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
+Source: ..\bin\{#PlatformFolderOld}\..\x86\PluginBridge-x86.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
+Source: ..\bin\{#PlatformFolderOld}\..\amd64\PluginBridge-amd64.exe; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
 Source: ..\bin\{#PlatformFolderOld}\openmpt-lame.dll; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
 Source: ..\bin\{#PlatformFolderOld}\openmpt-mpg123.dll; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
 Source: ..\bin\{#PlatformFolderOld}\openmpt-soundtouch.dll; DestDir: {app}; Flags: ignoreversion; Check: InstallWinOld
@@ -143,6 +143,9 @@
 Type: files; Name: {app}\Plugins\MIDI\MIDI Input Output.dll
 Type: dirifempty; Name: {app}\Plugins\MIDI
 Type: dirifempty; Name: {app}\Plugins
+; PLuginBridge uses arch naming now
+Type: files; Name: {app}\PluginBridge32.exe
+Type: files; Name: {app}\PluginBridge64.exe
 
 [UninstallDelete]
 ; internet shortcut has to be deleted manually
Index: mptrack/AbstractVstEditor.cpp
===================================================================
--- mptrack/AbstractVstEditor.cpp	(revision 11392)
+++ mptrack/AbstractVstEditor.cpp	(working copy)
@@ -457,7 +457,7 @@
 #ifndef NO_VST
 		const CVstPlugin *vstPlugin = dynamic_cast<CVstPlugin *>(&m_VstPlugin);
 		if(vstPlugin != nullptr && vstPlugin->isBridged)
-			title += mpt::cformat(_T(" (%1-Bit Bridged)"))(m_VstPlugin.GetPluginFactory().GetDllBits());
+			title += mpt::cformat(_T(" (%1 Bridged)"))(m_VstPlugin.GetPluginFactory().GetDllArchName());
 #endif // NO_VST
 
 		SetWindowText(title);
Index: mptrack/MainFrm.cpp
===================================================================
--- mptrack/MainFrm.cpp	(revision 11392)
+++ mptrack/MainFrm.cpp	(working copy)
@@ -2902,7 +2902,7 @@
 		if(vstPlug != nullptr && vstPlug->isBridged)
 		{
 			VSTPluginLib &lib = vstPlug->GetPluginFactory();
-			str += mpt::format(U_(" (%1-Bit Bridged)"))(lib.GetDllBits());
+			str += mpt::format(U_(" (%1 Bridged)"))(lib.GetDllArchName());
 		}
 
 		CBox.SetItemData(static_cast<int>(::SendMessageW(CBox.m_hWnd, CB_ADDSTRING, 0, (LPARAM)str.c_str())), iPlug + 1);
Index: mptrack/SelectPluginDialog.cpp
===================================================================
--- mptrack/SelectPluginDialog.cpp	(revision 11392)
+++ mptrack/SelectPluginDialog.cpp	(working copy)
@@ -389,7 +389,7 @@
 			CString title = plug.libraryName.ToCString();
 			if(!plug.IsNativeFromCache())
 			{
-				title += mpt::cformat(_T(" (%1-Bit)"))(plug.GetDllBits());
+				title += mpt::cformat(_T(" (%1)"))(plug.GetDllArchName());
 			}
 			HTREEITEM h = AddTreeItem(title, plug.isInstrument ? IMAGE_PLUGININSTRUMENT : IMAGE_EFFECTPLUGIN, true, categoryFolders[plug.category], reinterpret_cast<LPARAM>(&plug));
 			categoryUsed[plug.category] = true;
@@ -512,9 +512,15 @@
 		if(pPlug->pluginId1 == Vst::kEffectMagic && !pPlug->isBuiltIn)
 		{
 			bool isBridgeAvailable =
-					((pPlug->GetDllBits() == 32) && IsComponentAvailable(pluginBridge32))
+					((pPlug->GetDllArch() == PluginArch_x86) && IsComponentAvailable(pluginBridge_x86))
 				||
-					((pPlug->GetDllBits() == 64) && IsComponentAvailable(pluginBridge64))
+					((pPlug->GetDllArch() == PluginArch_amd64) && IsComponentAvailable(pluginBridge_amd64))
+#if defined(MPT_WITH_WINDOWS10)
+				||
+					((pPlug->GetDllArch() == PluginArch_arm) && IsComponentAvailable(pluginBridge_arm))
+				||
+					((pPlug->GetDllArch() == PluginArch_arm64) && IsComponentAvailable(pluginBridge_arm64))
+#endif // MPT_WITH_WINDOWS10
 				;
 			if(TrackerSettings::Instance().bridgeAllPlugins || !isBridgeAvailable)
 			{
Index: mptrack/SelectPluginDialog.h
===================================================================
--- mptrack/SelectPluginDialog.h	(revision 11392)
+++ mptrack/SelectPluginDialog.h	(working copy)
@@ -20,8 +20,12 @@
 class CModDoc;
 struct SNDMIXPLUGIN;
 struct VSTPluginLib;
-class ComponentPluginBridge32;
-class ComponentPluginBridge64;
+class ComponentPluginBridge_x86;
+class ComponentPluginBridge_amd64;
+#if defined(MPT_WITH_WINDOWS10)
+class ComponentPluginBridge_arm;
+class ComponentPluginBridge_arm64;
+#endif // MPT_WITH_WINDOWS10
 
 class CSelectPluginDlg: public CDialog
 {
@@ -32,8 +36,12 @@
 	CButton m_chkBridge, m_chkShare;
 	mpt::ustring m_nameFilter;
 #ifndef NO_VST
-	ComponentHandle<ComponentPluginBridge32> pluginBridge32;
-	ComponentHandle<ComponentPluginBridge64> pluginBridge64;
+	ComponentHandle<ComponentPluginBridge_x86> pluginBridge_x86;
+	ComponentHandle<ComponentPluginBridge_amd64> pluginBridge_amd64;
+#if defined(MPT_WITH_WINDOWS10)
+	ComponentHandle<ComponentPluginBridge_arm> pluginBridge_arm;
+	ComponentHandle<ComponentPluginBridge_arm64> pluginBridge_arm64;
+#endif // MPT_WITH_WINDOWS10
 #endif
 	PLUGINDEX m_nPlugSlot;
 
Index: pluginBridge/BridgeWrapper.cpp
===================================================================
--- pluginBridge/BridgeWrapper.cpp	(revision 11392)
+++ pluginBridge/BridgeWrapper.cpp	(working copy)
@@ -27,9 +27,34 @@
 OPENMPT_NAMESPACE_BEGIN
 
 
-ComponentPluginBridge::ComponentPluginBridge(int bitness)
+std::size_t GetPluginArchPointerSize(PluginArch arch)
+{
+	std::size_t result = 0;
+	switch(arch)
+	{
+	case PluginArch_x86:
+		result = 4;
+		break;
+	case PluginArch_amd64:
+		result = 8;
+		break;
+	case PluginArch_arm:
+		result = 4;
+		break;
+	case PluginArch_arm64:
+		result = 8;
+		break;
+	default:
+		result = 0;
+		break;
+	}
+	return result;
+}
+
+
+ComponentPluginBridge::ComponentPluginBridge(PluginArch arch)
 	: ComponentBase(ComponentTypeBundled)
-	, bitness(bitness)
+	, arch(arch)
 	, availability(AvailabilityUnknown)
 {
 	return;
@@ -38,22 +63,70 @@
 
 bool ComponentPluginBridge::DoInitialize()
 {
-	if(bitness != 32 && bitness != 64)
+	mpt::PathString archName;
+	switch(arch)
 	{
+	case PluginArch_x86:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::x86) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("x86");
+		break;
+	case PluginArch_amd64:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::amd64) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("amd64");
+		break;
+	case PluginArch_arm:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::arm) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("arm");
+		break;
+	case PluginArch_arm64:
+		if(mpt::Windows::HostCanRun(mpt::Windows::GetHostArchitecture(), mpt::Windows::Architecture::arm64) == mpt::Windows::EmulationLevel::NA)
+		{
+			return false;
+		}
+		archName = P_("arm64");
+		break;
+	default:
+		break;
+	}
+	if(archName.empty())
+	{
 		return false;
 	}
-	exeName = theApp.GetAppDirPath();
-	if(bitness == 32)
+	if(exeName.empty())
 	{
-		exeName += P_("PluginBridge32.exe");
+		mpt::PathString exeNameLocal = theApp.GetAppDirPath() + P_("PluginBridge-") + archName + P_(".exe");
+		if(exeNameLocal.IsFile())
+		{
+			exeName = exeNameLocal;
+		}
 	}
-	if(bitness == 64)
+	if(exeName.empty())
 	{
-		exeName += P_("PluginBridge64.exe");
+		mpt::PathString exeNameMultiArch = theApp.GetAppDirPath() + P_("..") + P_("\\") + archName + P_("\\") + P_("PluginBridge.exe");
+		if(exeNameMultiArch.IsFile())
+		{
+			exeName = exeNameMultiArch;
+		}
 	}
-	// First, check for validity of the bridge executable.
-	if(!exeName.IsFile())
+	if(exeName.empty())
 	{
+		mpt::PathString exeNameMultiArchTransitional = theApp.GetAppDirPath() + P_("..") + P_("\\") + archName + P_("\\") + P_("PluginBridge-") + archName + P_(".exe");
+		if(exeNameMultiArchTransitional.IsFile())
+		{
+			exeName = exeNameMultiArchTransitional;
+		}
+	}
+	if(exeName.empty())
+	{
 		availability = AvailabilityMissing;
 		return false;
 	}
@@ -74,15 +147,48 @@
 }
 
 
-MPT_REGISTERED_COMPONENT(ComponentPluginBridge32, "PluginBridge32")
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_x86, "PluginBridge-x86")
 
-MPT_REGISTERED_COMPONENT(ComponentPluginBridge64, "PluginBridge64")
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_amd64, "PluginBridge-amd64")
 
+#if defined(MPT_WITH_WINDOWS10)
 
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_arm, "PluginBridge-arm")
+
+MPT_REGISTERED_COMPONENT(ComponentPluginBridge_arm64, "PluginBridge-arm64")
+
+#endif // MPT_WITH_WINDOWS10
+
+
+PluginArch BridgeWrapper::GetNativePluginBinaryType()
+{
+	PluginArch result = PluginArch_unknown;
+	switch(mpt::Windows::GetProcessArchitecture())
+	{
+	case mpt::Windows::Architecture::x86:
+		result = PluginArch_x86;
+		break;
+	case mpt::Windows::Architecture::amd64:
+		result = PluginArch_amd64;
+		break;
+	case mpt::Windows::Architecture::arm:
+		result = PluginArch_arm;
+		break;
+	case mpt::Windows::Architecture::arm64:
+		result = PluginArch_arm64;
+		break;
+	default:
+		result = PluginArch_unknown;
+		break;
+	}
+	return result;
+}
+
+
 // Check whether we need to load a 32-bit or 64-bit wrapper.
-BridgeWrapper::BinaryType BridgeWrapper::GetPluginBinaryType(const mpt::PathString &pluginPath)
+PluginArch BridgeWrapper::GetPluginBinaryType(const mpt::PathString &pluginPath)
 {
-	BinaryType type = binUnknown;
+	PluginArch type = PluginArch_unknown;
 	mpt::ifstream file(pluginPath, std::ios::in | std::ios::binary);
 	if(file.is_open())
 	{
@@ -95,10 +201,26 @@
 			file.read(reinterpret_cast<char *>(&ntHeader), sizeof(ntHeader));
 
 			ASSERT((ntHeader.FileHeader.Characteristics & IMAGE_FILE_DLL) != 0);
-			if(ntHeader.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
-				type = bin32Bit;
-			else if(ntHeader.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
-				type = bin64Bit;
+			switch(ntHeader.FileHeader.Machine)
+			{
+			case IMAGE_FILE_MACHINE_I386:
+				type = PluginArch_x86;
+				break;
+			case IMAGE_FILE_MACHINE_AMD64:
+				type = PluginArch_amd64;
+				break;
+#if defined(MPT_WITH_WINDOWS10)
+			case IMAGE_FILE_MACHINE_ARM:
+				type = PluginArch_arm;
+				break;
+			case IMAGE_FILE_MACHINE_ARM64:
+				type = PluginArch_arm64;
+				break;
+#endif // MPT_WITH_WINDOWS10
+			default:
+				type = PluginArch_unknown;
+				break;
+			}
 		}
 	}
 	return type;
@@ -193,16 +315,41 @@
 	if(sharedInstace == nullptr)
 	{
 		// Create a new bridge instance
-		BinaryType binType;
-		if((binType = GetPluginBinaryType(pluginPath)) == binUnknown)
+		const PluginArch arch = GetPluginBinaryType(pluginPath);
+		bool available = false;
+		switch(arch)
 		{
+		case PluginArch_x86:
+			available = IsComponentAvailable(pluginBridge_x86);
+			break;
+		case PluginArch_amd64:
+			available = IsComponentAvailable(pluginBridge_amd64);
+			break;
+#if defined(MPT_WITH_WINDOWS10)
+		case PluginArch_arm:
+			available = IsComponentAvailable(pluginBridge_arm);
+			break;
+		case PluginArch_arm64:
+			available = IsComponentAvailable(pluginBridge_arm64);
+			break;
+#endif // MPT_WITH_WINDOWS10
+		default:
+			break;
+		}
+		if(arch == PluginArch_unknown)
+		{
 			return false;
 		}
-
-		const bool available = (binType == bin32Bit) ? IsComponentAvailable(pluginBridge32) : IsComponentAvailable(pluginBridge64);
 		if(!available)
 		{
-			ComponentPluginBridge::Availability availability = (binType == bin32Bit) ? pluginBridge32->GetAvailability() : pluginBridge64->GetAvailability();
+			ComponentPluginBridge::Availability availability =
+				(arch == PluginArch_x86) ? pluginBridge_x86->GetAvailability() :
+				(arch == PluginArch_amd64) ? pluginBridge_amd64->GetAvailability() :
+#if defined(MPT_WITH_WINDOWS10)
+				(arch == PluginArch_arm) ? pluginBridge_arm->GetAvailability() :
+				(arch == PluginArch_arm64) ? pluginBridge_arm64->GetAvailability() :
+#endif // MPT_WITH_WINDOWS10
+				ComponentPluginBridge::AvailabilityUnknown;
 			switch(availability)
 			{
 				case ComponentPluginBridge::AvailabilityMissing:
@@ -217,10 +364,17 @@
 					break;
 			}
 		}
-
-		const mpt::PathString exeName = (binType == bin32Bit) ? pluginBridge32->GetFileName() : pluginBridge64->GetFileName();
+		const ComponentPluginBridge * const pluginBridge =
+			(arch == PluginArch_x86) ? static_cast<const ComponentPluginBridge*>(pluginBridge_x86.get()) :
+			(arch == PluginArch_amd64) ? static_cast<const ComponentPluginBridge*>(pluginBridge_amd64.get()) :
+#if defined(MPT_WITH_WINDOWS10)
+			(arch == PluginArch_arm) ? static_cast<const ComponentPluginBridge*>(pluginBridge_arm.get()) :
+			(arch == PluginArch_arm64) ? static_cast<const ComponentPluginBridge*>(pluginBridge_arm64.get()) :
+#endif // MPT_WITH_WINDOWS10
+			nullptr;
+		const mpt::PathString exeName = pluginBridge->GetFileName();
 	
-		otherPtrSize = binType / 8;
+		otherPtrSize = static_cast<int32>(GetPluginArchPointerSize(arch));
 
 		// Command-line must be a modifiable string...
 		wchar_t cmdLine[128];
Index: pluginBridge/BridgeWrapper.h
===================================================================
--- pluginBridge/BridgeWrapper.h	(revision 11392)
+++ pluginBridge/BridgeWrapper.h	(working copy)
@@ -21,6 +21,17 @@
 
 struct VSTPluginLib;
 
+enum PluginArch : int
+{
+	PluginArch_unknown =        0,
+	PluginArch_x86     =       32,
+	PluginArch_amd64   =       64,
+	PluginArch_arm     = 128 + 32,
+	PluginArch_arm64   = 128 + 64,
+};
+
+std::size_t GetPluginArchPointerSize(PluginArch arch);
+
 class ComponentPluginBridge
 	: public ComponentBase
 {
@@ -33,11 +44,11 @@
 		AvailabilityWrongVersion = -2,
 	};
 private:
-	const int bitness;
+	const PluginArch arch;
 	mpt::PathString exeName;
 	Availability availability;
 protected:
-	ComponentPluginBridge(int bitness);
+	ComponentPluginBridge(PluginArch arch);
 protected:
 	bool DoInitialize() override;
 public:
@@ -45,22 +56,42 @@
 	mpt::PathString GetFileName() const { return exeName; }
 };
 
-class ComponentPluginBridge32
+class ComponentPluginBridge_x86
 	: public ComponentPluginBridge
 {
 	MPT_DECLARE_COMPONENT_MEMBERS
 public:
-	ComponentPluginBridge32() : ComponentPluginBridge(32) { }
+	ComponentPluginBridge_x86() : ComponentPluginBridge(PluginArch_x86) { }
 };
 
-class ComponentPluginBridge64
+class ComponentPluginBridge_amd64
 	: public ComponentPluginBridge
 {
 	MPT_DECLARE_COMPONENT_MEMBERS
 public:
-	ComponentPluginBridge64() : ComponentPluginBridge(64) { }
+	ComponentPluginBridge_amd64() : ComponentPluginBridge(PluginArch_amd64) { }
 };
 
+#if defined(MPT_WITH_WINDOWS10)
+
+class ComponentPluginBridge_arm
+	: public ComponentPluginBridge
+{
+	MPT_DECLARE_COMPONENT_MEMBERS
+public:
+	ComponentPluginBridge_arm() : ComponentPluginBridge(PluginArch_arm) { }
+};
+
+class ComponentPluginBridge_arm64
+	: public ComponentPluginBridge
+{
+	MPT_DECLARE_COMPONENT_MEMBERS
+public:
+	ComponentPluginBridge_arm64() : ComponentPluginBridge(PluginArch_arm64) { }
+};
+
+#endif // MPT_WITH_WINDOWS10
+
 class BridgeWrapper : protected BridgeCommon
 {
 protected:
@@ -88,17 +119,15 @@
 	Vst::ERect editRect;
 	Vst::VstSpeakerArrangement speakers[2];
 
-	ComponentHandle<ComponentPluginBridge32> pluginBridge32;
-	ComponentHandle<ComponentPluginBridge64> pluginBridge64;
+	ComponentHandle<ComponentPluginBridge_x86> pluginBridge_x86;
+	ComponentHandle<ComponentPluginBridge_amd64> pluginBridge_amd64;
+#if defined(MPT_WITH_WINDOWS10)
+	ComponentHandle<ComponentPluginBridge_arm> pluginBridge_arm;
+	ComponentHandle<ComponentPluginBridge_arm64> pluginBridge_arm64;
+#endif // MPT_WITH_WINDOWS10
 
 public:
-	enum BinaryType
-	{
-		binUnknown = 0,
-		bin32Bit = 32,
-		bin64Bit = 64,
-	};
-
+	
 	// Generic bridge exception
 	class BridgeException : public std::exception
 	{
@@ -120,8 +149,9 @@
 	};
 
 public:
-	static BinaryType GetPluginBinaryType(const mpt::PathString &pluginPath);
-	static bool IsPluginNative(const mpt::PathString &pluginPath) { return GetPluginBinaryType(pluginPath) == mpt::arch_bits; }
+	static PluginArch GetNativePluginBinaryType();
+	static PluginArch GetPluginBinaryType(const mpt::PathString &pluginPath);
+	static bool IsPluginNative(const mpt::PathString &pluginPath) { return GetPluginBinaryType(pluginPath) == GetNativePluginBinaryType(); }
 	static uint64 GetFileVersion(const WCHAR *exePath);
 
 	static Vst::AEffect *Create(const VSTPluginLib &plugin);
Index: soundlib/plugins/PluginManager.cpp
===================================================================
--- soundlib/plugins/PluginManager.cpp	(revision 11392)
+++ soundlib/plugins/PluginManager.cpp	(working copy)
@@ -70,23 +70,91 @@
 #endif // MODPLUG_TRACKER
 
 
-uint8 VSTPluginLib::GetDllBits(bool fromCache) const
+uint8 VSTPluginLib::GetNativePluginArch()
 {
+	uint8 result = 0;
+	switch(mpt::Windows::GetProcessArchitecture())
+	{
+	case mpt::Windows::Architecture::x86:
+		result = PluginArch_x86;
+		break;
+	case mpt::Windows::Architecture::amd64:
+		result = PluginArch_amd64;
+		break;
+	case mpt::Windows::Architecture::arm:
+		result = PluginArch_arm;
+		break;
+	case mpt::Windows::Architecture::arm64:
+		result = PluginArch_arm64;
+		break;
+	default:
+		result = 0;
+		break;
+	}
+	return result;
+}
+
+
+mpt::ustring VSTPluginLib::GetPluginArchName(uint8 arch)
+{
+	mpt::ustring result;
+	switch(arch)
+	{
+	case PluginArch_x86:
+		result = U_("x86");
+		break;
+	case PluginArch_amd64:
+		result = U_("amd64");
+		break;
+	case PluginArch_arm:
+		result = U_("arm");
+		break;
+	case PluginArch_arm64:
+		result = U_("arm64");
+		break;
+	default:
+		result = U_("");
+		break;
+	}
+	return result;
+}
+
+
+uint8 VSTPluginLib::GetDllArch(bool fromCache) const
+{
 	// Built-in plugins are always native.
 	if(dllPath.empty())
-		return mpt::arch_bits;
+		return GetNativePluginArch();
 #ifndef NO_VST
-	if(!dllBits || !fromCache)
+	if(!dllArch || !fromCache)
 	{
-		dllBits = static_cast<uint8>(BridgeWrapper::GetPluginBinaryType(dllPath));
+		dllArch = static_cast<uint8>(BridgeWrapper::GetPluginBinaryType(dllPath));
 	}
 #else
 	MPT_UNREFERENCED_PARAMETER(fromCache);
 #endif // NO_VST
-	return dllBits;
+	return dllArch;
 }
 
 
+mpt::ustring VSTPluginLib::GetDllArchName(bool fromCache) const
+{
+	return GetPluginArchName(GetDllArch(fromCache));
+}
+
+
+bool VSTPluginLib::IsNative(bool fromCache) const
+{
+	return GetDllArch(fromCache) == GetNativePluginArch();
+}
+
+
+bool VSTPluginLib::IsNativeFromCache() const
+{
+	return dllArch == GetNativePluginArch() || dllArch == 0;
+}
+
+
 // PluginCache format:
 // FullDllPath = <ID1><ID2><CRC32> (hex-encoded)
 // <ID1><ID2><CRC32>.Flags = Plugin Flags (see VSTPluginLib::DecodeCacheFlags).
Index: soundlib/plugins/PluginManager.h
===================================================================
--- soundlib/plugins/PluginManager.h	(revision 11392)
+++ soundlib/plugins/PluginManager.h	(working copy)
@@ -23,6 +23,7 @@
 class CSoundFile;
 class IMixPlugin;
 struct SNDMIXPLUGIN;
+enum PluginArch;
 
 struct VSTPluginLib
 {
@@ -66,7 +67,7 @@
 	bool isInstrument : 1;
 	bool useBridge : 1, shareBridgeInstance : 1;
 protected:
-	mutable uint8 dllBits = 0;
+	mutable uint8 dllArch = 0;
 
 public:
 	VSTPluginLib(CreateProc factoryProc, bool isBuiltIn, const mpt::PathString &dllPath, const mpt::PathString &libraryName
@@ -86,23 +87,28 @@
 	{
 	}
 
+	// GEt native phost process arch encoded as plugin arch
+	static uint8 GetNativePluginArch();
+	static mpt::ustring GetPluginArchName(uint8 arch);
+
 	// Check whether a plugin can be hosted inside OpenMPT or requires bridging
-	uint8 GetDllBits(bool fromCache = true) const;
-	bool IsNative(bool fromCache = true) const { return GetDllBits(fromCache) == mpt::arch_bits; }
+	uint8 GetDllArch(bool fromCache = true) const;
+	mpt::ustring GetDllArchName(bool fromCache = true) const;
+	bool IsNative(bool fromCache = true) const;
 	// Check if a plugin is native, and if it is currently unknown, assume that it is native. Use this function only for performance reasons
 	// (e.g. if tons of unscanned plugins would slow down generation of the plugin selection dialog)
-	bool IsNativeFromCache() const { return dllBits == mpt::arch_bits || dllBits == 0; }
+	bool IsNativeFromCache() const;
 
 	void WriteToCache() const;
 
 	uint32 EncodeCacheFlags() const
 	{
-		// Format: 00000000.00000000.DDDDDDSB.CCCCCCCI
+		// Format: 00000000.00000000.AAAAAASB.CCCCCCCI
 		return (isInstrument ? 1 : 0)
 			| (category << 1)
 			| (useBridge ? 0x100 : 0)
 			| (shareBridgeInstance ? 0x200 : 0)
-			| ((dllBits / 8) << 10);
+			| ((dllArch / 8) << 10);
 	}
 
 	void DecodeCacheFlags(uint32 flags)
@@ -119,7 +125,7 @@
 		}
 		useBridge = (flags & 0x100) != 0;
 		shareBridgeInstance = (flags & 0x200) != 0;
-		dllBits = ((flags >> 10) & 0x3F) * 8;
+		dllArch = ((flags >> 10) & 0x3F) * 8;
 	}
 };
 
manx

manx

2019-03-16 10:04

administrator   ~0003901

Implemented in r11461 (1.29.00.13).

Issue History

Date Modified Username Field Change
2018-05-10 13:53 manx New Issue
2018-05-27 06:22 manx Relationship added related to 0001123
2019-01-03 12:47 manx Relationship added related to 0001185
2019-01-07 15:14 manx Relationship added related to 0001186
2019-02-21 15:40 manx File Added: pluginbridge-multiarch-v1.patch
2019-02-21 15:41 manx Assigned To => manx
2019-02-21 15:41 manx Status new => assigned
2019-02-21 15:41 manx Target Version OpenMPT 1.?? (long term goals) => OpenMPT 1.29 / libopenmpt 0.5 (goals)
2019-02-22 07:54 manx File Added: pluginbridge-multiarch-v2.patch
2019-03-16 10:04 manx Status assigned => resolved
2019-03-16 10:04 manx Resolution open => fixed
2019-03-16 10:04 manx Fixed in Version => OpenMPT 1.29.00.* (current testing)
2019-03-16 10:04 manx Note Added: 0003901