audk/BaseTools
devel@edk2.groups.io 8f316e99ec BaseTools: Optimize GenerateByteArrayValue and CollectPlatformGuids APIs
During the Incremental build GenerateByteArrayValue used to generate the
ByteArrayValue even when there is no change in the PCD/VPDs. which is
time consuming API based on the number of PCD/VPDs and SKU IDs.

The optimization is that GenerateByteArrayValue is used to store the
StructuredPcdsData in a JSON file for each of the arch. and during the
Incremental build this API will check, if there is any change in the
Structured PCD/VPDs then rest of the flow remains the same.
if there is no change then it will return the provious build data.

Flow:
during the 1st build StructuredPcdsData.json is not exists,
StructuredPcdsData will be dumped to json file. and it will copy the
output.txt as well.
Note: as the output.txt are different for different Arch, so it will be
stored in the Arch folder.
During the Incremental build check if there is any change in Structured
PCD/VPD. if there is a change in Structured VPD/PCD then recreate the
StructuredPcdsData.json, and rest of the flow remains same.
if there is no change in VPD/PCD read the output.txt and return the data

Unit Test:
Test1: Modified the Structured Pcds default from DEC file. current flow
is executing.
Test2: Override the default value of the PCD from DEC file. current flow
is executing.
Test3: Modified/Override the PCD from DSC file. current flow executing
Test4: Modified/Override the FDF from DSC file. current flow executing
Test5: update the default value from Command Line.current flow executing
Test6: Build without change in PCD in DSC, FDF, DEC and Command Line the
proposed changes will be executing, and the return data remains the same
with and without the changes.
Test7: Build with and without modified the include headers of Structured
PCDs. if there is any change in those Structured PCD header then
current flow will be executed.

With these changes it's helping to save around ~2.5min to ~3.5min of
Incremental build time in my build environment.

Sample PR: https://github.com/tianocore/edk2-basetools/pull/113

Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Rebecca Cran <rebecca@bsdio.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Amy Chan <amy.chan@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Digant H Solanki <digant.h.solanki@intel.com>
Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
Reviewed-by: Yuwei Chen <yuwei.chen@intel.com>
2024-02-08 04:08:38 +00:00
..
Bin BaseTools: Delete Bin/{CYGWIN_NT-5.1-i686,Darwin-i386} directories 2023-01-30 16:50:14 +00:00
BinPipWrappers BaseTools: Fix BrotliCompress run issue on Linux 2021-02-22 09:51:17 +00:00
BinWrappers BaseTools: Add FMMT Python Tool 2022-05-06 04:22:21 +00:00
Conf BaseTools/Conf/target.template: Use VS2019 as default tool chain 2023-11-29 20:44:12 +00:00
Plugin BaseTools/Plugin/CodeQL: Enable 30 queries 2023-11-07 03:19:26 +00:00
Scripts BaseTools/Scripts/PatchCheck.py: Check for Change-id 2024-02-04 13:29:15 +00:00
Source BaseTools: Optimize GenerateByteArrayValue and CollectPlatformGuids APIs 2024-02-08 04:08:38 +00:00
Tests BaseTools: Update Tests/TestTools.py to allow it to work on Windows 2023-05-11 02:14:12 +00:00
UserManuals BaseTools: GenFw: auto-set nxcompat flag 2023-11-06 21:44:34 +00:00
.gitignore .gitignore: Ignore build tools build logs 2022-07-09 14:57:49 +00:00
BuildEnv Remove bashisms from edksetup.sh and BaseTools/BuildEnv 2023-05-10 12:02:34 +00:00
Edk2ToolsBuild.py BaseTools: scan Edk2ToolsBuild.py make output 2023-08-02 15:20:47 +00:00
GNUmakefile BaseTools: Replace BSD License with BSD+Patent License 2019-04-09 09:10:20 -07:00
Makefile BaseTools: Replace BSD License with BSD+Patent License 2019-04-09 09:10:20 -07:00
ReadMe.rst BaseTools: Add reference to new build instructions 2022-12-16 22:17:18 +00:00
basetools_calling_path_env.yaml BaseTools: Add YAML files with path env and tool extdeps 2019-11-11 13:01:53 -08:00
basetools_path_env.yaml BaseTools: Add YAML files with path env and tool extdeps 2019-11-11 13:01:53 -08:00
get_vsvars.bat BaseTools: Remove VS2008-VS2013 remnants 2023-05-05 11:41:35 +00:00
set_vsprefix_envs.bat BaseTools: Remove VS2008-VS2013 remnants 2023-05-05 11:41:35 +00:00
toolsetup.bat BaseTools: toolsetup.bat always execute PYTHON_HOME 2023-05-29 01:34:28 +00:00

ReadMe.rst

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

::

  Note: New build instructions are available. It is recommended to start with
  the new instructions if learning how to build edk2 and/or BaseTools for the
  first time. This page is retained for reference.

New instructions: `Build Instructions`_

.. _`Build Instructions`: https://github.com/tianocore/tianocore.github.io/wiki/Build-Instructions

This directory contains the EDK II build tools and template files.
Templates are located in the Conf directory, while the tools executables for
Microsoft Windows Operating Systems are located in the Bin\\Win32 directory, other
directory contains tools source.

Build step to generate the binary tools
---------------------------------------

Windows/Visual Studio Notes
===========================

To build the BaseTools, you should run the standard vsvars32.bat script
from your preferred Visual Studio installation or you can run get_vsvars.bat
to use latest automatically detected version.

In addition to this, you should set the following environment variables::

 * EDK_TOOLS_PATH - Path to the BaseTools sub directory under the edk2 tree
 * BASE_TOOLS_PATH - The directory where the BaseTools source is located.
   (It is the same directory where this README.rst is located.)

After this, you can run the toolsetup.bat file, which is in the same
directory as this file.  It should setup the remainder of the environment,
and build the tools if necessary.

Unix-like operating systems
===========================

To build on Unix-like operating systems, you only need to type ``make`` in
the base directory of the project.

Ubuntu Notes
============

On Ubuntu, the following command should install all the necessary build
packages to build all the C BaseTools::

 sudo apt install build-essential uuid-dev