aboutsummaryrefslogtreecommitdiff
path: root/bootstrap-msvc.bat
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap-msvc.bat')
-rw-r--r--bootstrap-msvc.bat142
1 files changed, 142 insertions, 0 deletions
diff --git a/bootstrap-msvc.bat b/bootstrap-msvc.bat
new file mode 100644
index 0000000..459fe1a
--- /dev/null
+++ b/bootstrap-msvc.bat
@@ -0,0 +1,142 @@
+@echo off
+
+rem file : bootstrap-msvc.bat
+rem copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+rem license : MIT; see accompanying LICENSE file
+
+setlocal EnableDelayedExpansion
+goto start
+
+:usage
+echo.
+echo Usage: %0 [/?] [cl-exe [cl-option...]]
+echo.
+echo Normally this batch file is executed from one of the Visual Studio
+echo command prompts. It assume that the VC compiler can be executed as
+echo just cl.exe and that all the relevant environment variables (INCLUDE,
+echo LIB) are set.
+echo.
+echo The batch file expects to find the libbutl\ or libbutl-*\ directory
+echo either in the current directory (build2 root) or one level up.
+echo.
+echo Note that is any cl-option arguments are specified, then they must be
+echo preceded by the VC compiler executable (use cl.exe as the default).
+echo For example:
+echo.
+echo %0 cl.exe /nologo
+echo.
+goto end
+
+rem Clean up .obj files from all the directories passed as arguments.
+rem
+:clean_obj
+ for %%d in (%*) do (
+ if exist %%d\*.obj del %%d\*.obj
+ )
+goto :eof
+
+:start
+
+if "_%1_" == "_/?_" goto usage
+
+rem See if there is libbutl or libbutl-* in the current directory and one
+rem directory up. Note that globbing returns paths in alphabetic order.
+rem
+if exist libbutl\ (
+ set "libbutl=libbutl"
+) else (
+ for /D %%d in (libbutl-*) do set "libbutl=%%d"
+)
+
+if "_%libbutl%_" == "__" (
+ if exist ..\libbutl\ (
+ set "libbutl=..\libbutl"
+ ) else (
+ for /D %%d in (..\libbutl-*) do set "libbutl=%%d"
+ )
+)
+
+if "_%libbutl%_" == "__" (
+ echo error: unable to find libbutl, run %0 /? for details
+ goto error
+)
+
+rem All the source directories.
+rem
+set "src=build2"
+set "src=%src% build2\config"
+set "src=%src% build2\dist"
+set "src=%src% build2\bin"
+set "src=%src% build2\c"
+set "src=%src% build2\cc"
+set "src=%src% build2\cxx"
+set "src=%src% build2\cli"
+set "src=%src% build2\test"
+set "src=%src% build2\install"
+set "src=%src% %libbutl%\butl"
+
+rem Get the compiler executable.
+rem
+if "_%1_" == "__" (
+ set "cxx=cl.exe"
+) else (
+ set "cxx=%1"
+)
+
+rem Get the compile options.
+rem
+set "ops=/EHsc /MT /MP"
+:ops_next
+shift
+if "_%1_" == "__" (
+ goto ops_done
+) else (
+ set "ops=%ops% %1"
+ goto ops_next
+)
+:ops_done
+
+rem First clean up any stale .obj files we might have laying around.
+rem
+call :clean_obj %src%
+
+rem Compile.
+rem
+rem VC dumps .obj files in the current directory not caring if the names
+rem clash. And boy do they clash.
+rem
+set "obj="
+set "cwd=%CD%"
+for %%d in (%src%) do (
+ echo.
+ echo compiling in %%d\
+ echo.
+ cd %%d
+ echo %cxx% /I%cwd%\%libbutl% /I%cwd% /DBUILD2_HOST_TRIPLET=\"i686-microsoft-win32-msvc\" %ops% /c /TP *.cxx
+ %cxx% /I%cwd%\%libbutl% /I%cwd% /DBUILD2_HOST_TRIPLET=\"i686-microsoft-win32-msvc\" %ops% /c /TP *.cxx
+ if errorlevel 1 (
+ cd %cwd%
+ goto error
+ )
+ cd %cwd%
+ set "obj=!obj! %%d\*.obj"
+)
+
+rem Link.
+rem
+echo.
+echo %cxx% %ops% /Fe: build2\b-boot.exe %obj% shell32.lib
+ %cxx% %ops% /Fe: build2\b-boot.exe %obj% shell32.lib
+if errorlevel 1 goto error
+
+rem Clean up .obj.
+rem
+call :clean_obj %src%
+goto end
+
+:error
+endlocal
+exit /b 1
+
+:end
+endlocal