]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/GenFds/Section.py
BaseTools: Remove the dependency on the build intermediate file
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / Section.py
CommitLineData
30fdf114
LG
1## @file\r
2# section base class\r
3#\r
55c84777 4# Copyright (c) 2007-2018, Intel Corporation. All rights reserved.<BR>\r
30fdf114 5#\r
2e351cbe 6# SPDX-License-Identifier: BSD-2-Clause-Patent\r
30fdf114
LG
7#\r
8\r
9##\r
10# Import Modules\r
11#\r
1ccc4d89 12from __future__ import absolute_import\r
30fdf114 13from CommonDataClass.FdfClass import SectionClassObject\r
bfa65b61 14from .GenFdsGlobalVariable import GenFdsGlobalVariable\r
1be2ed90 15import Common.LongFilePathOs as os, glob\r
30fdf114
LG
16from Common import EdkLogger\r
17from Common.BuildToolError import *\r
91fa33ee 18from Common.DataType import *\r
30fdf114
LG
19\r
20## section base class\r
21#\r
22#\r
23class Section (SectionClassObject):\r
24 SectionType = {\r
25 'RAW' : 'EFI_SECTION_RAW',\r
26 'FREEFORM' : 'EFI_SECTION_FREEFORM_SUBTYPE_GUID',\r
91fa33ee
CJ
27 BINARY_FILE_TYPE_PE32 : 'EFI_SECTION_PE32',\r
28 BINARY_FILE_TYPE_PIC : 'EFI_SECTION_PIC',\r
29 BINARY_FILE_TYPE_TE : 'EFI_SECTION_TE',\r
30fdf114 30 'FV_IMAGE' : 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE',\r
91fa33ee
CJ
31 BINARY_FILE_TYPE_DXE_DEPEX : 'EFI_SECTION_DXE_DEPEX',\r
32 BINARY_FILE_TYPE_PEI_DEPEX : 'EFI_SECTION_PEI_DEPEX',\r
30fdf114
LG
33 'GUIDED' : 'EFI_SECTION_GUID_DEFINED',\r
34 'COMPRESS' : 'EFI_SECTION_COMPRESSION',\r
91fa33ee
CJ
35 BINARY_FILE_TYPE_UI : 'EFI_SECTION_USER_INTERFACE',\r
36 BINARY_FILE_TYPE_SMM_DEPEX : 'EFI_SECTION_SMM_DEPEX'\r
30fdf114
LG
37 }\r
38\r
39 BinFileType = {\r
91fa33ee 40 BINARY_FILE_TYPE_GUID : '.guid',\r
30fdf114
LG
41 'ACPI' : '.acpi',\r
42 'ASL' : '.asl' ,\r
91fa33ee
CJ
43 BINARY_FILE_TYPE_UEFI_APP : '.app',\r
44 BINARY_FILE_TYPE_LIB : '.lib',\r
45 BINARY_FILE_TYPE_PE32 : '.pe32',\r
46 BINARY_FILE_TYPE_PIC : '.pic',\r
47 BINARY_FILE_TYPE_PEI_DEPEX : '.depex',\r
30fdf114 48 'SEC_PEI_DEPEX' : '.depex',\r
91fa33ee
CJ
49 BINARY_FILE_TYPE_TE : '.te',\r
50 BINARY_FILE_TYPE_UNI_VER : '.ver',\r
51 BINARY_FILE_TYPE_VER : '.ver',\r
52 BINARY_FILE_TYPE_UNI_UI : '.ui',\r
53 BINARY_FILE_TYPE_UI : '.ui',\r
54 BINARY_FILE_TYPE_BIN : '.bin',\r
30fdf114
LG
55 'RAW' : '.raw',\r
56 'COMPAT16' : '.comp16',\r
91fa33ee 57 BINARY_FILE_TYPE_FV : '.fv'\r
30fdf114
LG
58 }\r
59\r
60 SectFileType = {\r
61 'SEC_GUID' : '.sec' ,\r
62 'SEC_PE32' : '.sec' ,\r
63 'SEC_PIC' : '.sec',\r
64 'SEC_TE' : '.sec',\r
65 'SEC_VER' : '.sec',\r
66 'SEC_UI' : '.sec',\r
67 'SEC_COMPAT16' : '.sec',\r
68 'SEC_BIN' : '.sec'\r
69 }\r
70\r
71 ToolGuid = {\r
72 '0xa31280ad-0x481e-0x41b6-0x95e8-0x127f-0x4c984779' : 'TianoCompress',\r
73 '0xee4e5898-0x3914-0x4259-0x9d6e-0xdc7b-0xd79403cf' : 'LzmaCompress'\r
74 }\r
75\r
76 ## The constructor\r
77 #\r
78 # @param self The object pointer\r
79 #\r
80 def __init__(self):\r
81 SectionClassObject.__init__(self)\r
82\r
83 ## GenSection() method\r
84 #\r
85 # virtual function\r
86 #\r
87 # @param self The object pointer\r
88 # @param OutputPath Where to place output file\r
89 # @param ModuleName Which module this section belongs to\r
90 # @param SecNum Index of section\r
91 # @param KeyStringList Filter for inputs of section generation\r
92 # @param FfsInf FfsInfStatement object that contains this section data\r
93 # @param Dict dictionary contains macro and its value\r
94 #\r
e32f7bc9 95 def GenSection(self, OutputPath, GuidName, SecNum, keyStringList, FfsInf = None, Dict = None):\r
30fdf114
LG
96 pass\r
97\r
98 ## GetFileList() method\r
99 #\r
100 # Generate compressed section\r
101 #\r
102 # @param self The object pointer\r
103 # @param FfsInf FfsInfStatement object that contains file list\r
104 # @param FileType File type to get\r
105 # @param FileExtension File extension to get\r
106 # @param Dict dictionary contains macro and its value\r
107 # @retval tuple (File list, boolean)\r
108 #\r
04797875 109 def GetFileList(FfsInf, FileType, FileExtension, Dict = None, IsMakefile=False, SectionType=None):\r
98120f5f 110 IsSect = FileType in Section.SectFileType\r
30fdf114 111\r
4231a819 112 if FileExtension is not None:\r
30fdf114
LG
113 Suffix = FileExtension\r
114 elif IsSect :\r
115 Suffix = Section.SectionType.get(FileType)\r
116 else:\r
117 Suffix = Section.BinFileType.get(FileType)\r
4231a819 118 if FfsInf is None:\r
30fdf114
LG
119 EdkLogger.error("GenFds", GENFDS_ERROR, 'Inf File does not exist!')\r
120\r
121 FileList = []\r
4231a819 122 if FileType is not None:\r
30fdf114 123 for File in FfsInf.BinFileList:\r
55c84777 124 if File.Arch == TAB_ARCH_COMMON or FfsInf.CurrentArch == File.Arch:\r
97fa0ee9 125 if File.Type == FileType or (int(FfsInf.PiSpecVersion, 16) >= 0x0001000A \\r
91fa33ee
CJ
126 and FileType == 'DXE_DPEX' and File.Type == BINARY_FILE_TYPE_SMM_DEPEX) \\r
127 or (FileType == BINARY_FILE_TYPE_TE and File.Type == BINARY_FILE_TYPE_PE32):\r
bc39c5cb 128 if TAB_STAR in FfsInf.TargetOverrideList or File.Target == TAB_STAR or File.Target in FfsInf.TargetOverrideList or FfsInf.TargetOverrideList == []:\r
97fa0ee9 129 FileList.append(FfsInf.PatchEfiFile(File.Path, File.Type))\r
30fdf114
LG
130 else:\r
131 GenFdsGlobalVariable.InfLogger ("\nBuild Target \'%s\' of File %s is not in the Scope of %s specified by INF %s in FDF" %(File.Target, File.File, FfsInf.TargetOverrideList, FfsInf.InfFileName))\r
132 else:\r
133 GenFdsGlobalVariable.VerboseLogger ("\nFile Type \'%s\' of File %s in %s is not same with file type \'%s\' from Rule in FDF" %(File.Type, File.File, FfsInf.InfFileName, FileType))\r
134 else:\r
135 GenFdsGlobalVariable.InfLogger ("\nCurrent ARCH \'%s\' of File %s is not in the Support Arch Scope of %s specified by INF %s in FDF" %(FfsInf.CurrentArch, File.File, File.Arch, FfsInf.InfFileName))\r
136\r
04797875
FZ
137 elif FileType is None and SectionType == BINARY_FILE_TYPE_RAW:\r
138 for File in FfsInf.BinFileList:\r
139 if File.Ext == Suffix:\r
140 FileList.append(File.Path)\r
141\r
4231a819 142 if (not IsMakefile and Suffix is not None and os.path.exists(FfsInf.EfiOutputPath)) or (IsMakefile and Suffix is not None):\r
23cc8adb
LG
143 if not FileList:\r
144 SuffixMap = FfsInf.GetFinalTargetSuffixMap()\r
145 if Suffix in SuffixMap:\r
146 FileList.extend(SuffixMap[Suffix])\r
f7496d71 147\r
52302d4d
LG
148 #Process the file lists is alphabetical for a same section type\r
149 if len (FileList) > 1:\r
150 FileList.sort()\r
151\r
30fdf114
LG
152 return FileList, IsSect\r
153 GetFileList = staticmethod(GetFileList)\r