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