DEC FAQ - lzeng14/tianocore GitHub Wiki
The EDK II Declaration (DEC) file format supports the building, packaging, and distribution of EDK II modules. The EDK II Platform Description file (DSC) format describes a platform, which is (basically) a collection of DSC files. The EDK II build information (INF) file format describes how to build a single EDK II component, which generates a .EFI file.
For more info on DEC, please review the specification: https://www.gitbook.com/book/edk2-docs/edk-ii-dec-specification/details
There is one DSC per Build but each package can have its own DSC. All packages must have a DEC file. The minimum content required in a DEC file is the [Defines] section. Also every platform package must have a DSC/FDF file to build a firmware image for the platforms FLASH/ROM. Non-platform packages typically have a DSC files to verify that the libraries and modules in that package can build properly for all supports CPU Architectures, all supported development Operating Systems, and all supported Tool Chains.
The DEC file declares Protocols, PPIs, GUIDs, Library Classes, and PCDs. It is not used directly to compile the contents of a package. Instead, the build system uses the declared contents of DEC files when building libraries/modules that reference the Protocols, PPIs, GUIDs, Library Classes, or PCDs that are declared in that DEC file. Module and Library INF files have a [Packages] section. The [Packages] section lists the set of packages that the Module or Library depends on to build. If a Module or Library uses a Protocol, PPI, GUID, Library Class, or PCD from a package, then the DEC file for that package must be listed in the INF file for that Module or Library.
The DEC of a package will publish protocols for consuming, PCDs that can be manipulated by other packages, Libraries and GUIDs. The DEC file declares Protocols, PPIs, GUIDs, Library Classes, and PCDs.