libfdt.fdt_setprop(Fdt, ConfNode1, 'require-fit', b'', 0)\r
libfdt.fdt_setprop(Fdt, ConfNode1, 'firmware', bytes('tianocore', 'utf-8'), len('tianocore') + 1)\r
\r
-def BuildFvImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize, Description):\r
+def BuildFvImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize, Description, Arch):\r
libfdt.fdt_setprop_u32(Fdt, ParentNode, 'data-size', DataSize)\r
libfdt.fdt_setprop_u32(Fdt, ParentNode, 'data-offset', DataOffset)\r
libfdt.fdt_setprop(Fdt, ParentNode, 'compression', bytes('none', 'utf-8'), len('none') + 1)\r
libfdt.fdt_setprop(Fdt, ParentNode, 'project ', bytes('tianocore', 'utf-8'), len('tianocore') + 1)\r
- libfdt.fdt_setprop(Fdt, ParentNode, 'arch', bytes('x86_64', 'utf-8'), len('x86_64') + 1)\r
+ libfdt.fdt_setprop(Fdt, ParentNode, 'arch', bytes(Arch, 'utf-8'), len(Arch) + 1)\r
libfdt.fdt_setprop(Fdt, ParentNode, 'type', bytes('flat-binary', 'utf-8'), len('flat-binary') + 1)\r
libfdt.fdt_setprop(Fdt, ParentNode, 'description', bytes(Description, 'utf-8'), len(Description) + 1)\r
\r
-def BuildTianoImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize, Description):\r
+def BuildTianoImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize, Description, Arch):\r
#\r
# Set 'load' and 'data-offset' to reserve the memory first.\r
# They would be set again when Fdt completes or this function parses target binary file.\r
#\r
# The subnode would be inserted from bottom to top of structure block.\r
#\r
-def BuildFitImage(Fdt, InfoHeader):\r
+def BuildFitImage(Fdt, InfoHeader, Arch):\r
MultiImage = [\r
["tianocore", InfoHeader.Binary, BuildTianoImageNode , InfoHeader.Description, None, 0 ],\r
["uefi-fv", InfoHeader.UefifvPath, BuildFvImageNode, "UEFI Firmware Volume", None, 0 ],\r
if os.path.exists (Item[1]) == False:\r
continue\r
FvNode = libfdt.fdt_add_subnode(Fdt, ImageNode, Name)\r
- BuildFvNode (Fdt, InfoHeader, FvNode, DataOffset, len(BinaryData), Description)\r
+ BuildFvNode (Fdt, InfoHeader, FvNode, DataOffset, len(BinaryData), Description, Arch)\r
\r
#\r
# Create new image file and combine all binary.\r
\r
return True\r
\r
-def MakeFitImage(InfoHeader):\r
+def MakeFitImage(InfoHeader, Arch):\r
#\r
# Allocate fdt byte array.\r
#\r
#\r
# Parse args to build fit image.\r
#\r
- return BuildFitImage(Fdt, InfoHeader)\r
+ return BuildFitImage(Fdt, InfoHeader, Arch)\r
\r
-def ReplaceFv (UplBinary, SectionFvFile, SectionName):\r
+def ReplaceFv (UplBinary, SectionFvFile, SectionName, Arch):\r
try:\r
#\r
# Get Original Multi Fv\r
SectionFvFileBinary = File.read ()\r
MultiFvList.append ([SectionName, SectionFvFileBinary])\r
FvNode = libfdt.fdt_add_subnode(NewFitHeader, ImagesNode, SectionName)\r
- BuildFvImageNode (NewFitHeader, None, FvNode, FitSize, len(SectionFvFileBinary), SectionName + " Firmware Volume")\r
+ BuildFvImageNode (NewFitHeader, None, FvNode, FitSize, len(SectionFvFileBinary), SectionName + " Firmware Volume", Arch)\r
FitSize += len(SectionFvFileBinary)\r
else:\r
for Index in range (0, len (MultiFvList)):\r
"BLD_*_EMU_VARIABLE_ENABLE": "FALSE",\r
"BLD_*_DISABLE_RESET_SYSTEM": "TRUE",\r
"BLD_*_SERIAL_DRIVER_ENABLE": "FALSE",\r
+ "BLD_*_BUILD_ARCH": "",\r
}\r
}\r
SUPPORTED_ARCHITECTURES = IA32|X64\r
BUILD_TARGETS = DEBUG|RELEASE|NOOPT\r
SKUID_IDENTIFIER = DEFAULT\r
- OUTPUT_DIRECTORY = Build/UefiPayloadPkgX64\r
+ OUTPUT_DIRECTORY = Build/UefiPayloadPkg$(BUILD_ARCH)\r
FLASH_DEFINITION = UefiPayloadPkg/UefiPayloadPkg.fdf\r
PCD_DYNAMIC_AS_DYNAMICEX = TRUE\r
\r
Args.Macro.append("UNIVERSAL_PAYLOAD_FORMAT=ELF")\r
UpldEntryFile = "UniversalPayloadEntry"\r
\r
- BuildDir = os.path.join(os.environ['WORKSPACE'], os.path.normpath("Build/UefiPayloadPkgX64"))\r
+ BuildDir = os.path.join(os.environ['WORKSPACE'], os.path.normpath("Build/UefiPayloadPkg{}").format (Args.Arch))\r
if Args.Arch == 'X64':\r
BuildArch = "X64"\r
FitArch = "x86_64"\r
- ObjCopyFlag = "elf64-x86-64"\r
- EntryOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, PayloadEntryToolChain), os.path.normpath("X64/UefiPayloadPkg/UefiPayloadEntry/{}/DEBUG/{}.dll".format (UpldEntryFile, UpldEntryFile)))\r
- else:\r
+ elif Args.Arch == 'IA32':\r
BuildArch = "IA32 -a X64"\r
FitArch = "x86"\r
- ObjCopyFlag = "elf32-i386"\r
- EntryOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, PayloadEntryToolChain), os.path.normpath("IA32/UefiPayloadPkg/UefiPayloadEntry/{}/DEBUG/{}.dll".format (UpldEntryFile, UpldEntryFile)))\r
+ elif Args.Arch == 'RISCV64':\r
+ BuildArch = "RISCV64"\r
+ FitArch = "RISCV64"\r
+ else:\r
+ print("Incorrect arch option provided")\r
\r
+ EntryOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, PayloadEntryToolChain), os.path.normpath("{}/UefiPayloadPkg/UefiPayloadEntry/{}/DEBUG/{}.dll".format (Args.Arch, UpldEntryFile, UpldEntryFile)))\r
EntryModuleInf = os.path.normpath("UefiPayloadPkg/UefiPayloadEntry/{}.inf".format (UpldEntryFile))\r
DscPath = os.path.normpath("UefiPayloadPkg/UefiPayloadPkg.dsc")\r
DxeFvOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, ToolChain), os.path.normpath("FV/DXEFV.Fv"))\r
Pcds += " --pcd {}".format (PcdItem)\r
\r
Defines = ""\r
+ Defines += " -D BUILD_ARCH={}".format(Args.Arch)\r
if (Args.Macro != None):\r
for MacroItem in Args.Macro:\r
Defines += " -D {}".format (MacroItem)\r
# Building DXE core and DXE drivers as DXEFV.\r
#\r
if Args.BuildEntryOnly == False:\r
- BuildPayload = "build -p {} -b {} -a X64 -t {} -y {} {}".format (DscPath, BuildTarget, ToolChain, PayloadReportPath, Quiet)\r
+ BuildPayload = "build -p {} -b {} -a {} -t {} -y {} {}".format (DscPath, BuildTarget, BuildArch, ToolChain, PayloadReportPath, Quiet)\r
BuildPayload += Pcds\r
BuildPayload += Defines\r
RunCommand(BuildPayload)\r
fit_image_info_header.DataSize = TianoEntryBinarySize\r
fit_image_info_header.Binary = TargetRebaseEntryFile\r
\r
- if MkFitImage.MakeFitImage(fit_image_info_header) is True:\r
+ if MkFitImage.MakeFitImage(fit_image_info_header, Args.Arch) is True:\r
print('\nSuccessfully build Fit Image')\r
else:\r
sys.exit(1)\r
parser = argparse.ArgumentParser(description='For building Universal Payload')\r
parser.add_argument('-t', '--ToolChain')\r
parser.add_argument('-b', '--Target', default='DEBUG')\r
- parser.add_argument('-a', '--Arch', choices=['IA32', 'X64'], help='Specify the ARCH for payload entry module. Default build X64 image.', default ='X64')\r
+ parser.add_argument('-a', '--Arch', choices=['IA32', 'X64', 'RISCV64'], help='Specify the ARCH for payload entry module. Default build X64 image.', default ='X64')\r
parser.add_argument("-D", "--Macro", action="append", default=["UNIVERSAL_PAYLOAD=TRUE"])\r
parser.add_argument('-i', '--ImageId', type=str, help='Specify payload ID (16 bytes maximal).', default ='UEFI')\r
parser.add_argument('-q', '--Quiet', action='store_true', help='Disable all build messages except FATAL ERRORS.')\r
for (SectionName, SectionFvFile) in args.AddFv:\r
MultiFvList.append ([SectionName, SectionFvFile])\r
\r
- def ReplaceFv (UplBinary, SectionFvFile, SectionName):\r
+ def ReplaceFv (UplBinary, SectionFvFile, SectionName, Arch):\r
print (bcolors.OKGREEN + "Patch {}={} into {}".format (SectionName, SectionFvFile, UplBinary) + bcolors.ENDC)\r
if (args.Fit == False):\r
import Tools.ElfFv as ElfFv\r
return ElfFv.ReplaceFv (UplBinary, SectionFvFile, '.upld.{}'.format (SectionName))\r
else:\r
import Tools.MkFitImage as MkFitImage\r
- return MkFitImage.ReplaceFv (UplBinary, SectionFvFile, SectionName)\r
+ return MkFitImage.ReplaceFv (UplBinary, SectionFvFile, SectionName, Arch)\r
\r
if (UniversalPayloadBinary != None):\r
for (SectionName, SectionFvFile) in MultiFvList:\r
if (args.Fit == False):\r
status = ReplaceFv (UniversalPayloadBinary, SectionFvFile, SectionName)\r
else:\r
- status = ReplaceFv (UniversalPayloadBinary, SectionFvFile, SectionName.replace ("_", "-"))\r
+ status = ReplaceFv (UniversalPayloadBinary, SectionFvFile, SectionName.replace ("_", "-"), args.Arch)\r
if status != 0:\r
print (bcolors.FAIL + "[Fail] Patch {}={}".format (SectionName, SectionFvFile) + bcolors.ENDC)\r
return status\r