1#!/usr/bin/env bash 2##********************************************************************** 3## Function define 4##********************************************************************** 5function Usage() { 6 echo 7 echo "***************************************************************************" 8 echo "Build BIOS rom for VLV platforms." 9 echo 10 echo "Usage: bld_vlv.bat PlatformType [Build Target]" 11 echo 12 echo 13 echo " Platform Types: MNW2" 14 echo " Build Targets: Debug, Release (default: Debug)" 15 echo 16 echo "***************************************************************************" 17 echo "Press any key......" 18 read 19 exit 0 20} 21 22 23echo -e $(date) 24##********************************************************************** 25## Initial Setup 26##********************************************************************** 27#WORKSPACE=$(pwd) 28#build_threads=($NUMBER_OF_PROCESSORS)+1 29Build_Flags= 30exitCode=0 31Arch=X64 32SpiLock=0 33 34## Clean up previous build files. 35if [ -e $(pwd)/EDK2.log ]; then 36 rm $(pwd)/EDK2.log 37fi 38 39if [ -e $(pwd)/Unitool.log ]; then 40 rm $(pwd)/Unitool.log 41fi 42 43if [ -e $(pwd)/Conf/target.txt ]; then 44 rm $(pwd)/Conf/target.txt 45fi 46 47if [ -e $(pwd)/Conf/BiosId.env ]; then 48 rm $(pwd)/Conf/BiosId.env 49fi 50 51if [ -e $(pwd)/Conf/tools_def.txt ]; then 52 rm $(pwd)/Conf/tools_def.txt 53fi 54 55if [ -e $(pwd)/Conf/build_rule.txt ]; then 56 rm $(pwd)/Conf/build_rule.txt 57fi 58 59 60## Setup EDK environment. Edksetup puts new copies of target.txt, tools_def.txt, build_rule.txt in WorkSpace\Conf 61## Also run edksetup as soon as possible to avoid it from changing environment variables we're overriding 62. edksetup.sh BaseTools 63make -C BaseTools 64 65## Define platform specific environment variables. 66PLATFORM_PACKAGE=Vlv2TbltDevicePkg 67config_file=$WORKSPACE/$PLATFORM_PACKAGE/PlatformPkgConfig.dsc 68auto_config_inc=$WORKSPACE/$PLATFORM_PACKAGE/AutoPlatformCFG.txt 69 70## default ECP (override with /ECP flag) 71EDK_SOURCE=$WORKSPACE/EdkCompatibilityPkg 72 73## create new AutoPlatformCFG.txt file 74if [ -f "$auto_config_inc" ]; then 75 rm $auto_config_inc 76fi 77touch $auto_config_inc 78 79##********************************************************************** 80## Parse command line arguments 81##********************************************************************** 82 83## Optional arguments 84for (( i=1; i<=$#; )) 85 do 86 if [ "$1" == "/?" ]; then 87 Usage 88 elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/Q" ]; then 89 Build_Flags="$Build_Flags --quiet" 90 shift 91 elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/L" ]; then 92 Build_Flags="$Build_Flags -j EKD2.log" 93 shift 94 elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/C" ]; then 95 echo Removing previous build files ... 96 if [ -d "Build" ]; then 97 rm -r Build 98 fi 99 shift 100 elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/ECP" ]; then 101 ECP_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp 102 EDK_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp 103 echo DEFINE ECP_BUILD_ENABLE = TRUE >> $auto_config_inc 104 shift 105 elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/X64" ]; then 106 Arch=X64 107 shift 108 elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/YL" ]; then 109 SpiLock=1 110 shift 111 else 112 break 113 fi 114 done 115 116 117 118 119 120## Required argument(s) 121if [ "$2" == "" ]; then 122 Usage 123fi 124 125## Remove the values for Platform_Type and Build_Target from BiosIdX.env and stage in Conf 126if [ $Arch == "IA32" ]; then 127 cp $PLATFORM_PACKAGE/BiosIdR.env Conf/BiosId.env 128 echo DEFINE X64_CONFIG = FALSE >> $auto_config_inc 129else 130 cp $PLATFORM_PACKAGE/BiosIdx64R.env Conf/BiosId.env 131 echo DEFINE X64_CONFIG = TRUE >> $auto_config_inc 132fi 133sed -i '/^BOARD_ID/d' Conf/BiosId.env 134sed -i '/^BUILD_TYPE/d' Conf/BiosId.env 135 136 137 138## -- Build flags settings for each Platform -- 139## AlpineValley (ALPV): SVP_PF_BUILD = TRUE, ENBDT_PF_BUILD = FALSE, TABLET_PF_BUILD = FALSE, BYTI_PF_BUILD = FALSE, IVI_PF_BUILD = FALSE 140## BayleyBay (BBAY): SVP_PF_BUILD = FALSE, ENBDT_PF_BUILD = TRUE, TABLET_PF_BUILD = FALSE, BYTI_PF_BUILD = FALSE, IVI_PF_BUILD = FALSE 141## BayLake (BLAK): SVP_PF_BUILD = FALSE, ENBDT_PF_BUILD = FALSE, TABLET_PF_BUILD = TRUE, BYTI_PF_BUILD = FALSE, IVI_PF_BUILD = FALSE 142## Bakersport (BYTI): SVP_PF_BUILD = FALSE, ENBDT_PF_BUILD = FALSE, TABLET_PF_BUILD = FALSE, BYTI_PF_BUILD = TRUE, IVI_PF_BUILD = FALSE 143## Crestview Hills (CVHS): SVP_PF_BUILD = FALSE, ENBDT_PF_BUILD = FALSE, TABLET_PF_BUILD = FALSE, BYTI_PF_BUILD = TRUE, IVI_PF_BUILD = TRUE 144## FFD8 (BLAK): SVP_PF_BUILD = FALSE, ENBDT_PF_BUILD = FALSE, TABLET_PF_BUILD = TRUE, BYTI_PF_BUILD = FALSE, IVI_PF_BUILD = FALSE 145echo "Setting $1 platform configuration and BIOS ID..." 146if [ "$(echo $1 | tr 'a-z' 'A-Z')" == "MNW2" ]; then 147 echo BOARD_ID = MNW2MAX >> Conf/BiosId.env 148 echo DEFINE ENBDT_PF_BUILD = TRUE >> $auto_config_inc 149else 150 echo "Error - Unsupported PlatformType: $1" 151 Usage 152fi 153 154Platform_Type=$1 155 156if [ "$(echo $2 | tr 'a-z' 'A-Z')" == "RELEASE" ]; then 157 TARGET=RELEASE 158 BUILD_TYPE=R 159 echo BUILD_TYPE = R >> Conf/BiosId.env 160else 161 TARGET=DEBUG 162 BUILD_TYPE=D 163 echo BUILD_TYPE = D >> Conf/BiosId.env 164fi 165 166 167##********************************************************************** 168## Additional EDK Build Setup/Configuration 169##********************************************************************** 170echo "Ensuring correct build directory is present for GenBiosId..." 171 172echo Modifing Conf files for this build... 173## Remove lines with these tags from target.txt 174sed -i '/^ACTIVE_PLATFORM/d' Conf/target.txt 175sed -i '/^TARGET /d' Conf/target.txt 176sed -i '/^TARGET_ARCH/d' Conf/target.txt 177sed -i '/^TOOL_CHAIN_TAG/d' Conf/target.txt 178sed -i '/^MAX_CONCURRENT_THREAD_NUMBER/d' Conf/target.txt 179 180gcc_version=$(gcc -v 2>&1 | tail -1 | awk '{print $3}') 181case $gcc_version in 182 4.5.*) 183 TARGET_TOOLS=GCC45 184 ;; 185 4.6.*) 186 TARGET_TOOLS=GCC46 187 ;; 188 4.7.*) 189 TARGET_TOOLS=GCC47 190 ;; 191 4.8.*) 192 TARGET_TOOLS=GCC48 193 ;; 194 4.9.*|4.1[0-9].*|5.*.*|6.*.*) 195 TARGET_TOOLS=GCC49 196 ;; 197 *) 198 TARGET_TOOLS=GCC44 199 ;; 200esac 201 202ACTIVE_PLATFORM=$PLATFORM_PACKAGE/PlatformPkgGcc"$Arch".dsc 203TOOL_CHAIN_TAG=$TARGET_TOOLS 204MAX_CONCURRENT_THREAD_NUMBER=1 205echo ACTIVE_PLATFORM = $ACTIVE_PLATFORM >> Conf/target.txt 206echo TARGET = $TARGET >> Conf/target.txt 207echo TOOL_CHAIN_TAG = $TOOL_CHAIN_TAG >> Conf/target.txt 208echo MAX_CONCURRENT_THREAD_NUMBER = $MAX_CONCURRENT_THREAD_NUMBER >> Conf/target.txt 209if [ $Arch == "IA32" ]; then 210 echo TARGET_ARCH = IA32 >> Conf/target.txt 211else 212 echo TARGET_ARCH = IA32 X64 >> Conf/target.txt 213fi 214 215##********************************************************************** 216## Build BIOS 217##********************************************************************** 218echo Skip "Running UniTool..." 219echo "Make GenBiosId Tool..." 220BUILD_PATH=Build/$PLATFORM_PACKAGE/"$TARGET"_"$TOOL_CHAIN_TAG" 221if [ ! -d "$BUILD_PATH/$Arch" ]; then 222 mkdir -p $BUILD_PATH/$Arch 223fi 224if [ -e "$BUILD_PATH/$Arch/BiosId.bin" ]; then 225 rm -f $BUILD_PATH/$Arch/BiosId.bin 226fi 227 228 229./$PLATFORM_PACKAGE/GenBiosId -i Conf/BiosId.env -o $BUILD_PATH/$Arch/BiosId.bin 230 231 232echo "Invoking EDK2 build..." 233build 234 235if [ $SpiLock == "1" ]; then 236 IFWI_HEADER_FILE=./$PLATFORM_PACKAGE/Stitch/IFWIHeader/IFWI_HEADER_SPILOCK.bin 237else 238 IFWI_HEADER_FILE=./$PLATFORM_PACKAGE/Stitch/IFWIHeader/IFWI_HEADER.bin 239fi 240 241echo $IFWI_HEADER_FILE 242 243##********************************************************************** 244## Post Build processing and cleanup 245##********************************************************************** 246 247echo Skip "Running fce..." 248 249echo Skip "Running KeyEnroll..." 250 251## Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables 252VERSION_MAJOR=$(grep '^VERSION_MAJOR' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-4) 253VERSION_MINOR=$(grep '^VERSION_MINOR' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-2) 254BOARD_ID=$(grep '^BOARD_ID' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-7) 255BIOS_Name="$BOARD_ID"_"$Arch"_"$BUILD_TYPE"_"$VERSION_MAJOR"_"$VERSION_MINOR".ROM 256BIOS_ID="$BOARD_ID"_"$Arch"_"$BUILD_TYPE"_"$VERSION_MAJOR"_"$VERSION_MINOR"_GCC.bin 257cp -f $BUILD_PATH/FV/VLV.fd $WORKSPACE/$BIOS_Name 258SEC_VERSION=1.0.2.1060v5 259cat $IFWI_HEADER_FILE ./Vlv2MiscBinariesPkg/SEC/$SEC_VERSION/VLV_SEC_REGION.bin ./Vlv2MiscBinariesPkg/SEC/$SEC_VERSION/Vacant.bin $BIOS_Name > ./$PLATFORM_PACKAGE/Stitch/$BIOS_ID 260 261 262echo Skip "Running BIOS_Signing ..." 263 264echo 265echo Build location: $BUILD_PATH 266echo BIOS ROM Created: $BIOS_Name 267echo 268echo -------------------- The EDKII BIOS build has successfully completed. -------------------- 269echo 270