1@REM @file 2@REM Windows batch file to build BIOS ROM 3@REM 4@REM Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> 5@REM 6@REM This program and the accompanying materials are licensed and made available under 7@REM the terms and conditions of the BSD License that accompanies this distribution. 8@REM The full text of the license may be found at 9@REM http://opensource.org/licenses/bsd-license.php. 10@REM 11@REM THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12@REM WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13@REM 14 15@echo off 16SetLocal EnableDelayedExpansion EnableExtensions 17 18:: Set script defaults 19set exitCode=0 20set BackupRom=1 21set UpdateVBios=1 22set SpiLock=0 23set Stitch_Config=Stitch_Config.txt 24copy /y nul Stitching.log >nul 25 26:: Set default Suffix as: YYYY_MM_DD_HHMM 27set hour=%time: =0% 28reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International_Temp" /f >nul 29reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy_MM_dd" /f >nul 30for /f "tokens=1" %%i in ("%date%") do set today=%%i 31reg copy "HKCU\Control Panel\International_Temp" "HKCU\Control Panel\International" /f >nul 32reg delete "HKCU\Control Panel\International_Temp" /f >nul 33set IFWI_Suffix=%today%_%hour:~0,2%%time:~3,2% 34 35:: Process input arguments 36if "%~1"=="?" goto Usage 37if "%~1"=="/?" goto Usage 38if /i "%~1"=="Help" goto Usage 39 40:OptLoop 41if /i "%~1"=="/nV" ( 42 set UpdateVBios=0 43 shift 44 goto OptLoop 45) 46if /i "%~1"=="/nB" ( 47 set BackupRom=0 48 shift 49 goto OptLoop 50) 51if /i "%~1"=="/yL" ( 52 set SpiLock=1 53 shift 54 goto OptLoop 55) 56 57if /i "%~1"=="/B" ( 58 if "%~2"=="" goto Usage 59 if not exist %~2 echo BIOS not found. & goto Usage 60 set BIOS_Names=%~2 61 set BIOS_File_Name=%~n2 62 shift & shift 63 goto OptLoop 64) 65if /i "%~1"=="/C" ( 66 if "%~2"=="" goto Usage 67 if not exist %~2 echo ConfigFile not found. & goto Usage 68 set Stitch_Config=%~2 69 shift & shift 70 goto OptLoop 71) 72if /i "%~1"=="/S" ( 73 if "%~2"=="" goto Usage 74 set IFWI_Suffix=%~2 75 shift & shift 76 goto OptLoop 77) 78 79if "%BIOS_File_Name:~0,4%"=="MNW2" ( 80 set Stitch_Config= MNW2_Stitch_Config.txt 81) 82if "%BIOS_File_Name:~3,4%"=="MNW2" ( 83 set Stitch_Config= MNW2_Stitch_Config.txt 84) 85 86:: if no rom specified by user, search in ./ for ROM files 87if "%BIOS_Names%"=="" ( 88 set "BIOS_Names= " 89 for /f "tokens=*" %%i in ('dir /b *.rom') do set BIOS_Names=!BIOS_Names! %%i 90 if "!BIOS_Names!"==" " ( 91 echo NO .ROM files found !!! 92 goto Usage 93 ) 94) 95 96:: Parse the Stitch_Config File 97if not exist %Stitch_Config% ( 98 echo Stitch Configuration File %Stitch_Config% not found. 99 goto ScriptFail 100) 101for /f "delims== tokens=1,2" %%i in (%Stitch_Config%) do ( 102 if /i "%%i"=="HEADER" set IFWI_HEADER=%%j 103 if /i "%%i"=="SEC_VERSION" set SEC_VERSION=%%j 104 if /i "%%i"=="Source" ( 105 if /i "%%j"=="ALPHA" set Source_Prefix=A_ 106 if /i "%%j"=="BF" set Source_Prefix=BF_ 107 if /i "%%j"=="BE" set Source_Prefix=BE_ 108 if /i "%%j"=="PV" set Source_Prefix=PV_ 109 if /i "%%j"=="PR1" set Source_Prefix=PR1_ 110 ) 111) 112 113if %SpiLock% EQU 1 ( 114 set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!_SPILOCK.bin 115) else ( 116 set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!.bin 117) 118 119:: ********************************************************************** 120:: The Main Stitching Loop 121:: ********************************************************************** 122echo %date% %time% >>Stitching.log 2>&1 123echo %date% %time% 124echo. 125for %%i in (%BIOS_Names%) do ( 126 127 REM ----- Do NOT use :: for comments Inside of code blocks() ------- 128 set BIOS_Rom=%%i 129 set BIOS_Name=%%~ni 130 set BIOS_Version=!BIOS_Name:~-7,7! 131 132 REM extract PlatformType from BIOS filename 133 set Platform_Type=!BIOS_Name:~0,4! 134 135 REM Special treat for BayLake FFD8 136 set Temp_Name=!BIOS_Name:~0,7! 137 138 139 REM Capitalize and validate the Platform_Type 140 if /i "!Platform_Type!"=="MNW2" ( 141 set Platform_Type=MNW2 142 ) else ( 143 echo Error - Unsupported PlatformType: !Platform_Type! 144 goto Usage 145 ) 146 147 148 REM search BIOS_Name for Arch substring: either IA32 or X64 149 if not "!BIOS_Name!"=="!BIOS_Name:_IA32_=!" ( 150 set Arch=IA32 151 ) else if not "!BIOS_Name!"=="!BIOS_Name:_X64_=!" ( 152 set Arch=X64 153 ) else ( 154 echo Error: Could not determine Architecture for !BIOS_Rom! 155 goto Usage 156 ) 157 set IFWI_Prefix=!Platform_Type!_IFWI_%Source_Prefix%!Arch!_!!BIOS_Version! 158 159 REM search BIOS_Name for Build_Target substring: either R or D 160 if not "!BIOS_Name!"=="!BIOS_Name:_R_=!" ( 161 set Build_Target=Release 162 set IFWI_Prefix=!IFWI_Prefix!_R 163 ) else if not "!BIOS_Name!"=="!BIOS_Name:_D_=!" ( 164 set Build_Target=Debug 165 set IFWI_Prefix=!IFWI_Prefix!_D 166 ) else ( 167 echo Error: Could not determine Build Target for !BIOS_Rom! 168 goto Usage 169 ) 170 171 REM Create a BIOS backup before Stitching 172 if %BackupRom% EQU 1 ( 173 echo Creating backup of original BIOS rom. 174 copy /y !BIOS_Rom! !BIOS_Rom!.orig >nul 175 ) 176 177 echo. >>Stitching.log 178 echo ********** Stitching !BIOS_Rom! ********** >>Stitching.log 179 echo. >>Stitching.log 180 echo. 181 echo Stitching IFWI for !BIOS_Rom! ... 182 echo --------------------------------------------------------------------------- 183 echo IFWI Header: !IFWI_HEADER_FILE!, SEC version: !SEC_VERSION!, 184 echo BIOS Version: !BIOS_Version! 185 186 echo Platform Type: !Platform_Type!, IFWI Prefix: %BIOS_ID% 187 echo --------------------------------------------------------------------------- 188 189 echo ----------------------------- 190 echo. 191 echo Generating IFWI... %BIOS_ID%.bin 192 echo. 193 194 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 195 echo. 196 echo =========================================================================== 197) 198@echo off 199 200::********************************************************************** 201:: end of main loop 202::********************************************************************** 203 204echo. 205echo -- All specified ROM files Stitched. -- 206echo. 207goto Exit 208 209:Usage 210echo. 211echo ************************************************************************************************** 212echo This Script is used to Stitch together BIOS, GOP Driver, Microcode Patch and TXE FW 213echo into a single Integrated Firmware Image (IFWI). 214echo. 215echo Usage: IFWIStitch.bat [flags] [/B BIOS.ROM] [/C Stitch_Config] [/S IFWI_Suffix] 216echo. 217echo This script has NO Required arguments, so that the user can just double click from the GUI. 218echo However, this requires that the BIOS.ROM file name is formatted correctly. 219echo. 220echo /nG Do NOT update the GOP driver. (applies to all ROM files for this run) 221echo /nV Do NOT update the VBIOS. (applies to all ROM files for this run) 222echo /nM Do NOT update the Microcode. (applies to all ROM files for this run) 223echo /nB Do NOT backup BIOS.ROMs. (Default will backup to BIOS.ROM.Orig) 224echo. 225echo BIOS.ROM: A single BIOS ROM file to use for stitching 226echo (DEFAULT: ALL .ROM files inside the current directory) 227echo Stitch_Config: Text file containing version info of each FW component 228echo (DEFAULT: Stitch_Config.txt) 229echo IFWI_Suffix: Suffix to append to the end of the IFWI filename 230echo (DEFAULT: YYYY_MM_DD_HHMM) 231echo. 232echo Examples: 233echo IFIWStitch.bat : Stitch all ROMs with defaults 234echo IFIWStitch.bat /B C:/MyRoms/testBIOS.rom : Stitch single ROM with defaults 235echo IFIWStitch.bat /B ../testBIOS.rom /S test123 : Stitch single ROM and add custom suffix 236echo IFIWStitch.bat /nM /nB /B testBIOS.rom /S test456 : Stitch single ROM, keep uCode from .rom, 237echo don't create backup, and add custom suffix. 238echo **************************************************************************************************** 239pause 240exit /b 1 241 242:ScriptFail 243set exitCode=1 244 245:Exit 246echo -- See Stitching.log for more info. -- 247echo. 248echo %date% %time% 249echo. 250if "%Platform_Type%"=="MNW2" ( 251 echo . 252) else ( 253 echo only support MNW2 for this project! 254pause 255) 256exit /b %exitCode% 257EndLocal 258