From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.151; helo=mga17.intel.com; envelope-from=michael.a.kubacki@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id AD7DD211E0934 for ; Tue, 2 Apr 2019 15:44:10 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Apr 2019 15:44:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,302,1549958400"; d="scan'208";a="333202562" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by fmsmga006.fm.intel.com with ESMTP; 02 Apr 2019 15:44:10 -0700 Received: from orsmsx114.amr.corp.intel.com (10.22.240.10) by ORSMSX101.amr.corp.intel.com (10.22.225.128) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 2 Apr 2019 15:44:09 -0700 Received: from orsmsx121.amr.corp.intel.com ([169.254.10.155]) by ORSMSX114.amr.corp.intel.com ([169.254.8.54]) with mapi id 14.03.0415.000; Tue, 2 Apr 2019 15:44:09 -0700 From: "Kubacki, Michael A" To: "Agyeman, Prince" , "edk2-devel@lists.01.org" CC: "Desimone, Nathaniel L" , "Sinha, Ankit" , "Kinney, Michael D" , "Oram, Isaac W" , "Gao, Liming" Thread-Topic: [edk2-platforms][PATCH v2 1/2] Platform/Intel: Added python build script. Thread-Index: AQHU6M/KTvKzb3StVEe63dwooovVLqYpccAw Date: Tue, 2 Apr 2019 22:44:08 +0000 Message-ID: <49AB4ACB9627B8468F29D589A27B745584537658@ORSMSX121.amr.corp.intel.com> References: <1e17d4aaea509fc28b90b4e48cad30daff64ac99.1554139004.git.prince.agyeman@intel.com> In-Reply-To: <1e17d4aaea509fc28b90b4e48cad30daff64ac99.1554139004.git.prince.agyeman@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzhlY2U1ODMtNGJmZC00OGU5LWI2ZTYtYjM5MTAwZDJkYzYzIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiTXc5YmxBY3FPODg2dFVxcitPWDBRRGpnWkpGcnY2T0FxZjIxOUJmWkZKbTJwc285OFF0Y2NzbVwvQ2RxYWlWd1EifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Subject: Re: [edk2-platforms][PATCH v2 1/2] Platform/Intel: Added python build script. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Apr 2019 22:44:11 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable 1. Format the patch with the cover letter attached to the whole patch set w= ith the Blurb and CC list included in the cover letter. 2. Since this is rather large and a new design, can you please describe the= design in more detail? 3. Use camel case for all filenames 4. Add copyright headers to all the files 5. Add a basic description of the file at the top of the file 6. There's some PEP-8 violations, can you please run a PEP-8 linter? 7. In Platform/Intel/BuildBios.py, the copyright header specifies the filen= ame as PatchFspBinBaseAddress.py, change to BuildBios.py Questions -=20 1. Ideally the batch scripts can be deleted and replaced with these scripts= , do you see any reason not to do that? 2. Is Platform/KabylakeRvp3/BuildEx.py only provided for KabylakeRvp3 to se= rve as an example? 3. The message only mentions on Windows 10, can you also include the other = operating systems tested? > -----Original Message----- > From: Agyeman, Prince > Sent: Monday, April 1, 2019 2:14 PM > To: edk2-devel@lists.01.org > Cc: Kubacki, Michael A ; Desimone, > Nathaniel L ; Sinha, Ankit > ; Kinney, Michael D ; > Oram, Isaac W ; Gao, Liming > > Subject: [edk2-platforms][PATCH v2 1/2] Platform/Intel: Added python buil= d > script. >=20 > This change allows building all the platforms in Platform/Intel with a si= ngle > python script. This script is tested on windows 10 , python 2.7 and pytho= n 3.7 > with VS2015 >=20 > Files Added: >=20 > * BuildBios.py: the main build script > build.json: contains general/default build settings > * ClevoOpenBoardPkg/N1xxWU/buildConfig.json: contains N1xxWU specific > build settings > * KabylakeOpenBoardPkg/KabylakeRvp3/BuildEx.py : contains KabylakeRvp3 > custom build script > * KabylakeOpenBoardPkg/KabylakeRvp3/buildConfig.json: contains > KabylakeRvp3 build settings > * PurleyOpenBoardPkg/BoardMtOlympus/BuildBoard.py: contains > BoardMtOlympus custom build script > * PurleyOpenBoardPkg/BoardMtOlympus/buildConfig.json: contains > BoardMtOlympus custom build settings >=20 > Cc: Michael Kubacki > Cc: Nate DeSimone > Cc: Ankit Sinha > Cc: Michael D Kinney > Cc: Isaac W Oram > Cc: Liming Gao >=20 > Contributed-under: TianoCore Contribution Agreement 0.1 > Signed-off-by: Agyeman > --- > Platform/Intel/BuildBios.py | 866 ++++++++++++++++++ > .../ClevoOpenBoardPkg/N1xxWU/buildConfig.json | 31 + > .../KabylakeRvp3/BuildEx.py | 17 + > .../KabylakeRvp3/buildConfig.json | 32 + > .../BoardMtOlympus/BuildBoard.py | 100 ++ > .../BoardMtOlympus/buildConfig.json | 35 + > Platform/Intel/build.json | 55 ++ > 7 files changed, 1136 insertions(+) > create mode 100644 Platform/Intel/BuildBios.py create mode 100644 > Platform/Intel/ClevoOpenBoardPkg/N1xxWU/buildConfig.json > create mode 100644 > Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/BuildEx.py > create mode 100644 > Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/buildConfig.json > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/BuildBoard.py > create mode 100644 > Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/buildConfig.json > create mode 100644 Platform/Intel/build.json >=20 > diff --git a/Platform/Intel/BuildBios.py b/Platform/Intel/BuildBios.py ne= w file > mode 100644 index 0000000000..512640c9d1 > --- /dev/null > +++ b/Platform/Intel/BuildBios.py > @@ -0,0 +1,866 @@ > +## @ PatchFspBinBaseAddress.py > +# > +# Copyright (c) 2019, Intel Corporation. All rights reserved.
# > +This program and the accompanying materials are licensed and made > +available under # the terms and conditions of the BSD License that > accompanies this distribution. > +# The full text of the license may be found at # > +http://opensource.org/licenses/bsd-license.php. > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > +# > +## > + > +import os > +import subprocess > +import sys > +import json > +import argparse > +import signal > +import re > +import stat > +import shutil > +from importlib import import_module > + > + > +def prebuild(buildConfig , buildType =3D "DEBUG", silent =3D False, tool= chain =3D > None): > + """Sets the environment variables that shall be used for the build > + > + :param buildConfig: The build configuration as defined in the JO= SN > configuration files > + :type buildConfig: Dictionary > + :param buildType: The build target, DEBUG, RELEASE, RELEASE_PDB, > TEST_RELEASE > + :type buildType: String > + :param silent: Enables build in silent mode > + :type silent: Boolean > + :param toolchain: Specifies the tool chain tag to use for the bu= ild > + :type toolchain: String > + :returns: The updated environment variables > + :rtype: Dictionary > + """ > + #patch the config > + buildConfig =3D patchConfig(buildConfig) > + > + #get current environment variables > + buildConfig.update(os.environ.copy()) > + > + config =3D {} > + > + for key,item in buildConfig.items(): > + config[str(key)] =3D str(item) > + > + config =3D py27Fix(config) > + > + #Set WORKSPACE environment. > + config["WORKSPACE"] =3D os.path.abspath(os.path.join("..","..","..",= "")) > #TODO > + print("Set WORKSPACE as: {}".format(config["WORKSPACE"])) > + > + #Check whether Git has been installed and been added to system path. > + try: > + subprocess.Popen(["git", "--help"],stdout=3Dsubprocess.PIPE) > + except OSError as error: > + if error.errno =3D=3D os.errno.ENOENT: > + print("The 'git' command is not recognized.") > + print("Please make sure that Git is installed and has been a= dded to > system path.") > + os.exit(1) > + > + #Create the Conf directory under WORKSPACE > + if not os.path.isdir(os.path.join(config["WORKSPACE"],"Conf")): > + try: > + #create directory > + os.makedirs(os.path.join(config["WORKSPACE"],"Conf")) > + #copy files to it > + configTemplatePath =3D > os.path.join(config["WORKSPACE"],config["BASE_TOOLS_PATH"],"Conf") > + configPath =3D os.path.join(config["WORKSPACE"],"Conf") > + shutil.copyfile(configTemplatePath + os.sep + "target.templa= te", > configPath + os.sep + "target.txt") > + shutil.copyfile(configTemplatePath + os.sep + "tools_def.tem= plate", > configPath + os.sep + "tools_def.txt") > + shutil.copyfile(configTemplatePath + os.sep + "build_rule.te= mplate", > configPath + os.sep + "build_rule.txt") > + except OSError: > + print ("Error while creating Conf") > + exit(1) > + > + #Set other environments. > + #Basic Rule: > + # Platform override Silicon override Core > + # Source override Binary > + config["WORKSPACE_PLATFORM"] =3D > os.path.join(config["WORKSPACE"],config["WORKSPACE_PLATFORM"]) > + config["WORKSPACE_SILICON"] =3D > os.path.join(config["WORKSPACE"],config["WORKSPACE_SILICON"]) > + config["WORKSPACE_PLATFORM_BIN"] =3D > os.path.join(config["WORKSPACE"],config["WORKSPACE_PLATFORM_BIN"]) > + config["WORKSPACE_SILICON_BIN"] =3D > os.path.join(config["WORKSPACE"],config["WORKSPACE_SILICON_BIN"]) > + config["WORKSPACE_FSP_BIN"] =3D > + os.path.join(config["WORKSPACE"],config["WORKSPACE_FSP_BIN"]) > + > + # add to package path > + pathSep =3D ";" > + config["EDK_SETUP_OPTION"] =3D "--nt32" > + if os.name =3D=3D "posix": > + pathSep =3D ":" > + config["EDK_SETUP_OPTION"] =3D " " > + > + config["PACKAGES_PATH"] =3D config["WORKSPACE_PLATFORM"] > + config["PACKAGES_PATH"] +=3D pathSep + config["WORKSPACE_SILICON"] > + config["PACKAGES_PATH"] +=3D pathSep + > config["WORKSPACE_SILICON_BIN"] > + config["PACKAGES_PATH"] +=3D pathSep + > os.path.join(config["WORKSPACE"],"FSP") > + config["PACKAGES_PATH"] +=3D pathSep + > os.path.join(config["WORKSPACE"],"edk2") > + config["PACKAGES_PATH"] +=3D pathSep + > + os.path.join(config["WORKSPACE"]) > + > + config["EDK_TOOLS_PATH"] =3D > os.path.join(config["WORKSPACE"],config["EDK_TOOLS_PATH"]) > + config["BASE_TOOLS_PATH"] =3D config["EDK_TOOLS_PATH"] > + config["EDK_TOOLS_BIN"] =3D > os.path.join(config["WORKSPACE"],config["EDK_TOOLS_BIN"]) > + config["PLATFORM_FSP_BIN_PACKAGE"] =3D > + os.path.join(config['WORKSPACE_FSP_BIN'],config['FSP_BIN_PKG']) > + > + config['PROJECT_DSC'] =3D > os.path.join(config["WORKSPACE_PLATFORM"],config['PROJECT_DSC'] ) > + config['BOARD_PKG_PCD_DSC'] =3D > os.path.join(config["WORKSPACE_PLATFORM"],config['BOARD_PKG_PCD_D > SC'] ) > + config["CONF_PATH"] =3D os.path.join(config["WORKSPACE"],"Conf") > + > + # get the python path > + if os.environ.get("PYTHON_HOME") is None: > + config["PYTHON_HOME"] =3D None > + if os.environ.get("PYTHONPATH") is not None: > + config["PYTHON_HOME"] =3D os.environ.get("PYTHONPATH") > + else: > + print("PYTHONPATH environment variable is not found") > + exit(1) > + > + #if python is installed, disable the binary base tools. > + if config.get("PYTHON_HOME") is not None: > + if config.get("EDK_TOOLS_BIN") is not None: > + del config["EDK_TOOLS_BIN"] > + > + #Run edk setup and update config > + edk2SetupCmd =3D [os.path.join(config["EFI_SOURCE"],"edksetup")] > + if os.name !=3D "posix": > + > + if config.get("EDK_SETUP_OPTION") and > config["EDK_SETUP_OPTION"] !=3D " ": > + edk2SetupCmd.append(config["EDK_SETUP_OPTION"]) > + > + out,err,result,returnCode =3D executeScript(edk2SetupCmd, config= , > collectEnv =3D True, shell =3D True) > + print (out,err) > + config.update(result) > + # print(config["PATH"]) > + # exit(0) > + > + #if python is installed, nmake BaseTools source and enable BaseTools > source build > + command =3D ["nmake","- > f",os.path.join(config["BASE_TOOLS_PATH"],"Makefile")] > + if os.name =3D=3D "posix": #linux > + command =3D ["make","-C",os.path.join(config["BASE_TOOLS_PATH"])= ] > + > + out,err,result,returnCode =3D executeScript(command, config,shell=3D= True) > + if returnCode is not 0: > + buildFailed(config) > + > + config["SILENT_MODE"] =3D 'TRUE' if silent else 'FALSE' > + > + print ("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D") > + > + # TODO log the output to file > + if os.path.isfile(os.path.join(config['WORKSPACE'],"Prep.log")): > + os.remove(os.path.join(config['WORKSPACE'],"Prep.log")) > + > + config["PROJECT"] =3D > + os.path.join(config["PLATFORM_BOARD_PACKAGE"],config["BOARD"]) > + > + # > + # Setup Visual Studio environment. Order of precedence is 2012, 2013= , > 2010 and then 2008. > + # > + > + #TODO os dependent must be part of default , toolchain selection > + if toolchain !=3D None: > + config["TOOL_CHAIN_TAG"] =3D toolchain > + elif config.get("TOOL_CHAIN_TAG") =3D=3D None: > + if os.name =3D=3D 'nt': > + config["TOOL_CHAIN_TAG"] =3D "VS2015" > + else: > + config["TOOL_CHAIN_TAG"] =3D "GCC5" > + > + # echo Show CL revision > + config["PrepRELEASE"] =3D buildType > + > + if buildType =3D=3D "DEBUG": > + config["TARGET"] =3D 'DEBUG' > + config["TARGET_SHORT"] =3D 'D' > + else: > + config["TARGET"] =3D 'RELEASE' > + config["TARGET_SHORT"] =3D 'R' > + > + # set BUILD_DIR_PATH path > + config["BUILD_DIR_PATH"] =3D os.path.join(config["WORKSPACE"], > + 'Build',config["PROJ= ECT"],"{}_{}".format( > + config["TARGET"], > + config["TOOL_CHAIN_T= AG"])) > + # set BUILD_DIR path > + config["BUILD_DIR"] =3D > os.path.join('Build',config["PROJECT"],"{}_{}".format( > + config["TARGET"], > + > + config["TOOL_CHAIN_TAG"])) > + > + config["BUILD_X64"] =3D os.path.join(config["BUILD_DIR_PATH"],'X64') > + config["BUILD_IA32"] =3D > + os.path.join(config["BUILD_DIR_PATH"],'IA32') > + > + if not os.path.isdir(config["BUILD_DIR_PATH"]): > + try: > + os.makedirs(config["BUILD_DIR_PATH"]) > + except OSError: > + print ("Error while creating Build folder") > + > + # > + # Set FSP_WRAPPER_BUILD > + # > + if config['FSP_WRAPPER_BUILD'] =3D=3D "TRUE": > + #Create dummy Fsp_Rebased_S_padded.fd to build the BiosInfo.inf > + #if it is wrapper build, due to the SECTION inclusion > + with open(os.path.join(config["WORKSPACE_FSP_BIN"], > config["FSP_BIN_PKG"],"Fsp_Rebased_S_padded.fd"), 'w') as fd: > + pass #fd.write("") > + > + if config["FSP_BINARY_BUILD"] =3D=3D "TRUE": > + if config['FSP_WRAPPER_BUILD'] =3D=3D 'FALSE': > + #EndPreBuild TODO return ? > + exit(0) > + > + if not os.path.isdir(config["BUILD_X64"]): > + try: > + os.mkdir(config["BUILD_X64"]) > + except OSError: > + print ("Error while creating > + {}".format(config["BUILD_X64"])) > + > + #update config file with changes > + updateTargetFile(config) > + > + #Additional pre build scripts for this platform > + result =3D preBuildEx(config) > + if result is not None and type(result) is dict: > + config.update(result) > + > + # print user settings > + print ("BIOS_SIZE_OPTION =3D {}".format(config["BIOS_SIZE_OPTION= "])) > + print ("EFI_SOURCE =3D {}".format(config["EFI_SOURCE"])) > + print ("TARGET =3D {}".format(config["TARGET"])) > + print ("TARGET_ARCH =3D {}".format("IA32 X64")) #TODO stati= c ? > + print ("TOOL_CHAIN_TAG =3D {}".format(config["TOOL_CHAIN_TAG"]= )) > + print ("WORKSPACE =3D {}".format(config["WORKSPACE"])) > + print ("WORKSPACE_CORE =3D > {}".format(config["WORKSPACE_CORE"])) > + print ("EXT_BUILD_FLAGS =3D {}".format(config["EXT_BUILD_FLAGS"= ])) > + > + return config > + > + > +def build(config): > + """Builds the BIOS image > + > + :param config: The environment variables to be used in the build > process > + :type config: Dictionary > + :returns: nothing > + """ > + # # > + # # Build FSP Binary > + # # > + if config.get("FSP_BINARY_BUILD") and \ > + config["FSP_BINARY_BUILD"] =3D=3D 'TRUE': > + config["FSP_BUILD_PARAMETER"] =3D "/d" > + if config["TARGET"] =3D=3D "RELEASE": > + config["FSP_BUILD_PARAMETER"] =3D "/tr" > + else: > + config["FSP_BUILD_PARAMETER"] =3D "/r" > + > + # @if %FSP_WRAPPER_BUILD% EQU FALSE goto :BldEnd TODO > + > + if config["FSP_WRAPPER_BUILD"] =3D=3D "TRUE": > + pattern =3D "Fsp_Rebased.*\.fd$" > + file_dir =3D > os.path.join(config['WORKSPACE_FSP_BIN'],config['FSP_BIN_PKG']) > + for item in os.listdir(file_dir): > + if re.search(pattern, item): > + os.remove(os.path.join(file_dir, item)) > + > + path =3D > + > os.path.join(config['WORKSPACE_PLATFORM'],config['PROJECT'],config['BO > + ARD_PKG_PCD_DSC']) > + > + > + command =3D [os.path.join(config['PYTHON_HOME'],"python"), > + > os.path.join(config['WORKSPACE_PLATFORM'],config['PLATFORM_PACKAGE > '],'Tools','Fsp','RebaseAndPatchFspBinBaseAddress.py'), > + > os.path.join(config['WORKSPACE_PLATFORM'],config['FLASH_MAP_FDF']), > + > os.path.join(config['WORKSPACE_FSP_BIN'],config['FSP_BIN_PKG']), > + "Fsp.fd", > + > + > os.path.join(config['WORKSPACE_PLATFORM'],config['PROJECT'],config['BO > + ARD_PKG_PCD_DSC']),"0x0"] > + > + out,err,result,returnCode =3D executeScript(command, config) > + > + if returnCode !=3D 0: > + print("!!! ERROR:RebaseAndPatchFspBinBaseAddress failed!!!") > + exit(returnCode) > + > + #create Fsp_Rebased.fd which is Fsp_Rebased_S.fd + Fsp_Rebased_M= + > Fsp_Rebased_T > + with open(os.path.join(file_dir,"Fsp_Rebased_S.fd"),'rb') as fs= p_S ,\ > + open(os.path.join(file_dir,"Fsp_Rebased_M.fd"), 'rb') as fs= p_M ,\ > + open(os.path.join(file_dir,"Fsp_Rebased_T.fd"), 'rb') as fs= p_T : > + fsp_rebased =3D fsp_S.read() + fsp_M.read() + fsp_T.read() > + with open(os.path.join(file_dir,"Fsp_Rebased.fd"),'wb') as = new_fsp: > + new_fsp.write(fsp_rebased) > + > + if not os.path.isfile(os.path.join(file_dir,"Fsp_Rebased.fd")): > + print("!!! ERROR:failed to create fsp!!!") > + exit(1) > + > + > + # Output the build variables the user has selected. > + print("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D") > + print(" User Selected build options:") > + print(" SILENT_MODE =3D ",config["SILENT_MODE"]) > + print(" REBUILD_MODE =3D ",config["REBUILD_MODE"]) > + print(" BUILD_ROM_ONLY =3D ",config["BUILD_ROM_ONLY"]) > + print("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D") > + > + command =3D ["build" , "-n" , config["NUMBER_OF_PROCESSORS"]] > + > + if config["REBUILD_MODE"] and config["REBUILD_MODE"] !=3D "": > + command.append(config["REBUILD_MODE"]) > + > + if config["EXT_BUILD_FLAGS"] and config["EXT_BUILD_FLAGS"] !=3D "": > + command.append(config["EXT_BUILD_FLAGS"]) > + > + if config.get("SILENT_MODE","FALSE") =3D=3D "TRUE": > + command.append("--silent") > + command.append("--quiet") > + > + else: > + command.append("--log=3D"+ config.get("BUILD_LOG","Build.log")) > + command.append("--report-file=3D"+ > + config.get("BUILD_REPORT","BuildReport.log")) > + > + if config.get("VERBOSE","FALSE") =3D=3D "TRUE": > + command.append("--verbose") > + > + > + if config.get("MAX_SOCKET") is not None: > + command.append("-D") > + command.append("MAX_SOCKET=3D" + config["MAX_SOCKET"]) > + > + out,err, result , exitCode =3D executeScript(command, config) > + if exitCode !=3D 0: > + buildFailed(config) > + > + #Additional build scripts for this platform > + result =3D buildEx(config) > + if result is not None and type(result) is dict: > + config.update(result) > + > + return config > + > + > +def postbuild(config): > + """Post build process of BIOS image > + > + :param config: The environment variables to be used in the build > process > + :type config: Dictionary > + :returns: nothing > + """ > + print( "Running postbuild to complete the build process.") > + > + #Additional build scripts for this platform > + result =3D postBuildEx(config) > + if result is not None and type(result) is dict: > + config.update(result) > + > + #cleanup > + pattern =3D "Fsp_Rebased.*\.fd$" > + file_dir =3D > os.path.join(config['WORKSPACE_FSP_BIN'],config['FSP_BIN_PKG']) > + for item in os.listdir(file_dir): > + if re.search(pattern, item): > + os.remove(os.path.join(file_dir, item)) > + > + if config.get("DYNAMIC_BUILD_INIT_FILES") is not None: > + for item in config["DYNAMIC_BUILD_INIT_FILES"].split(","): > + try: > + os.remove(item) #remove __init__.py > + os.remove(item + "c") #remove __init__.pyc as well > + except: > + pass > +def build_success(config): > + """Displays results when build is successful > + > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :returns: nothing > + """ > + print( "TARGET: ",config["TARGET"]) > + print( "TOOL_CHAIN_TAG: ",config["TOOL_CHAIN_TAG"]) > + print( "BIOS location: ",config["BUILD_DIR"]+ os.path.sep + "= FV" ) > + print("") > + print(" The EDKII BIOS build has successfully completed!") > + > + > +def buildFailed(config): > + """Displays results when build fails > + > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :returns: nothing > + """ > + print(" The EDKII BIOS Build has failed!") > + #clean up > + if config.get("DYNAMIC_BUILD_INIT_FILES") is not None: > + for item in config["DYNAMIC_BUILD_INIT_FILES"].split(","): > + if os.path.isfile(item): > + try: > + os.remove(item) #remove __init__.py > + os.remove(item + "c") #remove __init__.pyc as well > + except: > + pass > + > + exit(1) > + > + > +def importPlatformLib(path, function): > + """Imports custom functions for the platforms being built > + > + :param path: the location of the custom build script to be execu= ted > + :type path: String > + :param path: the function to be executed > + :type path: String > + :returns: nothing > + """ > + path =3D path.replace(os.sep,".") > + module =3D import_module(path) > + lib =3D getattr(module, function) > + return lib > + > + > +def preBuildEx(config): > + """ An extension of the prebuild process as defined platform > +specific prebuild setup script > + > + :param config: The environment variables used in the pre build p= rocess > + :type config: Dictionary > + :returns: config dictionary > + :rtype: Dictionary > + """ > + if config.get("ADDITIONAL_SCRIPTS"): > + try: > + platformFunction =3D > importPlatformLib(config["ADDITIONAL_SCRIPTS"], "preBuildEx") > + functions =3D {"executeScript":executeScript} > + return platformFunction(config, functions) > + except Exception as e: > + print(config["ADDITIONAL_SCRIPTS"],str(e) ) > + buildFailed(config) > + return None > + > + > +def buildEx(config): > + """ An extension of the build process as defined platform specific > +build setup script > + > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :returns: config dictionary > + :rtype: Dictionary > + """ > + if config.get("ADDITIONAL_SCRIPTS"): > + try: > + platformFunction =3D > importPlatformLib(config["ADDITIONAL_SCRIPTS"], "buildEx") > + functions =3D {"executeScript":executeScript} > + return platformFunction(config, functions) > + except Exception as e: > + print("error",config["ADDITIONAL_SCRIPTS"],str(e) ) > + buildFailed(config) > + return None > + > + > +def postBuildEx(config): > + """ An extension of the post build process as defined platform > +specific build setup script > + > + :param config: The environment variables used in the post build = process > + :type config: Dictionary > + :returns: config dictionary > + :rtype: Dictionary > + """ > + if config.get("ADDITIONAL_SCRIPTS"): > + try: > + platformFunction =3D > importPlatformLib(config["ADDITIONAL_SCRIPTS"], "postBuildEx") > + functions =3D {"executeScript":executeScript} > + return platformFunction(config, functions) > + except Exception as e: > + print(config["ADDITIONAL_SCRIPTS"],str(e) ) > + buildFailed(config) > + return None > + > + > +def cleanEx(config): > + """ An extension of the platform cleanning > + > + :param config: The environment variables used in the clean proce= ss > + :type config: Dictionary > + :returns: config dictionary > + :rtype: Dictionary > + """ > + if config.get("ADDITIONAL_SCRIPTS"): > + try: > + platformFunction =3D > importPlatformLib(config["ADDITIONAL_SCRIPTS"], "cleanEx") > + functions =3D {"executeScript":executeScript} > + return platformFunction(config, functions) > + except Exception as e: > + print(config["ADDITIONAL_SCRIPTS"],str(e) ) > + buildFailed(config) > + return None > + > + > +def getEnvironmentVariables(stdoutStr, marker): > + """Gets the environment variables from a process > + > + :param stdoutStr: The stdout pipe > + :type stdoutStr: String > + :param marker: A begining and end mark of environment variables > printed to stdout > + :type marker: String > + :returns: The environment variables read from the process' stdou= t pipe > + :rtype: Tuple > + """ > + startEnvUpdate =3D False > + environmentVars =3D { } > + outPut =3D "" > + for line in stdoutStr.split("\n"): > + if startEnvUpdate and len(line.split("=3D")) =3D=3D 2: > + key,value =3D line.split("=3D") > + environmentVars[key] =3D value > + else: > + outPut +=3D "\n" + line.replace(marker,"") > + > + if marker in line: > + if startEnvUpdate: > + startEnvUpdate =3D False > + else: > + startEnvUpdate =3D True > + return (outPut,environmentVars) > + > + > +def executeScript(command, envVariables, collectEnv =3D False, > enableStdPipe =3D False, shell =3D True): > + """launches a process that executes a script/shell command passed > +to it > + > + :param command: The command/script with its commandline > arguments to be executed > + :type command: List:String > + :param envVariables: Environment variables passed to the process > + :type envVariables: String > + :param collectEnv: Enables the collection of evironment variable= s when > process execution is done > + :type collectEnv: Boolean > + :param enableStdPipe: Enables process out to be piped to > + :type enableStdPipe: String > + :returns: a tuple of stdout, stderr , environment variables, ret= urn code > + :rtype: Tuple: (stdout, stderr , enVar, returnCode) > + """ > + > + print("Calling " + " ".join(command)) > + > + envMarker =3D '-----env-----' > + env =3D {} > + kwarg =3D { "env":envVariables, > + "universal_newlines":True, > + "shell":shell, #TODO > + "cwd": envVariables["WORKSPACE"]} > + > + if enableStdPipe or collectEnv: > + kwarg["stdout"] =3D subprocess.PIPE > + kwarg["stderr"] =3D subprocess.PIPE > + > + > + #collect environment variables > + if collectEnv: > + #get the binary that prints environment variables based on os > + if os.name =3D=3D 'nt': > + getVarCommand =3D "set" > + else: > + getVarCommand =3D "env" > + #modify the command to print the environment variables > + if type(command) =3D=3D list: > + command +=3D [ "&&", "echo" ,envMarker, "&&" > ,getVarCommand,"&&", "echo" ,envMarker] > + else: > + command +=3D " " + " ".join([ "&&", "echo" ,envMarker, "&&" > + ,getVarCommand,"&&", "echo" ,envMarker]) > + > + > + #execute the command > + execute =3D subprocess.Popen(command, **kwarg) > + stdout, stderr =3D execute.communicate() > + code =3D execute.returncode > + > + #wait for process to be done > + execute.wait() > + > + #if collect enviroment variables > + if collectEnv: > + #get the new environment variables > + stdout,env =3D getEnvironmentVariables(stdout, envMarker) > + return (stdout, stderr , env, code) > + > +def patchConfig(config): > + """ An extension of the platform cleanning > + > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :returns: config dictionary > + :rtype: Dictionary > +""" > + newconfig =3D {} > + for key in config: > + newconfig[str(key)] =3D > config[key].replace("\\",os.path.sep).replace("/",os.path.sep) > + return config > + > + > +def py27Fix(config): > + """ Prepares build for python 2.7 =3D> build > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :returns: config dictionary > + :rtype: Dictionary > + """ > + if not (sys.version_info > (3, 0)): > + > + #convert all evironment keys and values to string > + for key,item in buildConfig.items(): > + config[str(key)] =3D str(item) > + pathList =3D [] > + > + #create __init__.py in directories in this path > + if config.get("ADDITIONAL_SCRIPTS"): > + #get the directory > + pathToDirectory =3D > os.path.dirname(config.get("ADDITIONAL_SCRIPTS")) > + path =3D "" > + for directories in pathToDirectory.split(os.sep): > + path +=3D directories + os.sep > + initFile =3D path + os.sep + "__init__.py" > + #if not os.path.isfile(initFile): > + open(initFile, 'w').close() > + pathList.append(initFile) > + config["DYNAMIC_BUILD_INIT_FILES"] =3D ",".join(pathList) > + > + return config > + > +def clean(buildConfig, platform =3D ""): > + """Cleans the build workspace > + > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :param platform: The platform to clean > + :type platform: String > + :returns: nothing > + """ > + print(" Run build cleanall...") > + > + #patch the config > + buildConfig =3D patchConfig(buildConfig) > + > + #get current environment variables > + config =3D os.environ.copy() > + > + #update it with the build variables > + config.update(buildConfig) > + > + if not config.get('WORKSPACE') and \ > + config.get('WORKSPACE') !=3D "": > + config["WORKSPACE"] =3D > + os.path.abspath(os.path.join("..","..","..","")) > + > + config["WORKSPACE_PLATFORM"] =3D > os.path.join(config["WORKSPACE"],config["WORKSPACE_PLATFORM"]) > + config["WORKSPACE_SILICON"] =3D > + os.path.join(config["WORKSPACE"],config["WORKSPACE_SILICON"]) > + > + # build cleanall > + print("Directories to clean...") > + > + if os.path.isdir(os.path.join(config['WORKSPACE'],"Build",platform))= : > + > + shutil.rmtree(os.path.join(config['WORKSPACE'],"Build",platform)) > + > + if os.path.isdir(os.path.join(config['WORKSPACE'],"conf",".cache")): > + > + shutil.rmtree(os.path.join(config['WORKSPACE'],"conf",".cache")) > + > + print("Cleaning files...") > + > + if os.path.isfile(os.path.join(config['WORKSPACE'],"edk2.log")): > + print("Removing ",os.path.join(config['WORKSPACE'],"edk2.log")) > + os.remove(os.path.join(config['WORKSPACE'],"edk2.log")) > + > + if > os.path.isfile(os.path.join(config['WORKSPACE'],"Conf","build_rule.txt"))= : > + print("Removing > ",os.path.join(config['WORKSPACE'],"Conf","build_rule.txt")) > + > + os.remove(os.path.join(config['WORKSPACE'],"Conf","build_rule.txt")) > + > + if > os.path.isfile(os.path.join(config['WORKSPACE'],"Conf","FrameworkDatabas > e.db")): > + print("Removing > ",os.path.join(config['WORKSPACE'],"Conf","FrameworkDatabase.db")) > + > + > os.remove(os.path.join(config['WORKSPACE'],"Conf","FrameworkDatabase. > d > + b")) > + > + if os.path.isfile(os.path.join(config['WORKSPACE'],"Conf","target.tx= t")): > + print("Removing > ",os.path.join(config['WORKSPACE'],"Conf","target.txt")) > + > + os.remove(os.path.join(config['WORKSPACE'],"Conf","target.txt")) > + > + if > os.path.isfile(os.path.join(config['WORKSPACE'],"Conf","tools_def.txt")): > + print("Removing > ",os.path.join(config['WORKSPACE'],"Conf","tools_def.txt")) > + > + os.remove(os.path.join(config['WORKSPACE'],"Conf","tools_def.txt")) > + > + print(" All done...") > + > + exit(0) > + > + > +def updateTargetFile(config): > + """Updates Conf's target file that will be used in the build > + > + :param config: The environment variables used in the build proce= ss > + :type config: Dictionary > + :returns: True if update was successful and False if update fail= s > + :rtype: Boolean > + """ > + contents =3D None > + result =3D False > + with open(os.path.join(config["CONF_PATH"],"target.txt"), 'r') as ta= rget: > + contents =3D target.readlines() > + optionsList =3D ['ACTIVE_PLATFORM' ,'TARGET' ,'TARGET_ARCH' > ,'TOOL_CHAIN_TAG' ,'BUILD_RULE_CONF'] > + modified =3D [] > + > + # remove these options from the config file > + for line in contents: > + if '#' !=3D line.replace(" ","")[0] and any(opt in line for = opt in > optionsList): > + continue > + modified.append(line) > + > + #replace with config options provided > + string =3D "{} =3D {}\n".format("ACTIVE_PLATFORM", > os.path.join(config['WORKSPACE_PLATFORM'], > + > config['PLATFORM_BOARD_PACKAGE'], > + > config['BOARD'],config['PROJECT_DSC'])) > + modified.append(string) > + > + string =3D "{} =3D {}\n".format("TARGET",config['TARGET']) > + modified.append(string) > + > + string =3D "TARGET_ARCH =3D IA32 X64\n" #TODO > + modified.append(string) > + > + string =3D "{} =3D > {}\n".format("TOOL_CHAIN_TAG",config['TOOL_CHAIN_TAG']) > + modified.append(string) > + > + string =3D "{} =3D > {}\n".format("BUILD_RULE_CONF",os.path.join("Conf","build_rule.txt")) > + modified.append(string) > + > + if modified !=3D None: > + with open(os.path.join(config["WORKSPACE"],"Conf","target.txt"),= 'w') > as target: > + for line in modified: > + target.write(line) > + result =3D True > + > + return result > + > + > +def getConfig(): > + """Reads the default projects config file > + > + :returns: The config defined in the the build.json file > + :rtype: Dictionary > + """ > + buildConfig =3D None > + with open('build.json') as configFile: > + strConfig =3D configFile.read().replace("\\",os.sep).replace("/"= ,os.sep) > + strConfig =3D strConfig.replace("//",os.sep) > + buildConfig =3D json.loads(strConfig) > + return buildConfig > + > + > +def getPlatformConfig(platformName, configData): > + """ Reads the platform specifig config file > + > + param platformName: The name of the platform to be built > + :type platformName: String > + param configData: The environment variables to be used in the bu= ild > process > + :type configData: Dictionary > + :returns: The config defined in the the build.json file > + :rtype: Dictionary > + """ > + config =3D {} > + platformData =3D configData.get("PLATFORMS") > + try: > + platform =3D platformData.get(platformName) > + if platform !=3D None: > + path =3D platform.get('CONFIG_PATH') > + with open(path) as configFile: > + strConfig =3D > configFile.read().replace("\\",os.sep).replace("/",os.sep) > + strConfig =3D strConfig.replace("//",os.sep) > + config =3D json.loads(strConfig) > + except Exception as e: > + print("getPlatformConfig: " + str(e)) > + exit(1) > + return config > + > + > +def getCmdArguments(buildConfig): > + """ Get commandline inputs from user > + > + param configData: The environment variables to be used in the bu= ild > process > + :type configData: Dictionary > + :returns: The commandline arguments input by the user > + :rtype: argparse object > + """ > + > + #this is an argparse action that lists the available platforms > + class printPlatforms(argparse.Action): > + def __call__(self, parser, namespace, values, option_string=3DNo= ne): > + config =3D getConfig() > + print("Platforms:") > + for key in buildConfig.get("PLATFORMS"): > + print(" " + key) > + setattr(namespace, self.dest, values) > + exit(0) > + > + buildChoices =3D [ 'DEBUG', 'RELEASE', 'TEST_RELEASE', 'RELEASE_PDB'= ] > + # get the build commands > + Parser =3D argparse.ArgumentParser(description=3D"Build Help") > + Parser.add_argument('--platform','-p', dest=3D"platform", > + help=3D'the platform to build= ', > + choices =3D buildConfig.get("= PLATFORMS"), > + required=3D('-l' not in > + sys.argv and '--cleanall' not in sys.argv ) ) > + > + Parser.add_argument('--toolchain','-t', dest=3D"toolchain", > + help=3D"Using the Tool Chain= Tagname to build the > platform,overriding \ > + target.txt's TOOL_CHAIN_TAG > + definition") > + > + > + Parser.add_argument("--DEBUG",'-d', help=3D"debug flag", action =3D > + 'store_const', dest=3D"target", const=3D"DEBUG", default=3D "DEBUG") > + > + Parser.add_argument("--RELEASE",'-r',help=3D"Release flag", action = =3D > + 'store_const', dest=3D"target", const=3D"RELEASE") > + > + Parser.add_argument("--TEST_RELEASE",'-tr',help=3D"Test Release > + flag", action =3D 'store_const', dest=3D"target", const=3D"TEST_RELEASE= ") > + > + Parser.add_argument("--RELEASE_PDB",'-rp',help=3D"Release flag", > + action =3D 'store_const', dest=3D"target", const=3D"RELEASE_PDB") > + > + Parser.add_argument('--list','-l', action=3DprintPlatforms, > + help=3D'Lists available platforms', nargs=3D0) > + > + Parser.add_argument('--cleanall', dest=3D'cleanall', help=3D'Cleans > + all', action=3D'store_true') > + > + return Parser.parse_args() > + > + > +def KeyboardInterruption(signal, frame): > + """ Catches a keyboard interruption handler > + > + param signal: The signal this handler is called with > + :type configData: Signal > + :rtype: nothing > + """ > + print( "Quiting...") > + exit(0) > + > + > +if __name__ =3D=3D "__main__": > + > + if os.name !=3D "nt": > + print("OS not supported!") # TODO add GCC support > + exit(1) > + > + #to quit the build > + signal.signal(signal.SIGINT, KeyboardInterruption) > + > + #get general build configurations > + buildConfig =3D getConfig() > + > + #get commandline parameters > + arguments =3D getCmdArguments(buildConfig) > + > + if arguments.cleanall: > + clean(buildConfig.get("DEFAULT_CONFIG")) > + > + #get platform specific config > + platform_config =3D getPlatformConfig(arguments.platform,buildConfig= ) > + > + #update general build config with platform specific config > + config =3D buildConfig.get("DEFAULT_CONFIG") > + config.update(platform_config.get("CONFIG")) > + > + # get prebuild configurations > + config =3D prebuild(config, buildType=3Darguments.target, > + toolchain=3Darguments.toolchain) > + > + #build selected platform > + config =3D build(config) > + > + #post build > + postbuild(config) > \ No newline at end of file > diff --git a/Platform/Intel/ClevoOpenBoardPkg/N1xxWU/buildConfig.json > b/Platform/Intel/ClevoOpenBoardPkg/N1xxWU/buildConfig.json > new file mode 100644 > index 0000000000..097f2a8d3f > --- /dev/null > +++ b/Platform/Intel/ClevoOpenBoardPkg/N1xxWU/buildConfig.json > @@ -0,0 +1,31 @@ > +{ > + "CONFIG" : { > + "WORKSPACE_PLATFORM_BIN":"WORKSPACE_PLATFORM_BIN" , > + "EDK_SETUP_OPTION":"" , > + "openssl_path":"" , > + "PLATFORM_BOARD_PACKAGE":"ClevoOpenBoardPkg" , > + "PROJECT":"ClevoOpenBoardPkg\\N1xxWU" , > + "BOARD":"N1xxWU" , > + > "FLASH_MAP_FDF":"ClevoOpenBoardPkg\\N1xxWU\\Include\\Fdf\\FlashMa > pInclude.fdf", > + > "PROJECT_DSC":"ClevoOpenBoardPkg\\N1xxWU\\OpenBoardPkg.dsc", > + > "BOARD_PKG_PCD_DSC":"ClevoOpenBoardPkg\\N1xxWU\\OpenBoardPkgPc > d.dsc", > + "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=3DSIZE_70", > + "PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC" , > + "PROMPT":"$P$G" , > + "PrepRELEASE":"DEBUG" , > + "SILENT_MODE":"FALSE" , > + "EXT_CONFIG_CLEAR":"" , > + "CapsuleBuild":"FALSE" , > + "EXT_BUILD_FLAGS":"" , > + "CAPSULE_BUILD":"0" , > + "TARGET":"DEBUG" , > + "TARGET_SHORT":"D" , > + "PERFORMANCE_BUILD":"FALSE", > + "FSP_WRAPPER_BUILD":"TRUE" , > + "FSP_BIN_PKG":"KabylakeFspBinPkg" , > + "FSP_PKG_NAME":"KabylakeFspPkg", > + "FSP_BINARY_BUILD":"FALSE" , > + "FSP_TEST_RELEASE":"FALSE" , > + "SECURE_BOOT_ENABLE":"FALSE" > + } > +} > \ No newline at end of file > diff --git a/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/BuildEx.py > b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/BuildEx.py > new file mode 100644 > index 0000000000..662f7bedde > --- /dev/null > +++ b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/BuildEx.py > @@ -0,0 +1,17 @@ > +import os > + > +def preBuildEx(config, functions): > + print("preBuildEx") > + return None > + > +def buildEx(config, functions): > + print("buildEx") > + return None > + > +def postBuildEx(config, functions): > + print("postBuildEx") > + return None > + > +def cleanEx(config, functions): > + print("cleanEx") > + return None > \ No newline at end of file > diff --git > a/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/buildConfig.json > b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/buildConfig.json > new file mode 100644 > index 0000000000..79b75f2e47 > --- /dev/null > +++ > b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/buildConfig.json > @@ -0,0 +1,32 @@ > +{ > + "CONFIG" : { > + "WORKSPACE_PLATFORM_BIN":"WORKSPACE_PLATFORM_BIN" , > + "EDK_SETUP_OPTION":"" , > + "openssl_path":"" , > + "PLATFORM_BOARD_PACKAGE":"KabylakeOpenBoardPkg" , > + "PROJECT":"KabylakeOpenBoardPkg\\KabylakeRvp3" , > + "BOARD":"KabylakeRvp3" , > + > "FLASH_MAP_FDF":"KabylakeOpenBoardPkg\\Include\\Fdf\\FlashMapInclud > e.fdf", > + > "PROJECT_DSC":"KabylakeOpenBoardPkg\\KabylakeRvp3\\OpenBoardPkg.ds > c", > + > "BOARD_PKG_PCD_DSC":"KabylakeOpenBoardPkg\\KabylakeRvp3\\OpenBo > ardPkgPcd.dsc", > + > "ADDITIONAL_SCRIPTS":"KabylakeOpenBoardPkg\\KabylakeRvp3\\BuildEx", > + "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=3DSIZE_70", > + "PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC" , > + "PROMPT":"$P$G" , > + "PrepRELEASE":"DEBUG" , > + "SILENT_MODE":"FALSE" , > + "EXT_CONFIG_CLEAR":"" , > + "CapsuleBuild":"FALSE" , > + "EXT_BUILD_FLAGS":"" , > + "CAPSULE_BUILD":"0" , > + "TARGET":"DEBUG" , > + "TARGET_SHORT":"D" , > + "PERFORMANCE_BUILD":"FALSE", > + "FSP_WRAPPER_BUILD":"TRUE" , > + "FSP_BIN_PKG":"KabylakeFspBinPkg" , > + "FSP_PKG_NAME":"KabylakeFspPkg", > + "FSP_BINARY_BUILD":"FALSE" , > + "FSP_TEST_RELEASE":"FALSE" , > + "SECURE_BOOT_ENABLE":"FALSE" > + } > +} > \ No newline at end of file > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/BuildBoard.py > b/Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/BuildBoard.py > new file mode 100644 > index 0000000000..69dd4a048d > --- /dev/null > +++ b/Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/BuildBoard.py > @@ -0,0 +1,100 @@ > +import os > + > +def preBuildEx(config, functions): > + > + print("Info: re-generating PlatformOffset header files") > + > + executeScript =3D functions.get("executeScript") > + > + command =3D ["build","-D","MAX_SOCKET=3D" + > config.get("MAX_SOCKET","1"), > + "-m" , os.path.join(config["PLATFORM_BOARD_PACKAGE"], "Ac= pi", > "BoardAcpiDxe", "Dsdt.inf"), > + "-y" , > config.get("PRE_BUILD_REPORT",os.path.join(config["WORKSPACE"],"preBu > ildReport.txt")), > + "--log=3D" + > config.get("PRE_BUILD_LOG",os.path.join(config["WORKSPACE"],"prebuild.l > og")) > + ] > + > + stdout, stderr , env, code =3D executeScript(command, config) > + if code !=3D 0: > + print(" ".join(command)) > + print("Error re-generating PlatformOffset header files") > + exit(1) > + > + config["AML_FILTER"]=3D "\"PSYS\" .MCTL\" .FIX[0-9,A-Z]\"" > + print("AML_FILTER=3D ", config["AML_FILTER"]) > + > + #build the command with arguments > + command =3D [ os.path.join(config["PYTHON_HOME"],"python"), > + os.path.join(config["MIN_PACKAGE_TOOLS"],"AmlGenOffset", > "AmlGenOffset.py"), > + "-d", "--aml_filter", config ["AML_FILTER"], > + "- > o",os.path.join(config["WORKSPACE_PLATFORM"],config["PLATFORM_BOA > RD_PACKAGE"], "Acpi", "BoardAcpiDxe", "AmlOffsetTable.c"), > + os.path.join(config["BUILD_X64"],"PurleyOpenBoardPkg", > + "Acpi","BoardAcpiDxe","Dsdt","OUTPUT","Dsdt","WFPPlatform.offset.h")] > + > + #execute the command > + stdout, stderr , env, code =3D executeScript(command, config) > + if code !=3D 0: > + print(" ".join(command)) > + print("Error re-generating PlatformOffset header files") > + exit(1) > + > + print("GenOffset done") > + return config > + > +def buildEx(config, functions): > + print("buildEx") > + return None > + > +def postBuildEx(config, functions): > + print("postBuildEx") > + > + executeScript =3D functions.get("executeScript") > + > + if not executeScript: > + print("postBuildEx Error") > + exit(1) > + > + print("BoardPostBuild: python PatchBinFv.py") > + > + commonPatchCommand =3D [ > os.path.join(config["PYTHON_HOME"],"python"), > + > os.path.join(config["MIN_PACKAGE_TOOLS"],"PatchFv","PatchBinFv.py"), > + config["TARGET"], > + > os.path.join(config["WORKSPACE_SILICON_BIN"],"PurleySiliconBinPkg"), > + os.path.join(config["WORKSPACE"],"BuildReport.log")] > + > + fvsToPatch =3D ["FvTempMemorySilicon", "FvPreMemorySilicon" > ,"FvPostMemorySilicon" , "FvLateSilicon"] > + for fv in fvsToPatch: > + patchCommand =3D commonPatchCommand + [fv] > + stdout, stderr , env, code =3D executeScript(patchCommand, confi= g) > + if code !=3D 0: > + print(" ".join(patchCommand)) > + print("Patch Error!") > + exit(1) > + > + > + print("BoardPostBuild: python RebaseBinFv.py") > + > + commonRebaseCommand =3D [ > os.path.join(config["PYTHON_HOME"],"python"), > + > os.path.join(config["MIN_PACKAGE_TOOLS"],"PatchFv","RebaseBinFv.py"), > + config["TARGET"], > + > os.path.join(config["WORKSPACE_SILICON_BIN"],"PurleySiliconBinPkg"), > + os.path.join(config["WORKSPACE"],"BuildReport.log")] > + > + > + rebaseCommand =3D commonRebaseCommand + ["FvPreMemorySilicon" > ,"gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase"] > + stdout, stderr , env, code =3D executeScript(rebaseCommand, config) > + if code !=3D 0: > + print(" ".join(rebaseCommand)) > + print("Patch Error!") > + exit(1) > + > + > + rebaseCommand =3D commonRebaseCommand + > ["FvPostMemorySilicon","gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSB > ase"] > + stdout, stderr , env, code =3D executeScript(rebaseCommand, config) > + if code !=3D 0: > + print(" ".join(rebaseCommand)) > + print("Patch Error!") > + exit(1) > + > + return None > + > +def cleanEx(config, functions): > + print("cleanEx") > + return None > \ No newline at end of file > diff --git > a/Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/buildConfig.json > b/Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/buildConfig.json > new file mode 100644 > index 0000000000..212f8dea70 > --- /dev/null > +++ > b/Platform/Intel/PurleyOpenBoardPkg/BoardMtOlympus/buildConfig.json > @@ -0,0 +1,35 @@ > +{ > + "CONFIG" : { > + "WORKSPACE_PLATFORM_BIN":"WORKSPACE_PLATFORM_BIN" , > + "EDK_SETUP_OPTION":"" , > + "openssl_path":"" , > + "PLATFORM_BOARD_PACKAGE":"PurleyOpenBoardPkg" , > + "PROJECT":"PurleyOpenBoardPkg\\BoardMtOlympus" , > + "BOARD":"BoardMtOlympus" , > + > "FLASH_MAP_FDF":"PurleyOpenBoardPkg\\Include\\Fdf\\FlashMapInclude.f > df", > + > "PROJECT_DSC":"PurleyOpenBoardPkg\\BoardMtOlympus\\PlatformPkg.dsc > ", > + > "BOARD_PKG_PCD_DSC":"PurleyOpenBoardPkg\\BoardMtOlympus\\Platfor > mPkgPcd.dsc", > + > "ADDITIONAL_SCRIPTS":"PurleyOpenBoardPkg\\BoardMtOlympus\\BuildBoa > rd", > + "PRE_BUILD_LOG":"prebuild.log", > + "PRE_BUILD_REPORT":"prebuildReport.log", > + "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=3DSIZE_70", > + "PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC" , > + "PROMPT":"$P$G" , > + "PrepRELEASE":"DEBUG" , > + "SILENT_MODE":"FALSE" , > + "EXT_CONFIG_CLEAR":"" , > + "CapsuleBuild":"FALSE" , > + "EXT_BUILD_FLAGS":"" , > + "CAPSULE_BUILD":"0" , > + "TARGET":"DEBUG" , > + "TARGET_SHORT":"D" , > + "PERFORMANCE_BUILD":"FALSE", > + "FSP_WRAPPER_BUILD":"FALSE" , > + "FSP_BIN_PKG":"KabylakeFspBinPkg" , > + "FSP_PKG_NAME":"KabylakeFspPkg", > + "FSP_BINARY_BUILD":"FALSE" , > + "FSP_TEST_RELEASE":"FALSE" , > + "SECURE_BOOT_ENABLE":"FALSE", > + "MAX_SOCKET":"2" > + } > +} > \ No newline at end of file > diff --git a/Platform/Intel/build.json b/Platform/Intel/build.json new fi= le > mode 100644 index 0000000000..3b26390db3 > --- /dev/null > +++ b/Platform/Intel/build.json > @@ -0,0 +1,55 @@ > +{ > + "DEFAULT_CONFIG" : { > + > "WORKSPACE":"\\Users\\paagyema\\Projects\\minplatform\\" , > + "WORKSPACE_FSP_BIN":"FSP", > + "EDK_TOOLS_BIN":"edk2-BaseTools-win32" , > + "EDK_BASETOOLS":"BaseTools" , > + "WORKSPACE_PLATFORM":"edk2-platforms\\Platform\\= Intel" > , > + "WORKSPACE_SILICON":"edk2-platforms\\Silicon\\In= tel" , > + > "WORKSPACE_PLATFORM_BIN":"WORKSPACE_PLATFORM_BIN" , > + "WORKSPACE_SILICON_BIN":"edk2-non-osi\\Silicon\\= Intel" , > + "MIN_PACKAGE_TOOLS":"edk2- > platforms\\Platform\\Intel\\MinPlatformPkg\\Tools", > + "PACKAGES_PATH":"" , > + "EDK_SETUP_OPTION":"" , > + "BASE_TOOLS_PATH":"edk2\\BaseTools" , > + "EDK_TOOLS_PATH":"edk2\\BaseTools" , > + "openssl_path":"" , > + "PLATFORM_BOARD_PACKAGE":"KabylakeOpenBoardPkg" = , > + "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=3DSIZE_= 70", > + "WORKSPACE_CORE":"edk2" , > + "EFI_SOURCE":"edk2" , > + "PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC= " , > + "PROMPT":"$P$G" , > + "PLATFORM_PACKAGE":"MinPlatformPkg" , > + "BOARD":"KabylakeRvp3" , > + "PrepRELEASE":"DEBUG" , > + "SILENT_MODE":"FALSE" , > + "EXT_CONFIG_CLEAR":"" , > + "CapsuleBuild":"FALSE" , > + "EXT_BUILD_FLAGS":"" , > + "CAPSULE_BUILD":"0" , > + "TARGET":"DEBUG" , > + "TARGET_SHORT":"D" , > + "PERFORMANCE_BUILD":"FALSE", > + "FSP_WRAPPER_BUILD":"TRUE" , > + "FSP_BIN_PKG":"KabylakeFspBinPkg" , > + "FSP_BINARY_BUILD":"FALSE" , > + "FSP_TEST_RELEASE":"FALSE" , > + "SECURE_BOOT_ENABLE":"FALSE", > + "REBUILD_MODE":"", > + "BUILD_ROM_ONLY":"", > + "NUMBER_OF_PROCESSORS":"1" > + > + }, > + "PLATFORMS":{ > + "KabylakeRvp3":{ > + > "CONFIG_PATH":"KabylakeOpenBoardPkg\\KabylakeRvp3\\buildConfig.json" > + }, > + "N1xxWU":{ > + "CONFIG_PATH":"ClevoOpenBoardPkg\\N1xxWU\\buildConfig.json" > + }, > + "BoardMtOlympus":{ > + > "CONFIG_PATH":"PurleyOpenBoardPkg\\BoardMtOlympus\\buildConfig.json > " > + } > + } > +} > \ No newline at end of file > -- > 2.19.1.windows.1