123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- # @ build_board.py
- # Extensions for building JunctionCity using build_bios.py
- #
- #
- # Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
- # Copyright (c) 2021, American Megatrends International LLC. <BR>
- # SPDX-License-Identifier: BSD-2-Clause-Patent
- #
- """
- This module serves as a sample implementation of the build extension
- scripts
- """
- import os
- import sys
- def pre_build_ex(config, functions):
- """Additional Pre BIOS build function
- :param config: The environment variables to be used in the build process
- :type config: Dictionary
- :param functions: A dictionary of function pointers
- :type functions: Dictionary
- :returns: nothing
- """
- print("pre_build_ex")
- config["BUILD_DIR_PATH"] = os.path.join(config["WORKSPACE"],
- 'Build',
- config["PLATFORM_BOARD_PACKAGE"],
- "{}_{}".format(
- config["TARGET"],
- config["TOOL_CHAIN_TAG"]))
- # set BUILD_DIR path
- config["BUILD_DIR"] = os.path.join('Build',
- config["PLATFORM_BOARD_PACKAGE"],
- "{}_{}".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")
- sys.exit(1)
- #@todo: Replace this with PcdFspModeSelection
- if config.get("API_MODE_FSP_WRAPPER_BUILD", "FALSE") == "TRUE":
- config["EXT_BUILD_FLAGS"] += " -D FSP_MODE=0"
- else:
- config["EXT_BUILD_FLAGS"] += " -D FSP_MODE=1"
- if config.get("API_MODE_FSP_WRAPPER_BUILD", "FALSE") == "TRUE":
- raise ValueError("FSP API Mode is currently unsupported on Ice Lake Xeon Scalable")
- # Build the ACPI AML offset table *.offset.h
- print("Info: re-generating PlatformOffset header files")
- execute_script = functions.get("execute_script")
- # AML offset arch is X64, not sure if it matters.
- command = ["build", "-a", "X64", "-t", config["TOOL_CHAIN_TAG"], "-D", "MAX_SOCKET=" + config["MAX_SOCKET"]]
- if config["EXT_BUILD_FLAGS"] and config["EXT_BUILD_FLAGS"] != "":
- ext_build_flags = config["EXT_BUILD_FLAGS"].split(" ")
- ext_build_flags = [x.strip() for x in ext_build_flags]
- ext_build_flags = [x for x in ext_build_flags if x != ""]
- command.extend(ext_build_flags)
- aml_offsets_split = os.path.split(os.path.normpath(config["AML_OFFSETS_PATH"]))
- command.append("-p")
- command.append(os.path.normpath(config["AML_OFFSETS_PATH"]) + '.dsc')
- command.append("-m")
- command.append(os.path.join(aml_offsets_split[0], aml_offsets_split[1], aml_offsets_split[1] + '.inf'))
- command.append("-y")
- command.append(os.path.join(config["WORKSPACE"], "PreBuildReport.txt"))
- command.append("--log=" + os.path.join(config["WORKSPACE"], "PreBuild.log"))
- shell = True
- if os.name == "posix": # linux
- shell = False
- _, _, _, code = execute_script(command, config, shell=shell)
- if code != 0:
- print(" ".join(command))
- print("Error re-generating PlatformOffset header files")
- sys.exit(1)
- # Build AmlGenOffset command to consume the *.offset.h and produce AmlOffsetTable.c for StaticSkuDataDxe use.
- # Get destination path and filename from config
- relative_file_path = os.path.normpath(config["STRIPPED_AML_OFFSETS_FILE_PATH"]) # get path relative to Platform/Intel
- out_file_path = os.path.join(config["WORKSPACE_PLATFORM"], relative_file_path) # full path to output file
- out_file_dir = os.path.dirname(out_file_path) # remove filename
- out_file_root_ext = os.path.splitext(os.path.basename(out_file_path)) # root and extension of output file
- # Get relative path for the generated offset.h file
- relative_dsdt_file_path = os.path.normpath(config["DSDT_TABLE_FILE_PATH"]) # path relative to Platform/Intel
- dsdt_file_root_ext = os.path.splitext(os.path.basename(relative_dsdt_file_path)) # root and extension of generated offset.h file
- # Generate output directory if it doesn't exist
- if not os.path.exists(out_file_dir):
- os.mkdir(out_file_dir)
- command = ["python",
- os.path.join(config["MIN_PACKAGE_TOOLS"], "AmlGenOffset", "AmlGenOffset.py"),
- "-d", "--aml_filter", config["AML_FILTER"],
- "-o", out_file_path,
- os.path.join(config["BUILD_X64"], aml_offsets_split[0], aml_offsets_split[1], aml_offsets_split[1], "OUTPUT", os.path.dirname(relative_dsdt_file_path), dsdt_file_root_ext[0] + ".offset.h")]
- # execute the command
- _, _, _, code = execute_script(command, config, shell=shell)
- if code != 0:
- print(" ".join(command))
- print("Error re-generating PlatformOffset header files")
- sys.exit(1)
- print("GenOffset done")
- return None
- def _merge_files(files, ofile):
- with open(ofile, 'wb') as of:
- for x in files:
- if not os.path.exists(x):
- return
- with open(x, 'rb') as f:
- of.write(f.read())
- def build_ex(config, functions):
- """Additional BIOS build function
- :param config: The environment variables to be used in the build process
- :type config: Dictionary
- :param functions: A dictionary of function pointers
- :type functions: Dictionary
- :returns: config dictionary
- :rtype: Dictionary
- """
- print("build_ex")
- fv_path = os.path.join(config["BUILD_DIR_PATH"], "FV")
- binary_fd = os.path.join(fv_path, "BINARY.fd")
- main_fd = os.path.join(fv_path, "MAIN.fd")
- secpei_fd = os.path.join(fv_path, "SECPEI.fd")
- board_fd = config["BOARD"].upper()
- final_fd = os.path.join(fv_path, "{}.fd".format(board_fd))
- _merge_files((binary_fd, main_fd, secpei_fd), final_fd)
- return None
- def post_build_ex(config, functions):
- """Additional Post BIOS build function
- :param config: The environment variables to be used in the post
- build process
- :type config: Dictionary
- :param functions: A dictionary of function pointers
- :type functions: Dictionary
- :returns: config dictionary
- :rtype: Dictionary
- """
- print("post_build_ex")
- fv_path = os.path.join(config["BUILD_DIR_PATH"], "FV")
- board_fd = config["BOARD"].upper()
- final_fd = os.path.join(fv_path, "{}.fd".format(board_fd))
- final_ifwi = os.path.join(fv_path, "{}.bin".format(board_fd))
- ifwi_ingredients_path = os.path.join(config["WORKSPACE_PLATFORM_BIN"], "Ifwi", config["BOARD"])
- flash_descriptor = os.path.join(ifwi_ingredients_path, "FlashDescriptor.bin")
- intel_me = os.path.join(ifwi_ingredients_path, "Me.bin")
- _merge_files((flash_descriptor, intel_me, final_fd), final_ifwi)
- if os.path.isfile(final_fd):
- print("IFWI image can be found at {}".format(final_ifwi))
- return None
- def clean_ex(config, functions):
- """Additional clean function
- :param config: The environment variables to be used in the build process
- :type config: Dictionary
- :param functions: A dictionary of function pointers
- :type functions: Dictionary
- :returns: config dictionary
- :rtype: Dictionary
- """
- print("clean_ex")
- return None
|