@rem #/*++ @rem # @rem # Copyright (c) 2007, Intel Corporation @rem # All rights reserved. This program and the accompanying materials @rem # are licensed and made available under the terms and conditions of the BSD License @rem # which accompanies this distribution. The full text of the license may be found at @rem # http://opensource.org/licenses/bsd-license.php @rem # @rem # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, @rem # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. @rem # @rem # Module Name: @rem # @rem # build.bat @rem # @rem # Abstract: @rem # @rem # This script provides single module build, clean and find function @rem # based on module name. @rem # @rem # The auto-generated module.list file records all module names @rem # described in the current platform.dsc. @rem # @rem #--*/ @echo off setlocal @rem initilize local variable set FUNCTION=build set MODULE= set UPDATE= set VERBOSE= :parse if /I "%1"=="/c" ( set FUNCTION=clean shift goto parse ) if /I "%1"=="clean" ( set FUNCTION=clean shift goto parse ) if /I "%1"=="/r" ( set FUNCTION=rebuild shift goto parse ) if /I "%1"=="/h" ( set FUNCTION=usage shift goto parse ) if /I "%1"=="/?" ( set FUNCTION=usage shift goto parse ) if /I "%1"=="/f" ( set FUNCTION=find shift goto parse ) if /I "%1"=="/a" ( set UPDATE=TRUE shift goto parse ) if /I "%1"=="/v" ( set VERBOSE=TRUE shift goto parse ) if not "%1"=="" ( set MODULE=%1 shift goto parse ) else ( @rem no other paramters if "%FUNCTION%"=="rebuild" goto build goto %FUNCTION% ) :build set StartTime=%time% @rem if no input, build all if "%MODULE%"=="" ( if "%FUNCTION%"=="rebuild" ( nmake -nologo -f Makefile clean ) nmake -nologo -f Makefile all goto endtime ) @rem then try to build special targets: all, fast, tools. if /I "%MODULE%"=="all" ( @rem build all modules and tools. if "%FUNCTION%"=="rebuild" ( nmake -nologo -f Makefile cleanall ) nmake -nologo -f Makefile all goto endtime ) if /I "%MODULE%"=="fast" ( @rem build fast target to skip FV=NULL modules. if "%FUNCTION%"=="rebuild" ( nmake -nologo -f Makefile clean ) nmake -nologo -f Makefile fast goto endtime ) if /I "%MODULE%"=="tools" ( @rem build all tools. if "%FUNCTION%"=="rebuild" ( nmake -nologo -f Makefile cleantools ) nmake -nologo -f Makefile build_tools echo. echo All tools are built. goto endtime ) @rem build single module, update build makefiles if "%FUNCTION%"=="rebuild" ( nmake -nologo -f module.mak %MODULE%Clean 2>NUL ) nmake -nologo -f Makefile flashmap > NUL 2>&1 nmake -nologo -f Makefile makefiles if errorlevel 1 goto builderror @rem check whether input module name is described in current dsc file. findstr /I /C:" %MODULE% " module.list > NUL if errorlevel 1 ( echo. echo. findstr /I /C:"%MODULE%" module.list > NUL if errorlevel 1 goto finderror for /F %%A in ('findstr /I /C:"%MODULE%" module.list') do echo %%A echo. echo Warning!!! Your specified module name can't be found. echo One of the above modules may be what you want to build. goto end ) @rem build this module nmake -nologo -f module.mak %MODULE%Build echo. if "%FUNCTION%"=="rebuild" ( echo Module %MODULE% is rebuilt. ) else ( echo Module %MODULE% is built. ) :endtime @rem output build time. set EndTime=%time% echo. echo Start time %StartTime% echo End time %EndTime% goto end :clean @rem if no input, default clean all build directories. if "%MODULE%"=="" ( nmake -nologo -f Makefile clean goto end ) @rem first try to clean special tasks: all, modules and tools if /I "%MODULE%"=="all" ( nmake -nologo -f Makefile cleanall goto end ) if /I "%MODULE%"=="modules" ( nmake -nologo -f Makefile cleanbuilds goto end ) if /I "%MODULE%"=="tools" ( nmake -nologo -f Makefile cleantools goto end ) @rem clean single module @rem check whether input module name is in module.list file. if not exist module.list ( echo Module list info doesn't exist. echo Processing dsc file to generate module list info. nmake -nologo -f Makefile flashmap > NUL 2>&1 nmake -nologo -f Makefile makefiles > error.log 2>&1 if errorlevel 1 goto builderror ) findstr /I /C:" %MODULE% " module.list > NUL if errorlevel 1 ( echo. findstr /I /C:"%MODULE%" module.list > NUL if errorlevel 1 goto finderror for /F %%A in ('findstr /I /C:"%MODULE%" module.list') do echo %%A echo. echo Warning!!! Your specified module name can't be found. echo One of the above modules may be what you want to clean. goto end ) @rem clean this module nmake -nologo -f module.mak %MODULE%Clean 2>NUL echo. echo Module %MODULE% is cleaned. goto end :find @rem find match module name by subname. if "%UPDATE%"=="TRUE" ( echo Processing dsc file to update module list info. nmake -nologo -f Makefile flashmap > NUL 2>&1 nmake -nologo -f Makefile makefiles > error.log 2>&1 if errorlevel 1 goto builderror ) if not exist module.list ( echo Module list info doesn't exist. echo Processing dsc file to generate module list info. nmake -nologo -f Makefile flashmap > NUL 2>&1 nmake -nologo -f Makefile makefiles > error.log 2>&1 if errorlevel 1 goto builderror ) if "%MODULE%"=="" ( @rem display all echo. if "%VERBOSE%"=="TRUE" ( type module.list ) else ( @rem only output module name without module.inf file name for /F %%A in (module.list) do echo %%A ) ) else ( @rem display match module name echo. if "%VERBOSE%"=="TRUE" ( findstr /I /C:"%MODULE%" module.list if errorlevel 1 goto notfind ) else ( findstr /I /C:"%MODULE%" module.list > NUL if errorlevel 1 goto notfind for /F %%A in ('findstr /I /C:"%MODULE%" module.list') do echo %%A ) ) goto end :usage echo build or clean single module based on module name after tools are built. echo. echo build [/r] [/c] [/f] [/h] [modulename] echo. echo build [/r] [modulename] echo build single module, such as build DxeMain. echo If /r is specified, the target will be rebuit after cleaned first. echo if no input modulename or modulename is all, then build all echo Specail build targets: all, fast, tools. echo These special targets may not exist in your tip main makefile. echo build - build all tools and modules echo build all - build all tools and modules echo build fast - build all without FV=NULL modules echo build tools - build all tools. echo. echo build /c [modulename] echo build clean [modulename] echo remove the temp generated files for single module echo if no input modulename, then clean all echo Specail clean targets: all, modules, tools. echo These special targets may not exist in your tip main makefile. echo build /c - clean up all build directories echo build /c all - clean up all build directories and binary dirs. echo build /c modules - clean up all build directories except for tools. echo build /c tools - clean up only tools directory. echo. echo build /f [/a] [/v] [subname] echo find all matched modulename with the sub string of module name. echo option /a re-processes dsc files to update module name list. echo option /v outputs module name and module.inf file name both. echo. echo build /h echo build /? echo display help information. echo. goto end :notfind echo Warning!!! Your specified module name can't be found. echo Try to use /f /a options to update module name list. goto end :finderror echo Warning!!! Your specified module name can't be found. echo Try to use /f to find modules that you want to build. echo Or use /h to get the helpinfo of this script. goto end :builderror if exist error.log type error.log echo. if not exist Tools\ProcessDsc.exe ( echo. echo Error!!! Build tools may not be ready. Try to build tools first. echo. ) del module.* > NUL 2>&1 goto end :end if exist error.log del error.log echo on