blob: c224c2ee749740ccdfc85c2ce393543b1bd289fb [file] [log] [blame]
@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