public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Agyeman, Prince" <prince.agyeman@intel.com>
To: devel@edk2.groups.io
Cc: Ankit Sinha <ankit.sinha@intel.com>,
	Nate DeSimone <nathaniel.l.desimone@intel.com>,
	Michael Kubacki <michael.a.kubacki@intel.com>
Subject: [edk2-platforms] [PATCH v2 4/4] Platform/Intel: Add FIT generation tool
Date: Tue, 15 Oct 2019 15:51:09 -0700	[thread overview]
Message-ID: <20191015225109.18992-5-prince.agyeman@intel.com> (raw)
In-Reply-To: <20191015225109.18992-1-prince.agyeman@intel.com>

Added FitGen tool build and FIT generation
to the BIOS build process.

What was done:

- Build the FIT generation tool
- Added default/empty BIOS_INFO_GUID to the build.cfg
- Added BIOS_INFO_GUID to GalagoPro3,KabylakeRvp3
and WhiskeylakeURvp's build_config.cfg
This allows a board to specify the GUID
associated with the BIOS Info PEIM to be used
in the board's FIT generation.

BIOS_INFO_GUID is passed as an argument to
FitGen tool which allow the tool to locate
the BIOS Info module to be used in FIT generation.

Cc: Ankit Sinha <ankit.sinha@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Michael Kubacki <michael.a.kubacki@intel.com>

Signed-off-by: Prince Agyeman <prince.agyeman@intel.com>
---
 .../GalagoPro3/build_config.cfg               |  1 +
 .../KabylakeRvp3/build_config.cfg             |  1 +
 .../WhiskeylakeURvp/build_config.cfg          |  1 +
 Platform/Intel/build.cfg                      |  1 +
 Platform/Intel/build_bios.py                  | 57 +++++++++++++++++++
 5 files changed, 61 insertions(+)

diff --git a/Platform/Intel/KabylakeOpenBoardPkg/GalagoPro3/build_config.cfg b/Platform/Intel/KabylakeOpenBoardPkg/GalagoPro3/build_config.cfg
index 8c6c51abb4..458fe3d35d 100644
--- a/Platform/Intel/KabylakeOpenBoardPkg/GalagoPro3/build_config.cfg
+++ b/Platform/Intel/KabylakeOpenBoardPkg/GalagoPro3/build_config.cfg
@@ -31,3 +31,4 @@ FSP_PKG_NAME = KabylakeFspPkg
 FSP_BINARY_BUILD = FALSE
 FSP_TEST_RELEASE = FALSE
 SECURE_BOOT_ENABLE = FALSE
+BIOS_INFO_GUID = C83BCE0E-6F16-4D3C-8D9F-4D6F5A032929
diff --git a/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/build_config.cfg b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/build_config.cfg
index 78f808bfaf..f6ae4b342a 100644
--- a/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/build_config.cfg
+++ b/Platform/Intel/KabylakeOpenBoardPkg/KabylakeRvp3/build_config.cfg
@@ -33,3 +33,4 @@ FSP_PKG_NAME = AmberLakeFspPkg
 FSP_BINARY_BUILD = FALSE
 FSP_TEST_RELEASE = FALSE
 SECURE_BOOT_ENABLE = FALSE
+BIOS_INFO_GUID = C83BCE0E-6F16-4D3C-8D9F-4D6F5A032929
diff --git a/Platform/Intel/WhiskeylakeOpenBoardPkg/WhiskeylakeURvp/build_config.cfg b/Platform/Intel/WhiskeylakeOpenBoardPkg/WhiskeylakeURvp/build_config.cfg
index 1b0619bc1c..1dfe5ffd10 100644
--- a/Platform/Intel/WhiskeylakeOpenBoardPkg/WhiskeylakeURvp/build_config.cfg
+++ b/Platform/Intel/WhiskeylakeOpenBoardPkg/WhiskeylakeURvp/build_config.cfg
@@ -31,3 +31,4 @@ FSP_PKG_NAME = CoffeelakeSiliconPkg
 FSP_BINARY_BUILD = FALSE
 FSP_TEST_RELEASE = FALSE
 SECURE_BOOT_ENABLE = FALSE
+BIOS_INFO_GUID = A842B2D2-5C88-44E9-A9E2-4830F26662B7
diff --git a/Platform/Intel/build.cfg b/Platform/Intel/build.cfg
index 2040774d1b..6aee96694c 100644
--- a/Platform/Intel/build.cfg
+++ b/Platform/Intel/build.cfg
@@ -48,6 +48,7 @@ SECURE_BOOT_ENABLE = FALSE
 REBUILD_MODE =
 BUILD_ROM_ONLY =
 NUMBER_OF_PROCESSORS = 0
