@IF "%BUILDDBG%"=="TRUE" ( ECHO ON ) ELSE ( ECHO OFF ) rem Berkeley Open Infrastructure for Network Computing rem http://boinc.berkeley.edu rem Copyright (C) 2009 University of California rem rem This is free software; you can redistribute it and/or rem modify it under the terms of the GNU Lesser General Public rem License as published by the Free Software Foundation; rem either version 3 of the License, or (at your option) any later version. rem rem This software is distributed in the hope that it will be useful, rem but WITHOUT ANY WARRANTY; without even the implied warranty of rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. rem See the GNU Lesser General Public License for more details. rem rem You should have received a copy of the GNU Lesser General Public License rem along with BOINC. If not, see . rem rem Provide the groundwork for an automated build environment. ECHO Initializing BOINC Build Environment for Windows rem ***** Construct Build Environment Root Paths ***** rem SET BUILDDRIVE=%~d0 SET BUILDROOT=%~dps0 SET BUILDROOT=%BUILDROOT:\win_bu~1\=% rem Detect Branch Name PUSHD %BUILDROOT%\.. FOR /D %%I IN (*.*) DO ( IF /I "%CD%\%%I" == "%BUILDROOT%" SET BUILDBRANCHNAME=%%I ) POPD rem ***** Verify Parameters ***** rem :VERIFYNEXTPARAM IF /I "%1"=="/?" GOTO :USAGE IF /I "%1"=="-?" GOTO :USAGE IF /I "%1"=="/HELP" GOTO :USAGE IF /I "%1"=="-HELP" GOTO :USAGE IF /I "%1"=="TYPE" GOTO :PARSEPARAM IF /I "%1"=="PLATFORM" GOTO :PARSEPARAM IF /I "%1"=="EXEC" GOTO :PARSEPARAM IF NOT "%1"=="" GOTO :USAGE IF "%1"=="" GOTO :VALIDATEPARAMS rem ***** Parse Parameters ***** rem :PARSEPARAM IF /I "%1"=="TYPE" SET _ArgBuildType=%2 IF /I "%1"=="PLATFORM" SET _ArgBuildPlatform=%2 IF /I "%1"=="EXEC" ( rem The exec command has to be the last of the build arguments rem everything after it should be parameters for the command. SET _ArgExec=%2 SET _ArgExecParam=%~3 GOTO :VALIDATEPARAMS ) SHIFT SHIFT GOTO :VERIFYNEXTPARAM rem ***** Validate Parameters ***** rem :VALIDATEPARAMS rem A little bit of batchfile magic to remove double quotes rem which would be sent from the automated build tools. FOR /F %%I IN ("%_ArgBuildType%") DO SET _ArgBuildType=%%~I FOR /F %%I IN ("%_ArgBuildPlatform%") DO SET _ArgBuildPlatform=%%~I IF /I "%_ArgBuildType%"=="" GOTO :USAGE IF /I "%_ArgBuildPlatform%"=="" GOTO :USAGE IF /I "%_ArgBuildPlatform%" == "x64" SET _ArgBuildPlatform=amd64 IF /I "%_ArgBuildPlatform%" == "Win32" SET _ArgBuildPlatform=x86 SET BUILDTYPE=%_ArgBuildType% SET BUILDPLATFORM=%_ArgBuildPlatform% rem ***** Software Detection ***** rem IF EXIST "%VS80COMNTOOLS%\vsvars32.bat" ( CALL "%VS80COMNTOOLS%\vsvars32.bat" > NUL: 2> NUL: SET BUILDCOMPILERDETECTED=vs2005 GOTO :SOFTDETECTIONCOMPLETE ) IF EXIST "%VS90COMNTOOLS%\vsvars32.bat" ( CALL "%VS90COMNTOOLS%\vsvars32.bat" > NUL: 2> NUL: SET BUILDCOMPILERDETECTED=vs2008 GOTO :SOFTDETECTIONCOMPLETE ) IF EXIST "%VS100COMNTOOLS%\vsvars32.bat" ( CALL "%VS100COMNTOOLS%\vsvars32.bat" > NUL: 2> NUL: SET BUILDCOMPILERDETECTED=vs2010 GOTO :SOFTDETECTIONCOMPLETE ) :SOFTDETECTIONCOMPLETE IF "%VCINSTALLDIR%"=="" ( ECHO Software NOT Detected: Microsoft Visual Studio 2005/2008/2010... EXIT /B 1 ) rem ***** Build Tools Detection ***** rem SET BUILDTOOLSNAME=boinc_depends_win_%BUILDCOMPILERDETECTED% SET BUILDTOOLSROOT=%BUILDROOT%\..\%BUILDTOOLSNAME% IF EXIST %BUILDTOOLSROOT%\win_build\subversion GOTO :BUILDTOOLSROOTVALIDATED rem We must be in a branch and we can't currently use subversion commands rem to determine where we are to find our build tools. Use some batch rem file magic to parse the branch name from the name of the directory rem hosting the build tree. This can be different than just the version rem number, we have had to rev the branch name for certain releases due rem to late changing features. 6.6 vs 6.6a FOR /F "usebackq tokens=3,* delims=_" %%I IN ('%BUILDBRANCHNAME%') DO ( SET BUILDTOOLSNAME=boinc_depends_win_%BUILDCOMPILERDETECTED%_%%J SET BUILDTOOLSROOT=%BUILDROOT%\..\%BUILDTOOLSNAME% ) IF NOT EXIST %BUILDTOOLSROOT%\win_build\subversion ( ECHO Software NOT Detected: Build Tools... EXIT /B 2 ) :BUILDTOOLSROOTVALIDATED FOR /F %%I IN ("%BUILDTOOLSROOT%") DO SET BUILDTOOLSROOT=%%~fI rem ***** Reset Variables to start out with a clean environment ***** rem SET PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem SET INCLUDE= SET LIB= SET LIBPATH= rem Which build environment should we use? IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="%BUILDPLATFORM%" GOTO :BUILDENVCROSS rem Building a native binary for the current platform. :BUILDENVNATIVE IF /I NOT "%BUILDPLATFORM%"=="x86" ( CALL "%VCINSTALLDIR%\bin\%PROCESSOR_ARCHITECTURE%\vcvars%PROCESSOR_ARCHITECTURE%.bat" > NUL: 2> NUL: IF ERRORLEVEL 1 GOTO :BUILDENVFAILURE ) ELSE ( CALL "%VCINSTALLDIR%\bin\vcvars32.bat" > NUL: 2> NUL: IF ERRORLEVEL 1 GOTO :BUILDENVFAILURE ) GOTO :BUILDENVDONE rem Building a binary for another platform. :BUILDENVCROSS IF /I NOT "%BUILDPLATFORM%"=="x86" ( CALL "%VCINSTALLDIR%\bin\%PROCESSOR_ARCHITECTURE%_%BUILDPLATFORM%\vcvars%PROCESSOR_ARCHITECTURE%_%BUILDPLATFORM%.bat" > NUL: 2> NUL: IF ERRORLEVEL 1 GOTO :BUILDENVFAILURE ) ELSE ( CALL "%VCINSTALLDIR%\bin\vcvars32.bat" > NUL: 2> NUL: IF ERRORLEVEL 1 GOTO :BUILDENVFAILURE ) :BUILDENVDONE rem Convert the OS Platform into a Visual Studio compatible platform IF /I "%BUILDPLATFORM%"=="x86" SET VSPLATFORM=Win32 IF /I "%BUILDPLATFORM%"=="amd64" SET VSPLATFORM=x64 IF /I "%BUILDPLATFORM%"=="ia64" SET VSPLATFORM=Itanium rem ***** Standard Developer Environment ***** rem rem Add standard shell scripts executables to the path SET PATH=%BUILDROOT%\win_build;%BUILDROOT%\win_build\%PROCESSOR_ARCHITECTURE%;%PATH% SET PATH=%BUILDTOOLSROOT%\win_build;%BUILDTOOLSROOT%\win_build\%PROCESSOR_ARCHITECTURE%;%PATH% rem Add Perl to the path SET PATH=%BUILDTOOLSROOT%\win_build\perl;%BUILDTOOLSROOT%\win_build\perl\%PROCESSOR_ARCHITECTURE%\bin;%PATH% rem Add subversion source control to the path SET SVN_EDITOR=notepad.exe SET PATH=%BUILDTOOLSROOT%\win_build\subversion;%BUILDTOOLSROOT%\win_build\subversion\%PROCESSOR_ARCHITECTURE%\bin;%PATH% rem Specify build output directory SET BUILDOUTPUT=%BUILDROOT%\win_build\build\%VSPLATFORM%\%BUILDTYPE% rem Add source server environment variables SET SRCSRV_SYSTEM=svn SET SRCSRV_INI=%BUILDTOOLSROOT%\win_build\srcsrv.ini SET SRCSRV_SYMBOLS=%BUILDROOT%\win_build\build\%VSPLATFORM%\%BUILDTYPE% SET SRCSRV_SOURCE=%BUILDROOT% rem Add deployable symbol store environment variables SET BUILDSYMBOLSTORE=%BUILDTOOLSROOT%\Developr\%USERNAME%\symstore rem Add _NT_SYMBOL_PATH to the environment SET _NT_SYMBOL_PATH=%BUILDSYMBOLSTORE% SET _NT_SYMBOL_PATH=%_NT_SYMBOL_PATH%;srv*%BUILDTOOLSROOT%\Developr\%USERNAME%\symbols*http://msdl.microsoft.com/download/symbols SET _NT_SYMBOL_PATH=%_NT_SYMBOL_PATH%;srv*%BUILDTOOLSROOT%\Developr\%USERNAME%\symbols*http://boinc.berkeley.edu/symstore/ rem Add standard macros to the environment DOSKEY /MACROFILE="%BUILDTOOLSROOT%\developr\generic.mac" rem Add directory traversal macros to the environment DOSKEY /MACROFILE="%BUILDTOOLSROOT%\developr\tree.mac" rem Populate environmental version information FOR /F "usebackq tokens=1,2,3 delims=." %%I IN (`TYPE "%BUILDROOT%\version.log"`) DO ( SET BUILDVERSIONMAJOR=%%I SET BUILDVERSIONMINOR=%%J SET BUILDVERSIONREVISION=%%K ) rem Adjust command processor window title TITLE BOINC Build Environment for Windows %BUILDVERSIONMAJOR%.%BUILDVERSIONMINOR% (%BUILDTYPE%/%BUILDPLATFORM%) rem ***** Customized Developer Environment ***** rem SET BUILDHOMEDIR=%BUILDTOOLSROOT%\Developr\%USERNAME% IF NOT EXIST %BUILDHOMEDIR% MKDIR %BUILDHOMEDIR% rem Create a default directory layout IF NOT EXIST %BUILDHOMEDIR%\bin mkdir %BUILDHOMEDIR%\bin IF NOT EXIST %BUILDHOMEDIR%\bin\%PROCESSOR_ARCHITECTURE% mkdir %BUILDHOMEDIR%\bin\%PROCESSOR_ARCHITECTURE% IF NOT EXIST %BUILDHOMEDIR%\temp mkdir %BUILDHOMEDIR%\temp IF NOT EXIST %BUILDHOMEDIR%\symbols mkdir %BUILDHOMEDIR%\symbols IF NOT EXIST %BUILDHOMEDIR%\symstore mkdir %BUILDHOMEDIR%\symstore rem Add custom shell scripts to the path SET PATH=%BUILDHOMEDIR%\bin;%BUILDHOMEDIR%\bin\%PROCESSOR_ARCHITECTURE%;%PATH% rem Add custom macros to the environment IF EXIST %BUILDHOMEDIR%\custom.mac ( DOSKEY /MACROFILE=%BUILDHOMEDIR%\custom.mac ) rem Execute a custom shell script as defined by the developer IF EXIST %BUILDHOMEDIR%\customenv.cmd ( CALL %BUILDHOMEDIR%\customenv.cmd ) rem ***** Execute Command Line Script ***** rem IF /I NOT "%_ArgExec%"=="" ( ECHO Executing: %_ArgExec% %_ArgExecParam% ECHO. CALL %_ArgExec% %_ArgExecParam% IF ERRORLEVEL 1 EXIT /B 10 ) rem ***** Cleanup all the temporary variables ***** rem FOR /F "delims==" %%I IN ('SET _Arg') DO SET %%I= rem ***** All Done ***** rem GOTO :EOF :BUILDENVFAILURE ECHO Failed to setup the requested build environment. ECHO Commandline: %* ECHO. :USAGE ECHO Usage: buildenv.cmd TYPE ^ PLATFORM ^ [Optional Commands] ECHO. ECHO Commands: ECHO TYPE: Which build environment are you building executables for. ECHO Current Values: Release/Debug ECHO PLATFORM: Which platform are you building for. ECHO Current Values: x86/amd64/ia64 ECHO. GOTO :EOF