EDK II Module Information (INF) File Specification
DRAFT FOR REVIEW
03/01/2024 01:46:49
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:
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.
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 |