EDK II Module Information (INF) File Specification

DRAFT FOR REVIEW

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

Last updated