]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/UPT/GenMetaFile/GenMetaFileMisc.py
BaseTools/GenFds: enhance INF built arch filter
[mirror_edk2.git] / BaseTools / Source / Python / UPT / GenMetaFile / GenMetaFileMisc.py
CommitLineData
4234283c
LG
1## @file GenMetaFileMisc.py\r
2#\r
3# This file contained the miscellaneous routines for GenMetaFile usage.\r
4#\r
421ccda3 5# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
4234283c
LG
6#\r
7# This program and the accompanying materials are licensed and made available \r
8# under the terms and conditions of the BSD License which accompanies this \r
9# distribution. The full text of the license may be found at \r
10# http://opensource.org/licenses/bsd-license.php\r
11#\r
12# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14#\r
15\r
16'''\r
17GenMetaFileMisc\r
18'''\r
19\r
20from Library import DataType as DT\r
21from Library import GlobalData\r
22from Parser.DecParser import Dec\r
23\r
24# AddExternToDefineSec\r
25#\r
26# @param SectionDict: string of source file path/name\r
27# @param Arch: string of source file family field\r
28# @param ExternList: string of source file FeatureFlag field\r
29# \r
30def AddExternToDefineSec(SectionDict, Arch, ExternList):\r
421ccda3 31 LeftOffset = 31\r
4234283c
LG
32 for ArchList, EntryPoint, UnloadImage, Constructor, Destructor, FFE, HelpStringList in ExternList:\r
33 if Arch or ArchList:\r
34 if EntryPoint:\r
421ccda3 35 Statement = (u'%s ' % DT.TAB_INF_DEFINES_ENTRY_POINT).ljust(LeftOffset) + u'= %s' % EntryPoint\r
4234283c
LG
36 if FFE:\r
37 Statement += ' | %s' % FFE\r
38 if len(HelpStringList) > 0:\r
39 Statement = HelpStringList[0].GetString() + '\n' + Statement\r
40 if len(HelpStringList) > 1:\r
41 Statement = Statement + HelpStringList[1].GetString()\r
42 SectionDict[Arch] = SectionDict[Arch] + [Statement]\r
421ccda3 43\r
4234283c 44 if UnloadImage:\r
421ccda3 45 Statement = (u'%s ' % DT.TAB_INF_DEFINES_UNLOAD_IMAGE).ljust(LeftOffset) + u'= %s' % UnloadImage\r
4234283c
LG
46 if FFE:\r
47 Statement += ' | %s' % FFE\r
421ccda3 48\r
4234283c
LG
49 if len(HelpStringList) > 0:\r
50 Statement = HelpStringList[0].GetString() + '\n' + Statement\r
51 if len(HelpStringList) > 1:\r
52 Statement = Statement + HelpStringList[1].GetString()\r
53 SectionDict[Arch] = SectionDict[Arch] + [Statement]\r
421ccda3 54\r
4234283c 55 if Constructor:\r
421ccda3 56 Statement = (u'%s ' % DT.TAB_INF_DEFINES_CONSTRUCTOR).ljust(LeftOffset) + u'= %s' % Constructor\r
4234283c
LG
57 if FFE:\r
58 Statement += ' | %s' % FFE\r
421ccda3 59\r
4234283c
LG
60 if len(HelpStringList) > 0:\r
61 Statement = HelpStringList[0].GetString() + '\n' + Statement\r
62 if len(HelpStringList) > 1:\r
421ccda3
HC
63 Statement = Statement + HelpStringList[1].GetString()\r
64 SectionDict[Arch] = SectionDict[Arch] + [Statement]\r
65\r
4234283c 66 if Destructor:\r
421ccda3 67 Statement = (u'%s ' % DT.TAB_INF_DEFINES_DESTRUCTOR).ljust(LeftOffset) + u'= %s' % Destructor\r
4234283c
LG
68 if FFE:\r
69 Statement += ' | %s' % FFE\r
421ccda3 70\r
4234283c
LG
71 if len(HelpStringList) > 0:\r
72 Statement = HelpStringList[0].GetString() + '\n' + Statement\r
73 if len(HelpStringList) > 1:\r
74 Statement = Statement + HelpStringList[1].GetString()\r
75 SectionDict[Arch] = SectionDict[Arch] + [Statement]\r
421ccda3 76\r
4234283c
LG
77## ObtainPcdName\r
78#\r
79# Using TokenSpaceGuidValue and Token to obtain PcdName from DEC file\r
80#\r
81def ObtainPcdName(Packages, TokenSpaceGuidValue, Token):\r
82 for PackageDependency in Packages:\r
83 #\r
84 # Generate generic comment\r
85 #\r
86 Guid = PackageDependency.GetGuid()\r
87 Version = PackageDependency.GetVersion()\r
421ccda3 88\r
4234283c
LG
89 #\r
90 # find package path/name\r
91 # \r
92 for PkgInfo in GlobalData.gWSPKG_LIST:\r
93 if Guid == PkgInfo[1]:\r
94 if (not Version) or (Version == PkgInfo[2]):\r
95 Path = PkgInfo[3]\r
96 break\r
421ccda3
HC
97\r
98 DecFile = None\r
99 if Path not in GlobalData.gPackageDict:\r
100 DecFile = Dec(Path)\r
101 GlobalData.gPackageDict[Path] = DecFile\r
102 else:\r
103 DecFile = GlobalData.gPackageDict[Path]\r
104\r
4234283c
LG
105 DecGuidsDict = DecFile.GetGuidSectionObject().ValueDict\r
106 DecPcdsDict = DecFile.GetPcdSectionObject().ValueDict\r
421ccda3 107\r
4234283c
LG
108 TokenSpaceGuidName = ''\r
109 PcdCName = ''\r
110 TokenSpaceGuidNameFound = False\r
111 PcdCNameFound = False\r
421ccda3 112\r
4234283c
LG
113 #\r
114 # Get TokenSpaceGuidCName from Guids section \r
115 #\r
116 for GuidKey in DecGuidsDict:\r
117 GuidList = DecGuidsDict[GuidKey]\r
118 if TokenSpaceGuidNameFound:\r
119 break\r
120 for GuidItem in GuidList:\r
421ccda3 121 if TokenSpaceGuidValue.upper() == GuidItem.GuidString.upper():\r
4234283c
LG
122 TokenSpaceGuidName = GuidItem.GuidCName\r
123 TokenSpaceGuidNameFound = True\r
124 break\r
421ccda3 125\r
4234283c
LG
126 #\r
127 # Retrieve PcdCName from Pcds Section\r
128 #\r
129 for PcdKey in DecPcdsDict:\r
130 PcdList = DecPcdsDict[PcdKey]\r
131 if PcdCNameFound:\r
421ccda3 132 return TokenSpaceGuidName, PcdCName\r
4234283c
LG
133 for PcdItem in PcdList:\r
134 if TokenSpaceGuidName == PcdItem.TokenSpaceGuidCName and Token == PcdItem.TokenValue:\r
135 PcdCName = PcdItem.TokenCName\r
136 PcdCNameFound = True\r
421ccda3
HC
137 break\r
138\r
4234283c
LG
139 return TokenSpaceGuidName, PcdCName\r
140\r
141## _TransferDict\r
142# transfer dict that using (Statement, SortedArch) as key, \r
143# (GenericComment, UsageComment) as value into a dict that using SortedArch as\r
144# key and NewStatement as value \r
145#\r
421ccda3 146def TransferDict(OrigDict, Type=None):\r
4234283c 147 NewDict = {}\r
421ccda3
HC
148 LeftOffset = 0\r
149 if Type in ['INF_GUID', 'INF_PPI_PROTOCOL']:\r
150 LeftOffset = 45\r
151 if Type in ['INF_PCD']:\r
152 LeftOffset = 75\r
153 if LeftOffset > 0:\r
154 for Statement, SortedArch in OrigDict:\r
155 if len(Statement) > LeftOffset:\r
156 LeftOffset = len(Statement)\r
157 \r
4234283c
LG
158 for Statement, SortedArch in OrigDict:\r
159 Comment = OrigDict[Statement, SortedArch]\r
160 #\r
161 # apply the NComment/1Comment rule\r
162 #\r
421ccda3 163 if Comment.find('\n') != len(Comment) - 1:\r
4234283c
LG
164 NewStateMent = Comment + Statement\r
165 else:\r
421ccda3
HC
166 if LeftOffset:\r
167 NewStateMent = Statement.ljust(LeftOffset) + ' ' + Comment.rstrip('\n')\r
168 else:\r
169 NewStateMent = Statement + ' ' + Comment.rstrip('\n')\r
4234283c
LG
170\r
171 if SortedArch in NewDict:\r
172 NewDict[SortedArch] = NewDict[SortedArch] + [NewStateMent]\r
173 else:\r
174 NewDict[SortedArch] = [NewStateMent]\r
175\r
421ccda3
HC
176 return NewDict\r
177\r