* [PATCH 1/2] Platform/Intel: Added python build script.
@ 2019-03-22 1:47 Agyeman
2019-03-22 1:47 ` [PATCH 2/2] ReadMe.md: Update the build instructions Agyeman
0 siblings, 1 reply; 2+ messages in thread
From: Agyeman @ 2019-03-22 1:47 UTC (permalink / raw)
To: edk2-devel
Cc: Nate DeSimone, Ankit Sinha, Michael D Kinney, Isaac W Oram,
Liming Gao
This change allows building all the platforms in Platform/Intel with
a single python script. This script is tested on windows 10 , python 2.7
and python 3.7 with VS2015
Files Added:
* 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
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Ankit Sinha <ankit.sinha@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Isaac W Oram <isaac.w.oram@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 0.1
Signed-off-by: Agyeman <prince.agyeman@intel.com>
---
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
diff --git a/Platform/Intel/BuildBios.py b/Platform/Intel/BuildBios.py
new 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.<BR>
+# 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 = "DEBUG", silent = False, toolchain = None):
+ """Sets the environment variables that shall be used for the build
+
+ :param buildConfig: The build configuration as defined in the JOSN 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 build
+ :type toolchain: String
+ :returns: The updated environment variables
+ :rtype: Dictionary
+ """
+ #patch the config
+ buildConfig = patchConfig(buildConfig)
+
+ #get current environment variables
+ buildConfig.update(os.environ.copy())
+
+ config = {}
+
+ for key,item in buildConfig.items():
+ config[str(key)] = str(item)
+
+ config = py27Fix(config)
+
+ #Set WORKSPACE environment.
+ config["WORKSPACE"] = 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=subprocess.PIPE)
+ except OSError as error:
+ if error.errno == os.errno.ENOENT:
+ print("The 'git' command is not recognized.")
+ print("Please make sure that Git is installed and has been added 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 = os.path.join(config["WORKSPACE"],config["BASE_TOOLS_PATH"],"Conf")
+ configPath = os.path.join(config["WORKSPACE"],"Conf")
+ shutil.copyfile(configTemplatePath + os.sep + "target.template", configPath + os.sep + "target.txt")
+ shutil.copyfile(configTemplatePath + os.sep + "tools_def.template", configPath + os.sep + "tools_def.txt")
+ shutil.copyfile(configTemplatePath + os.sep + "build_rule.template", 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"] = os.path.join(config["WORKSPACE"],config["WORKSPACE_PLATFORM"])
+ config["WORKSPACE_SILICON"] = os.path.join(config["WORKSPACE"],config["WORKSPACE_SILICON"])
+ config["WORKSPACE_PLATFORM_BIN"] = os.path.join(config["WORKSPACE"],config["WORKSPACE_PLATFORM_BIN"])
+ config["WORKSPACE_SILICON_BIN"] = os.path.join(config["WORKSPACE"],config["WORKSPACE_SILICON_BIN"])
+ config["WORKSPACE_FSP_BIN"] = os.path.join(config["WORKSPACE"],config["WORKSPACE_FSP_BIN"])
+
+ # add to package path
+ pathSep = ";"
+ config["EDK_SETUP_OPTION"] = "--nt32"
+ if os.name == "posix":
+ pathSep = ":"
+ config["EDK_SETUP_OPTION"] = " "
+
+ config["PACKAGES_PATH"] = config["WORKSPACE_PLATFORM"]
+ config["PACKAGES_PATH"] += pathSep + config["WORKSPACE_SILICON"]
+ config["PACKAGES_PATH"] += pathSep + config["WORKSPACE_SILICON_BIN"]
+ config["PACKAGES_PATH"] += pathSep + os.path.join(config["WORKSPACE"],"FSP")
+ config["PACKAGES_PATH"] += pathSep + os.path.join(config["WORKSPACE"],"edk2")
+ config["PACKAGES_PATH"] += pathSep + os.path.join(config["WORKSPACE"])
+
+ config["EDK_TOOLS_PATH"] = os.path.join(config["WORKSPACE"],config["EDK_TOOLS_PATH"])
+ config["BASE_TOOLS_PATH"] = config["EDK_TOOLS_PATH"]
+ config["EDK_TOOLS_BIN"] = os.path.join(config["WORKSPACE"],config["EDK_TOOLS_BIN"])
+ config["PLATFORM_FSP_BIN_PACKAGE"] = os.path.join(config['WORKSPACE_FSP_BIN'],config['FSP_BIN_PKG'])
+
+ config['PROJECT_DSC'] = os.path.join(config["WORKSPACE_PLATFORM"],config['PROJECT_DSC'] )
+ config['BOARD_PKG_PCD_DSC'] = os.path.join(config["WORKSPACE_PLATFORM"],config['BOARD_PKG_PCD_DSC'] )
+ config["CONF_PATH"] = os.path.join(config["WORKSPACE"],"Conf")
+
+ # get the python path
+ if os.environ.get("PYTHON_HOME") is None:
+ config["PYTHON_HOME"] = None
+ if os.environ.get("PYTHONPATH") is not None:
+ config["PYTHON_HOME"] = 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 = [os.path.join(config["EFI_SOURCE"],"edksetup")]
+ if os.name != "posix":
+
+ if config.get("EDK_SETUP_OPTION") and config["EDK_SETUP_OPTION"] != " ":
+ edk2SetupCmd.append(config["EDK_SETUP_OPTION"])
+
+ out,err,result,returnCode = executeScript(edk2SetupCmd, config, collectEnv = True, shell = 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 = ["nmake","-f",os.path.join(config["BASE_TOOLS_PATH"],"Makefile")]
+ if os.name == "posix": #linux
+ command = ["make","-C",os.path.join(config["BASE_TOOLS_PATH"])]
+
+ out,err,result,returnCode = executeScript(command, config,shell=True)
+ if returnCode is not 0:
+ buildFailed(config)
+
+ config["SILENT_MODE"] = 'TRUE' if silent else 'FALSE'
+
+ print ("==============================================")
+
+ # 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"] = 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 != None:
+ config["TOOL_CHAIN_TAG"] = toolchain
+ elif config.get("TOOL_CHAIN_TAG") == None:
+ if os.name == 'nt':
+ config["TOOL_CHAIN_TAG"] = "VS2015"
+ else:
+ config["TOOL_CHAIN_TAG"] = "GCC5"
+
+ # echo Show CL revision
+ config["PrepRELEASE"] = buildType
+
+ if buildType == "DEBUG":
+ config["TARGET"] = 'DEBUG'
+ config["TARGET_SHORT"] = 'D'
+ else:
+ config["TARGET"] = 'RELEASE'
+ config["TARGET_SHORT"] = 'R'
+
+ # set BUILD_DIR_PATH path
+ config["BUILD_DIR_PATH"] = os.path.join(config["WORKSPACE"],
+ 'Build',config["PROJECT"],"{}_{}".format(
+ config["TARGET"],
+ config["TOOL_CHAIN_TAG"]))
+ # set BUILD_DIR path
+ config["BUILD_DIR"] = os.path.join('Build',config["PROJECT"],"{}_{}".format(
+ config["TARGET"],
+ config["TOOL_CHAIN_TAG"]))
+
+ config["BUILD_X64"] = os.path.join(config["BUILD_DIR_PATH"],'X64')
+ config["BUILD_IA32"] = 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'] == "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"] == "TRUE":
+ if config['FSP_WRAPPER_BUILD'] == '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 = preBuildEx(config)
+ if result is not None and type(result) is dict:
+ config.update(result)
+
+ # print user settings
+ print ("BIOS_SIZE_OPTION = {}".format(config["BIOS_SIZE_OPTION"]))
+ print ("EFI_SOURCE = {}".format(config["EFI_SOURCE"]))
+ print ("TARGET = {}".format(config["TARGET"]))
+ print ("TARGET_ARCH = {}".format("IA32 X64")) #TODO static ?
+ print ("TOOL_CHAIN_TAG = {}".format(config["TOOL_CHAIN_TAG"]))
+ print ("WORKSPACE = {}".format(config["WORKSPACE"]))
+ print ("WORKSPACE_CORE = {}".format(config["WORKSPACE_CORE"]))
+ print ("EXT_BUILD_FLAGS = {}".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"] == 'TRUE':
+ config["FSP_BUILD_PARAMETER"] = "/d"
+ if config["TARGET"] == "RELEASE":
+ config["FSP_BUILD_PARAMETER"] = "/tr"
+ else:
+ config["FSP_BUILD_PARAMETER"] = "/r"
+
+ # @if %FSP_WRAPPER_BUILD% EQU FALSE goto :BldEnd TODO
+
+ if config["FSP_WRAPPER_BUILD"] == "TRUE":
+ pattern = "Fsp_Rebased.*\.fd$"
+ file_dir = 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 = os.path.join(config['WORKSPACE_PLATFORM'],config['PROJECT'],config['BOARD_PKG_PCD_DSC'])
+
+
+ command = [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['BOARD_PKG_PCD_DSC']),"0x0"]
+
+ out,err,result,returnCode = executeScript(command, config)
+
+ if returnCode != 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 fsp_S ,\
+ open(os.path.join(file_dir,"Fsp_Rebased_M.fd"), 'rb') as fsp_M ,\
+ open(os.path.join(file_dir,"Fsp_Rebased_T.fd"), 'rb') as fsp_T :
+ fsp_rebased = 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("==========================================")
+ print(" User Selected build options:")
+ print(" SILENT_MODE = ",config["SILENT_MODE"])
+ print(" REBUILD_MODE = ",config["REBUILD_MODE"])
+ print(" BUILD_ROM_ONLY = ",config["BUILD_ROM_ONLY"])
+ print("==========================================")
+
+ command = ["build" , "-n" , config["NUMBER_OF_PROCESSORS"]]
+
+ if config["REBUILD_MODE"] and config["REBUILD_MODE"] != "":
+ command.append(config["REBUILD_MODE"])
+
+ if config["EXT_BUILD_FLAGS"] and config["EXT_BUILD_FLAGS"] != "":
+ command.append(config["EXT_BUILD_FLAGS"])
+
+ if config.get("SILENT_MODE","FALSE") == "TRUE":
+ command.append("--silent")
+ command.append("--quiet")
+
+ else:
+ command.append("--log="+ config.get("BUILD_LOG","Build.log"))
+ command.append("--report-file="+ config.get("BUILD_REPORT","BuildReport.log"))
+
+ if config.get("VERBOSE","FALSE") == "TRUE":
+ command.append("--verbose")
+
+
+ if config.get("MAX_SOCKET") is not None:
+ command.append("-D")
+ command.append("MAX_SOCKET=" + config["MAX_SOCKET"])
+
+ out,err, result , exitCode = executeScript(command, config)
+ if exitCode != 0:
+ buildFailed(config)
+
+ #Additional build scripts for this platform
+ result = 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 = postBuildEx(config)
+ if result is not None and type(result) is dict:
+ config.update(result)
+
+ #cleanup
+ pattern = "Fsp_Rebased.*\.fd$"
+ file_dir = 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 process
+ :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 process
+ :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 executed
+ :type path: String
+ :param path: the function to be executed
+ :type path: String
+ :returns: nothing
+ """
+ path = path.replace(os.sep,".")
+ module = import_module(path)
+ lib = 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 process
+ :type config: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ if config.get("ADDITIONAL_SCRIPTS"):
+ try:
+ platformFunction = importPlatformLib(config["ADDITIONAL_SCRIPTS"], "preBuildEx")
+ functions = {"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 process
+ :type config: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ if config.get("ADDITIONAL_SCRIPTS"):
+ try:
+ platformFunction = importPlatformLib(config["ADDITIONAL_SCRIPTS"], "buildEx")
+ functions = {"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 = importPlatformLib(config["ADDITIONAL_SCRIPTS"], "postBuildEx")
+ functions = {"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 process
+ :type config: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+ """
+ if config.get("ADDITIONAL_SCRIPTS"):
+ try:
+ platformFunction = importPlatformLib(config["ADDITIONAL_SCRIPTS"], "cleanEx")
+ functions = {"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' stdout pipe
+ :rtype: Tuple
+ """
+ startEnvUpdate = False
+ environmentVars = { }
+ outPut = ""
+ for line in stdoutStr.split("\n"):
+ if startEnvUpdate and len(line.split("=")) == 2:
+ key,value = line.split("=")
+ environmentVars[key] = value
+ else:
+ outPut += "\n" + line.replace(marker,"")
+
+ if marker in line:
+ if startEnvUpdate:
+ startEnvUpdate = False
+ else:
+ startEnvUpdate = True
+ return (outPut,environmentVars)
+
+
+def executeScript(command, envVariables, collectEnv = False, enableStdPipe = False, shell = 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 variables 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, return code
+ :rtype: Tuple: (stdout, stderr , enVar, returnCode)
+ """
+
+ print("Calling " + " ".join(command))
+
+ envMarker = '-----env-----'
+ env = {}
+ kwarg = { "env":envVariables,
+ "universal_newlines":True,
+ "shell":shell, #TODO
+ "cwd": envVariables["WORKSPACE"]}
+
+ if enableStdPipe or collectEnv:
+ kwarg["stdout"] = subprocess.PIPE
+ kwarg["stderr"] = subprocess.PIPE
+
+
+ #collect environment variables
+ if collectEnv:
+ #get the binary that prints environment variables based on os
+ if os.name == 'nt':
+ getVarCommand = "set"
+ else:
+ getVarCommand = "env"
+ #modify the command to print the environment variables
+ if type(command) == list:
+ command += [ "&&", "echo" ,envMarker, "&&" ,getVarCommand,"&&", "echo" ,envMarker]
+ else:
+ command += " " + " ".join([ "&&", "echo" ,envMarker, "&&" ,getVarCommand,"&&", "echo" ,envMarker])
+
+
+ #execute the command
+ execute = subprocess.Popen(command, **kwarg)
+ stdout, stderr = execute.communicate()
+ code = execute.returncode
+
+ #wait for process to be done
+ execute.wait()
+
+ #if collect enviroment variables
+ if collectEnv:
+ #get the new environment variables
+ stdout,env = 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 process
+ :type config: Dictionary
+ :returns: config dictionary
+ :rtype: Dictionary
+"""
+ newconfig = {}
+ for key in config:
+ newconfig[str(key)] = config[key].replace("\\",os.path.sep).replace("/",os.path.sep)
+ return config
+
+
+def py27Fix(config):
+ """ Prepares build for python 2.7 => build
+ :param config: The environment variables used in the build process
+ :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)] = str(item)
+ pathList = []
+
+ #create __init__.py in directories in this path
+ if config.get("ADDITIONAL_SCRIPTS"):
+ #get the directory
+ pathToDirectory = os.path.dirname(config.get("ADDITIONAL_SCRIPTS"))
+ path = ""
+ for directories in pathToDirectory.split(os.sep):
+ path += directories + os.sep
+ initFile = path + os.sep + "__init__.py"
+ #if not os.path.isfile(initFile):
+ open(initFile, 'w').close()
+ pathList.append(initFile)
+ config["DYNAMIC_BUILD_INIT_FILES"] = ",".join(pathList)
+
+ return config
+
+def clean(buildConfig, platform = ""):
+ """Cleans the build workspace
+
+ :param config: The environment variables used in the build process
+ :type config: Dictionary
+ :param platform: The platform to clean
+ :type platform: String
+ :returns: nothing
+ """
+ print(" Run build cleanall...")
+
+ #patch the config
+ buildConfig = patchConfig(buildConfig)
+
+ #get current environment variables
+ config = os.environ.copy()
+
+ #update it with the build variables
+ config.update(buildConfig)
+
+ if not config.get('WORKSPACE') and \
+ config.get('WORKSPACE') != "":
+ config["WORKSPACE"] = os.path.abspath(os.path.join("..","..","..",""))
+
+ config["WORKSPACE_PLATFORM"] = os.path.join(config["WORKSPACE"],config["WORKSPACE_PLATFORM"])
+ config["WORKSPACE_SILICON"] = 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","FrameworkDatabase.db")):
+ print("Removing ",os.path.join(config['WORKSPACE'],"Conf","FrameworkDatabase.db"))
+ os.remove(os.path.join(config['WORKSPACE'],"Conf","FrameworkDatabase.db"))
+
+ if os.path.isfile(os.path.join(config['WORKSPACE'],"Conf","target.txt")):
+ 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 process
+ :type config: Dictionary
+ :returns: True if update was successful and False if update fails
+ :rtype: Boolean
+ """
+ contents = None
+ result = False
+ with open(os.path.join(config["CONF_PATH"],"target.txt"), 'r') as target:
+ contents = target.readlines()
+ optionsList = ['ACTIVE_PLATFORM' ,'TARGET' ,'TARGET_ARCH' ,'TOOL_CHAIN_TAG' ,'BUILD_RULE_CONF']
+ modified = []
+
+ # remove these options from the config file
+ for line in contents:
+ if '#' != line.replace(" ","")[0] and any(opt in line for opt in optionsList):
+ continue
+ modified.append(line)
+
+ #replace with config options provided
+ string = "{} = {}\n".format("ACTIVE_PLATFORM", os.path.join(config['WORKSPACE_PLATFORM'],
+ config['PLATFORM_BOARD_PACKAGE'],
+ config['BOARD'],config['PROJECT_DSC']))
+ modified.append(string)
+
+ string = "{} = {}\n".format("TARGET",config['TARGET'])
+ modified.append(string)
+
+ string = "TARGET_ARCH = IA32 X64\n" #TODO
+ modified.append(string)
+
+ string = "{} = {}\n".format("TOOL_CHAIN_TAG",config['TOOL_CHAIN_TAG'])
+ modified.append(string)
+
+ string = "{} = {}\n".format("BUILD_RULE_CONF",os.path.join("Conf","build_rule.txt"))
+ modified.append(string)
+
+ if modified != None:
+ with open(os.path.join(config["WORKSPACE"],"Conf","target.txt"), 'w') as target:
+ for line in modified:
+ target.write(line)
+ result = True
+
+ return result
+
+
+def getConfig():
+ """Reads the default projects config file
+
+ :returns: The config defined in the the build.json file
+ :rtype: Dictionary
+ """
+ buildConfig = None
+ with open('build.json') as configFile:
+ strConfig = configFile.read().replace("\\",os.sep).replace("/",os.sep)
+ strConfig = strConfig.replace("//",os.sep)
+ buildConfig = 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 build process
+ :type configData: Dictionary
+ :returns: The config defined in the the build.json file
+ :rtype: Dictionary
+ """
+ config = {}
+ platformData = configData.get("PLATFORMS")
+ try:
+ platform = platformData.get(platformName)
+ if platform != None:
+ path = platform.get('CONFIG_PATH')
+ with open(path) as configFile:
+ strConfig = configFile.read().replace("\\",os.sep).replace("/",os.sep)
+ strConfig = strConfig.replace("//",os.sep)
+ config = 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 build 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=None):
+ config = getConfig()
+ print("Platforms:")
+ for key in buildConfig.get("PLATFORMS"):
+ print(" " + key)
+ setattr(namespace, self.dest, values)
+ exit(0)
+
+ buildChoices = [ 'DEBUG', 'RELEASE', 'TEST_RELEASE', 'RELEASE_PDB' ]
+ # get the build commands
+ Parser = argparse.ArgumentParser(description="Build Help")
+ Parser.add_argument('--platform','-p', dest="platform",
+ help='the platform to build',
+ choices = buildConfig.get("PLATFORMS"),
+ required=('-l' not in sys.argv and '--cleanall' not in sys.argv ) )
+
+ Parser.add_argument('--toolchain','-t', dest="toolchain",
+ help="Using the Tool Chain Tagname to build the platform,overriding \
+ target.txt's TOOL_CHAIN_TAG definition")
+
+
+ Parser.add_argument("--DEBUG",'-d', help="debug flag", action = 'store_const', dest="target", const="DEBUG", default= "DEBUG")
+
+ Parser.add_argument("--RELEASE",'-r',help="Release flag", action = 'store_const', dest="target", const="RELEASE")
+
+ Parser.add_argument("--TEST_RELEASE",'-tr',help="Test Release flag", action = 'store_const', dest="target", const="TEST_RELEASE")
+
+ Parser.add_argument("--RELEASE_PDB",'-rp',help="Release flag", action = 'store_const', dest="target", const="RELEASE_PDB")
+
+ Parser.add_argument('--list','-l', action=printPlatforms, help='Lists available platforms', nargs=0)
+
+ Parser.add_argument('--cleanall', dest='cleanall', help='Cleans all', action='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__ == "__main__":
+
+ if os.name != "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 = getConfig()
+
+ #get commandline parameters
+ arguments = getCmdArguments(buildConfig)
+
+ if arguments.cleanall:
+ clean(buildConfig.get("DEFAULT_CONFIG"))
+
+ #get platform specific config
+ platform_config = getPlatformConfig(arguments.platform,buildConfig)
+
+ #update general build config with platform specific config
+ config = buildConfig.get("DEFAULT_CONFIG")
+ config.update(platform_config.get("CONFIG"))
+
+ # get prebuild configurations
+ config = prebuild(config, buildType=arguments.target, toolchain=arguments.toolchain)
+
+ #build selected platform
+ config = 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\\FlashMapInclude.fdf",
+ "PROJECT_DSC":"ClevoOpenBoardPkg\\N1xxWU\\OpenBoardPkg.dsc",
+ "BOARD_PKG_PCD_DSC":"ClevoOpenBoardPkg\\N1xxWU\\OpenBoardPkgPcd.dsc",
+ "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=SIZE_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\\FlashMapInclude.fdf",
+ "PROJECT_DSC":"KabylakeOpenBoardPkg\\KabylakeRvp3\\OpenBoardPkg.dsc",
+ "BOARD_PKG_PCD_DSC":"KabylakeOpenBoardPkg\\KabylakeRvp3\\OpenBoardPkgPcd.dsc",
+ "ADDITIONAL_SCRIPTS":"KabylakeOpenBoardPkg\\KabylakeRvp3\\BuildEx",
+ "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=SIZE_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 = functions.get("executeScript")
+
+ command = ["build","-D","MAX_SOCKET=" + config.get("MAX_SOCKET","1"),
+ "-m" , os.path.join(config["PLATFORM_BOARD_PACKAGE"], "Acpi", "BoardAcpiDxe", "Dsdt.inf"),
+ "-y" , config.get("PRE_BUILD_REPORT",os.path.join(config["WORKSPACE"],"preBuildReport.txt")),
+ "--log=" + config.get("PRE_BUILD_LOG",os.path.join(config["WORKSPACE"],"prebuild.log"))
+ ]
+
+ stdout, stderr , env, code = executeScript(command, config)
+ if code != 0:
+ print(" ".join(command))
+ print("Error re-generating PlatformOffset header files")
+ exit(1)
+
+ config["AML_FILTER"]= "\"PSYS\" .MCTL\" .FIX[0-9,A-Z]\""
+ print("AML_FILTER= ", config["AML_FILTER"])
+
+ #build the command with arguments
+ command = [ 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_BOARD_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 = executeScript(command, config)
+ if code != 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 = functions.get("executeScript")
+
+ if not executeScript:
+ print("postBuildEx Error")
+ exit(1)
+
+ print("BoardPostBuild: python PatchBinFv.py")
+
+ commonPatchCommand = [ 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 = ["FvTempMemorySilicon", "FvPreMemorySilicon" ,"FvPostMemorySilicon" , "FvLateSilicon"]
+ for fv in fvsToPatch:
+ patchCommand = commonPatchCommand + [fv]
+ stdout, stderr , env, code = executeScript(patchCommand, config)
+ if code != 0:
+ print(" ".join(patchCommand))
+ print("Patch Error!")
+ exit(1)
+
+
+ print("BoardPostBuild: python RebaseBinFv.py")
+
+ commonRebaseCommand = [ 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 = commonRebaseCommand + ["FvPreMemorySilicon" ,"gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspMBase"]
+ stdout, stderr , env, code = executeScript(rebaseCommand, config)
+ if code != 0:
+ print(" ".join(rebaseCommand))
+ print("Patch Error!")
+ exit(1)
+
+
+ rebaseCommand = commonRebaseCommand + ["FvPostMemorySilicon","gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspSBase"]
+ stdout, stderr , env, code = executeScript(rebaseCommand, config)
+ if code != 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.fdf",
+ "PROJECT_DSC":"PurleyOpenBoardPkg\\BoardMtOlympus\\PlatformPkg.dsc",
+ "BOARD_PKG_PCD_DSC":"PurleyOpenBoardPkg\\BoardMtOlympus\\PlatformPkgPcd.dsc",
+ "ADDITIONAL_SCRIPTS":"PurleyOpenBoardPkg\\BoardMtOlympus\\BuildBoard",
+ "PRE_BUILD_LOG":"prebuild.log",
+ "PRE_BUILD_REPORT":"prebuildReport.log",
+ "BIOS_SIZE_OPTION" : "-DBIOS_SIZE_OPTION=SIZE_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 file 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\\Intel" ,
+ "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=SIZE_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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH 2/2] ReadMe.md: Update the build instructions
2019-03-22 1:47 [PATCH 1/2] Platform/Intel: Added python build script Agyeman
@ 2019-03-22 1:47 ` Agyeman
0 siblings, 0 replies; 2+ messages in thread
From: Agyeman @ 2019-03-22 1:47 UTC (permalink / raw)
To: edk2-devel
Cc: Michael Kubacki, Michael D Kinney, Nate DeSimone, Liming Gao,
Ankit Sinha
Updated the build instructions to include
the python script build instructions
Cc: Michael Kubacki <michael.a.kubacki@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ankit Sinha <ankit.sinha@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Agyeman <prince.agyeman@intel.com>
---
ReadMe.md | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/ReadMe.md b/ReadMe.md
index 72e332a476..947d428ce9 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -105,6 +105,20 @@ return back to the minimum platform caller.
### Build
+**Building with the python script**
+
+1. Open command window, go to the workspace directory, e.g. c:\Kabylake.
+2. Type "cd edk2-platforms\Platform\Intel
+3. Type "python BuildBios.py -p REPLACE_WITH_BOARD_NAME"
+
+* To view the supported platforms
+ * ``Type "python BuildBios.py -l"``
+
+* For more information
+ * ``Type "python BuildBios.py -h"``
+
+**Building with the batch scripts**
+
For KabylakeOpenBoardPkg
1. Open command window, go to the workspace directory, e.g. c:\Kabylake.
2. Type "cd edk2-platforms\Platform\Intel\KabylakeOpenBoardPkg\KabylakeRvp3".
--
2.19.1.windows.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-03-22 1:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-22 1:47 [PATCH 1/2] Platform/Intel: Added python build script Agyeman
2019-03-22 1:47 ` [PATCH 2/2] ReadMe.md: Update the build instructions Agyeman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox