@REM @file @REM Windows batch file to build BIOS ROM @REM @REM Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
@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