+BIOS_INFO_GUID =
 
 
 [PLATFORMS]
diff --git a/Platform/Intel/build_bios.py b/Platform/Intel/build_bios.py
index 46285df19a..ea098de705 100644
--- a/Platform/Intel/build_bios.py
+++ b/Platform/Intel/build_bios.py
@@ -196,6 +196,31 @@ def pre_build(build_config, build_type="DEBUG", silent=False, toolchain=None):
     if return_code != 0:
         build_failed(config)
 
+    #
+    # build platform silicon tools
+    #
+    # save the current workspace
+    saved_work_directory = config["WORKSPACE"]
+    # change the workspace to silicon tools directory
+    config["WORKSPACE"] = os.path.join(config["WORKSPACE_SILICON"], "Tools")
+
+    command = ["nmake"]
+    if os.name == "posix":  # linux
+        command = ["make"]
+        # add path to generated FitGen binary to
+        # environment path variable
+        config["PATH"] += os.pathsep + \
+                          os.path.join(config["BASE_TOOLS_PATH"],
+                                       "Source", "C", "bin")
+
+    # build the silicon tools
+    _, _, result, return_code = execute_script(command, config, shell=shell)
+    if return_code != 0:
+        build_failed(config)
+
+    # restore WORKSPACE environment variable
+    config["WORKSPACE"] = saved_work_directory
+
     config["SILENT_MODE"] = 'TRUE' if silent else 'FALSE'
 
     print("==============================================")
@@ -404,6 +429,35 @@ def post_build(config):
     :returns: nothing
     """
     print("Running post_build to complete the build process.")
+    board_fd = config["BOARD"].upper()
+    final_fd = os.path.join(config["BUILD_DIR_PATH"], "FV",
+                            "{}.fd".format(board_fd))
+
+    if config["BIOS_INFO_GUID"]:
+        # Generate the fit table
+        print("Generating FIT ...")
+        if os.path.isfile(final_fd):
+            temp_fd = os.path.join(config["BUILD_DIR_PATH"], "FV",
+                                   "{}_.fd".format(board_fd))
+            shell = True
+            command = ["FitGen", "-D",
+                       final_fd, temp_fd, "-NA",
+                       "-I", config["BIOS_INFO_GUID"]]
+
+            if os.name == "posix": # linux
+                shell = False
+
+            _, _, result, return_code = execute_script(command, config, shell=shell)
+            if return_code != 0:
+                print("Error while generating fit")
+            else:
+                # copy output to final binary
+                shutil.copyfile(temp_fd, final_fd)
+                # remove temp file
+                os.remove(temp_fd)
+        else:
+            print("{} does not exist".format(final_fd))
+            # remove temp file
 
     # Additional build scripts for this platform
     result = post_build_ex(config)
@@ -426,6 +480,9 @@ def post_build(config):
             except OSError:
                 pass
 
+    print("Done")
+    if os.path.isfile(final_fd):
+        print("Fd file can be found at {}".format(final_fd))
 
 def build_failed(config):
     """Displays results when build fails
-- 
2.19.1.windows.1


  parent reply	other threads:[~2019-10-15 22:51 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-15 22:51 [edk2-platforms] [PATCH v2 0/4] Add FIT support using FitGen Agyeman, Prince
2019-10-15 22:51 ` [edk2-platforms] [PATCH v2 1/4] BoardModulePkg: Add BIOS Info HOB Agyeman, Prince
2019-10-16 17:31   ` Kubacki, Michael A
2019-10-17  6:50   ` Nate DeSimone
2019-10-15 22:51 ` [edk2-platforms] [PATCH v2 2/4] KabylakeOpenBoardPkg: Add BIOS Info PEIM Agyeman, Prince
2019-10-16 17:32   ` Kubacki, Michael A
2019-10-15 22:51 ` [edk2-platforms] [PATCH v2 3/4] WhiskeylakeOpenBoardPkg: " Agyeman, Prince
2019-10-16 17:32   ` Kubacki, Michael A
2019-10-15 22:51 ` Agyeman, Prince [this message]
2019-10-16 17:32   ` [edk2-platforms] [PATCH v2 4/4] Platform/Intel: Add FIT generation tool Kubacki, Michael A
2019-10-17  6:50   ` [edk2-devel] " Nate DeSimone

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191015225109.18992-5-prince.agyeman@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox