]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiPayloadPkg/UniversalPayloadBuild.py
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / UefiPayloadPkg / UniversalPayloadBuild.py
index 99410d244dd70e909f97a1fe59eb9131ad481d7c..522855eba44d54606643c554c948336c5d573d5c 100644 (file)
@@ -29,9 +29,9 @@ class UPLD_INFO_HEADER(LittleEndianStructure):
         ]\r
 \r
     def __init__(self):\r
-        self.Identifier     =  b'UPLD'\r
+        self.Identifier     =  b'PLDH'\r
         self.HeaderLength   = sizeof(UPLD_INFO_HEADER)\r
-        self.HeaderRevision = 0x0075\r
+        self.SpecRevision   = 0x0009\r
         self.Revision       = 0x0000010105\r
         self.ImageId        = b'UEFI'\r
         self.ProducerId     = b'INTEL'\r
@@ -54,14 +54,21 @@ def BuildUniversalPayload(Args, MacroList):
     BuildTarget = Args.Target\r
     ToolChain = Args.ToolChain\r
     Quiet     = "--quiet"  if Args.Quiet else ""\r
-    BuildArch = "X64" if Args.Arch == 'X64' else "IA32 -a X64"\r
     ElfToolChain = 'CLANGDWARF'\r
+    BuildDir     = os.path.join(os.environ['WORKSPACE'], os.path.normpath("Build/UefiPayloadPkgX64"))\r
+    if Args.Arch == 'X64':\r
+        BuildArch      = "X64"\r
+        ObjCopyFlag    = "elf64-x86-64"\r
+        EntryOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, ElfToolChain), os.path.normpath("X64/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry/DEBUG/UniversalPayloadEntry.dll"))\r
+    else:\r
+        BuildArch      = "IA32 -a X64"\r
+        ObjCopyFlag    = "elf32-i386"\r
+        EntryOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, ElfToolChain), os.path.normpath("IA32/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry/DEBUG/UniversalPayloadEntry.dll"))\r
 \r
     EntryModuleInf = os.path.normpath("UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf")\r
     DscPath = os.path.normpath("UefiPayloadPkg/UefiPayloadPkg.dsc")\r
-    BuildDir = os.path.join(os.environ['WORKSPACE'], os.path.normpath("Build/UefiPayloadPkgX64"))\r
-    FvOutputDir = os.path.join(BuildDir, f"{BuildTarget}_{ToolChain}", os.path.normpath("FV/DXEFV.Fv"))\r
-    EntryOutputDir = os.path.join(BuildDir, f"{BuildTarget}_{ElfToolChain}", os.path.normpath("X64/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry/DEBUG/UniversalPayloadEntry.dll"))\r
+    DxeFvOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, ToolChain), os.path.normpath("FV/DXEFV.Fv"))\r
+    BdsFvOutputDir = os.path.join(BuildDir, "{}_{}".format (BuildTarget, ToolChain), os.path.normpath("FV/BDSFV.Fv"))\r
     PayloadReportPath = os.path.join(BuildDir, "UefiUniversalPayload.txt")\r
     ModuleReportPath = os.path.join(BuildDir, "UefiUniversalPayloadEntry.txt")\r
     UpldInfoFile = os.path.join(BuildDir, "UniversalPayloadInfo.bin")\r
@@ -76,6 +83,11 @@ def BuildUniversalPayload(Args, MacroList):
         print("- Failed - Please check if LLVM is installed or if CLANG_BIN is set correctly")\r
         sys.exit(1)\r
 \r
+    Pcds = ""\r
+    if (Args.pcd != None):\r
+        for PcdItem in Args.pcd:\r
+            Pcds += " --pcd {}".format (PcdItem)\r
+\r
     Defines = ""\r
     for key in MacroList:\r
         Defines +=" -D {0}={1}".format(key, MacroList[key])\r
@@ -83,13 +95,15 @@ def BuildUniversalPayload(Args, MacroList):
     #\r
     # Building DXE core and DXE drivers as DXEFV.\r
     #\r
-    BuildPayload = f"build -p {DscPath} -b {BuildTarget} -a X64 -t {ToolChain} -y {PayloadReportPath} {Quiet}"\r
+    BuildPayload = "build -p {} -b {} -a X64 -t {} -y {} {}".format (DscPath, BuildTarget, ToolChain, PayloadReportPath, Quiet)\r
+    BuildPayload += Pcds\r
     BuildPayload += Defines\r
     RunCommand(BuildPayload)\r
     #\r
     # Building Universal Payload entry.\r
     #\r
-    BuildModule = f"build -p {DscPath} -b {BuildTarget} -a {BuildArch} -m {EntryModuleInf} -t {ElfToolChain} -y {ModuleReportPath} {Quiet}"\r
+    BuildModule = "build -p {} -b {} -a {} -m {} -t {} -y {} {}".format (DscPath, BuildTarget, BuildArch, EntryModuleInf, ElfToolChain, ModuleReportPath, Quiet)\r
+    BuildModule += Pcds\r
     BuildModule += Defines\r
     RunCommand(BuildModule)\r
 \r
@@ -98,6 +112,7 @@ def BuildUniversalPayload(Args, MacroList):
     #\r
     upld_info_hdr = UPLD_INFO_HEADER()\r
     upld_info_hdr.ImageId = Args.ImageId.encode()[:16]\r
+    upld_info_hdr.Attribute |= 1 if BuildTarget == "DEBUG" else 0\r
     fp = open(UpldInfoFile, 'wb')\r
     fp.write(bytearray(upld_info_hdr))\r
     fp.close()\r
@@ -105,9 +120,27 @@ def BuildUniversalPayload(Args, MacroList):
     #\r
     # Copy the DXEFV as a section in elf format Universal Payload entry.\r
     #\r
-    remove_section = '"%s" -I elf64-x86-64 -O elf64-x86-64 --remove-section .upld_info --remove-section .upld.uefi_fv %s'%(LlvmObjcopyPath, EntryOutputDir)\r
-    add_section    = '"%s" -I elf64-x86-64 -O elf64-x86-64 --add-section .upld_info=%s --add-section .upld.uefi_fv=%s %s'%(LlvmObjcopyPath, UpldInfoFile, FvOutputDir, EntryOutputDir)\r
-    set_section    = '"%s" -I elf64-x86-64 -O elf64-x86-64 --set-section-alignment .upld.upld_info=16 --set-section-alignment .upld.uefi_fv=16 %s'%(LlvmObjcopyPath, EntryOutputDir)\r
+    remove_section = '"{}" -I {} -O {} --remove-section .upld_info --remove-section .upld.uefi_fv --remove-section .upld.bds_fv {}'.format (\r
+                       LlvmObjcopyPath,\r
+                       ObjCopyFlag,\r
+                       ObjCopyFlag,\r
+                       EntryOutputDir\r
+                       )\r
+    add_section    = '"{}" -I {} -O {} --add-section .upld_info={} --add-section .upld.uefi_fv={} --add-section .upld.bds_fv={} {}'.format (\r
+                       LlvmObjcopyPath,\r
+                       ObjCopyFlag,\r
+                       ObjCopyFlag,\r
+                       UpldInfoFile,\r
+                       DxeFvOutputDir,\r
+                       BdsFvOutputDir,\r
+                       EntryOutputDir\r
+                       )\r
+    set_section    = '"{}" -I {} -O {} --set-section-alignment .upld_info=4 --set-section-alignment .upld.uefi_fv=16 --set-section-alignment .upld.bds_fv=16 {}'.format (\r
+                       LlvmObjcopyPath,\r
+                       ObjCopyFlag,\r
+                       ObjCopyFlag,\r
+                       EntryOutputDir\r
+                       )\r
     RunCommand(remove_section)\r
     RunCommand(add_section)\r
     RunCommand(set_section)\r
@@ -122,6 +155,7 @@ def main():
     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
+    parser.add_argument("-p", "--pcd", action="append")\r
     MacroList = {}\r
     args = parser.parse_args()\r
     if args.Macro is not None:\r