There are several mechanisms for customizing the build for a firmware component. These include:
-
Creating a new component INF file that specifies
BUILD_TYPE=xxx
, and then creating a[build.$(PROCESSOR).xxx]
section in the platform DSC file. -
Creating a new component INF file and a makefile for the component, and specifying
BUILD_TYPE=MAKEFILE
in the INF file. Then add a[build.$(PROCESSOR).makefile]
section to the DSC file that describes how to "build" the component using the makefile. Typically this will be commands to copy the file to the$(DEST_DIR)
, and then invoking nmake. -
Trivial customizations can be accomplished by adding or modifying the
[nmake]
sections in the component INF file. This may require defining$(PLATFORM)
in the EDK DSC file, and then adding a new[nmake.$(PROCESSOR).$(PLATFORM)]
section in the component INF file. -
Another option is to define a variable in the component INF file, passing it to the component makefile via the DSC
[makefile.common]
section, and then using!IFDEF
statements in the[build.$(PROCESSOR).$(COMPONENT_TYPE)]
section to perform custom steps.
Library INF files are shared among different platforms. However, not all
platforms require all the same source files. To customize the library INF files
for different platforms, simply define $(PLATFORM)
, either on the command
line, or in the DSC file, and then make customizations in the
[sources.$(PROCESSOR).$(PLATFORM)]
section of the library INF file.
An alternative to this method is to simply create a new INF file for the library, and then use it in place of the existing library INF file
The preferred method for customizing a build is to copy the source module directory to a new directory and modifying the INF file and module sources. This method is preferred over the EDK methods as build reproducibility is more easily accomplished.
Additional customizations for build options should be made in the platform
description (DSC) file. While it is permitted to use the [BuildOptions]
section to define custom compiler flags, this section should only be used as a
last resort. The default flags defined the tools_def.txt
file provide the best
known size and speed optimizations, and the platform DSC file can override the
defaults in its [BuildOptions]
section.