audk/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat

258 lines
8.5 KiB
Batchfile
Raw Normal View History

@REM @file
@REM Windows batch file to build BIOS ROM
@REM
@REM Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
@REM
@REM This program and the accompanying materials are licensed and made available under
@REM the terms and conditions of the BSD License that accompanies this distribution.
@REM 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
@echo off
SetLocal EnableDelayedExpansion EnableExtensions
:: Set script defaults
set exitCode=0
set BackupRom=1
set UpdateVBios=1
set SpiLock=0
set Stitch_Config=Stitch_Config.txt
copy /y nul Stitching.log >nul
:: Set default Suffix as: YYYY_MM_DD_HHMM
set hour=%time: =0%
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International_Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy_MM_dd" /f >nul
for /f "tokens=1" %%i in ("%date%") do set today=%%i
reg copy "HKCU\Control Panel\International_Temp" "HKCU\Control Panel\International" /f >nul
reg delete "HKCU\Control Panel\International_Temp" /f >nul
set IFWI_Suffix=%today%_%hour:~0,2%%time:~3,2%
:: Process input arguments
if "%~1"=="?" goto Usage
if "%~1"=="/?" goto Usage
if /i "%~1"=="Help" goto Usage
:OptLoop
if /i "%~1"=="/nV" (
set UpdateVBios=0
shift
goto OptLoop
)
if /i "%~1"=="/nB" (
set BackupRom=0
shift
goto OptLoop
)
if /i "%~1"=="/yL" (
set SpiLock=1
shift
goto OptLoop
)
if /i "%~1"=="/B" (
if "%~2"=="" goto Usage
if not exist %~2 echo BIOS not found. & goto Usage
set BIOS_Names=%~2
set BIOS_File_Name=%~n2
shift & shift
goto OptLoop
)
if /i "%~1"=="/C" (
if "%~2"=="" goto Usage
if not exist %~2 echo ConfigFile not found. & goto Usage
set Stitch_Config=%~2
shift & shift
goto OptLoop
)
if /i "%~1"=="/S" (
if "%~2"=="" goto Usage
set IFWI_Suffix=%~2
shift & shift
goto OptLoop
)
if "%BIOS_File_Name:~0,4%"=="MNW2" (
set Stitch_Config= MNW2_Stitch_Config.txt
)
if "%BIOS_File_Name:~3,4%"=="MNW2" (
set Stitch_Config= MNW2_Stitch_Config.txt
)
:: if no rom specified by user, search in ./ for ROM files
if "%BIOS_Names%"=="" (
set "BIOS_Names= "
for /f "tokens=*" %%i in ('dir /b *.rom') do set BIOS_Names=!BIOS_Names! %%i
if "!BIOS_Names!"==" " (
echo NO .ROM files found !!!
goto Usage
)
)
:: Parse the Stitch_Config File
if not exist %Stitch_Config% (
echo Stitch Configuration File %Stitch_Config% not found.
goto ScriptFail
)
for /f "delims== tokens=1,2" %%i in (%Stitch_Config%) do (
if /i "%%i"=="HEADER" set IFWI_HEADER=%%j
if /i "%%i"=="SEC_VERSION" set SEC_VERSION=%%j
if /i "%%i"=="Source" (
if /i "%%j"=="ALPHA" set Source_Prefix=A_
if /i "%%j"=="BF" set Source_Prefix=BF_
if /i "%%j"=="BE" set Source_Prefix=BE_
if /i "%%j"=="PV" set Source_Prefix=PV_
if /i "%%j"=="PR1" set Source_Prefix=PR1_
)
)
if %SpiLock% EQU 1 (
set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!_SPILOCK.bin
) else (
set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!.bin
)
:: **********************************************************************
:: The Main Stitching Loop
:: **********************************************************************
echo %date% %time% >>Stitching.log 2>&1
echo %date% %time%
echo.
for %%i in (%BIOS_Names%) do (
REM ----- Do NOT use :: for comments Inside of code blocks() -------
set BIOS_Rom=%%i
set BIOS_Name=%%~ni
set BIOS_Version=!BIOS_Name:~-7,7!
REM extract PlatformType from BIOS filename
set Platform_Type=!BIOS_Name:~0,4!
REM Special treat for BayLake FFD8
set Temp_Name=!BIOS_Name:~0,7!
REM Capitalize and validate the Platform_Type
if /i "!Platform_Type!"=="MNW2" (
set Platform_Type=MNW2
) else (
echo Error - Unsupported PlatformType: !Platform_Type!
goto Usage
)
REM search BIOS_Name for Arch substring: either IA32 or X64
if not "!BIOS_Name!"=="!BIOS_Name:_IA32_=!" (
set Arch=IA32
) else if not "!BIOS_Name!"=="!BIOS_Name:_X64_=!" (
set Arch=X64
) else (
echo Error: Could not determine Architecture for !BIOS_Rom!
goto Usage
)
set IFWI_Prefix=!Platform_Type!_IFWI_%Source_Prefix%!Arch!_!!BIOS_Version!
REM search BIOS_Name for Build_Target substring: either R or D
if not "!BIOS_Name!"=="!BIOS_Name:_R_=!" (
set Build_Target=Release
set IFWI_Prefix=!IFWI_Prefix!_R
) else if not "!BIOS_Name!"=="!BIOS_Name:_D_=!" (
set Build_Target=Debug
set IFWI_Prefix=!IFWI_Prefix!_D
) else (
echo Error: Could not determine Build Target for !BIOS_Rom!
goto Usage
)
REM Create a BIOS backup before Stitching
if %BackupRom% EQU 1 (
echo Creating backup of original BIOS rom.
copy /y !BIOS_Rom! !BIOS_Rom!.orig >nul
)
echo. >>Stitching.log
echo ********** Stitching !BIOS_Rom! ********** >>Stitching.log
echo. >>Stitching.log
echo.
echo Stitching IFWI for !BIOS_Rom! ...
echo ---------------------------------------------------------------------------
echo IFWI Header: !IFWI_HEADER_FILE!, SEC version: !SEC_VERSION!,
echo BIOS Version: !BIOS_Version!
echo Platform Type: !Platform_Type!, IFWI Prefix: %BIOS_ID%
echo ---------------------------------------------------------------------------
echo -----------------------------
echo.
echo Generating IFWI... %BIOS_ID%.bin
echo.
copy /b/y !IFWI_HEADER_FILE! + ..\..\Vlv2MiscBinariesPkg\SEC\!SEC_VERSION!\VLV_SEC_REGION.bin + ..\..\Vlv2MiscBinariesPkg\SEC\!SEC_VERSION!\Vacant.bin + !BIOS_Rom! %BIOS_ID%.bin
echo.
echo ===========================================================================
)
@echo off
::**********************************************************************
:: end of main loop
::**********************************************************************
echo.
echo -- All specified ROM files Stitched. --
echo.
goto Exit
:Usage
echo.
echo **************************************************************************************************
echo This Script is used to Stitch together BIOS, GOP Driver, Microcode Patch and TXE FW
echo into a single Integrated Firmware Image (IFWI).
echo.
echo Usage: IFWIStitch.bat [flags] [/B BIOS.ROM] [/C Stitch_Config] [/S IFWI_Suffix]
echo.
echo This script has NO Required arguments, so that the user can just double click from the GUI.
echo However, this requires that the BIOS.ROM file name is formatted correctly.
echo.
echo /nG Do NOT update the GOP driver. (applies to all ROM files for this run)
echo /nV Do NOT update the VBIOS. (applies to all ROM files for this run)
echo /nM Do NOT update the Microcode. (applies to all ROM files for this run)
echo /nB Do NOT backup BIOS.ROMs. (Default will backup to BIOS.ROM.Orig)
echo.
echo BIOS.ROM: A single BIOS ROM file to use for stitching
echo (DEFAULT: ALL .ROM files inside the current directory)
echo Stitch_Config: Text file containing version info of each FW component
echo (DEFAULT: Stitch_Config.txt)
echo IFWI_Suffix: Suffix to append to the end of the IFWI filename
echo (DEFAULT: YYYY_MM_DD_HHMM)
echo.
echo Examples:
echo IFIWStitch.bat : Stitch all ROMs with defaults
echo IFIWStitch.bat /B C:/MyRoms/testBIOS.rom : Stitch single ROM with defaults
echo IFIWStitch.bat /B ../testBIOS.rom /S test123 : Stitch single ROM and add custom suffix
echo IFIWStitch.bat /nM /nB /B testBIOS.rom /S test456 : Stitch single ROM, keep uCode from .rom,
echo don't create backup, and add custom suffix.
echo ****************************************************************************************************
pause
exit /b 1
:ScriptFail
set exitCode=1
:Exit
echo -- See Stitching.log for more info. --
echo.
echo %date% %time%
echo.
if "%Platform_Type%"=="MNW2" (
echo .
) else (
echo only support MNW2 for this project!
pause
)
exit /b %exitCode%
EndLocal