EDK II Module Information (INF) File Specification

DRAFT FOR REVIEW

02/24/2024 06:19:29

Acknowledgements

Redistribution and use in source (original document form) and 'compiled' forms (converted to PDF, epub, HTML and other formats) with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code (original document form) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.

  2. Redistributions in compiled form (transformed to other DTDs, converted to PDF, epub, HTML and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TIANOCORE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Copyright (c) 2007-2017, Intel Corporation. All rights reserved.

Revision History

Revision Revision History Date
1.0 Initial release. December 2007
1.1 Updated based on errata August 2008
1,2 Updated based on enhancement requests June 2009
1.21 Updated to support UEFI 2.3 and PI 1.2 specifications March 2010
Added new element, UEFI_HII_RESOURCE_SECTION to [Defines] section
Added new SMM_CORE module type
Updated for clarification
Permit NULL values in place of PCD default values
Updated to correct items listed in the errata document
Permit whitespace characters between token elements
Fixed BuildOptions separator between Family and the tool change information to match the ":' implementation
Changes to appearance for readability
Moved EDK INF description from sections 2 and 3 to an Appendix
User feature requests:
Updated the description of the FeatureFlag Expression for all occurrences in Chapter 3 to be either a Shell style or a C style expression.
1.22 Grammatical and formatting changes. May 2010
1.22 w/ Updates: December 2011
Errata A Updated to support UEFI version 2.3.1 and updated spec release dates in Introduction
Clarify UEFI's PI Distribution Package Specification
Standardize Common data definitions for all specifications
Grammatical, formatting and spelling changes
Replaced "should" with wording saying that it is
"recommended"
Added PCI_COMPRESS definition in [Defines] section
Added the DPX_SOURCE statement back into the [Defines] section
Added VALID_ARCHITECTURES comment definition
back to the [Defines] section to formalize this comment which may be used by tools. This had been removed from the 1.22 spec as it was assumed that tools could determine valid architectures (other than ALL architectures) by the use of architectural modifiers in section tags.
Removed restriction about comments in the DPX_SOURCE file - C style comments are allowed
Updated DEPEX content for USER_DEFINED module types
Removed EDK content from EBNF in Chapter 3, as this chapter only describes the content for EDK II INF files; for clarity, moved EDK content from descriptions in Chapter 2 to Appendix A
Added EBNF for <Extension>
Added rules for how macros can be shared between sections
Update the EBNF for paths so that a macro can have a path that does not end with a file separator; also allow using a path and filename as a macro value; clarify that macros are only expanded in the EDK II INF files, never evaluated during the initial parsing of the file
Removed duplicate content and added the scoping rules for Macros, clarified MACRO summary; made the value optional so that a C flag macro can be specified without a value; require the "=" in a macro DEFINE statement
Removed references to system environment variables in the Macros section and removed table
Revised EBNF for PCD sections to allow more precise definitions
Specify how PCD values are obtained
Changed definition of a C Array to ensure that an empty array is not specified
Allow any non-zero value to be TRUE
Use separate EBNF for each PCD datum type, also explain the PCD usages; describe, in section 2, what sections are valid for binary only modules, and what sections are prohibited in binary only modules
Clarify that C data arrays must be byte arrays for PCD value fields; both C format and registry format GUID structures are not permitted in VOID* PCD value fields
The # character is optional for the header comment block in EDK INF files
Prohibit specifying something an a common section and in an architecturally specific section (something that is architecture specific cannot be common to all architectures)
Removed FFE from entries as they have no meaning, nothing changes - build does not break if they are there
1.22 w/ Updates: June 2012
Errata B Section 1.3, page 5, Updated specs definition to include released errata
Section 3.8, page 67, Removed Value field for DynamicEx PCDs listed in a generated "As Built" INF file
Appendix F, page 120, Replaced invalid "FW" with "PE32" for file type of the binary image
Section 2.7, pages 25 & 26, Clarified binary file types are leaf sections, removed LIB, as EDK II build system does not support distribution of binary libraries
Section 2.7, page 25, Removed GUID encapsulation section keyword from the [Binaries] section
<FileType> definition - the binary file must be a leaf file type
Section 3.2, page 37, require <Depex> sections for PEIM,
DXE_DRIVER, DXE_RUNTIME_DRIVER,
DXE_SAL_DRIVER and DXE_SMM_DRIVER
Table 3, page 23 and Section 3.5, page 60, Removed references to build_rule.txt - this file is used by tools, no user editing is required
Section 3.15, page 84 & 85, Separated out the
SUBTYPE_GUID entry in the [Binaries] section <FileType> definition, as this entry requires a GUID value - also, added text to only allow unique
SUBTYPE_GUID <GuidValue> pairs per section
Section 3.2.1, pages 44 & 45, Fixed the DOS <EOL> character sequence
Section 3.11, page 76, Clarify what goes into a generated Binary INF file for Protocols
Added a generated binary INF in Appendix F
Cleanup of tables in Appendix G
Updated Example INF files in Appendix D and Appendix E
Section 3.4 Added description of ENTRY_POINT and
UNLOAD_IMAGE elements in the [Defines] section
1.22 w/ Updates: August 2013
Errata C Section 1.3, updated UDP - Errata version of the UEFI/PI Distribution Package Spec.
Section 2.7 and 3.15, added a binary file type of
DISPOSABLE which will not be processed by the EDK II tools.
Section 3.6, 3.8, clarify that the "As Built" INF file is always generated by the build system
Section 3.7, clarify that this section is required to list all dependent packages for PCDs listed in an "As Built" INF file
Section 3.8, clarify the types of PCDs that will be generated in "As Built" INF files
Section 3.3 Added Doxygen tags for Binary Header, Copyright from the Source INF file, containing the date of the last functional update to the source files is also the date that should be used for a Binary "As Built" INF file
Put the BUILD_NUMBER element back into the
[Defines] section; this was inadvertently removed in Errata A
Clarify that all entries are required within a Binary Header section.
Prohibit FeatureFlagExpressions for PCDs, GUIDs, Protocols and PPIs in the generated "As Built" INF files.
Fixed CRLF to be the correct hex bytes.
Reformatted the Header EBNF
Removed unused EBNF entry, <ValPcds>
Added Reference to EDK II Build Specification for PCD processing rules.
Remove sentences referring to lengths of PCD VOID* entries in section 2.14
Clarify that the Unicode format files are UCS-2LE encoded.
1.22 w/ Updates: March 2014
Errata D Clarified that only [UserExtensions] sections with a UserId of TianoCore will be copied into the As Built INF generated by the EDK II build tools.
Clarify that [Depex] section tags must be unique.
Clarify the use of [Depex] sections in library modules.
1.24 Updates: August 2014
Change revision number of this specification from 1.22 to
1.24
Update INF_VERSION to 0x00010017
Added MODULE_UNI_FILE entry to the [Defines] section; this file must end with an extension of .uni, .UNI or .Uni
Added reserved TianoCore user extension for
"ExtraFiles"
Allow Space and Unicode characters in the directory path identified by the system environment variable,
WORKSPACE
1.24 w/ Updates: December 2014
Errata A Revised ordering of the top level EBNF for an INF file to match the output of the Intel(R) UEFI Distribution Packaging Tool at the start of chapter 3.2
Updated specification dates in section 1.2 and added two new specs
Updated INF_VERSION to 0x00010018
Allow specifying the INF_VERSION value as a decimal value, such as 1.24.
Modified Section 2.14, allowing Feature Flag Expressions, removed expression syntax from the Common EBNF as it is now covered by its own specification.
1.24 w/ Updates: March 2015
Errata B Update link to the EDK II Specifications, fixed the name of the Multi-String .UNI File Format Specification
Update usage, UNDEFINED, in Parameters sections for Guids, Protocols, PPIs and PCDs in chapter 3
Add clarification of the Event Types in chapter 3
Added UEFI PI PEI Boot Mode declarations in 3.2.5 to the list while keeping the synonyms that were already defined. Added descriptions as well.
Adding HOB type, UNUSED from the PI Specification
1.24 w/ Updates: August 2015
Errata C Enable Feature Flag Expressions for entries in the INF file for Protocols, PPIs, GUID and PCD entries
Updated other sections to specify how the build system will evaluate the Feature Flag Expression
Prohibit using #include statements in UNI files specified in the MODULE_UNI_FILE entry
1.25 Revised WORKSPACE wording for updated build system that can handle packages located outside of the WORKSPACE directory tree (refer to the TianoCore.org/EDKII website for additional instructions on setting up a development environment). January 2016
1.26 Convert to GitBooks May 2017
#463 INF spec: document the LIB file type under the [Binaries] Section
#548 [INF spec] INF [LibraryClasses] section should not support ModuleType
#522 INF spec: add the clarification that PCD value may from build command
1.27 Update version to 1.27 Mar 2018
Add Flexible PCD value format support
Add clarification that !error statement is not permitted in INF file
INF Spec: FixedAtBuild (VOID*) PCD use in the [DEPEX] section
#1162 Correct the item in Table 1 to align with 3.4 section
1.28 #1453 Update INF spec to remove EDK related contents Mar 2019
1.29 #1952 Add new MODULE_TYPE HOST_APPLICATION July 2019
1.30 #991 generate ProcessLibraryConstructorList() declaration in AutoGen.h for SEC modules February 2024