#/*++\r
#\r
-# Copyright (c) 2004 - 2007, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials \r
# are licensed and made available under the terms and conditions of the BSD License \r
# which accompanies this distribution. The full text of the license may be found at \r
# know how to create the .apr file, then you're missing (or mispelled) the\r
# "APRIORI=" on the component lines in components section in the DSC file.\r
#\r
-$(DEST_DIR)\$(BASE_NAME).bin : $(SOURCE_FILE_NAME)\r
+$(DEST_DIR)\$(BASE_NAME).bin : $(SOURCE_FILE_NAME) $(INF_FILENAME)\r
$(GENAPRIORI) -v -f $(SOURCE_FILE_NAME) -o $(DEST_DIR)\$(BASE_NAME).bin\r
\r
$(DEST_DIR)\$(BASE_NAME).sec : $(DEST_DIR)\$(BASE_NAME).bin\r
[Build.Ia32.Makefile,Build.Ipf.Makefile,Build.Ebc.Makefile,Build.x64.Makefile]\r
\r
#\r
-# Copy the makefile directly from the source directory, then make it\r
-# writable so we can copy over it later if we try to.\r
+# Set some required macros\r
#\r
-$(DEST_DIR)\makefile.new : $(SOURCE_DIR)\makefile.new\r
- copy $(SOURCE_DIR)\makefile.new $(DEST_DIR)\makefile.new\r
- attrib -r $(DEST_DIR)\makefile.new\r
+MAKEFILE_MACROS = SOURCE_DIR=$(SOURCE_DIR) \\r
+ BUILD_DIR=$(BUILD_DIR) \\r
+ FILE_GUID=$(FILE_GUID) \\r
+ DEST_DIR=$(DEST_DIR) \\r
+ PROCESSOR=$(PROCESSOR) \\r
+ TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \\r
+ BASE_NAME=$(BASE_NAME) \\r
+ PACKAGE_FILENAME=$(PACKAGE_FILENAME)\r
\r
#\r
-# Make the all target, set some required macros.\r
+# Just call the makefile from the source directory, passing in some\r
+# useful info.\r
#\r
-call_makefile :\r
- $(MAKE) -f $(DEST_DIR)\makefile.new all \\r
- SOURCE_DIR=$(SOURCE_DIR) \\r
- BUILD_DIR=$(BUILD_DIR) \\r
- FILE_GUID=$(FILE_GUID) \\r
- DEST_DIR=$(DEST_DIR) \\r
- PROCESSOR=$(PROCESSOR) \\r
- TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \\r
- BASE_NAME=$(BASE_NAME) \\r
- PACKAGE_FILENAME=$(PACKAGE_FILENAME)\r
-\r
-all : $(DEST_DIR)\makefile.new call_makefile\r
+all :\r
+ $(MAKE) -f $(SOURCE_DIR)\makefile.new all $(MAKEFILE_MACROS)\r
\r
#\r
# Remove the generated temp and final files for this modules.\r
#\r
clean :\r
- @- $(MAKE) -f $(DEST_DIR)\makefile.new clean > NUL 2>&1\r
+ @- $(MAKE) -f $(SOURCE_DIR)\makefile.new clean $(MAKEFILE_MACROS) > NUL 2>&1\r
!IF ("$(FILE_GUID)" != "")\r
@if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*\r
!ENDIF\r
[=============================================================================]\r
[Build.Ia32.Custom_Makefile,Build.Ipf.Custom_Makefile,Build.Ebc.Custom_Makefile,Build.x64.Custom_Makefile]\r
\r
+#\r
+# Set some required macros\r
+#\r
+MAKEFILE_MACROS = SOURCE_DIR=$(SOURCE_DIR) \\r
+ BUILD_DIR=$(BUILD_DIR) \\r
+ DEST_DIR=$(DEST_DIR) \\r
+ FILE_GUID=$(FILE_GUID) \\r
+ PROCESSOR=$(PROCESSOR) \\r
+ TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \\r
+ BASE_NAME=$(BASE_NAME) \\r
+ PLATFORM=$(PLATFORM) \\r
+ SOURCE_FV=$(SOURCE_FV) \\r
+ PACKAGE_FILENAME=$(PACKAGE_FILENAME)\r
+\r
#\r
# Just call the makefile from the source directory, passing in some\r
# useful info.\r
#\r
all : \r
- $(MAKE) -f $(SOURCE_DIR)\makefile all \\r
- SOURCE_DIR=$(SOURCE_DIR) \\r
- BUILD_DIR=$(BUILD_DIR) \\r
- DEST_DIR=$(DEST_DIR) \\r
- FILE_GUID=$(FILE_GUID) \\r
- PROCESSOR=$(PROCESSOR) \\r
- TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \\r
- BASE_NAME=$(BASE_NAME) \\r
- PLATFORM=$(PLATFORM) \\r
- SOURCE_FV=$(SOURCE_FV) \\r
- PACKAGE_FILENAME=$(PACKAGE_FILENAME)\r
+ $(MAKE) -f $(SOURCE_DIR)\makefile all $(MAKEFILE_MACROS)\r
\r
#\r
# Remove the generated temp and final files for this modules.\r
#\r
clean :\r
- @- $(MAKE) -f $(SOURCE_DIR)\makefile clean > NUL 2>&1\r
+ @- $(MAKE) -f $(SOURCE_DIR)\makefile clean $(MAKEFILE_MACROS) > NUL 2>&1\r
!IF ("$(FILE_GUID)" != "")\r
@if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).*\r
!ENDIF\r
\r
!IF "$(LOCALIZE)" == "YES"\r
\r
-!IF "$(EFI_GENERATE_HII_EXPORT)" == "YES"\r
-STRGATHER_FLAGS = $(STRGATHER_FLAGS) -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk\r
+!IF (("$(EFI_GENERATE_HII_RESOURCE)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A"))\r
+#\r
+# This will generate HII resource section in PE/COFF image.\r
+#\r
+# Note: when HII package list is built into resource section, Driver no longer\r
+# refer to C array generated by VfrCompiler ($(FILE_NAME)Bin) and StrGather\r
+# ($(BASE_NAME)Strings); while in current build rule, those C array objects\r
+# will still be linked with the Driver, so please turn on link flag "/OPT:REF"\r
+# to minimize the code size.\r
+#\r
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk\r
+LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).res\r
+LINK_FLAGS_DLL = $(LINK_FLAGS_DLL) $(DEST_DIR)\$(BASE_NAME).res\r
+\r
+$(DEST_DIR)\$(BASE_NAME).rc : $(HII_PACK_FILES)\r
+ $(HIIPACK) -g $(FILE_GUID) $(HII_PACK_FILES) -rc $(DEST_DIR)\$(BASE_NAME).rc -hii $(DEST_DIR)\$(BASE_NAME).hii\r
+\r
+$(DEST_DIR)\$(BASE_NAME).res : $(DEST_DIR)\$(BASE_NAME).rc\r
+ $(RC) /fo $(DEST_DIR)\$(BASE_NAME).res $(DEST_DIR)\$(BASE_NAME).rc\r
\r
+!ENDIF\r
+\r
+!IF (("$(EFI_GENERATE_HII_EXPORT)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" < "0x0002000A"))\r
#\r
# There will be one HII pack containing all the strings. Add that file\r
# to the list of HII pack files we'll use to create our final HII export file.\r
LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).hii\r
!ENDIF\r
\r
+!IF ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A")\r
+#\r
+# Note: currently -ppflag option is only available for UefiStrGather\r
+# Note: /GS- will cause warning for preprocess, so filter it out from STRGATHER_PPFLAG\r
+#\r
+STRGATHER_PPFLAG = $(C_FLAGS: /GS-=)\r
+STRGATHER_FLAGS = $(STRGATHER_FLAGS) -ppflag "$(STRGATHER_PPFLAG)" -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h\r
+!ENDIF\r
+\r
$(DEST_DIR)\$(BASE_NAME).sdb : $(SDB_FILES) $(SOURCE_FILES)\r
$(STRGATHER) -scan -vdbr $(STRGATHER_FLAGS) -od $(DEST_DIR)\$(BASE_NAME).sdb \\r
-skipext .uni -skipext .h $(SOURCE_FILES)\r
$(DEST_DIR)\$(BASE_NAME)Strings.obj : $(DEST_DIR)\$(BASE_NAME)Strings.c $(INF_FILENAME) $(ALL_DEPS)\r
$(CC) $(C_FLAGS) $(DEST_DIR)\$(BASE_NAME)Strings.c\r
\r
-LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME)StrDefs.h\r
+LOCALIZE_TARGETS = $(DEST_DIR)\$(BASE_NAME)StrDefs.h $(LOCALIZE_TARGETS)\r
\r
!ENDIF\r
\r
$(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)\r
!ENDIF\r
!ELSE\r
-$(TARGET_VER) : \r
+$(TARGET_VER) : $(INF_FILENAME)\r
echo.>$(TARGET_VER)\r
type $(TARGET_VER)>$(TARGET_VER)\r
!ENDIF\r
!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.\r
!ENDIF\r
!ELSE\r
-$(TARGET_DPX) : \r
+$(TARGET_DPX) : $(INF_FILENAME)\r
echo. > $(TARGET_DPX)\r
type $(TARGET_DPX) > $(TARGET_DPX)\r
!ENDIF\r
!ERROR Dependency expression source file "$(SOURCE_DIR)\$(DXE_DPX_SOURCE)" does not exist.\r
!ENDIF\r
!ELSE\r
-$(TARGET_DXE_DPX) : \r
+$(TARGET_DXE_DPX) : $(INF_FILENAME)\r
echo. > $(TARGET_DXE_DPX)\r
type $(TARGET_DXE_DPX) > $(TARGET_DXE_DPX)\r
!ENDIF\r
$(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)\r
!ENDIF\r
!ELSE\r
-$(TARGET_VER) : \r
+$(TARGET_VER) : $(INF_FILENAME)\r
echo.>$(TARGET_VER)\r
type $(TARGET_VER)>$(TARGET_VER)\r
!ENDIF\r
!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.\r
!ENDIF\r
!ELSE\r
-$(TARGET_DPX) : \r
+$(TARGET_DPX) : $(INF_FILENAME)\r
echo. > $(TARGET_DPX)\r
type $(TARGET_DPX) > $(TARGET_DPX)\r
!ENDIF\r
\r
!IF "$(LOCALIZE)" == "YES"\r
\r
-!IF "$(EFI_GENERATE_HII_EXPORT)" == "YES"\r
-STRGATHER_FLAGS = $(STRGATHER_FLAGS) -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk\r
+!IF (("$(EFI_GENERATE_HII_RESOURCE)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A"))\r
+#\r
+# This will generate HII resource section in PE/COFF image.\r
+#\r
+# Note: when HII package list is built into resource section, Driver no longer\r
+# refer to C array generated by VfrCompiler ($(FILE_NAME)Bin) and StrGather\r
+# ($(BASE_NAME)Strings); while in current build rule, those C array objects\r
+# will still be linked with the Driver, so please turn on link flag "/OPT:REF"\r
+# to minimize the code size.\r
+#\r
+HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk\r
+LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).res\r
+OBJECTS = $(OBJECTS) $(DEST_DIR)\$(BASE_NAME).res\r
+\r
+$(DEST_DIR)\$(BASE_NAME).rc : $(HII_PACK_FILES)\r
+ $(HIIPACK) -g $(FILE_GUID) $(HII_PACK_FILES) -rc $(DEST_DIR)\$(BASE_NAME).rc -hii $(DEST_DIR)\$(BASE_NAME).hii\r
\r
+$(DEST_DIR)\$(BASE_NAME).res : $(DEST_DIR)\$(BASE_NAME).rc\r
+ $(RC) /fo $(DEST_DIR)\$(BASE_NAME).res $(DEST_DIR)\$(BASE_NAME).rc\r
+\r
+!ENDIF\r
+\r
+!IF (("$(EFI_GENERATE_HII_EXPORT)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" < "0x0002000A"))\r
#\r
# There will be one HII pack containing all the strings. Add that file\r
# to the list of HII pack files we'll use to create our final HII export file.\r
LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).hii\r
!ENDIF\r
\r
+!IF ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A")\r
+#\r
+# Note: currently -ppflag option is only available for UefiStrGather\r
+# Note: /GS- will cause warning for preprocess, so filter it out from STRGATHER_PPFLAG\r
+#\r
+STRGATHER_PPFLAG = $(EBC_C_FLAGS: /GS-=)\r
+STRGATHER_FLAGS = $(STRGATHER_FLAGS) -ppflag "$(STRGATHER_PPFLAG)" -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h\r
+!ENDIF\r
+\r
$(DEST_DIR)\$(BASE_NAME).sdb : $(SDB_FILES) $(SOURCE_FILES)\r
$(STRGATHER) -scan -vdbr $(STRGATHER_FLAGS) -od $(DEST_DIR)\$(BASE_NAME).sdb \\r
-skipext .uni -skipext .h $(SOURCE_FILES)\r
$(DEST_DIR)\$(BASE_NAME)Strings.obj : $(DEST_DIR)\$(BASE_NAME)Strings.c $(INF_FILENAME) $(ALL_DEPS)\r
$(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(BASE_NAME)Strings.c\r
\r
-LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME)StrDefs.h\r
+LOCALIZE_TARGETS = $(DEST_DIR)\$(BASE_NAME)StrDefs.h $(LOCALIZE_TARGETS)\r
\r
!ENDIF\r
\r
$(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)\r
!ENDIF\r
!ELSE\r
-$(TARGET_VER) : \r
+$(TARGET_VER) : $(INF_FILENAME)\r
echo. > $(TARGET_VER)\r
type $(TARGET_VER) > $(TARGET_VER)\r
!ENDIF\r
!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.\r
!ENDIF\r
!ELSE\r
-$(TARGET_DPX) : \r
+$(TARGET_DPX) : $(INF_FILENAME)\r
echo. > $(TARGET_DPX)\r
type $(TARGET_DPX) > $(TARGET_DPX)\r
!ENDIF\r
# This section, as it now exists, only supports boot service drivers.\r
#\r
[=============================================================================]\r
-[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]\r
+[Build.Ia32.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI|PE32_PEIM_EFI,Build.Ipf.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI|PE32_PEIM_EFI,Build.Ebc.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI,Build.x64.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI|PE32_PEIM_EFI]\r
#\r
# Defines for standard intermediate files and build targets. For the source\r
# .efi file, take the one in the source directory if it exists. If there's not\r
#\r
!IF "$(COMPONENT_TYPE)" == "APPLICATION"\r
TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app\r
+!ELSE IF "$(COMPONENT_TYPE)" == "PE32_PEIM"\r
+TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei\r
!ELSE\r
TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe\r
!ENDIF\r
$(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER)\r
!ENDIF\r
!ELSE\r
-$(TARGET_VER) : \r
+$(TARGET_VER) : $(INF_FILENAME)\r
echo. > $(TARGET_VER)\r
type $(TARGET_VER) > $(TARGET_VER)\r
!ENDIF\r
!ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist.\r
!ENDIF\r
!ELSE\r
-$(TARGET_DPX) : \r
+$(TARGET_DPX) : $(INF_FILENAME)\r
echo. > $(TARGET_DPX)\r
type $(TARGET_DPX) > $(TARGET_DPX)\r
!ENDIF\r
[=============================================================================]\r
[Compile.Ia32.Bin|Bmp,Compile.x64.Bin|Bmp,Compile.Ipf.Bin|Bmp]\r
#\r
-# We simply copy the binary file from the source directory to the destination directory\r
+# We simply define the binary source file name\r
#\r
-$(DEST_DIR)\$(BASE_NAME).bin : $(SOURCE_FILE_NAME)\r
- copy $** $@\r
+BINARY_SOURCE_FILE = $(SOURCE_FILE_NAME)\r
\r
[=============================================================================]\r
[Build.Ia32.BINARY|Legacy16|Logo,Build.Ipf.BINARY|Legacy16|Logo,Build.x64.BINARY|Legacy16|Logo]\r
#\r
# Use GenFfsFile to convert it to an FFS file\r
#\r
-$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs : $(DEST_DIR)\$(BASE_NAME).bin $(PACKAGE_FILENAME)\r
- $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME).bin -O $(DEST_DIR)\$(BASE_NAME).sec -S EFI_SECTION_RAW\r
+$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs : $(BINARY_SOURCE_FILE) $(PACKAGE_FILENAME) $(INF_FILENAME)\r
+ $(GENSECTION) -I $(BINARY_SOURCE_FILE) -O $(DEST_DIR)\$(BASE_NAME).sec -S EFI_SECTION_RAW\r
$(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V\r
\r
all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs\r
#\r
# Use GenFfsFile to convert it to an raw FFS file\r
#\r
-$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw : $(DEST_DIR)\$(BASE_NAME).bin $(PACKAGE_FILENAME)\r
+$(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw : $(BINARY_SOURCE_FILE) $(PACKAGE_FILENAME) $(INF_FILENAME)\r
+ copy $(BINARY_SOURCE_FILE) $(DEST_DIR)\$(BASE_NAME).bin /Y\r
$(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V\r
\r
all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw\r
STRGATHER_FLAGS = $(STRGATHER_FLAGS) -db $(DEST_DIR)\$(FILE).sdb\r
LOCALIZE = YES\r
\r
+[=============================================================================]\r
+[Compile.Ia32.hfr,Compile.Ipf.hfr,Compile.Ebc.hfr,Compile.x64.hfr]\r
[=============================================================================]\r
[Compile.Ia32.Vfr,Compile.Ipf.Vfr,Compile.x64.Vfr]\r
\r
#\r
# Run GenSection on the firmware volume image.\r
#\r
-$(DEST_DIR)\$(SOURCE_FV)Fv.sec : $(SOURCE_FILE_NAME)\r
+$(DEST_DIR)\$(SOURCE_FV)Fv.sec : $(SOURCE_FILE_NAME) $(INF_FILENAME)\r
$(GENSECTION) -I $(SOURCE_FILE_NAME) -O $(DEST_DIR)\$(SOURCE_FV)Fv.sec -S EFI_SECTION_FIRMWARE_VOLUME_IMAGE\r
\r
[=============================================================================]\r