diff --git a/src/worksp/.gitignore b/src/worksp/.gitignore
index bed63a0c70..534a74a53d 100644
--- a/src/worksp/.gitignore
+++ b/src/worksp/.gitignore
@@ -3,3 +3,6 @@
*/Debug
*/x64
*/*.user
+
+rbuildmode.obj
+rbuildmode.exe
diff --git a/src/worksp/README b/src/worksp/README
index ad3482af44..9e9cfe284a 100644
--- a/src/worksp/README
+++ b/src/worksp/README
@@ -263,7 +263,7 @@ The libraries
racket\lib\win32\msvc\libracketxxxxxxx.lib
racket\lib\win32\msvc\libmzgcxxxxxxx.lib
-which are created by the mzsrc and gc projects, provide linking
+which are created by the libracket and libmzgc projects, provide linking
information for using the libracket3mxxxxxxx.dll, libracketxxxxxxx.dll,
and libmzgcxxxxxxx.dll DLLs. The versioning script adjusts the names,
as described above.
diff --git a/src/worksp/build.bat b/src/worksp/build.bat
index c9f5c3defd..e2859272f0 100644
--- a/src/worksp/build.bat
+++ b/src/worksp/build.bat
@@ -1,40 +1,60 @@
+setlocal
+
+cl rbuildmode.c
+rbuildmode.exe
+if errorlevel 1 (set BUILDMODE=win32) else (set BUILDMODE=x64)
+
cd racket
-devenv racket.sln /Build Release
+devenv racket.sln /Build "Release|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..\gracket
-devenv gracket.sln /Build Release
+devenv gracket.sln /Build "Release|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..
cd gc2
..\..\..\racketcgc -cu make.rkt
+if errorlevel 1 exit /B 1
cd ..
..\..\racket -cu ..\get-libs.rkt core ..\..\lib
+if errorlevel 1 exit /B 1
..\..\racket -cu ..\get-libs.rkt gui ..\..\lib
+if errorlevel 1 exit /B 1
cd mzstart
-devenv mzstart.sln /Build Release
+devenv mzstart.sln /Build "Release|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..\mrstart
-devenv mrstart.sln /Build Release
+devenv mrstart.sln /Build "Release|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..
cd mzcom
-devenv mzcom.sln /Build Release
+devenv mzcom.sln /Build "Release|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..\libmysterx
-devenv libmysterx.sln /Build Release
+devenv libmysterx.sln /Build "Release|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..
cd libmysterx
..\..\..\racket -cu xform.rkt
+if errorlevel 1 exit /B 1
cd ..
cd mzcom
..\..\..\racket -cu xform.rkt
+if errorlevel 1 exit /B 1
cd ..
cd mzcom
-devenv mzcom.sln /Build 3m
+devenv mzcom.sln /Build "3m|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..\libmysterx
-devenv libmysterx.sln /Build 3m
+devenv libmysterx.sln /Build "3m|%BUILDMODE%"
+if errorlevel 1 exit /B 1
cd ..
..\..\racket -l setup -N "raco setup"
+if errorlevel 1 exit /B 1
diff --git a/src/worksp/libmysterx/libmysterx.vcproj b/src/worksp/libmysterx/libmysterx.vcproj
index f5531232f3..374e72e6c4 100644
--- a/src/worksp/libmysterx/libmysterx.vcproj
+++ b/src/worksp/libmysterx/libmysterx.vcproj
@@ -155,7 +155,7 @@
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
+ Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
/>
@@ -529,7 +529,7 @@
UsePrecompiledHeader="0"
WarningLevel="3"
SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
+ Detect64BitPortabilityProblems="false"
DebugInformationFormat="0"
CompileAs="0"
/>
diff --git a/src/worksp/libmysterx/myspage/myspage.vcproj b/src/worksp/libmysterx/myspage/myspage.vcproj
index 3feb14cd32..9e7d595151 100644
--- a/src/worksp/libmysterx/myspage/myspage.vcproj
+++ b/src/worksp/libmysterx/myspage/myspage.vcproj
@@ -112,8 +112,6 @@
/>
diff --git a/src/worksp/libmysterx/myssink/myssink.vcproj b/src/worksp/libmysterx/myssink/myssink.vcproj
index 653ba09108..eaca508074 100644
--- a/src/worksp/libmysterx/myssink/myssink.vcproj
+++ b/src/worksp/libmysterx/myssink/myssink.vcproj
@@ -112,8 +112,6 @@
/>
@@ -211,8 +209,6 @@
/>
@@ -419,8 +413,6 @@
/>
diff --git a/src/worksp/libracket/libracket.vcproj b/src/worksp/libracket/libracket.vcproj
index 9d182cf4fe..1de06086dc 100644
--- a/src/worksp/libracket/libracket.vcproj
+++ b/src/worksp/libracket/libracket.vcproj
@@ -45,7 +45,7 @@