]>
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 |
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 |