@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! + %WORKSPACE%\Vlv2Binaries\Vlv2MiscBinariesPkg\SEC\!SEC_VERSION!\VLV_SEC_REGION.bin + %WORKSPACE%\Vlv2Binaries\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 |