summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Sample/Platform
diff options
context:
space:
mode:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2007-06-28 07:00:39 +0000
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2007-06-28 07:00:39 +0000
commit3eb9473ea9a949badfe06ae61d2d3fcfa53651c7 (patch)
treee9d8c368dbb1e58794b2c00acefe4bbad270f8c4 /EdkCompatibilityPkg/Sample/Platform
parent30d4a0c7ec19938196b1308006b990e0945150da (diff)
downloadedk2-platforms-3eb9473ea9a949badfe06ae61d2d3fcfa53651c7.tar.xz
Add in the 1st version of ECP.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2832 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkCompatibilityPkg/Sample/Platform')
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/Common.dsc1522
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/CommonIa32.dsc558
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/CommonIpf.dsc391
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/CommonX64.dsc558
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLib32.dsc39
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLibAll.dsc54
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/EdkLib32.dsc36
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/EdkLibAll.dsc63
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/EdkNt32ProtocolLib.inf46
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.c40
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.h163
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.c28
-rw-r--r--EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.h1276
13 files changed, 4774 insertions, 0 deletions
diff --git a/EdkCompatibilityPkg/Sample/Platform/Common.dsc b/EdkCompatibilityPkg/Sample/Platform/Common.dsc
new file mode 100644
index 0000000000..c40c4e7de8
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/Common.dsc
@@ -0,0 +1,1522 @@
+#/*++
+#
+# Copyright (c) 2004 - 2007, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# Common.dsc
+#
+# Abstract:
+#
+# This is the build description file containing the platform
+# independent build instructions. Platform specific instructions will
+# be prepended to produce the final build DSC file.
+#
+#
+# Notes:
+#
+# The info in this file is broken down into sections. The start of a section
+# is designated by a "[" in the first column. So the [=====] separater ends
+# a section.
+#
+#--*/
+
+[=============================================================================]
+#
+# These get emitted at the top of the generated master makefile.
+#
+[=============================================================================]
+[Makefile.out]
+#
+# From the [makefile.out] section of the DSC file
+#
+TOOLCHAIN =
+MAKE = nmake -nologo
+
+!INCLUDE $(BUILD_DIR)\PlatformTools.env
+
+all : libraries fvs
+
+[=============================================================================]
+#
+# These get expanded and dumped out to each component makefile after the
+# component INF [defines] section gets parsed.
+#
+[=============================================================================]
+[Makefile.Common]
+#
+# From the [Makefile.Common] section of the description file.
+#
+PROCESSOR = $(PROCESSOR)
+BASE_NAME = $(BASE_NAME)
+BUILD_NUMBER = $(BUILD_NUMBER)
+VERSION_STRING = $(VERSION_STRING)
+TOOLCHAIN = TOOLCHAIN_$(PROCESSOR)
+FILE_GUID = $(FILE_GUID)
+COMPONENT_TYPE = $(COMPONENT_TYPE)
+FV_DIR = $(BUILD_DIR)\FV
+PLATFORM = $(PROJECT_NAME)
+
+#
+# Define the global dependency files
+#
+!IF EXIST ($(DEST_DIR)\$(BASE_NAME)StrDefs.h)
+INC_DEPS = $(INC_DEPS) $(DEST_DIR)\$(BASE_NAME)StrDefs.h
+!ENDIF
+#ENV_DEPS = $(ENV_DEPS) $(EDK_SOURCE)\Sample\CommonTools.env
+#ENV_DEPS = $(ENV_DEPS) $(BUILD_DIR)\PlatformTools.env
+#ENV_DEPS = $(ENV_DEPS) $(BUILD_DIR)\Config.env
+ALL_DEPS = $(INC_DEPS) $(ENV_DEPS)
+
+!IF "$(LANGUAGE)" != ""
+LANGUAGE_FLAGS = -lang $(LANGUAGE)
+!ENDIF
+
+!INCLUDE $(BUILD_DIR)\PlatformTools.env
+
+!IF "$(COMPONENT_TYPE)" == "PIC_PEIM" || "$(COMPONENT_TYPE)" == "PE32_PEIM" || "$(COMPONENT_TYPE)" == "RELOCATABLE_PEIM" || "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER"
+DEPEX_TYPE = EFI_SECTION_PEI_DEPEX
+!ELSE
+DEPEX_TYPE = EFI_SECTION_DXE_DEPEX
+!ENDIF
+
+#
+# Command flags for MAKEDEPS tool
+#
+DEP_FLAGS = -target $** -o $(DEP_FILE) $(INC) -ignorenotfound -q
+
+[=============================================================================]
+#
+# These are the commands to compile source files. One of these blocks gets
+# emitted to the component's makefile for each source file. The section
+# name is encoded as [Compile.$(PROCESSOR).source_filename_extension], where
+# the source filename comes from the sources section of the component INF file.
+#
+# If the dependency list file already exists, then include it for this
+# source file. If it doesn't exist, then this is a clean build and the
+# dependency file will get created below and the source file will get
+# compiled.
+#
+# Current behavior is that the first clean build will not create dep files.
+# But the following second build has to create dep files before build source files.
+# CREATEDEPS flag is used to judge whether current build is the second build or not.
+#
+#
+[=============================================================================]
+[Compile.Ia32.asm,Compile.x64.asm]
+
+DEP_FILE = $(DEST_DIR)\$(FILE)Asm.dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Asm.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) -asm
+
+#
+# Compile the file
+#
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(ASM) $(ASM_FLAGS) $(SOURCE_FILE_NAME)
+
+[=============================================================================]
+[Compile.Ipf.s]
+
+DEP_FILE = $(DEST_DIR)\$(FILE)S.dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).pro)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)S.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).pro
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+#
+# Compile the file
+#
+$(DEST_DIR)\$(FILE).pro : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(CC) $(C_FLAGS_PRO) $(SOURCE_FILE_NAME) > $@
+
+$(DEST_DIR)\$(FILE).obj : $(DEST_DIR)\$(FILE).pro
+ $(ASM) $(ASM_FLAGS) $(DEST_DIR)\$(FILE).pro
+
+[=============================================================================]
+[Compile.Ia32.c,Compile.Ipf.c,Compile.x64.c]
+
+DEP_FILE = $(DEST_DIR)\$(FILE).dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE).dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+#
+# Compile the file
+#
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(CC) $(C_FLAGS) $(SOURCE_FILE_NAME)
+
+[=============================================================================]
+[Compile.Ebc.c]
+
+DEP_FILE = $(DEST_DIR)\$(FILE).dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE).dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+#
+# Compile the file
+#
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(EBC_CC) $(EBC_C_FLAGS) $(SOURCE_FILE_NAME)
+
+[=============================================================================]
+#
+# Commands for compiling a ".apr" Apriori source file.
+#
+[=============================================================================]
+[Compile.Ia32.Apr,Compile.Ipf.Apr,Compile.Ebc.Apr,Compile.x64.Apr]
+#
+# Create the raw binary file. If you get an error on the build saying it doesn't
+# know how to create the .apr file, then you're missing (or mispelled) the
+# "APRIORI=" on the component lines in components section in the DSC file.
+#
+$(DEST_DIR)\$(BASE_NAME).bin : $(SOURCE_FILE_NAME)
+ $(GENAPRIORI) -v -f $(SOURCE_FILE_NAME) -o $(DEST_DIR)\$(BASE_NAME).bin
+
+$(DEST_DIR)\$(BASE_NAME).sec : $(DEST_DIR)\$(BASE_NAME).bin
+ $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME).bin -O $(DEST_DIR)\$(BASE_NAME).sec -S EFI_SECTION_RAW
+
+[=============================================================================]
+[Build.Ia32.Apriori,Build.Ipf.Apriori,Build.Ebc.Apriori,Build.x64.Apriori]
+
+all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).FFS
+
+#
+# Run GenFfsFile on the package file and .raw file to create the firmware file
+#
+$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).FFS : $(DEST_DIR)\$(BASE_NAME).sec $(PACKAGE_FILENAME)
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+[Build.Ia32.Makefile,Build.Ipf.Makefile,Build.Ebc.Makefile,Build.x64.Makefile]
+
+#
+# Copy the makefile directly from the source directory, then make it
+# writable so we can copy over it later if we try to.
+#
+$(DEST_DIR)\makefile.new : $(SOURCE_DIR)\makefile.new
+ copy $(SOURCE_DIR)\makefile.new $(DEST_DIR)\makefile.new
+ attrib -r $(DEST_DIR)\makefile.new
+
+#
+# Make the all target, set some required macros.
+#
+call_makefile :
+ $(MAKE) -f $(DEST_DIR)\makefile.new all \
+ SOURCE_DIR=$(SOURCE_DIR) \
+ BUILD_DIR=$(BUILD_DIR) \
+ FILE_GUID=$(FILE_GUID) \
+ DEST_DIR=$(DEST_DIR) \
+ PROCESSOR=$(PROCESSOR) \
+ TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \
+ BASE_NAME=$(BASE_NAME) \
+ PACKAGE_FILENAME=$(PACKAGE_FILENAME)
+
+all : $(DEST_DIR)\makefile.new call_makefile
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+ @- $(MAKE) -f $(DEST_DIR)\makefile.new clean > NUL 2>&1
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# Instructions for building a component that uses a custom makefile. Encoding
+# is [build.$(PROCESSOR).$(BUILD_TYPE)].
+#
+# To build these components, simply call the makefile from the source
+# directory.
+#
+[=============================================================================]
+[Build.Ia32.Custom_Makefile,Build.Ipf.Custom_Makefile,Build.Ebc.Custom_Makefile,Build.x64.Custom_Makefile]
+
+#
+# Just call the makefile from the source directory, passing in some
+# useful info.
+#
+all :
+ $(MAKE) -f $(SOURCE_DIR)\makefile all \
+ SOURCE_DIR=$(SOURCE_DIR) \
+ BUILD_DIR=$(BUILD_DIR) \
+ DEST_DIR=$(DEST_DIR) \
+ FILE_GUID=$(FILE_GUID) \
+ PROCESSOR=$(PROCESSOR) \
+ TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \
+ BASE_NAME=$(BASE_NAME) \
+ PLATFORM=$(PLATFORM) \
+ SOURCE_FV=$(SOURCE_FV) \
+ PACKAGE_FILENAME=$(PACKAGE_FILENAME)
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+ @- $(MAKE) -f $(SOURCE_DIR)\makefile clean > NUL 2>&1
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# These commands are used to build libraries
+#
+[=============================================================================]
+[Build.Ia32.LIBRARY,Build.Ipf.LIBRARY,Build.x64.LIBRARY]
+#
+# LIB all the object files into to our target lib file. Put
+# a dependency on the component's INF file in case it changes.
+#
+LIB_NAME = $(LIB_DIR)\$(BASE_NAME).lib
+
+$(LIB_NAME) : $(OBJECTS) $(LIBS) $(INF_FILENAME) $(ENV_DEPS)
+ $(LIB) $(LIB_FLAGS) $(OBJECTS) $(LIBS) /OUT:$@
+
+!IF "$(CREATEDEPS)"=="YES"
+all : $(DEP_TARGETS)
+ $(MAKE) -f $(MAKEFILE_NAME) all
+!ELSE
+all : $(LIB_NAME) $(DEP_TARGETS)
+!ENDIF
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+[Build.Ebc.LIBRARY]
+#
+# LIB all the object files into to our target lib file. Put
+# a dependency on the component's INF file in case it changes.
+#
+LIB_NAME = $(LIB_DIR)\$(BASE_NAME).lib
+
+$(LIB_NAME) : $(OBJECTS) $(LIBS) $(INF_FILENAME) $(ENV_DEPS)
+ $(EBC_LIB) $(EBC_LIB_FLAGS) $(OBJECTS) $(LIBS) /OUT:$@
+
+!IF "$(CREATEDEPS)"=="YES"
+all : $(DEP_TARGETS)
+ $(MAKE) -f $(MAKEFILE_NAME) all
+!ELSE
+all : $(LIB_NAME) $(DEP_TARGETS)
+!ENDIF
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# This is the Build.$(PROCESSOR).$(COMPONENT_TYPE) section that tells how to
+# convert a firmware volume into an FV FFS file. Simply run it through
+# GenFfsFile with the appropriate package file. SOURCE_FV must be defined
+# in the component INF file Defines section.
+#
+[=============================================================================]
+[Build.Ia32.FvImageFile,Build.x64.FvImageFile,Build.Ipf.FvImageFile]
+
+all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).Fvi
+
+#
+# Run GenFfsFile on the package file and FV file to create the firmware
+# volume FFS file. This FFS file maybe contain one pad section for alignment requirement.
+#
+$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).Fvi : $(DEST_DIR)\$(SOURCE_FV)Fv.sec $(PACKAGE_FILENAME) $(PAD_SECTION)
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# Since many of the steps are the same for the different component types, we
+# share this section for BS_DRIVER, RT_DRIVER, .... and IFDEF the parts that
+# differ. The entire section gets dumped to the output makefile.
+#
+[=============================================================================]
+[Build.Ia32.BS_DRIVER|RT_DRIVER|SAL_RT_DRIVER|PE32_PEIM|PEI_CORE|PIC_PEIM|RELOCATABLE_PEIM|DXE_CORE|APPLICATION|COMBINED_PEIM_DRIVER, Build.Ipf.BS_DRIVER|RT_DRIVER|SAL_RT_DRIVER|PEI_CORE|PE32_PEIM|PIC_PEIM|DXE_CORE|APPLICATION|COMBINED_PEIM_DRIVER, Build.x64.BS_DRIVER|RT_DRIVER|SAL_RT_DRIVER|PE32_PEIM|PEI_CORE|PIC_PEIM|RELOCATABLE_PEIM|DXE_CORE|APPLICATION|COMBINED_PEIM_DRIVER]
+
+!IF "$(LOCALIZE)" == "YES"
+
+!IF "$(EFI_GENERATE_HII_EXPORT)" == "YES"
+STRGATHER_FLAGS = $(STRGATHER_FLAGS) -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk
+
+#
+# There will be one HII pack containing all the strings. Add that file
+# to the list of HII pack files we'll use to create our final HII export file.
+#
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk
+LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).hii
+!ENDIF
+
+$(DEST_DIR)\$(BASE_NAME).sdb : $(SDB_FILES) $(SOURCE_FILES)
+ $(STRGATHER) -scan -vdbr $(STRGATHER_FLAGS) -od $(DEST_DIR)\$(BASE_NAME).sdb \
+ -skipext .uni -skipext .h $(SOURCE_FILES)
+
+$(DEST_DIR)\$(BASE_NAME)Strings.c : $(DEST_DIR)\$(BASE_NAME).sdb
+ $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \
+ -oc $(DEST_DIR)\$(BASE_NAME)Strings.c
+
+$(DEST_DIR)\$(BASE_NAME)StrDefs.h : $(DEST_DIR)\$(BASE_NAME).sdb
+ $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \
+ -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h
+
+$(DEST_DIR)\$(BASE_NAME)Strings.hpk : $(DEST_DIR)\$(BASE_NAME).sdb
+ $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \
+ -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk
+
+OBJECTS = $(OBJECTS) $(DEST_DIR)\$(BASE_NAME)Strings.obj
+
+$(DEST_DIR)\$(BASE_NAME)Strings.obj : $(DEST_DIR)\$(BASE_NAME)Strings.c $(INF_FILENAME) $(ALL_DEPS)
+ $(CC) $(C_FLAGS) $(DEST_DIR)\$(BASE_NAME)Strings.c
+
+LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME)StrDefs.h
+
+!ENDIF
+
+#
+# If we have any objects associated with this component, then we're
+# going to build a local library from them.
+#
+!IFNDEF OBJECTS
+!ERROR No source files to build were defined in the INF file
+!ENDIF
+
+TARGET_LOCAL_LIB = $(DEST_DIR)\$(BASE_NAME)Local.lib
+
+#
+# LIB all the object files into our (local) target lib file. Put
+# a dependency on the component's INF file in case it changes.
+#
+$(TARGET_LOCAL_LIB) : $(OBJECTS) $(INF_FILENAME) $(ENV_DEPS)
+ $(LIB) $(LIB_FLAGS) $(OBJECTS) /OUT:$@
+
+#
+# Defines for standard intermediate files and build targets
+#
+TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll
+TARGET_EFI = $(BIN_DIR)\$(BASE_NAME).efi
+TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx
+TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui
+TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver
+TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map
+TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb
+TARGET_SYM = $(BIN_DIR)\$(BASE_NAME).sym
+
+#
+# Target executable section extension depends on the component type.
+# Only define "TARGET_DXE_DPX" if it's a combined peim driver.
+#
+!IF "$(COMPONENT_TYPE)" == "PIC_PEIM"
+TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pic
+!ELSE
+TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32
+!ENDIF
+
+#
+# Target FFS file extension depends on the component type
+# Also define "TARGET_DXE_DPX" if it's a combined PEIM driver.
+#
+SUBSYSTEM = EFI_BOOT_SERVICE_DRIVER
+
+!IF "$(COMPONENT_TYPE)" == "APPLICATION"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app
+SUBSYSTEM = EFI_APPLICATION
+!ELSE IF "$(COMPONENT_TYPE)" == "PEI_CORE"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei
+!ELSE IF "$(COMPONENT_TYPE)" == "PE32_PEIM"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei
+!ELSE IF "$(COMPONENT_TYPE)" == "RELOCATABLE_PEIM"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei
+!ELSE IF "$(COMPONENT_TYPE)" == "PIC_PEIM"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei
+!ELSE IF "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei
+TARGET_DXE_DPX = $(DEST_DIR)\$(BASE_NAME).dpxd
+!ELSE
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe
+!ENDIF
+
+#
+# Different methods to build section based on if PIC_PEIM
+#
+!IF "$(COMPONENT_TYPE)" == "PIC_PEIM"
+
+$(TARGET_PE32) : $(TARGET_DLL)
+ $(PE2BIN) $(TARGET_DLL) $(DEST_DIR)\$(BASE_NAME).TMP
+#
+# BUGBUG: Build PEIM header, needs to go away with new PEI.
+#
+ $(TEMPGENSECTION) -P $(SOURCE_DIR)\$(BASE_NAME).INF -I $(DEST_DIR)\$(BASE_NAME).TMP -O $(TARGET_PIC_PEI).tmp -M $(TARGET_MAP) -S EFI_SECTION_TYPE_NO_HEADER
+ $(GENSECTION) -I $(TARGET_PIC_PEI).tmp -O $(TARGET_PE32) -S EFI_SECTION_PIC
+ del $(DEST_DIR)\$(BASE_NAME).TMP
+
+!ELSE
+
+$(TARGET_PE32) : $(TARGET_EFI)
+ $(GENSECTION) -I $(TARGET_EFI) -O $(TARGET_PE32) -S EFI_SECTION_PE32
+
+#
+# Run FWImage on the DLL to set it as an EFI image type.
+#
+$(TARGET_EFI) : $(TARGET_DLL) $(INF_FILENAME)
+ $(FWIMAGE) -t 0 $(COMPONENT_TYPE) $(TARGET_DLL) $(TARGET_EFI)
+
+!ENDIF
+
+#
+# Link all objects and libs to create the executable
+#
+$(TARGET_DLL) : $(TARGET_LOCAL_LIB) $(LIBS) $(INF_FILENAME) $(ENV_DEPS)
+ $(LINK) $(LINK_FLAGS_DLL) $(LIBS) /ENTRY:$(IMAGE_ENTRY_POINT) \
+ $(TARGET_LOCAL_LIB) /OUT:$(TARGET_DLL) /MAP:$(TARGET_MAP) \
+ /PDB:$(TARGET_PDB)
+ $(SETSTAMP) $(TARGET_DLL) $(BUILD_DIR)\GenStamp.txt
+!IF "$(EFI_GENERATE_SYM_FILE)" == "YES"
+ if exist $(TARGET_PDB) $(PE2SYM) $(TARGET_PDB) $(TARGET_SYM)
+!ENDIF
+
+!IF "$(EFI_ZERO_DEBUG_DATA)" == "YES"
+ $(ZERODEBUGDATA) $(TARGET_DLL)
+!ENDIF
+
+#
+# Create the user interface section
+#
+$(TARGET_UI) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)"
+
+#
+# Create the version section
+#
+!IF "$(BUILD_NUMBER)" != ""
+!IF "$(VERSION_STRING)" != ""
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)"
+!ELSE
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)
+!ENDIF
+!ELSE
+$(TARGET_VER) :
+ echo.>$(TARGET_VER)
+ type $(TARGET_VER)>$(TARGET_VER)
+!ENDIF
+
+#
+# Makefile entries to create the dependency expression section.
+# Use the DPX file from the source directory unless an override file
+# was specified.
+# If no DPX source file was specified, then create an empty file to
+# be used.
+#
+!IF "$(DPX_SOURCE)" != ""
+DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_OVERRIDE)" != ""
+DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_FILE)" != ""
+!IF EXIST ($(DPX_SOURCE_FILE))
+#
+# Add dependency check for dxs file, because dxs file depends on PPI or
+# PROTOCOL guid defintions.
+#
+DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep
+
+!IF EXIST($(TARGET_DPX))
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(TARGET_DPX)
+ $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS)
+
+$(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME)
+ $(CC) /nologo $(INC) $(VERSION_FLAGS) /EP $(DPX_SOURCE_FILE) > $*.tmp1
+ $(GENDEPEX) -I $*.tmp1 -O $*.tmp2
+ $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE)
+ del $*.tmp1 > NUL
+ del $*.tmp2 > NUL
+!ELSE
+!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.
+!ENDIF
+!ELSE
+$(TARGET_DPX) :
+ echo. > $(TARGET_DPX)
+ type $(TARGET_DPX) > $(TARGET_DPX)
+!ENDIF
+
+#
+# Makefile entries for DXE DPX for combined PEIM drivers.
+# If a DXE_DPX_SOURCE file was specified in the INF file, use it. Otherwise
+# create an empty file and use it as a DPX file.
+#
+!IF "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER"
+!IF "$(DXE_DPX_SOURCE)" != ""
+!IF EXIST ($(SOURCE_DIR)\$(DXE_DPX_SOURCE))
+$(TARGET_DXE_DPX) : $(SOURCE_DIR)\$(DXE_DPX_SOURCE) $(INF_FILENAME)
+ $(CC) /nologo $(INC) $(VERSION_FLAGS) /EP $(SOURCE_DIR)\$(DXE_DPX_SOURCE) > $*.tmp1
+ $(GENDEPEX) -I $*.tmp1 -O $*.tmp2
+ $(GENSECTION) -I $*.tmp2 -O $@ -S EFI_SECTION_DXE_DEPEX
+ del $*.tmp1 > NUL
+ del $*.tmp2 > NUL
+!ELSE
+!ERROR Dependency expression source file "$(SOURCE_DIR)\$(DXE_DPX_SOURCE)" does not exist.
+!ENDIF
+!ELSE
+$(TARGET_DXE_DPX) :
+ echo. > $(TARGET_DXE_DPX)
+ type $(TARGET_DXE_DPX) > $(TARGET_DXE_DPX)
+!ENDIF
+!ENDIF
+
+#
+# Describe how to build the HII export file from all the input HII pack files.
+# Use the FFS file GUID for the package GUID in the export file. Only used
+# when multiple VFR share strings.
+#
+$(DEST_DIR)\$(BASE_NAME).hii : $(HII_PACK_FILES)
+ $(HIIPACK) create -g $(FILE_GUID) -p $(HII_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME).hii
+
+#
+# If the build calls for creating an FFS file with the IFR included as
+# a separate binary (not compiled into the driver), then build the binary
+# section now. Note that the PACKAGE must be set correctly to actually get
+# this IFR section pulled into the FFS file.
+#
+!IF ("$(HII_IFR_PACK_FILES)" != "")
+
+$(DEST_DIR)\$(BASE_NAME)IfrBin.sec : $(HII_IFR_PACK_FILES)
+ $(HIIPACK) create -novarpacks -p $(HII_IFR_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME)IfrBin.hii
+ $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME)IfrBin.hii -O $(DEST_DIR)\$(BASE_NAME)IfrBin.sec -S EFI_SECTION_RAW
+
+BIN_TARGETS = $(BIN_TARGETS) $(DEST_DIR)\$(BASE_NAME)IfrBin.sec
+
+!ENDIF
+
+#
+# Build a FFS file from the sections and package
+#
+$(TARGET_FFS_FILE) : $(TARGET_PE32) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(TARGET_DXE_DPX) $(PACKAGE_FILENAME)
+#
+# Some of our components require padding to align code
+#
+!IF "$(PROCESSOR)" == "IPF"
+!IF "$(COMPONENT_TYPE)" == "PIC_PEIM" || "$(COMPONENT_TYPE)" == "PE32_PEIM" || "$(COMPONENT_TYPE)" == "RELOCATABLE_PEIM" || "$(COMPONENT_TYPE)" == "SECURITY_CORE" || "$(COMPONENT_TYPE)" == "PEI_CORE" || "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER"
+ copy $(BIN_DIR)\Blank.pad $(DEST_DIR)
+!ENDIF
+!ENDIF
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+!IF "$(CREATEDEPS)"=="YES"
+all : $(DEP_TARGETS)
+ $(MAKE) -f $(MAKEFILE_NAME) all
+!ELSE
+all : $(LOCALIZE_TARGETS) $(BIN_TARGETS) $(TARGET_FFS_FILE) $(DEP_TARGETS)
+!ENDIF
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+[Build.Ia32.TE_PEIM,Build.Ipf.TE_PEIM,Build.x64.TE_PEIM]
+#
+# Define the library file we'll build if we have any objects defined.
+#
+!IFDEF OBJECTS
+TARGET_LOCAL_LIB = $(DEST_DIR)\$(BASE_NAME)Local.lib
+#
+# LIB all the object files into our (local) target lib file. Put
+# a dependency on the component's INF file in case it changes.
+#
+$(TARGET_LOCAL_LIB) : $(OBJECTS) $(INF_FILENAME) $(ENV_DEPS)
+ $(LIB) $(LIB_FLAGS) $(OBJECTS) /OUT:$@
+
+!ELSE
+!ERROR No source files to build were defined in the INF file
+!ENDIF
+
+#
+# Defines for standard intermediate files and build targets
+#
+TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll
+TARGET_EFI = $(BIN_DIR)\$(BASE_NAME).efi
+TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx
+TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui
+TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver
+TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map
+TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb
+TARGET_SYM = $(BIN_DIR)\$(BASE_NAME).sym
+TARGET_TE = $(BIN_DIR)\$(BASE_NAME).te
+TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32
+TARGET_TES = $(DEST_DIR)\$(BASE_NAME).tes
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei
+
+#
+# Create our TE section from our TE file
+#
+$(TARGET_TES) : $(TARGET_TE)
+ $(GENSECTION) -I $(TARGET_TE) -O $(TARGET_TES) -S EFI_SECTION_TE
+
+#
+# Run FWImage on the DLL to set it as an EFI image type.
+#
+$(TARGET_EFI) : $(TARGET_DLL) $(INF_FILENAME)
+ $(FWIMAGE) $(COMPONENT_TYPE) $(TARGET_DLL) $(TARGET_EFI)
+
+#
+# Run GenTEImage on the built .efi file to create our TE file.
+#
+$(TARGET_TE) : $(TARGET_EFI)
+ $(GENTEIMAGE) -o $(TARGET_TE) $(TARGET_EFI)
+
+#
+# Link all objects and libs to create the executable
+#
+$(TARGET_DLL) : $(TARGET_LOCAL_LIB) $(LIBS) $(INF_FILENAME) $(ENV_DEPS)
+ $(LINK) $(LINK_FLAGS_DLL) $(LIBS) /ENTRY:$(IMAGE_ENTRY_POINT) \
+ $(TARGET_LOCAL_LIB) /OUT:$(TARGET_DLL) /MAP:$(TARGET_MAP) \
+ /PDB:$(TARGET_PDB)
+ $(SETSTAMP) $(TARGET_DLL) $(BUILD_DIR)\GenStamp.txt
+!IF "$(EFI_GENERATE_SYM_FILE)" == "YES"
+ if exist $(TARGET_PDB) $(PE2SYM) $(TARGET_PDB) $(TARGET_SYM)
+!ENDIF
+
+!IF "$(EFI_ZERO_DEBUG_DATA)" == "YES"
+ $(ZERODEBUGDATA) $(TARGET_DLL)
+!ENDIF
+
+#
+# Create the user interface section
+#
+$(TARGET_UI) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)"
+
+#
+# Create the version section
+#
+!IF "$(BUILD_NUMBER)" != ""
+!IF "$(VERSION_STRING)" != ""
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)"
+!ELSE
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)
+!ENDIF
+!ELSE
+$(TARGET_VER) :
+ echo.>$(TARGET_VER)
+ type $(TARGET_VER)>$(TARGET_VER)
+!ENDIF
+
+#
+# Makefile entries to create the dependency expression section.
+# Use the DPX file from the source directory unless an override file
+# was specified.
+# If no DPX source file was specified, then create an empty file to
+# be used.
+#
+!IF "$(DPX_SOURCE)" != ""
+DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_OVERRIDE)" != ""
+DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_FILE)" != ""
+!IF EXIST ($(DPX_SOURCE_FILE))
+#
+# Add dependency check for dxs file, because dxs file depends on PPI or
+# PROTOCOL guid defintions.
+#
+DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep
+
+!IF EXIST($(TARGET_DPX))
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(TARGET_DPX)
+ $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS)
+
+$(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME)
+ $(CC) /nologo $(INC) $(VERSION_FLAGS) /EP $(DPX_SOURCE_FILE) > $*.tmp1
+ $(GENDEPEX) -I $*.tmp1 -O $*.tmp2
+ $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE)
+ del $*.tmp1 > NUL
+ del $*.tmp2 > NUL
+!ELSE
+!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.
+!ENDIF
+!ELSE
+$(TARGET_DPX) :
+ echo. > $(TARGET_DPX)
+ type $(TARGET_DPX) > $(TARGET_DPX)
+!ENDIF
+
+#
+# Build an FFS file from the sections and package
+#
+$(TARGET_FFS_FILE) : $(TARGET_TES) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(PACKAGE_FILENAME)
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+!IF "$(CREATEDEPS)"=="YES"
+all : $(DEP_TARGETS)
+ $(MAKE) -f $(MAKEFILE_NAME) all
+!ELSE
+all : $(TARGET_FFS_FILE) $(DEP_TARGETS)
+!ENDIF
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# These are the commands to build EBC EFI targets
+#
+[=============================================================================]
+[Build.Ebc.BS_DRIVER|RT_DRIVER|APPLICATION]
+
+#
+# Add the EBC library to our list of libs
+#
+LIBS = $(LIBS) $(EBC_TOOLS_PATH)\lib\EbcLib.lib
+
+!IF "$(LOCALIZE)" == "YES"
+
+!IF "$(EFI_GENERATE_HII_EXPORT)" == "YES"
+STRGATHER_FLAGS = $(STRGATHER_FLAGS) -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk
+
+#
+# There will be one HII pack containing all the strings. Add that file
+# to the list of HII pack files we'll use to create our final HII export file.
+#
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk
+
+LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).hii
+!ENDIF
+
+$(DEST_DIR)\$(BASE_NAME).sdb : $(SDB_FILES) $(SOURCE_FILES)
+ $(STRGATHER) -scan -vdbr $(STRGATHER_FLAGS) -od $(DEST_DIR)\$(BASE_NAME).sdb \
+ -skipext .uni -skipext .h $(SOURCE_FILES)
+
+$(DEST_DIR)\$(BASE_NAME)Strings.c : $(DEST_DIR)\$(BASE_NAME).sdb
+ $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \
+ -oc $(DEST_DIR)\$(BASE_NAME)Strings.c
+
+$(DEST_DIR)\$(BASE_NAME)StrDefs.h : $(DEST_DIR)\$(BASE_NAME).sdb
+ $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \
+ -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h
+
+$(DEST_DIR)\$(BASE_NAME)Strings.hpk : $(DEST_DIR)\$(BASE_NAME).sdb
+ $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \
+ -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk
+
+OBJECTS = $(OBJECTS) $(DEST_DIR)\$(BASE_NAME)Strings.obj
+
+$(DEST_DIR)\$(BASE_NAME)Strings.obj : $(DEST_DIR)\$(BASE_NAME)Strings.c $(INF_FILENAME) $(ALL_DEPS)
+ $(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(BASE_NAME)Strings.c
+
+LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME)StrDefs.h
+
+!ENDIF
+
+#
+# If building an application, then the target is a .app, not .dxe
+#
+!IF "$(COMPONENT_TYPE)" == "APPLICATION"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app
+SUBSYSTEM = EFI_APPLICATION
+!ELSE
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe
+SUBSYSTEM = EFI_BOOT_SERVICE_DRIVER
+!ENDIF
+
+#
+# Defines for standard intermediate files and build targets
+#
+TARGET_EFI = $(BIN_DIR)\$(BASE_NAME).efi
+TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx
+TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui
+TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver
+TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map
+TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb
+TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32
+TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll
+
+#
+# First link all the objects and libs together to make a .dll file
+#
+$(TARGET_DLL) : $(OBJECTS) $(LIBS) $(INF_FILENAME) $(ENV_DEPS)
+ $(EBC_LINK) $(EBC_LINK_FLAGS) /SUBSYSTEM:$(SUBSYSTEM) /ENTRY:EfiStart \
+ $(OBJECTS) $(LIBS) /OUT:$(TARGET_DLL) /MAP:$(TARGET_MAP)
+ $(SETSTAMP) $(TARGET_DLL) $(BUILD_DIR)\GenStamp.txt
+!IF "$(EFI_ZERO_DEBUG_DATA)" == "YES"
+ $(ZERODEBUGDATA) $(TARGET_DLL)
+!ENDIF
+
+#
+# Now take the .dll file and make a .efi file
+#
+$(TARGET_EFI) : $(TARGET_DLL) $(INF_FILENAME)
+ $(FWIMAGE) -t 0 $(COMPONENT_TYPE) $(TARGET_DLL) $(TARGET_EFI)
+
+#
+# Now take the .efi file and make a .pe32 section
+#
+$(TARGET_PE32) : $(TARGET_EFI)
+ $(GENSECTION) -I $(TARGET_EFI) -O $(TARGET_PE32) -S EFI_SECTION_PE32
+
+#
+# Create the user interface section
+#
+$(TARGET_UI) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)"
+
+#
+# Create the version section
+#
+!IF "$(BUILD_NUMBER)" != ""
+!IF "$(VERSION_STRING)" != ""
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)"
+!ELSE
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)
+!ENDIF
+!ELSE
+$(TARGET_VER) :
+ echo. > $(TARGET_VER)
+ type $(TARGET_VER) > $(TARGET_VER)
+!ENDIF
+
+#
+# Makefile entries to create the dependency expression section.
+# Use the DPX file from the source directory unless an override file
+# was specified.
+# If no DPX source file was specified, then create an empty file to
+# be used.
+#
+!IF "$(DPX_SOURCE)" != ""
+DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_OVERRIDE)" != ""
+DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_FILE)" != ""
+!IF EXIST ($(DPX_SOURCE_FILE))
+#
+# Add dependency check for dxs file, because dxs file depends on PPI or
+# PROTOCOL guid defintions.
+#
+DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep
+
+!IF EXIST($(TARGET_DPX))
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(TARGET_DPX)
+ $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS)
+
+$(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME)
+ $(CC) /nologo $(INC) $(VERSION_FLAGS) /EP $(DPX_SOURCE_FILE) > $*.tmp1
+ $(GENDEPEX) -I $*.tmp1 -O $*.tmp2
+ $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE)
+ del $*.tmp1 > NUL
+ del $*.tmp2 > NUL
+!ELSE
+!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.
+!ENDIF
+!ELSE
+$(TARGET_DPX) :
+ echo. > $(TARGET_DPX)
+ type $(TARGET_DPX) > $(TARGET_DPX)
+!ENDIF
+
+#
+# Describe how to build the HII export file from all the input HII pack files.
+# Use the FFS file GUID for the package GUID in the export file. Only used
+# when multiple VFR share strings.
+#
+$(DEST_DIR)\$(BASE_NAME).hii : $(HII_PACK_FILES)
+ $(HIIPACK) create -g $(FILE_GUID) -p $(HII_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME).hii
+
+#
+# If the build calls for creating an FFS file with the IFR included as
+# a separate binary (not compiled into the driver), then build the binary
+# section now. Note that the PACKAGE must be set correctly to actually get
+# this IFR section pulled into the FFS file.
+#
+!IF ("$(HII_IFR_PACK_FILES)" != "")
+
+$(DEST_DIR)\$(BASE_NAME)IfrBin.sec : $(HII_IFR_PACK_FILES)
+ $(HIIPACK) create -novarpacks -p $(HII_IFR_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME)IfrBin.hii
+ $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME)IfrBin.hii -O $(DEST_DIR)\$(BASE_NAME)IfrBin.sec -S EFI_SECTION_RAW
+
+BIN_TARGETS = $(BIN_TARGETS) $(DEST_DIR)\$(BASE_NAME)IfrBin.sec
+
+!ENDIF
+
+#
+# Build an FFS file from the sections and package
+#
+$(TARGET_FFS_FILE) : $(TARGET_PE32) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(PACKAGE_FILENAME)
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+!IF "$(CREATEDEPS)"=="YES"
+all : $(DEP_TARGETS)
+ $(MAKE) -f $(MAKEFILE_NAME) all
+!ELSE
+all : $(LOCALIZE_TARGETS) $(BIN_TARGETS) $(TARGET_FFS_FILE) $(DEP_TARGETS)
+!ENDIF
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# These are the commands to build vendor-provided *.EFI files into an FV.
+# To use them, create an INF file with BUILD_TYPE=BS_DRIVER_EFI.
+# This section, as it now exists, only supports boot service drivers.
+#
+[=============================================================================]
+[Build.Ia32.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI,Build.Ipf.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI,Build.Ebc.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI,Build.x64.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI]
+#
+# Defines for standard intermediate files and build targets. For the source
+# .efi file, take the one in the source directory if it exists. If there's not
+# one there, look for one in the processor-specfic subdirectory.
+#
+!IF EXIST ("$(SOURCE_DIR)\$(BASE_NAME).efi")
+TARGET_EFI = $(SOURCE_DIR)\$(BASE_NAME).efi
+!ELSEIF EXIST ("$(SOURCE_DIR)\$(PROCESSOR)\$(BASE_NAME).efi")
+TARGET_EFI = $(SOURCE_DIR)\$(PROCESSOR)\$(BASE_NAME).efi
+!ELSE
+!ERROR Pre-existing $(BASE_NAME).efi file not found in $(SOURCE_DIR) nor $(SOURCE_DIR)\$(PROCESSOR)
+!ENDIF
+
+TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx
+TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui
+TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver
+TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map
+TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb
+TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32
+TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll
+
+#
+# If building an application, then the target is a .app, not .dxe
+#
+!IF "$(COMPONENT_TYPE)" == "APPLICATION"
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app
+!ELSE
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe
+!ENDIF
+
+#
+# Take the .efi file and make a .pe32 file
+#
+$(TARGET_PE32) : $(TARGET_EFI)
+ $(GENSECTION) -I $(TARGET_EFI) -O $(TARGET_PE32) -S EFI_SECTION_PE32
+
+#
+# Create the user interface section
+#
+$(TARGET_UI) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)"
+
+#
+# Create the version section
+#
+!IF "$(BUILD_NUMBER)" != ""
+!IF "$(VERSION_STRING)" != ""
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)"
+!ELSE
+$(TARGET_VER) : $(INF_FILENAME)
+ $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)
+!ENDIF
+!ELSE
+$(TARGET_VER) :
+ echo. > $(TARGET_VER)
+ type $(TARGET_VER) > $(TARGET_VER)
+!ENDIF
+
+#
+# Makefile entries to create the dependency expression section.
+# Use the DPX file from the source directory unless an override file
+# was specified.
+# If no DPX source file was specified, then create an empty file to
+# be used.
+#
+!IF "$(DPX_SOURCE)" != ""
+DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_OVERRIDE)" != ""
+DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE)
+!ENDIF
+
+!IF "$(DPX_SOURCE_FILE)" != ""
+!IF EXIST ($(DPX_SOURCE_FILE))
+#
+# Add dependency check for dxs file, because dxs file depends on PPI or
+# PROTOCOL guid defintions.
+#
+DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep
+
+!IF EXIST($(TARGET_DPX))
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(TARGET_DPX)
+ $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS)
+
+$(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME)
+ $(CC) /nologo $(INC) $(VERSION_FLAGS) /EP $(DPX_SOURCE_FILE) > $*.tmp1
+ $(GENDEPEX) -I $*.tmp1 -O $*.tmp2
+ $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE)
+ del $*.tmp1 > NUL
+ del $*.tmp2 > NUL
+!ELSE
+!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.
+!ENDIF
+!ELSE
+$(TARGET_DPX) :
+ echo. > $(TARGET_DPX)
+ type $(TARGET_DPX) > $(TARGET_DPX)
+!ENDIF
+
+#
+# Build a FFS file from the sections and package
+#
+$(TARGET_FFS_FILE) : $(TARGET_PE32) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(PACKAGE_FILENAME)
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+all : $(TARGET_FFS_FILE)
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+[Compile.Ia32.Bin|Bmp,Compile.x64.Bin|Bmp,Compile.Ipf.Bin|Bmp]
+#
+# We simply copy the binary file from the source directory to the destination directory
+#
+$(DEST_DIR)\$(BASE_NAME).bin : $(SOURCE_FILE_NAME)
+ copy $** $@
+
+[=============================================================================]
+[Build.Ia32.BINARY|Legacy16|Logo,Build.Ipf.BINARY|Legacy16|Logo,Build.x64.BINARY|Legacy16|Logo]
+#
+# Use GenFfsFile to convert it to an FFS file
+#
+$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs : $(DEST_DIR)\$(BASE_NAME).bin $(PACKAGE_FILENAME)
+ $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME).bin -O $(DEST_DIR)\$(BASE_NAME).sec -S EFI_SECTION_RAW
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+[Build.Ia32.RAWFILE|CONFIG,Build.Ipf.RAWFILE|CONFIG,Build.x64.RAWFILE|CONFIG]
+#
+# Use GenFfsFile to convert it to an raw FFS file
+#
+$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw : $(DEST_DIR)\$(BASE_NAME).bin $(PACKAGE_FILENAME)
+ $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V
+
+all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw
+
+#
+# Remove the generated temp and final files for this modules.
+#
+clean :
+!IF ("$(FILE_GUID)" != "")
+ @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*
+!ENDIF
+ @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).*
+ @del /q $(DEST_OUTPUT_DIRS)
+
+[=============================================================================]
+#
+# These are commands to compile unicode .uni files.
+#
+[=============================================================================]
+[Compile.Ia32.Uni,Compile.Ipf.Uni,Compile.Ebc.Uni,Compile.x64.Uni]
+#
+# Emit an error message if the file's base name is the same as the
+# component base name. This causes build issues.
+#
+!IF "$(FILE)" == "$(BASE_NAME)"
+!ERROR Component Unicode string file name cannot be the same as the component BASE_NAME.
+!ENDIF
+
+#
+# Always create dep file for uni file as it can be created at the same time when
+# strgather is parsing uni file.
+#
+DEP_FILE = $(DEST_DIR)\$(FILE)Uni.dep
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+$(DEST_DIR)\$(FILE).sdb : $(SOURCE_FILE_NAME) $(INF_FILENAME)
+ $(STRGATHER) -parse -newdb -db $(DEST_DIR)\$(FILE).sdb -dep $(DEP_FILE) $(INC) $(SOURCE_FILE_NAME)
+
+SDB_FILES = $(SDB_FILES) $(DEST_DIR)\$(FILE).sdb
+STRGATHER_FLAGS = $(STRGATHER_FLAGS) -db $(DEST_DIR)\$(FILE).sdb
+LOCALIZE = YES
+
+[=============================================================================]
+[Compile.Ia32.Vfr,Compile.Ipf.Vfr,Compile.x64.Vfr]
+
+DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk
+
+#
+# Add a dummy command for building the HII pack file. In reality, it's built
+# below, but the C_FLAGS macro reference the target as $@, so you can't specify
+# the obj and hpk files as dual targets of the same command.
+#
+$(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj
+
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \
+ -l $(VFR_FLAGS) $(SOURCE_FILE_NAME)
+ $(CC) $(C_FLAGS) $(DEST_DIR)\$(FILE).c
+
+[=============================================================================]
+[Compile.Ebc.Vfr]
+
+DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk
+
+#
+# Add a dummy command for building the HII pack file. In reality, it's built
+# below, but the C_FLAGS macro reference the target as $@, so you can't specify
+# the obj and hpk files as dual targets of the same command.
+#
+$(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj
+
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \
+ -l $(VFR_FLAGS) $(SOURCE_FILE_NAME)
+ $(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(FILE).c
+
+[=============================================================================]
+#
+# Commands for building IFR as uncompressed binary into the FFS file. To
+# use it, set COMPILE_SELECT=.vfr=Ifr_Bin for the component in the DSC file.
+#
+[=============================================================================]
+[Compile.Ia32.Ifr_Bin,Compile.Ipf.Ifr_Bin,Compile.x64.Ifr_Bin]
+
+DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk
+
+#
+# Add a dummy command for building the HII pack file. In reality, it's built
+# below, but the C_FLAGS macro reference the target as $@, so you can't specify
+# the obj and hpk files as dual targets of the same command.
+#
+$(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj
+
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \
+ -l $(VFR_FLAGS) $(SOURCE_FILE_NAME)
+ $(CC) $(C_FLAGS) $(DEST_DIR)\$(FILE).c
+
+#
+# Add to the variable that contains the list of VFR binary files we're going
+# to merge together at the end of the build.
+#
+HII_IFR_PACK_FILES = $(HII_IFR_PACK_FILES) $(DEST_DIR)\$(FILE).hpk
+
+[=============================================================================]
+#
+# Commands for building IFR as uncompressed binary into the FFS file. To
+# use it, set COMPILE_SELECT=.vfr=Ifr_Bin for the component in the DSC file.
+#
+[=============================================================================]
+[Compile.Ebc.Ifr_Bin]
+
+DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep
+
+!IF EXIST($(DEST_DIR)\$(FILE).obj)
+DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep
+!IF !EXIST($(DEP_FILE))
+CREATEDEPS = YES
+!ENDIF
+!ENDIF
+
+!IF EXIST($(DEP_FILE))
+!INCLUDE $(DEP_FILE)
+!ENDIF
+
+#
+# Update dep file for next round incremental build
+#
+$(DEP_FILE) : $(DEST_DIR)\$(FILE).obj
+ $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS)
+
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk
+
+#
+# Add a dummy command for building the HII pack file. In reality, it's built
+# below, but the C_FLAGS macro reference the target as $@, so you can't specify
+# the obj and hpk files as dual targets of the same command.
+#
+$(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj
+
+$(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS)
+ $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \
+ -l $(VFR_FLAGS) $(SOURCE_FILE_NAME)
+ $(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(FILE).c
+
+#
+# Add to the variable that contains the list of VFR binary files we're going
+# to merge together at the end of the build.
+#
+HII_IFR_PACK_FILES = $(HII_IFR_PACK_FILES) $(DEST_DIR)\$(FILE).hpk
+
+[=============================================================================]
+[Compile.Ia32.Fv,Compile.Ipf.Fv,Compile.x64.Fv]
+#
+# Run GenSection on the firmware volume image.
+#
+$(DEST_DIR)\$(SOURCE_FV)Fv.sec : $(SOURCE_FILE_NAME)
+ $(GENSECTION) -I $(SOURCE_FILE_NAME) -O $(DEST_DIR)\$(SOURCE_FV)Fv.sec -S EFI_SECTION_FIRMWARE_VOLUME_IMAGE
+
+[=============================================================================]
diff --git a/EdkCompatibilityPkg/Sample/Platform/CommonIa32.dsc b/EdkCompatibilityPkg/Sample/Platform/CommonIa32.dsc
new file mode 100644
index 0000000000..f9fae29359
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/CommonIa32.dsc
@@ -0,0 +1,558 @@
+#/*++
+#
+# Copyright (c) 2004 - 2007, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# CommonIa32.dsc
+#
+# Abstract:
+#
+# This is the build description file containing the processor architecture
+# dependent build instructions.
+#
+# Notes:
+#
+# The info in this file is broken down into sections. The start of a section
+# is designated by a "[" in the first column. So the [=====] separater ends
+# a section.
+#
+#--*/
+
+
+[=============================================================================]
+#
+# These are the package descriptions. They are tagged as
+# [Package.$(COMPONENT_TYPE).$(PACKAGE)], where COMPONENT_TYPE is typically
+# defined in the component INF file, and PACKAGE is typically specified
+# in the components section in the main DSC file. Main DSC file can also define
+# platform specific package descriptions.
+#
+
+[=============================================================================]
+[Package.APPLICATION.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_APPLICATION
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.Apriori.Default|DefaultStripped,Package.FILE.Default|DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).sec
+}
+
+[=============================================================================]
+[Package.RAWFILE.Default|DefaultStripped,Package.Config.Default|DefaultStripped|Config,Package.Microcode.Default|DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_RAW
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).Bin
+}
+
+[=============================================================================]
+[Package.BINARY.Default,Package.Legacy16.Default,Package.Logo.Default|Logo]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool ( $(OEMTOOLPATH)\GenCRC32Section
+ ARGS = -i $(DEST_DIR)\$(BASE_NAME).sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+#
+# Package definition for TE files
+#
+[Package.PE32_PEIM.TE_PEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ $(BASE_NAME).tes
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+}
+
+[=============================================================================]
+#
+# Package definition to put the IFR data in a separate section in the
+# FFS file.
+#
+[Package.BS_DRIVER.Ifr_Bin]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ $(DEST_DIR)\$(BASE_NAME)IfrBin.sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.PEI_CORE.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PEI_CORE.TE_PEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).tes \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.Relocatable]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.CompressPEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+ }
+}
+
+[=============================================================================]
+[Package.COMBINED_PEIM_DRIVER.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).dpxd \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.BS_DRIVER.DxeMain]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DXE_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+ }
+}
+
+
+[=============================================================================]
+[Package.BS_DRIVER.Default,Package.RT_DRIVER.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.FvImageFile.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ -o $(DEST_DIR)\$(BASE_NAME)fv.crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME)fv.crc32
+ )
+ }
+}
+
+[=============================================================================]
+#
+# Define a package that "signs" our capsule cargo FV
+#
+[Package.FvImageFile.SignedFVPackage]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+}
+
+[=============================================================================]
+[Package.FvImageFile.FvMainCompact]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Blank.pad
+ $(SOURCE_FV)Fv.sec
+ }
+}
+[=============================================================================]
+#
+# Stripped package descriptions for size reduction.
+#
+[=============================================================================]
+[Package.APPLICATION.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_APPLICATION
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ }
+}
+
+[=============================================================================]
+[Package.BINARY.DefaultStripped,Package.Legacy16.DefaultStripped,Package.Logo.DefaultStripped|LogoStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(BASE_NAME).sec
+ }
+}
+
+[=============================================================================]
+[Package.PEI_CORE.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.PEI_CORE.TE_PEIMStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).tes
+}
+[=============================================================================]
+[Package.PE32_PEIM.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.CompressPEIMStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ }
+}
+
+[=============================================================================]
+#
+# Package definition for TE files
+#
+[Package.PE32_PEIM.TE_PEIMStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ $(BASE_NAME).tes
+}
+
+[=============================================================================]
+[Package.COMBINED_PEIM_DRIVER.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).dpxd \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.BS_DRIVER.DxeMainStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DXE_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ }
+}
+
+
+[=============================================================================]
+[Package.BS_DRIVER.DefaultStripped,Package.RT_DRIVER.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ }
+}
+
+
+[=============================================================================]
+[Package.FvImageFile.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ }
+}
+
+[=============================================================================]
+[Package.SECURITY_CORE.Default|DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_SECURITY_CORE
+FFS_ATTRIB_CHECKSUM = FALSE
+
+IMAGE_SCRIPT =
+{ \
+ Blank1.pad \
+ $(BASE_NAME).tes \
+ ResetVec.raw \
+}
+
+[=============================================================================]
diff --git a/EdkCompatibilityPkg/Sample/Platform/CommonIpf.dsc b/EdkCompatibilityPkg/Sample/Platform/CommonIpf.dsc
new file mode 100644
index 0000000000..13bfe9171b
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/CommonIpf.dsc
@@ -0,0 +1,391 @@
+#/*++
+#
+# Copyright (c) 2004 - 2007, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# CommonIpf.dsc
+#
+# Abstract:
+#
+# This is the build description file containing the processor architecture
+# dependent build instructions.
+#
+# Notes:
+#
+# The info in this file is broken down into sections. The start of a section
+# is designated by a "[" in the first column. So the [=====] separater ends
+# a section.
+#
+#--*/
+
+
+[=============================================================================]
+#
+# These are the package descriptions. They are tagged as
+# [Package.$(COMPONENT_TYPE).$(PACKAGE)], where COMPONENT_TYPE is typically
+# defined in the component INF file, and PACKAGE is typically specified
+# in the components section in the main DSC file. Main DSC file can also define
+# platform specific package descriptions.
+#
+
+[=============================================================================]
+[Package.APPLICATION.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_APPLICATION
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.Apriori.Default,Package.FILE.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).sec
+}
+
+[=============================================================================]
+[Package.RAWFILE.Default,Package.Config.Default|Config]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_RAW
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).Bin
+}
+
+[=============================================================================]
+[Package.BINARY.Default,Package.Legacy16.Default,Package.Logo.Default|Logo]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool ( $(OEMTOOLPATH)\GenCRC32Section
+ ARGS = -i $(DEST_DIR)\$(BASE_NAME).sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+#
+# Package definition for TE files
+#
+[Package.PE32_PEIM.TE_PEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ $(BASE_NAME).tes
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+}
+
+[=============================================================================]
+#
+# Package definition to put the IFR data in a separate section in the
+# FFS file.
+#
+[Package.BS_DRIVER.Ifr_Bin]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ $(DEST_DIR)\$(BASE_NAME)IfrBin.sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.SECURITY_CORE.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_SECURITY_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+FFS_ALIGNMENT = 0x1
+
+IMAGE_SCRIPT =
+{ \
+ Blank.pad \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PEI_CORE.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+FFS_ALIGNMENT = 0x1
+
+IMAGE_SCRIPT =
+{ \
+ Blank.pad \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+FFS_ALIGNMENT = 0x1
+
+IMAGE_SCRIPT =
+{ \
+ Blank.pad \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.CompressPEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+ }
+}
+
+[=============================================================================]
+[Package.COMBINED_PEIM_DRIVER.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+FFS_ALIGNMENT = 0x1
+
+IMAGE_SCRIPT =
+{ \
+ Blank.pad \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).dpxd \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PIC_PEIM.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+FFS_ALIGNMENT = 0x1
+
+IMAGE_SCRIPT =
+{ \
+ Blank.pad \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pic \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+
+[=============================================================================]
+[Package.DxeIplPad.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_RAW
+FFS_ATTRIB_CHECKSUM = TRUE
+FFS_ALIGNMENT = 0x7
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).pad \
+}
+
+
+[=============================================================================]
+[Package.BS_DRIVER.DxeMain]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DXE_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+ }
+}
+
+
+[=============================================================================]
+[Package.BS_DRIVER.Default,Package.RT_DRIVER.Default,Package.SAL_RT_DRIVER.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.FvImageFile.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ -o $(DEST_DIR)\$(BASE_NAME)fv.crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME)fv.crc32
+ )
+ }
+}
+
+[=============================================================================]
+#
+# Define a package that "signs" our capsule cargo FV
+#
+[Package.FvImageFile.SignedFVPackage]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+}
+
+[=============================================================================]
+[Package.FvImageFile.FvMainCompact]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Blank.pad
+ $(SOURCE_FV)Fv.sec
+ }
+}
+[=============================================================================]
diff --git a/EdkCompatibilityPkg/Sample/Platform/CommonX64.dsc b/EdkCompatibilityPkg/Sample/Platform/CommonX64.dsc
new file mode 100644
index 0000000000..4314049361
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/CommonX64.dsc
@@ -0,0 +1,558 @@
+#/*++
+#
+# Copyright (c) 2005 - 2007, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# CommonX64.dsc
+#
+# Abstract:
+#
+# This is the build description file containing the processor architecture
+# dependent build instructions.
+#
+# Notes:
+#
+# The info in this file is broken down into sections. The start of a section
+# is designated by a "[" in the first column. So the [=====] separater ends
+# a section.
+#
+#--*/
+
+
+[=============================================================================]
+#
+# These are the package descriptions. They are tagged as
+# [Package.$(COMPONENT_TYPE).$(PACKAGE)], where COMPONENT_TYPE is typically
+# defined in the component INF file, and PACKAGE is typically specified
+# in the components section in the main DSC file. Main DSC file can also define
+# platform specific package descriptions.
+#
+
+[=============================================================================]
+[Package.APPLICATION.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_APPLICATION
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.Apriori.Default|DefaultStripped,Package.FILE.Default|DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).sec
+}
+
+[=============================================================================]
+[Package.RAWFILE.Default|DefaultStripped,Package.Config.Default|DefaultStripped|Config,Package.Microcode.Default|DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_RAW
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).Bin
+}
+
+[=============================================================================]
+[Package.BINARY.Default,Package.Legacy16.Default,Package.Logo.Default|Logo]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool ( $(OEMTOOLPATH)\GenCRC32Section
+ ARGS = -i $(DEST_DIR)\$(BASE_NAME).sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+#
+# Package definition for TE files
+#
+[Package.PE32_PEIM.TE_PEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ $(BASE_NAME).tes
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+}
+
+[=============================================================================]
+#
+# Package definition to put the IFR data in a separate section in the
+# FFS file.
+#
+[Package.BS_DRIVER.Ifr_Bin]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ $(DEST_DIR)\$(BASE_NAME)IfrBin.sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.PEI_CORE.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PEI_CORE.TE_PEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).tes \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.Relocatable]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.CompressPEIM]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+ }
+}
+
+[=============================================================================]
+[Package.COMBINED_PEIM_DRIVER.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).dpxd \
+ $(BASE_NAME).pe32 \
+ $(BASE_NAME).ui \
+ $(BASE_NAME).ver \
+}
+
+[=============================================================================]
+[Package.BS_DRIVER.DxeMain]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DXE_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ $(BASE_NAME).ui
+ $(BASE_NAME).ver
+ }
+}
+
+
+[=============================================================================]
+[Package.BS_DRIVER.Default,Package.RT_DRIVER.Default,Package.SAL_RT_DRIVER.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ $(DEST_DIR)\$(BASE_NAME).ui
+ $(DEST_DIR)\$(BASE_NAME).ver
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+ }
+}
+
+[=============================================================================]
+[Package.FvImageFile.Default]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ -o $(DEST_DIR)\$(BASE_NAME)fv.crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME)fv.crc32
+ )
+ }
+}
+
+[=============================================================================]
+#
+# Define a package that "signs" our capsule cargo FV
+#
+[Package.FvImageFile.SignedFVPackage]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Tool (
+ $(OEMTOOLPATH)\GenCRC32Section
+ ARGS= -i $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ -o $(DEST_DIR)\$(BASE_NAME).crc32
+ OUTPUT = $(DEST_DIR)\$(BASE_NAME).crc32
+ )
+}
+
+[=============================================================================]
+#
+# Stripped package descriptions for size reduction.
+#
+[=============================================================================]
+[Package.APPLICATION.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_APPLICATION
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ }
+}
+
+[=============================================================================]
+[Package.BINARY.DefaultStripped,Package.Legacy16.DefaultStripped,Package.Logo.DefaultStripped|LogoStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(BASE_NAME).sec
+ }
+}
+
+[=============================================================================]
+[Package.PEI_CORE.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.PEI_CORE.TE_PEIMStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEI_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).tes
+}
+[=============================================================================]
+[Package.PE32_PEIM.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.PE32_PEIM.CompressPEIMStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ }
+}
+
+[=============================================================================]
+#
+# Package definition for TE files
+#
+[Package.PE32_PEIM.TE_PEIMStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_PEIM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ $(BASE_NAME).dpx
+ $(BASE_NAME).tes
+}
+
+[=============================================================================]
+[Package.COMBINED_PEIM_DRIVER.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{ \
+ $(BASE_NAME).dpx \
+ $(BASE_NAME).dpxd \
+ $(BASE_NAME).pe32 \
+}
+
+[=============================================================================]
+[Package.BS_DRIVER.DxeMainStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DXE_CORE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(BASE_NAME).pe32
+ }
+}
+
+
+[=============================================================================]
+[Package.BS_DRIVER.DefaultStripped,Package.RT_DRIVER.DefaultStripped,Package.SAL_RT_DRIVER.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_DRIVER
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(BASE_NAME).dpx
+ $(DEST_DIR)\$(BASE_NAME).pe32
+ }
+}
+
+
+[=============================================================================]
+[Package.FvImageFile.DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ $(DEST_DIR)\$(SOURCE_FV)Fv.sec
+ }
+}
+
+[=============================================================================]
+[Package.FvImageFile.FvMainCompact]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress ($(COMPRESS_METHOD)) {
+ Blank.pad
+ $(SOURCE_FV)Fv.sec
+ }
+}
+[=============================================================================]
+[Package.SECURITY_CORE.Default|DefaultStripped]
+PACKAGE.INF
+\[.]
+BASE_NAME = $(BASE_NAME)
+FFS_FILEGUID = $(FILE_GUID)
+FFS_FILETYPE = EFI_FV_FILETYPE_SECURITY_CORE
+FFS_ATTRIB_CHECKSUM = FALSE
+
+IMAGE_SCRIPT =
+{ \
+ Blank1.pad \
+ $(BASE_NAME).tes \
+ ResetVec.raw \
+}
+
+[=============================================================================]
diff --git a/EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLib32.dsc b/EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLib32.dsc
new file mode 100644
index 0000000000..5c71f41108
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLib32.dsc
@@ -0,0 +1,39 @@
+#/*++
+# Copyright (c) 2006, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#--*/
+#
+# EdkII Glue Library for PEI usage (32bit)
+#
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseLib\BaseLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseMemoryLib\BaseMemoryLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePrintLib\BasePrintLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseDebugLibNull\BaseDebugLibNull.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseIoLibIntrinsic\BaseIoLibIntrinsic.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePostCodeLibPort80\BasePostCodeLibPort80.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePostCodeLibDebug\BasePostCodeLibDebug.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseCacheMaintenanceLib\BaseCacheMaintenanceLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciCf8Lib\BasePciCf8Lib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciExpressLib\BasePciExpressLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciLibCf8\BasePciLibCf8.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciLibPciExpress\BasePciLibPciExpress.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePeCoffGetEntryPointLib\BasePeCoffGetEntryPointLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePeCoffLib\BasePeCoffLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseTimerLibLocalApic\BaseTimerLibLocalApic.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseUefiDecompressLib\BaseUefiDecompressLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiDxeDebugLibReportStatusCode\PeiDxeDebugLibReportStatusCode.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiDxePostCodeLibReportStatusCode\PeiDxePostCodeLibReportStatusCode.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesTablePointerLibMm7\PeiServicesTablePointerLibMm7.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesTablePointerLib\PeiServicesTablePointerLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiMemoryAllocationLib\PeiMemoryAllocationLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesLib\PeiServicesLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiHobLib\PeiHobLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiReportStatusCodeLib\PeiReportStatusCodeLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiResourcePublicationLib\PeiResourcePublicationLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiSmbusLib\PeiSmbusLib.inf
diff --git a/EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLibAll.dsc b/EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLibAll.dsc
new file mode 100644
index 0000000000..8879bf3737
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/EdkIIGlueLibAll.dsc
@@ -0,0 +1,54 @@
+#/*++
+# Copyright (c) 2006, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#--*/
+#
+# EdkII Glue Library
+#
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseLib\BaseLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseMemoryLib\BaseMemoryLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePrintLib\BasePrintLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseDebugLibNull\BaseDebugLibNull.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseIoLibIntrinsic\BaseIoLibIntrinsic.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\UefiBootServicesTableLib\UefiBootServicesTableLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\DxeIoLibCpuIo\DxeIoLibCpuIo.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePostCodeLibPort80\BasePostCodeLibPort80.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePostCodeLibDebug\BasePostCodeLibDebug.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseCacheMaintenanceLib\BaseCacheMaintenanceLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciCf8Lib\BasePciCf8Lib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciExpressLib\BasePciExpressLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciLibCf8\BasePciLibCf8.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePciLibPciExpress\BasePciLibPciExpress.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePeCoffGetEntryPointLib\BasePeCoffGetEntryPointLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BasePeCoffLib\BasePeCoffLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseTimerLibLocalApic\BaseTimerLibLocalApic.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\BaseUefiDecompressLib\BaseUefiDecompressLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiDxeDebugLibReportStatusCode\PeiDxeDebugLibReportStatusCode.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiDxePostCodeLibReportStatusCode\PeiDxePostCodeLibReportStatusCode.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\DxeMemoryAllocationLib\DxeMemoryAllocationLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\UefiLib\UefiLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\DxeHobLib\DxeHobLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\UefiRuntimeServicesTableLib\UefiRuntimeServicesTableLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\DxeReportStatusCodeLib\DxeReportStatusCodeLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\HiiLib\HiiLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesTablePointerLibMm7\PeiServicesTablePointerLibMm7.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesTablePointerLibKr1\PeiServicesTablePointerLibKr1.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesTablePointerLib\PeiServicesTablePointerLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiMemoryAllocationLib\PeiMemoryAllocationLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiServicesLib\PeiServicesLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiHobLib\PeiHobLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiReportStatusCodeLib\PeiReportStatusCodeLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiResourcePublicationLib\PeiResourcePublicationLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\UefiDevicePathLib\UefiDevicePathLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\UefiDriverModelLib\UefiDriverModelLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\DxeServicesTableLib\DxeServicesTableLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\EdkDxeSalLib\EdkDxeSalLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\EdkDxeRuntimeDriverLib\EdkDxeRuntimeDriverLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\DxeSmbusLib\DxeSmbusLib.inf
+$(EDK_PREFIX)Foundation\Library\EdkIIGlueLib\Library\PeiSmbusLib\PeiSmbusLib.inf \ No newline at end of file
diff --git a/EdkCompatibilityPkg/Sample/Platform/EdkLib32.dsc b/EdkCompatibilityPkg/Sample/Platform/EdkLib32.dsc
new file mode 100644
index 0000000000..7be8ebbe80
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/EdkLib32.dsc
@@ -0,0 +1,36 @@
+#/*++
+#
+# Copyright (c) 2004 - 2006, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#--*/
+#
+# EDK Common Library for PEI usage (32bit)
+#
+
+#
+# Libraries common to PEI and DXE
+#
+$(EDK_PREFIX)Foundation\Efi\Guid\EfiGuidLib.inf
+$(EDK_PREFIX)Foundation\Framework\Guid\EdkFrameworkGuidLib.inf
+$(EDK_PREFIX)Foundation\Guid\EdkGuidLib.inf
+$(EDK_PREFIX)Foundation\Library\EfiCommonLib\EfiCommonLib.inf
+$(EDK_PREFIX)Foundation\Cpu\Pentium\CpuIA32Lib\CpuIA32Lib.inf
+$(EDK_PREFIX)Foundation\Cpu\Itanium\CpuIA64Lib\CpuIA64Lib.inf
+$(EDK_PREFIX)Foundation\Library\CustomizedDecompress\CustomizedDecompress.inf
+$(EDK_PREFIX)Foundation\Library\CompilerStub\CompilerStubLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\Hob\HobLib.inf
+
+#
+# PEI libraries
+#
+$(EDK_PREFIX)Foundation\Framework\Ppi\EdkFrameworkPpiLib.inf
+$(EDK_PREFIX)Foundation\Ppi\EdkPpiLib.inf
+$(EDK_PREFIX)Foundation\Library\Pei\PeiLib\PeiLib.inf
+$(EDK_PREFIX)Foundation\Library\Pei\Hob\PeiHobLib.inf
diff --git a/EdkCompatibilityPkg/Sample/Platform/EdkLibAll.dsc b/EdkCompatibilityPkg/Sample/Platform/EdkLibAll.dsc
new file mode 100644
index 0000000000..346946f5ec
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/EdkLibAll.dsc
@@ -0,0 +1,63 @@
+#/*++
+#
+# Copyright (c) 2004 - 2007, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#--*/
+#
+# EDK Common Library
+#
+
+#
+# Libraries common to PEI and DXE
+#
+$(EDK_PREFIX)Foundation\Efi\Guid\EfiGuidLib.inf
+$(EDK_PREFIX)Foundation\Framework\Guid\EdkFrameworkGuidLib.inf
+$(EDK_PREFIX)Foundation\Guid\EdkGuidLib.inf
+$(EDK_PREFIX)Foundation\Library\EfiCommonLib\EfiCommonLib.inf
+$(EDK_PREFIX)Foundation\Cpu\Pentium\CpuIA32Lib\CpuIA32Lib.inf
+$(EDK_PREFIX)Foundation\Cpu\Itanium\CpuIA64Lib\CpuIA64Lib.inf
+$(EDK_PREFIX)Foundation\Library\CustomizedDecompress\CustomizedDecompress.inf
+$(EDK_PREFIX)Foundation\Library\CompilerStub\CompilerStubLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\Hob\HobLib.inf
+
+#
+# PEI libraries
+#
+$(EDK_PREFIX)Foundation\Framework\Ppi\EdkFrameworkPpiLib.inf
+$(EDK_PREFIX)Foundation\Ppi\EdkPpiLib.inf
+$(EDK_PREFIX)Foundation\Library\Pei\PeiLib\PeiLib.inf
+$(EDK_PREFIX)Foundation\Library\Pei\Hob\PeiHobLib.inf
+
+#
+# DXE libraries
+#
+$(EDK_PREFIX)Foundation\Core\Dxe\ArchProtocol\ArchProtocolLib.inf
+$(EDK_PREFIX)Foundation\Efi\Protocol\EfiProtocolLib.inf
+$(EDK_PREFIX)Foundation\Framework\Protocol\EdkFrameworkProtocolLib.inf
+$(EDK_PREFIX)Foundation\Protocol\EdkProtocolLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\EfiDriverLib\EfiDriverLib.inf
+$(EDK_PREFIX)Foundation\Library\RuntimeDxe\EfiRuntimeLib\EfiRuntimeLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\Graphics\Graphics.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\EfiIfrSupportLib\EfiIfrSupportLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\Print\PrintLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\EfiScriptLib\EfiScriptLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\EfiUiLib\EfiUiLib.inf
+
+#
+# Print/Graphics Library consume SetupBrowser Print Protocol
+#
+$(EDK_PREFIX)Foundation\Library\Dxe\PrintLite\PrintLib.inf
+$(EDK_PREFIX)Foundation\Library\Dxe\GraphicsLite\Graphics.inf
+
+#
+# Module Libraries
+#
+$(EDK_PREFIX)Sample\Platform\Generic\Dxe\GenericBds\GenericBds.inf
+$(EDK_PREFIX)Sample\Bus\Usb\UsbLib\Dxe\UsbDxeLib.inf
diff --git a/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/EdkNt32ProtocolLib.inf b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/EdkNt32ProtocolLib.inf
new file mode 100644
index 0000000000..1abff26c06
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/EdkNt32ProtocolLib.inf
@@ -0,0 +1,46 @@
+#/*++
+#
+# Copyright (c) 2004, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# EdkNt32ProtocolLib.inf
+#
+# Abstract:
+#
+# Component description file.
+#
+#--*/
+
+[defines]
+BASE_NAME= EdkNt32ProtocolLib
+COMPONENT_TYPE= LIBRARY
+
+[includes.common]
+ $(EDK_SOURCE)\Sample\Platform\Nt32
+ $(EDK_SOURCE)\Foundation\Efi
+ $(EDK_SOURCE)\Foundation\Include
+ $(EDK_SOURCE)\Foundation\Efi\Include
+ $(EDK_SOURCE)\Foundation\Framework\Include
+ $(EDK_SOURCE)\Foundation\Include\IndustryStandard
+ $(EDK_SOURCE)\Foundation\Include\Pei
+ $(EDK_SOURCE)\Foundation\Library\Pei\Include
+ $(EDK_SOURCE)\Foundation\Core\Dxe
+ $(EDK_SOURCE)\Foundation\Library\Dxe\Include
+ $(EDK_SOURCE)\Sample\Include
+
+[nmake.common]
+C_STD_INCLUDE=
+
+[sources.common]
+ WinNtIo\WinNtIo.h
+ WinNtIo\WinNtIo.c
+ WinNtThunk\WinNtThunk.h
+ WinNtThunk\WinNtThunk.c
diff --git a/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.c b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.c
new file mode 100644
index 0000000000..318ff33684
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.c
@@ -0,0 +1,40 @@
+/*++
+
+Copyright (c) 2004 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ WinNtIo.c
+
+Abstract:
+
+ This protocol allows an EFI driver (DLL) in the NT emulation envirnment
+ to make Win32 API calls.
+
+--*/
+
+#include "EfiWinNt.h"
+#include EFI_PROTOCOL_DEFINITION (WinNtIo)
+
+EFI_GUID gEfiWinNtIoProtocolGuid = EFI_WIN_NT_IO_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiWinNtIoProtocolGuid, "EFI Win NT I/O Protocol", "Win32 API I/O protocol");
+
+EFI_GUID gEfiWinNtVirtualDisksGuid = EFI_WIN_NT_VIRTUAL_DISKS_GUID;
+EFI_GUID gEfiWinNtPhysicalDisksGuid = EFI_WIN_NT_PHYSICAL_DISKS_GUID;
+EFI_GUID gEfiWinNtFileSystemGuid = EFI_WIN_NT_FILE_SYSTEM_GUID;
+EFI_GUID gEfiWinNtSerialPortGuid = EFI_WIN_NT_SERIAL_PORT_GUID;
+EFI_GUID gEfiWinNtUgaGuid = EFI_WIN_NT_UGA_GUID;
+EFI_GUID gEfiWinNtGopGuid = EFI_WIN_NT_GOP_GUID;
+EFI_GUID gEfiWinNtConsoleGuid = EFI_WIN_NT_CONSOLE_GUID;
+EFI_GUID gEfiWinNtMemoryGuid = EFI_WIN_NT_MEMORY_GUID;
+EFI_GUID gEfiWinNtCPUModelGuid = EFI_WIN_NT_CPU_MODEL_GUID;
+EFI_GUID gEfiWinNtCPUSpeedGuid = EFI_WIN_NT_CPU_SPEED_GUID;
+EFI_GUID gEfiWinNtPassThroughGuid = EFI_WIN_NT_PASS_THROUGH_GUID;
diff --git a/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.h b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.h
new file mode 100644
index 0000000000..7da6099499
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtIo/WinNtIo.h
@@ -0,0 +1,163 @@
+/*++
+
+Copyright (c) 2004 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ WinNtIo.h
+
+Abstract:
+
+--*/
+
+#ifndef _WIN_NT_IO_H_
+#define _WIN_NT_IO_H_
+
+#define EFI_WIN_NT_IO_PROTOCOL_GUID \
+ { \
+ 0x96eb4ad6, 0xa32a, 0x11d4, 0xbc, 0xfd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+//
+// The following APIs require EfiWinNT.h. In some environmnets the GUID
+// definitions are needed but the EfiWinNT.h is not included.
+// EfiWinNT.h is needed to support WINDOWS API requirements.
+//
+#ifdef _EFI_WIN_NT_H_
+
+#include EFI_PROTOCOL_DEFINITION (WinNtThunk)
+
+typedef struct {
+ EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
+ EFI_GUID *TypeGuid;
+ CHAR16 *EnvString;
+ UINT16 InstanceNumber;
+} EFI_WIN_NT_IO_PROTOCOL;
+
+#endif
+
+extern EFI_GUID gEfiWinNtIoProtocolGuid;
+
+//
+// The following GUIDs are used in EFI_WIN_NT_IO_PROTOCOL_GUID
+// Device paths. They map 1:1 with NT envirnment variables. The variables
+// define what virtual hardware the emulator/WinNtBusDriver will produce.
+//
+//
+// EFI_WIN_NT_VIRTUAL_DISKS
+//
+#define EFI_WIN_NT_VIRTUAL_DISKS_GUID \
+ { \
+ 0xc95a928, 0xa006, 0x11d4, 0xbc, 0xfa, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtVirtualDisksGuid;
+
+//
+// EFI_WIN_NT_PHYSICAL_DISKS
+//
+#define EFI_WIN_NT_PHYSICAL_DISKS_GUID \
+ { \
+ 0xc95a92f, 0xa006, 0x11d4, 0xbc, 0xfa, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtPhysicalDisksGuid;
+
+//
+// EFI_WIN_NT_FILE_SYSTEM
+//
+#define EFI_WIN_NT_FILE_SYSTEM_GUID \
+ { \
+ 0xc95a935, 0xa006, 0x11d4, 0xbc, 0xfa, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtFileSystemGuid;
+
+//
+// EFI_WIN_NT_SERIAL_PORT
+//
+#define EFI_WIN_NT_SERIAL_PORT_GUID \
+ { \
+ 0xc95a93d, 0xa006, 0x11d4, 0xbc, 0xfa, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtSerialPortGuid;
+
+//
+// EFI_WIN_NT_UGA
+//
+#define EFI_WIN_NT_UGA_GUID \
+ { \
+ 0xab248e99, 0xabe1, 0x11d4, 0xbd, 0xd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtUgaGuid;
+
+//
+// EFI_WIN_NT_GOP
+//
+#define EFI_WIN_NT_GOP_GUID \
+ { \
+ 0x4e11e955, 0xccca, 0x11d4, 0xbd, 0xd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtGopGuid;
+
+//
+// EFI_WIN_NT_CONSOLE
+//
+#define EFI_WIN_NT_CONSOLE_GUID \
+ { \
+ 0xba73672c, 0xa5d3, 0x11d4, 0xbd, 0x0, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtConsoleGuid;
+
+//
+// EFI_WIN_NT_MEMORY
+//
+#define EFI_WIN_NT_MEMORY_GUID \
+ { \
+ 0x99042912, 0x122a, 0x11d4, 0xbd, 0xd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtMemoryGuid;
+
+//
+// EFI_WIN_NT_CPU_MODEL
+//
+#define EFI_WIN_NT_CPU_MODEL_GUID \
+ { \
+ 0xbee9b6ce, 0x2f8a, 0x11d4, 0xbd, 0xd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtCPUModelGuid;
+
+//
+// EFI_WIN_NT_CPU_SPEED
+//
+#define EFI_WIN_NT_CPU_SPEED_GUID \
+ { \
+ 0xd4f29055, 0xe1fb, 0x11d4, 0xbd, 0xd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gEfiWinNtCPUSpeedGuid;
+
+//
+// EFI_WIN_NT_PASS_THROUGH
+//
+#define EFI_WIN_NT_PASS_THROUGH_GUID \
+ { \
+ 0xcc664eb8, 0x3c24, 0x4086, 0xb6, 0xf6, 0x34, 0xe8, 0x56, 0xbc, 0xe3, 0x6e \
+ }
+
+extern EFI_GUID gEfiWinNtPassThroughGuid;
+
+#endif
diff --git a/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.c b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.c
new file mode 100644
index 0000000000..f0e827bb0e
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ WinNtThunk.c
+
+Abstract:
+
+ This protocol allows an EFI driver (DLL) in the NT emulation envirnment
+ to make Win32 API calls.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (WinNtThunk)
+
+EFI_GUID gEfiWinNtThunkProtocolGuid = EFI_WIN_NT_THUNK_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiWinNtThunkProtocolGuid, "EFI Win NT Thunk", "Win32 API thunk protocol");
diff --git a/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.h b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.h
new file mode 100644
index 0000000000..5ad6245682
--- /dev/null
+++ b/EdkCompatibilityPkg/Sample/Platform/Nt32/Protocol/WinNtThunk/WinNtThunk.h
@@ -0,0 +1,1276 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ WinNtThunk.h
+
+Abstract:
+
+ This protocol allows an EFI driver (DLL) in the NT emulation envirnment
+ to make Win32 API calls.
+
+ NEVER make a Win32 call directly, always make the call via this protocol.
+
+ There are no This pointers on the protocol member functions as they map
+ exactly into Win32 system calls.
+
+ YOU MUST include EfiWinNT.h in place of Efi.h to make this file compile.
+
+--*/
+
+#ifndef _WIN_NT_THUNK_H_
+#define _WIN_NT_THUNK_H_
+
+#define EFI_WIN_NT_THUNK_PROTOCOL_GUID \
+ { \
+ 0x58c518b1, 0x76f3, 0x11d4, 0xbc, 0xea, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+//
+// The following APIs require EfiWinNT.h. In some environmnets the GUID
+// definitions are needed but the EfiWinNT.h is not included.
+// EfiWinNT.h is needed to support WINDOWS API requirements.
+//
+#ifdef _EFI_WIN_NT_H_
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtSleep) (
+ DWORD Milliseconds
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtSuspendThread) (
+ HANDLE hThread
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtGetCurrentThread) (
+ VOID
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtGetCurrentThreadId) (
+ VOID
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtGetCurrentProcess) (
+ VOID
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtCreateThread) (
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ DWORD dwStackSize,
+ LPTHREAD_START_ROUTINE lpStartAddress,
+ LPVOID lpParameter,
+ DWORD dwCreationFlags,
+ LPDWORD lpThreadId
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtTerminateThread) (
+ HANDLE hThread,
+ DWORD dwExitCode
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSendMessage) (
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtExitThread) (
+ DWORD dwExitCode
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtResumeThread) (
+ HANDLE hThread
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetThreadPriority) (
+ HANDLE hThread,
+ INTN nPriority
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtInitializeCriticalSection) (
+ LPCRITICAL_SECTION lpCriticalSection
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtDeleteCriticalSection) (
+ LPCRITICAL_SECTION lpCriticalSection
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtEnterCriticalSection) (
+ LPCRITICAL_SECTION lpCriticalSection
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtLeaveCriticalSection) (
+ LPCRITICAL_SECTION lpCriticalSection
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtTlsAlloc) (
+ VOID
+ );
+
+typedef
+WINBASEAPI
+LPVOID
+(WINAPI *WinNtTlsGetValue) (
+ DWORD dwTlsIndex
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtTlsSetValue) (
+ DWORD dwTlsIndex,
+ LPVOID lpTlsValue
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtTlsFree) (
+ DWORD dwTlsIndex
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtCreateSemaphore) (
+ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
+ LONG lInitialCount,
+ LONG lMaximumCount,
+ LPCWSTR lpName
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtWaitForSingleObject) (
+ HANDLE hHandle,
+ DWORD dwMilliseconds
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtReleaseSemaphore) (
+ HANDLE hSemaphore,
+ LONG lReleaseCount,
+ LPLONG lpPreviousCount
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtDuplicateHandle) (
+ HANDLE hSourceProcessHandle,
+ HANDLE hSourceHandle,
+ HANDLE hTargetProcessHandle,
+ LPHANDLE lpTargetHandle,
+ DWORD dwDesiredAccess,
+ BOOL bInheritHandle,
+ DWORD dwOptions
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtCreateConsoleScreenBuffer) (
+ DWORD DesiredAccess,
+ DWORD ShareMode,
+ CONST SECURITY_ATTRIBUTES *SecurityAttributes,
+ DWORD Flags,
+ LPVOID ScreenBufferData
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetConsoleScreenBufferSize) (
+ HANDLE ConsoleOutput,
+ COORD Size
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetConsoleActiveScreenBuffer) (
+ HANDLE ConsoleOutput
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFillConsoleOutputAttribute) (
+ HANDLE ConsoleOutput,
+ WORD Attribute,
+ DWORD Length,
+ COORD WriteCoord,
+ LPDWORD NumberOfAttrsWritten
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFillConsoleOutputCharacter) (
+ HANDLE ConsoleOutput,
+ TCHAR Character,
+ DWORD Length,
+ COORD WriteCoord,
+ LPDWORD NumberOfCharsWritten
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtWriteConsoleOutput) (
+ HANDLE ConsoleOutput,
+ CONST CHAR_INFO *Buffer,
+ COORD BufferSize,
+ COORD BufferCoord,
+ PSMALL_RECT WriteRegion
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtScrollConsoleScreenBuffer) (
+ HANDLE ConsoleOutput,
+ CONST SMALL_RECT *ScrollRectangle,
+ CONST SMALL_RECT *ClipRectangle,
+ COORD DestinationOrigin,
+ CONST CHAR_INFO *Fill
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetConsoleTitleW) (
+ LPCTSTR ConsoleTitle
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetConsoleCursorInfo) (
+ HANDLE ConsoleOutput,
+ PCONSOLE_CURSOR_INFO ConsoleCursorInfo
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetConsoleCursorInfo) (
+ HANDLE ConsoleOutput,
+ CONST CONSOLE_CURSOR_INFO *ConsoleCursorInfo
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetPriorityClass) (
+ HANDLE Process,
+ DWORD PriorityClass
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtWriteConsoleInput) (
+ HANDLE ConsoleInput,
+ CONST INPUT_RECORD *Buffer,
+ DWORD Legnth,
+ LPDWORD NumberOfEventsWritten
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetNumberOfConsoleInputEvents) (
+ HANDLE ConsoleInput,
+ LPDWORD NumberOfEvents
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtGetStdHandle) (
+ DWORD StdHandle
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtReadConsoleInput) (
+ HANDLE ConsoleInput,
+ PINPUT_RECORD Buffer,
+ DWORD Length,
+ LPDWORD NumberOfEventsRead
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtPeekConsoleInput) (
+ HANDLE ConsoleInput,
+ PINPUT_RECORD Buffer,
+ DWORD Length,
+ LPDWORD NumberOfEventsRead
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetConsoleCursorPosition) (
+ HANDLE ConsoleInput,
+ COORD CursorPosition
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtCreateFile) (
+ LPCWSTR FileName,
+ DWORD DesiredAccess,
+ DWORD SharedMode,
+ LPSECURITY_ATTRIBUTES SecurityAttributes,
+ DWORD CreationDisposition,
+ DWORD FlagsAndAttributes,
+ HANDLE TemplateFile
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtDeviceIoControl) (
+ HANDLE DeviceHandle,
+ DWORD IoControlCode,
+ LPVOID InBuffer,
+ DWORD InBufferSize,
+ LPVOID OutBuffer,
+ DWORD OutBufferSize,
+ LPDWORD BytesReturned,
+ LPOVERLAPPED Overlapped
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtCreateDirectory) (
+ LPCWSTR PathName,
+ LPSECURITY_ATTRIBUTES SecurityAttributes
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtRemoveDirectory) (
+ LPCWSTR PathName
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtGetFileAttributes) (
+ LPCWSTR FileName
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetFileAttributes) (
+ LPCWSTR FileName,
+ DWORD FileAttributes
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtCreateFileMapping) (
+ HANDLE FileHandle,
+ LPSECURITY_ATTRIBUTES Attributes,
+ DWORD Protect,
+ DWORD MaximumSizeHigh,
+ DWORD MaximumSizeLow,
+ LPCTSTR Name
+ );
+
+typedef
+WINBASEAPI
+LPVOID
+(WINAPI *WinNtMapViewOfFileEx) (
+ HANDLE FileHandle,
+ DWORD DesiredAccess,
+ DWORD FileOffsetHigh,
+ DWORD FileOffsetLow,
+ DWORD NumberOfBytesToMap,
+ LPVOID BaseAddress
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtGetEnvironmentVariable) (
+ LPCTSTR Name,
+ LPTSTR Buffer,
+ DWORD Size
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtCloseHandle) (
+ HANDLE Object
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtSetFilePointer) (
+ HANDLE FileHandle,
+ LONG DistanceToMove,
+ PLONG DistanceToHoveHigh,
+ DWORD MoveMethod
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetEndOfFile) (
+ HANDLE FileHandle
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtReadFile) (
+ HANDLE FileHandle,
+ LPVOID Buffer,
+ DWORD NumberOfBytesToRead,
+ LPDWORD NumberOfBytesRead,
+ LPOVERLAPPED Overlapped
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtWriteFile) (
+ HANDLE FileHandle,
+ LPCVOID Buffer,
+ DWORD NumberOfBytesToWrite,
+ LPDWORD NumberOfBytesWritten,
+ LPOVERLAPPED Overlapped
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetFileInformationByHandle) (
+ HANDLE FileHandle,
+ BY_HANDLE_FILE_INFORMATION *FileInfo
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetDiskFreeSpace) (
+ LPCTSTR RootPathName,
+ LPDWORD SectorsPerCluster,
+ LPDWORD BytesPerSector,
+ LPDWORD NumberOfFreeClusters,
+ LPDWORD TotalNumberOfClusters
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetDiskFreeSpaceEx) (
+ LPCTSTR DirectoryName,
+ PULARGE_INTEGER FreeBytesAvailable,
+ PULARGE_INTEGER TotalNumberOfBytes,
+ PULARGE_INTEGER TotoalNumberOfFreeBytes
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtMoveFile) (
+ LPCTSTR ExistingFileName,
+ LPCTSTR NewFileName
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetFileTime) (
+ HANDLE FileHandle,
+ FILETIME *CreationTime,
+ FILETIME *LastAccessTime,
+ FILETIME *LastWriteTime
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSystemTimeToFileTime) (
+ SYSTEMTIME * SystemTime,
+ FILETIME * FileTime
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtDeleteFile) (
+ LPCTSTR FileName
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFlushFileBuffers) (
+ HANDLE
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtGetLastError) (
+ VOID
+ );
+
+typedef
+WINBASEAPI
+UINT
+(WINAPI *WinNtSetErrorMode) (
+ UINT Mode
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtGetTickCount) (
+ VOID
+ );
+
+typedef
+WINBASEAPI
+HMODULE
+(WINAPI *WinNtLoadLibraryEx) (
+ LPCTSTR LibFileName,
+ HANDLE FileHandle,
+ DWORD Flags
+ );
+
+typedef
+WINBASEAPI
+FARPROC
+(WINAPI *WinNtGetProcAddress) (
+ HMODULE Module,
+ LPCSTR ProcName
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtGetTimeZoneInformation) (
+ LPTIME_ZONE_INFORMATION timeZoneInformation
+ );
+
+typedef
+WINBASEAPI
+MMRESULT
+(WINAPI *WinNttimeSetEvent) (
+ UINT uDelay,
+ UINT uResolution,
+ LPTIMECALLBACK lpTimeProc,
+ DWORD_PTR dwUser,
+ UINT fuEvent
+ );
+
+typedef
+WINBASEAPI
+MMRESULT
+(WINAPI *WinNttimeKillEvent) (
+ UINT uTimerID
+ );
+
+typedef
+WINBASEAPI
+DWORD
+(WINAPI *WinNtSetTimeZoneInformation) (
+ LPTIME_ZONE_INFORMATION timeZoneInformation
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtGetSystemTime) (
+ LPSYSTEMTIME SystemTime
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetSystemTime) (
+ CONST SYSTEMTIME *SystemTime
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtGetLocalTime) (
+ LPSYSTEMTIME SystemTime
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetLocalTime) (
+ CONST SYSTEMTIME *SystemTime
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFileTimeToLocalFileTime) (
+ CONST FILETIME *FileTime,
+ LPFILETIME LocalFileTime
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFileTimeToSystemTime) (
+ CONST FILETIME *FileTime,
+ LPSYSTEMTIME SystemTime
+ );
+
+typedef
+WINBASEAPI
+HANDLE
+(WINAPI *WinNtFindFirstFile) (
+ LPCTSTR FileName,
+ LPWIN32_FIND_DATA FindFileData
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFindNextFile) (
+ HANDLE FindFile,
+ LPWIN32_FIND_DATA FindFileData
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFindClose) (
+ HANDLE FindFile
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetCommState) (
+ HANDLE FileHandle,
+ LPDCB DCB
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetCommState) (
+ HANDLE FileHandle,
+ LPDCB DCB
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetCommState) (
+ HANDLE FileHandle,
+ LPDCB DCB
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtSetCommTimeouts) (
+ HANDLE FileHandle,
+ LPCOMMTIMEOUTS CommTimeouts
+ );
+
+typedef
+WINBASEAPI
+VOID
+(WINAPI *WinNtExitProcess) (
+ UINT uExitCode // exit code for all threads
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtPurgeComm) (
+ HANDLE FileHandle,
+ DWORD Flags
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtEscapeCommFunction) (
+ HANDLE FileHandle,
+ DWORD Func
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtGetCommModemStatus) (
+ HANDLE FileHandle,
+ LPDWORD ModemStat
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtClearCommError) (
+ HANDLE FileHandle,
+ LPDWORD Errors,
+ LPCOMSTAT Stat
+ );
+
+typedef
+WINUSERAPI
+INT32
+(WINAPIV *WinNtSprintf) (
+ LPWSTR Buffer,
+ LPCWSTR String,
+ ...
+ );
+
+typedef
+WINUSERAPI
+HWND
+(WINAPI *WinNtGetDesktopWindow) (
+ VOID
+ );
+
+typedef
+WINUSERAPI
+HWND
+(WINAPI *WinNtGetForegroundWindow) (
+ VOID
+ );
+
+typedef
+WINUSERAPI
+HWND
+(WINAPI *WinNtCreateWindowEx) (
+ DWORD dwExStyle,
+ LPCTSTR lpClassName,
+ LPCTSTR lpWindowName,
+ DWORD dwStyle,
+ INT32 x,
+ INT32 y,
+ INT32 nWidth,
+ INT32 nHeight,
+ HWND hWndParent,
+ HMENU hMenu,
+ HINSTANCE hInstance,
+ LPVOID *lpParam
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtUpdateWindow) (
+ HWND hWnd
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtShowWindow) (
+ HWND hWnd,
+ INT32 nCmdShow
+ );
+
+typedef
+WINGDIAPI
+BOOL
+(WINAPI *WinNtDestroyWindow) (
+ HWND hWnd
+ );
+
+typedef
+WINUSERAPI
+HDC
+(WINAPI *WinNtGetWindowDC) (
+ HWND hWnd
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtGetClientRect) (
+ HWND hWnd,
+ LPRECT lpRect
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtAdjustWindowRect) (
+ LPRECT lpRect,
+ DWORD dwStyle,
+ BOOL bMenu
+ );
+
+typedef
+WINGDIAPI
+INT32
+(WINAPI *WinNtSetDIBitsToDevice) (
+ HDC,
+ INT32,
+ INT32,
+ DWORD,
+ DWORD,
+ INT32,
+ INT32,
+ UINT,
+ UINT,
+ CONST VOID *,
+ CONST BITMAPINFO *,
+ UINT
+ );
+
+typedef
+WINGDIAPI
+BOOL
+(WINAPI *WinNtBitBlt) (
+ HDC,
+ INT32,
+ INT32,
+ INT32,
+ INT32,
+ HDC,
+ INT32,
+ INT32,
+ DWORD
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtInvalidateRect) (
+ HWND hWnd,
+ CONST RECT *lpRect,
+ BOOL bErase
+ );
+
+typedef
+WINUSERAPI
+HDC
+(WINAPI *WinNtGetDC) (
+ HWND hWnd
+ );
+
+typedef
+WINUSERAPI
+INT32
+(WINAPI *WinNtReleaseDC) (
+ HWND hWnd,
+ HDC hDC
+ );
+
+typedef
+WINUSERAPI
+ATOM
+(WINAPI *WinNtRegisterClassEx) (
+ CONST WNDCLASSEX *
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtUnregisterClass) (
+ LPCTSTR lpClassName,
+ HINSTANCE hInstance
+ );
+
+typedef
+WINUSERAPI
+HDC
+(WINAPI *WinNtBeginPaint) (
+ HWND hWnd,
+ LPPAINTSTRUCT lpPaint
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtEndPaint) (
+ HWND hWnd,
+ CONST PAINTSTRUCT *lpPaint
+ );
+
+typedef
+WINUSERAPI
+VOID
+(WINAPI *WinNtPostQuitMessage) (
+ INT32 nExitCode
+ );
+
+typedef
+WINUSERAPI
+LRESULT
+(WINAPI *WinNtDefWindowProc) (
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam
+ );
+
+typedef
+WINUSERAPI
+HICON
+(WINAPI *WinNtLoadIcon) (
+ HINSTANCE hInstance,
+ LPCTSTR lpIconName
+ );
+
+typedef
+WINUSERAPI
+HCURSOR
+(WINAPI *WinNtLoadCursor) (
+ HINSTANCE hInstance,
+ LPCTSTR lpCursorName
+ );
+
+typedef
+WINGDIAPI
+HGDIOBJ
+(WINAPI *WinNtGetStockObject) (
+ INT32
+ );
+
+typedef
+WINGDIAPI
+BOOL
+(WINAPI *WinNtSetViewportOrgEx) (
+ HDC,
+ INT32,
+ INT32,
+ LPPOINT
+ );
+
+typedef
+WINGDIAPI
+BOOL
+(WINAPI *WinNtSetWindowOrgEx) (
+ HDC,
+ INT32,
+ INT32,
+ LPPOINT
+ );
+typedef
+WINGDIAPI
+BOOL
+(WINAPI *WinNtMoveWindow) (
+ HWND,
+ INT32,
+ INT32,
+ INT32,
+ INT32,
+ BOOL
+ );
+
+typedef
+WINGDIAPI
+BOOL
+(WINAPI *WinNtGetWindowRect) (
+ HWND,
+ LPRECT
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtGetMessage) (
+ LPMSG lpMsg,
+ HWND hWnd,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtTranslateMessage) (
+ CONST MSG *lpMsg
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtDispatchMessage) (
+ CONST MSG *lpMsg
+ );
+
+typedef
+WINUSERAPI
+HANDLE
+(WINAPI *WinNtGetProcessHeap) ();
+
+typedef
+WINUSERAPI
+LPVOID
+(WINAPI *WinNtHeapAlloc) (
+ HANDLE hHeap,
+ DWORD dwFlags,
+ SIZE_T dwBytes
+ );
+
+typedef
+WINUSERAPI
+BOOL
+(WINAPI *WinNtHeapFree) (
+ HANDLE hHeap,
+ DWORD dwFlags,
+ LPVOID lpMem
+ );
+
+typedef
+WINBASEAPI
+BOOL
+(WINAPI *WinNtFreeLibrary) (
+ HANDLE ModHandle
+ );
+//
+//
+//
+EFI_FORWARD_DECLARATION (EFI_WIN_NT_THUNK_PROTOCOL);
+
+#define EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'T', 'T')
+
+typedef struct _EFI_WIN_NT_THUNK_PROTOCOL {
+ UINT64 Signature;
+
+ //
+ // Win32 Process APIs
+ //
+ WinNtGetProcAddress GetProcAddress;
+ WinNtGetTickCount GetTickCount;
+ WinNtLoadLibraryEx LoadLibraryEx;
+ WinNtFreeLibrary FreeLibrary;
+
+ WinNtSetPriorityClass SetPriorityClass;
+ WinNtSetThreadPriority SetThreadPriority;
+ WinNtSleep Sleep;
+
+ WinNtSuspendThread SuspendThread;
+ WinNtGetCurrentThread GetCurrentThread;
+ WinNtGetCurrentThreadId GetCurrentThreadId;
+ WinNtGetCurrentProcess GetCurrentProcess;
+ WinNtCreateThread CreateThread;
+ WinNtTerminateThread TerminateThread;
+ WinNtSendMessage SendMessage;
+ WinNtExitThread ExitThread;
+ WinNtResumeThread ResumeThread;
+ WinNtDuplicateHandle DuplicateHandle;
+
+ //
+ // Wint32 Mutex primitive
+ //
+ WinNtInitializeCriticalSection InitializeCriticalSection;
+ WinNtEnterCriticalSection EnterCriticalSection;
+ WinNtLeaveCriticalSection LeaveCriticalSection;
+ WinNtDeleteCriticalSection DeleteCriticalSection;
+ WinNtTlsAlloc TlsAlloc;
+ WinNtTlsFree TlsFree;
+ WinNtTlsSetValue TlsSetValue;
+ WinNtTlsGetValue TlsGetValue;
+ WinNtCreateSemaphore CreateSemaphore;
+ WinNtWaitForSingleObject WaitForSingleObject;
+ WinNtReleaseSemaphore ReleaseSemaphore;
+
+ //
+ // Win32 Console APIs
+ //
+ WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer;
+ WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute;
+ WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter;
+ WinNtGetConsoleCursorInfo GetConsoleCursorInfo;
+ WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents;
+ WinNtPeekConsoleInput PeekConsoleInput;
+ WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer;
+ WinNtReadConsoleInput ReadConsoleInput;
+
+ WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer;
+ WinNtSetConsoleCursorInfo SetConsoleCursorInfo;
+ WinNtSetConsoleCursorPosition SetConsoleCursorPosition;
+ WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize;
+ WinNtSetConsoleTitleW SetConsoleTitleW;
+ WinNtWriteConsoleInput WriteConsoleInput;
+ WinNtWriteConsoleOutput WriteConsoleOutput;
+
+ //
+ // Win32 File APIs
+ //
+ WinNtCreateFile CreateFile;
+ WinNtDeviceIoControl DeviceIoControl;
+ WinNtCreateDirectory CreateDirectory;
+ WinNtRemoveDirectory RemoveDirectory;
+ WinNtGetFileAttributes GetFileAttributes;
+ WinNtSetFileAttributes SetFileAttributes;
+ WinNtCreateFileMapping CreateFileMapping;
+ WinNtCloseHandle CloseHandle;
+ WinNtDeleteFile DeleteFile;
+ WinNtFindFirstFile FindFirstFile;
+ WinNtFindNextFile FindNextFile;
+ WinNtFindClose FindClose;
+ WinNtFlushFileBuffers FlushFileBuffers;
+ WinNtGetEnvironmentVariable GetEnvironmentVariable;
+ WinNtGetLastError GetLastError;
+ WinNtSetErrorMode SetErrorMode;
+ WinNtGetStdHandle GetStdHandle;
+ WinNtMapViewOfFileEx MapViewOfFileEx;
+ WinNtReadFile ReadFile;
+ WinNtSetEndOfFile SetEndOfFile;
+ WinNtSetFilePointer SetFilePointer;
+ WinNtWriteFile WriteFile;
+ WinNtGetFileInformationByHandle GetFileInformationByHandle;
+ WinNtGetDiskFreeSpace GetDiskFreeSpace;
+ WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx;
+ WinNtMoveFile MoveFile;
+ WinNtSetFileTime SetFileTime;
+ WinNtSystemTimeToFileTime SystemTimeToFileTime;
+
+ //
+ // Win32 Time APIs
+ //
+ WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime;
+ WinNtFileTimeToSystemTime FileTimeToSystemTime;
+ WinNtGetSystemTime GetSystemTime;
+ WinNtSetSystemTime SetSystemTime;
+ WinNtGetLocalTime GetLocalTime;
+ WinNtSetLocalTime SetLocalTime;
+ WinNtGetTimeZoneInformation GetTimeZoneInformation;
+ WinNtSetTimeZoneInformation SetTimeZoneInformation;
+ WinNttimeSetEvent timeSetEvent;
+ WinNttimeKillEvent timeKillEvent;
+
+ //
+ // Win32 Serial APIs
+ //
+ WinNtClearCommError ClearCommError;
+ WinNtEscapeCommFunction EscapeCommFunction;
+ WinNtGetCommModemStatus GetCommModemStatus;
+ WinNtGetCommState GetCommState;
+ WinNtSetCommState SetCommState;
+ WinNtPurgeComm PurgeComm;
+ WinNtSetCommTimeouts SetCommTimeouts;
+
+ WinNtExitProcess ExitProcess;
+
+ WinNtSprintf SPrintf;
+
+ WinNtGetDesktopWindow GetDesktopWindow;
+ WinNtGetForegroundWindow GetForegroundWindow;
+ WinNtCreateWindowEx CreateWindowEx;
+ WinNtShowWindow ShowWindow;
+ WinNtUpdateWindow UpdateWindow;
+ WinNtDestroyWindow DestroyWindow;
+ WinNtInvalidateRect InvalidateRect;
+ WinNtGetWindowDC GetWindowDC;
+ WinNtGetClientRect GetClientRect;
+ WinNtAdjustWindowRect AdjustWindowRect;
+ WinNtSetDIBitsToDevice SetDIBitsToDevice;
+ WinNtBitBlt BitBlt;
+ WinNtGetDC GetDC;
+ WinNtReleaseDC ReleaseDC;
+ WinNtRegisterClassEx RegisterClassEx;
+ WinNtUnregisterClass UnregisterClass;
+
+ WinNtBeginPaint BeginPaint;
+ WinNtEndPaint EndPaint;
+ WinNtPostQuitMessage PostQuitMessage;
+ WinNtDefWindowProc DefWindowProc;
+ WinNtLoadIcon LoadIcon;
+ WinNtLoadCursor LoadCursor;
+ WinNtGetStockObject GetStockObject;
+ WinNtSetViewportOrgEx SetViewportOrgEx;
+ WinNtSetWindowOrgEx SetWindowOrgEx;
+ WinNtMoveWindow MoveWindow;
+ WinNtGetWindowRect GetWindowRect;
+
+ WinNtGetMessage GetMessage;
+ WinNtTranslateMessage TranslateMessage;
+ WinNtDispatchMessage DispatchMessage;
+
+ WinNtGetProcessHeap GetProcessHeap;
+ WinNtHeapAlloc HeapAlloc;
+ WinNtHeapFree HeapFree;
+
+} EFI_WIN_NT_THUNK_PROTOCOL;
+
+#endif
+
+extern EFI_GUID gEfiWinNtThunkProtocolGuid;
+
+#endif