From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 4D8BC7803D1 for ; Wed, 21 Feb 2024 09:41:38 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=kA6X2L3ew13is3ykhTLmDeU4NaQD79FPMqNC0IbtCBA=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1708508496; v=1; b=B5nPS6lO56O2MwmSV8bvIPoTCd8WanyfHZCexZ/gs9Wu3dSMfz8R1CGYE2tIgghKgx+WOMjv EDpE0YOkZKnxkq45gwIR0/78NvEF6GQMTo0i+Oho+rAdyAF3/QXYjE8whT9PMTmv6Z4Cvis9OTY O0zldNv8c9QzAtoY0bGw89Is= X-Received: by 127.0.0.2 with SMTP id 0fGDYY7687511xpYmx9fh6E6; Wed, 21 Feb 2024 01:41:36 -0800 X-Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by mx.groups.io with SMTP id smtpd.web11.9440.1708508496182311751 for ; Wed, 21 Feb 2024 01:41:36 -0800 X-Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1d746ce7d13so44076255ad.0 for ; Wed, 21 Feb 2024 01:41:36 -0800 (PST) X-Gm-Message-State: XamvWo9H7SOSdrkpiWT2MQx2x7686176AA= X-Google-Smtp-Source: AGHT+IEySyFPPZL33VN0nzj4z9KFqUxyOk53ZWzUomH+Fbh0LAqGErAE0x5eo/psTFLLolGE4A3dKQ== X-Received: by 2002:a17:903:234a:b0:1dc:1831:8ecc with SMTP id c10-20020a170903234a00b001dc18318eccmr4473312plh.53.1708508495313; Wed, 21 Feb 2024 01:41:35 -0800 (PST) X-Received: from dhaval.blr.rivosinc.com ([49.249.129.34]) by smtp.gmail.com with ESMTPSA id q18-20020a170902c9d200b001db90df1283sm7630259pld.4.2024.02.21.01.41.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Feb 2024 01:41:35 -0800 (PST) From: "Dhaval Sharma" To: devel@edk2.groups.io Cc: Guo Dong , Sean Rhodes , James Lu , Gua Guo Subject: [edk2-devel] [PATCH v1 1/1] UefiPayloadPkg: Make UPL build script arch agnostic Date: Wed, 21 Feb 2024 15:11:28 +0530 Message-Id: <20240221094128.88109-2-dhaval@rivosinc.com> In-Reply-To: <20240221094128.88109-1-dhaval@rivosinc.com> References: <20240221094128.88109-1-dhaval@rivosinc.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,dhaval@rivosinc.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=B5nPS6lO; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Current implementation makes assumptions about arch it will be built for. Need to make it more generic to add follow up support for RISCV. Right now it does not build for RV until relevant dsc file is available. Cc: Guo Dong Cc: Sean Rhodes Cc: James Lu Cc: Gua Guo Signed-off-by: Dhaval Sharma --- UefiPayloadPkg/UefiPayloadPkg.dsc | 2 +- UefiPayloadPkg/Tools/MkFitImage.py | 18 +++++++-------- UefiPayloadPkg/UniversalPayloadBuild.py | 23 +++++++++++++------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayload= Pkg.dsc index 0e142bb7c2a2..abe3d3c3d870 100644 --- a/UefiPayloadPkg/UefiPayloadPkg.dsc +++ b/UefiPayloadPkg/UefiPayloadPkg.dsc @@ -22,7 +22,7 @@ [Defines] SUPPORTED_ARCHITECTURES =3D IA32|X64=0D BUILD_TARGETS =3D DEBUG|RELEASE|NOOPT=0D SKUID_IDENTIFIER =3D DEFAULT=0D - OUTPUT_DIRECTORY =3D Build/UefiPayloadPkgX64=0D + OUTPUT_DIRECTORY =3D Build/UefiPayloadPkg=0D FLASH_DEFINITION =3D UefiPayloadPkg/UefiPayloadPkg.fd= f=0D PCD_DYNAMIC_AS_DYNAMICEX =3D TRUE=0D =0D diff --git a/UefiPayloadPkg/Tools/MkFitImage.py b/UefiPayloadPkg/Tools/MkFi= tImage.py index 41a259960b2b..b76c2156dd18 100644 --- a/UefiPayloadPkg/Tools/MkFitImage.py +++ b/UefiPayloadPkg/Tools/MkFitImage.py @@ -59,16 +59,16 @@ def BuildConfNode(Fdt, ParentNode, MultiImage): libfdt.fdt_setprop(Fdt, ConfNode1, 'require-fit', b'', 0)=0D libfdt.fdt_setprop(Fdt, ConfNode1, 'firmware', bytes('tianocore', 'utf= -8'), len('tianocore') + 1)=0D =0D -def BuildFvImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize, De= scription):=0D +def BuildFvImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize, De= scription, Arch):=0D libfdt.fdt_setprop_u32(Fdt, ParentNode, 'data-size', DataSize)=0D libfdt.fdt_setprop_u32(Fdt, ParentNode, 'data-offset', DataOffset)=0D libfdt.fdt_setprop(Fdt, ParentNode, 'compression', bytes('none', = 'utf-8'), len('none') + 1)=0D libfdt.fdt_setprop(Fdt, ParentNode, 'project ', bytes('tianocore', = 'utf-8'), len('tianocore') + 1)=0D - libfdt.fdt_setprop(Fdt, ParentNode, 'arch', bytes('x86_64', = 'utf-8'), len('x86_64') + 1)=0D + libfdt.fdt_setprop(Fdt, ParentNode, 'arch', bytes(Arch, = 'utf-8'), len(Arch) + 1)=0D libfdt.fdt_setprop(Fdt, ParentNode, 'type', bytes('flat-binary'= , 'utf-8'), len('flat-binary') + 1)=0D libfdt.fdt_setprop(Fdt, ParentNode, 'description', bytes(Description, = 'utf-8'), len(Description) + 1)=0D =0D -def BuildTianoImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize,= Description):=0D +def BuildTianoImageNode(Fdt, InfoHeader, ParentNode, DataOffset, DataSize,= Description, Arch):=0D #=0D # Set 'load' and 'data-offset' to reserve the memory first.=0D # They would be set again when Fdt completes or this function parses t= arget binary file.=0D @@ -100,7 +100,7 @@ def BuildTianoImageNode(Fdt, InfoHeader, ParentNode, Da= taOffset, DataSize, Descr #=0D # The subnode would be inserted from bottom to top of structure block.=0D #=0D -def BuildFitImage(Fdt, InfoHeader):=0D +def BuildFitImage(Fdt, InfoHeader, Arch):=0D MultiImage =3D [=0D ["tianocore", InfoHeader.Binary, BuildTianoImageNode , In= foHeader.Description, None, 0 ],=0D ["uefi-fv", InfoHeader.UefifvPath, BuildFvImageNode, "U= EFI Firmware Volume", None, 0 ],=0D @@ -143,7 +143,7 @@ def BuildFitImage(Fdt, InfoHeader): if os.path.exists (Item[1]) =3D=3D False:=0D continue=0D FvNode =3D libfdt.fdt_add_subnode(Fdt, ImageNode, Name)=0D - BuildFvNode (Fdt, InfoHeader, FvNode, DataOffset, len(BinaryData),= Description)=0D + BuildFvNode (Fdt, InfoHeader, FvNode, DataOffset, len(BinaryData),= Description, Arch)=0D =0D #=0D # Create new image file and combine all binary.=0D @@ -160,7 +160,7 @@ def BuildFitImage(Fdt, InfoHeader): =0D return True=0D =0D -def MakeFitImage(InfoHeader):=0D +def MakeFitImage(InfoHeader, Arch):=0D #=0D # Allocate fdt byte array.=0D #=0D @@ -175,9 +175,9 @@ def MakeFitImage(InfoHeader): #=0D # Parse args to build fit image.=0D #=0D - return BuildFitImage(Fdt, InfoHeader)=0D + return BuildFitImage(Fdt, InfoHeader, Arch)=0D =0D -def ReplaceFv (UplBinary, SectionFvFile, SectionName):=0D +def ReplaceFv (UplBinary, SectionFvFile, SectionName, Arch):=0D try:=0D #=0D # Get Original Multi Fv=0D @@ -231,7 +231,7 @@ def ReplaceFv (UplBinary, SectionFvFile, SectionName): SectionFvFileBinary =3D File.read ()=0D MultiFvList.append ([SectionName, SectionFvFileBinary])=0D FvNode =3D libfdt.fdt_add_subnode(NewFitHeader, ImagesNode, Se= ctionName)=0D - BuildFvImageNode (NewFitHeader, None, FvNode, FitSize, len(Sec= tionFvFileBinary), SectionName + " Firmware Volume")=0D + BuildFvImageNode (NewFitHeader, None, FvNode, FitSize, len(Sec= tionFvFileBinary), SectionName + " Firmware Volume", Arch)=0D FitSize +=3D len(SectionFvFileBinary)=0D else:=0D for Index in range (0, len (MultiFvList)):=0D diff --git a/UefiPayloadPkg/UniversalPayloadBuild.py b/UefiPayloadPkg/Unive= rsalPayloadBuild.py index 046c62e21ce4..525572ed3bf2 100644 --- a/UefiPayloadPkg/UniversalPayloadBuild.py +++ b/UefiPayloadPkg/UniversalPayloadBuild.py @@ -125,17 +125,24 @@ def BuildUniversalPayload(Args): Args.Macro.append("UNIVERSAL_PAYLOAD_FORMAT=3DELF")=0D UpldEntryFile =3D "UniversalPayloadEntry"=0D =0D - BuildDir =3D os.path.join(os.environ['WORKSPACE'], os.path.normpat= h("Build/UefiPayloadPkgX64"))=0D + BuildDir =3D os.path.join(os.environ['WORKSPACE'], os.path.normpat= h("Build/UefiPayloadPkg"))=0D if Args.Arch =3D=3D 'X64':=0D BuildArch =3D "X64"=0D FitArch =3D "x86_64"=0D ObjCopyFlag =3D "elf64-x86-64"=0D EntryOutputDir =3D os.path.join(BuildDir, "{}_{}".format (BuildTar= get, PayloadEntryToolChain), os.path.normpath("X64/UefiPayloadPkg/UefiPaylo= adEntry/{}/DEBUG/{}.dll".format (UpldEntryFile, UpldEntryFile)))=0D - else:=0D + elif Args.Arch =3D=3D 'IA32':=0D BuildArch =3D "IA32 -a X64"=0D FitArch =3D "x86"=0D ObjCopyFlag =3D "elf32-i386"=0D EntryOutputDir =3D os.path.join(BuildDir, "{}_{}".format (BuildTar= get, PayloadEntryToolChain), os.path.normpath("IA32/UefiPayloadPkg/UefiPayl= oadEntry/{}/DEBUG/{}.dll".format (UpldEntryFile, UpldEntryFile)))=0D + elif Args.Arch =3D=3D 'RISCV64':=0D + BuildArch =3D "RISCV64"=0D + FitArch =3D "RISCV64"=0D + ObjCopyFlag =3D "rv64"=0D + EntryOutputDir =3D os.path.join(BuildDir, "{}_{}".format (BuildTar= get, PayloadEntryToolChain), os.path.normpath("RISCV64/UefiPayloadPkg/UefiP= ayloadEntry/{}/DEBUG/{}.dll".format (UpldEntryFile, UpldEntryFile)))=0D + else:=0D + print("Incorrect arch option provided")=0D =0D EntryModuleInf =3D os.path.normpath("UefiPayloadPkg/UefiPayloadEntry/{= }.inf".format (UpldEntryFile))=0D DscPath =3D os.path.normpath("UefiPayloadPkg/UefiPayloadPkg.dsc")=0D @@ -160,7 +167,7 @@ def BuildUniversalPayload(Args): # Building DXE core and DXE drivers as DXEFV.=0D #=0D if Args.BuildEntryOnly =3D=3D False:=0D - BuildPayload =3D "build -p {} -b {} -a X64 -t {} -y {} {}".format = (DscPath, BuildTarget, ToolChain, PayloadReportPath, Quiet)=0D + BuildPayload =3D "build -p {} -b {} -a {} -t {} -y {} {}".format (= DscPath, BuildTarget, BuildArch, ToolChain, PayloadReportPath, Quiet)=0D BuildPayload +=3D Pcds=0D BuildPayload +=3D Defines=0D RunCommand(BuildPayload)=0D @@ -292,7 +299,7 @@ def BuildUniversalPayload(Args): fit_image_info_header.DataSize =3D TianoEntryBinarySize=0D fit_image_info_header.Binary =3D TargetRebaseEntryFile=0D =0D - if MkFitImage.MakeFitImage(fit_image_info_header) is True:=0D + if MkFitImage.MakeFitImage(fit_image_info_header, Args.Arch) is Tr= ue:=0D print('\nSuccessfully build Fit Image')=0D else:=0D sys.exit(1)=0D @@ -304,7 +311,7 @@ def main(): parser =3D argparse.ArgumentParser(description=3D'For building Univers= al Payload')=0D parser.add_argument('-t', '--ToolChain')=0D parser.add_argument('-b', '--Target', default=3D'DEBUG')=0D - parser.add_argument('-a', '--Arch', choices=3D['IA32', 'X64'], help=3D= 'Specify the ARCH for payload entry module. Default build X64 image.', defa= ult =3D'X64')=0D + parser.add_argument('-a', '--Arch', choices=3D['IA32', 'X64', 'RISCV64= '], help=3D'Specify the ARCH for payload entry module. Default build X64 im= age.', default =3D'X64')=0D parser.add_argument("-D", "--Macro", action=3D"append", default=3D["UN= IVERSAL_PAYLOAD=3DTRUE"])=0D parser.add_argument('-i', '--ImageId', type=3Dstr, help=3D'Specify pay= load ID (16 bytes maximal).', default =3D'UEFI')=0D parser.add_argument('-q', '--Quiet', action=3D'store_true', help=3D'Di= sable all build messages except FATAL ERRORS.')=0D @@ -331,14 +338,14 @@ def main(): for (SectionName, SectionFvFile) in args.AddFv:=0D MultiFvList.append ([SectionName, SectionFvFile])=0D =0D - def ReplaceFv (UplBinary, SectionFvFile, SectionName):=0D + def ReplaceFv (UplBinary, SectionFvFile, SectionName, Arch):=0D print (bcolors.OKGREEN + "Patch {}=3D{} into {}".format (SectionNa= me, SectionFvFile, UplBinary) + bcolors.ENDC)=0D if (args.Fit =3D=3D False):=0D import Tools.ElfFv as ElfFv=0D return ElfFv.ReplaceFv (UplBinary, SectionFvFile, '.upld.{}'.f= ormat (SectionName))=0D else:=0D import Tools.MkFitImage as MkFitImage=0D - return MkFitImage.ReplaceFv (UplBinary, SectionFvFile, Section= Name)=0D + return MkFitImage.ReplaceFv (UplBinary, SectionFvFile, Section= Name, Arch)=0D =0D if (UniversalPayloadBinary !=3D None):=0D for (SectionName, SectionFvFile) in MultiFvList:=0D @@ -347,7 +354,7 @@ def main(): if (args.Fit =3D=3D False):=0D status =3D ReplaceFv (UniversalPayloadBinary, SectionFvFil= e, SectionName)=0D else:=0D - status =3D ReplaceFv (UniversalPayloadBinary, SectionFvFil= e, SectionName.replace ("_", "-"))=0D + status =3D ReplaceFv (UniversalPayloadBinary, SectionFvFil= e, SectionName.replace ("_", "-"), args.Arch)=0D if status !=3D 0:=0D print (bcolors.FAIL + "[Fail] Patch {}=3D{}".format (Secti= onName, SectionFvFile) + bcolors.ENDC)=0D return status=0D --=20 2.39.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115722): https://edk2.groups.io/g/devel/message/115722 Mute This Topic: https://groups.io/mt/104485240/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-