]>
Commit | Line | Data |
---|---|---|
e8449e1d FB |
1 | ## @file\r |
2 | # Create makefile for MS nmake and GNU make\r | |
3 | #\r | |
4 | # Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r | |
5 | # SPDX-License-Identifier: BSD-2-Clause-Patent\r | |
6 | #\r | |
7 | from __future__ import absolute_import\r | |
8 | from Workspace.WorkspaceDatabase import BuildDB\r | |
9 | from Workspace.WorkspaceCommon import GetModuleLibInstances\r | |
10 | import Common.GlobalData as GlobalData\r | |
11 | import os\r | |
12 | import pickle\r | |
13 | from pickle import HIGHEST_PROTOCOL\r | |
673d09a2 | 14 | from Common import EdkLogger\r |
e8449e1d FB |
15 | \r |
16 | class PCD_DATA():\r | |
17 | def __init__(self,TokenCName,TokenSpaceGuidCName,Type,DatumType,SkuInfoList,DefaultValue,\r | |
18 | MaxDatumSize,UserDefinedDefaultStoresFlag,validateranges,\r | |
19 | validlists,expressions,CustomAttribute,TokenValue):\r | |
20 | self.TokenCName = TokenCName\r | |
21 | self.TokenSpaceGuidCName = TokenSpaceGuidCName\r | |
22 | self.Type = Type\r | |
23 | self.DatumType = DatumType\r | |
24 | self.SkuInfoList = SkuInfoList\r | |
25 | self.DefaultValue = DefaultValue\r | |
26 | self.MaxDatumSize = MaxDatumSize\r | |
27 | self.UserDefinedDefaultStoresFlag = UserDefinedDefaultStoresFlag\r | |
28 | self.validateranges = validateranges\r | |
29 | self.validlists = validlists\r | |
30 | self.expressions = expressions\r | |
31 | self.CustomAttribute = CustomAttribute\r | |
32 | self.TokenValue = TokenValue\r | |
33 | \r | |
34 | class DataPipe(object):\r | |
35 | def __init__(self, BuildDir=None):\r | |
36 | self.data_container = {}\r | |
37 | self.BuildDir = BuildDir\r | |
673d09a2 | 38 | self.dump_file = ""\r |
e8449e1d FB |
39 | \r |
40 | class MemoryDataPipe(DataPipe):\r | |
41 | \r | |
42 | def Get(self,key):\r | |
43 | return self.data_container.get(key)\r | |
44 | \r | |
45 | def dump(self,file_path):\r | |
673d09a2 | 46 | self.dump_file = file_path\r |
e8449e1d FB |
47 | with open(file_path,'wb') as fd:\r |
48 | pickle.dump(self.data_container,fd,pickle.HIGHEST_PROTOCOL)\r | |
49 | \r | |
50 | def load(self,file_path):\r | |
51 | with open(file_path,'rb') as fd:\r | |
52 | self.data_container = pickle.load(fd)\r | |
53 | \r | |
54 | @property\r | |
55 | def DataContainer(self):\r | |
56 | return self.data_container\r | |
57 | @DataContainer.setter\r | |
58 | def DataContainer(self,data):\r | |
59 | self.data_container.update(data)\r | |
60 | \r | |
61 | def FillData(self,PlatformInfo):\r | |
62 | #Platform Pcds\r | |
63 | self.DataContainer = {\r | |
64 | "PLA_PCD" : [PCD_DATA(\r | |
65 | pcd.TokenCName,pcd.TokenSpaceGuidCName,pcd.Type,\r | |
66 | pcd.DatumType,pcd.SkuInfoList,pcd.DefaultValue,\r | |
67 | pcd.MaxDatumSize,pcd.UserDefinedDefaultStoresFlag,pcd.validateranges,\r | |
68 | pcd.validlists,pcd.expressions,pcd.CustomAttribute,pcd.TokenValue)\r | |
69 | for pcd in PlatformInfo.Platform.Pcds.values()]\r | |
70 | }\r | |
71 | \r | |
72 | #Platform Module Pcds\r | |
73 | ModulePcds = {}\r | |
74 | for m in PlatformInfo.Platform.Modules:\r | |
75 | m_pcds = PlatformInfo.Platform.Modules[m].Pcds\r | |
76 | if m_pcds:\r | |
673d09a2 | 77 | ModulePcds[(m.File,m.Root,m.Arch)] = [PCD_DATA(\r |
e8449e1d FB |
78 | pcd.TokenCName,pcd.TokenSpaceGuidCName,pcd.Type,\r |
79 | pcd.DatumType,pcd.SkuInfoList,pcd.DefaultValue,\r | |
80 | pcd.MaxDatumSize,pcd.UserDefinedDefaultStoresFlag,pcd.validateranges,\r | |
81 | pcd.validlists,pcd.expressions,pcd.CustomAttribute,pcd.TokenValue)\r | |
82 | for pcd in PlatformInfo.Platform.Modules[m].Pcds.values()]\r | |
83 | \r | |
84 | \r | |
85 | self.DataContainer = {"MOL_PCDS":ModulePcds}\r | |
86 | \r | |
87 | #Module's Library Instance\r | |
88 | ModuleLibs = {}\r | |
673d09a2 | 89 | libModules = {}\r |
e8449e1d FB |
90 | for m in PlatformInfo.Platform.Modules:\r |
91 | module_obj = BuildDB.BuildObject[m,PlatformInfo.Arch,PlatformInfo.BuildTarget,PlatformInfo.ToolChain]\r | |
92 | Libs = GetModuleLibInstances(module_obj, PlatformInfo.Platform, BuildDB.BuildObject, PlatformInfo.Arch,PlatformInfo.BuildTarget,PlatformInfo.ToolChain)\r | |
673d09a2 FB |
93 | for lib in Libs:\r |
94 | try:\r | |
95 | libModules[(lib.MetaFile.File,lib.MetaFile.Root,lib.Arch,lib.MetaFile.Path)].append((m.File,m.Root,module_obj.Arch,m.Path))\r | |
96 | except:\r | |
97 | libModules[(lib.MetaFile.File,lib.MetaFile.Root,lib.Arch,lib.MetaFile.Path)] = [(m.File,m.Root,module_obj.Arch,m.Path)]\r | |
98 | ModuleLibs[(m.File,m.Root,module_obj.Arch,m.Path)] = [(l.MetaFile.File,l.MetaFile.Root,l.Arch,l.MetaFile.Path) for l in Libs]\r | |
e8449e1d | 99 | self.DataContainer = {"DEPS":ModuleLibs}\r |
673d09a2 | 100 | self.DataContainer = {"REFS":libModules}\r |
e8449e1d FB |
101 | \r |
102 | #Platform BuildOptions\r | |
103 | \r | |
104 | platform_build_opt = PlatformInfo.EdkIIBuildOption\r | |
105 | \r | |
106 | ToolDefinition = PlatformInfo.ToolDefinition\r | |
107 | module_build_opt = {}\r | |
108 | for m in PlatformInfo.Platform.Modules:\r | |
109 | ModuleTypeOptions, PlatformModuleOptions = PlatformInfo.GetGlobalBuildOptions(BuildDB.BuildObject[m,PlatformInfo.Arch,PlatformInfo.BuildTarget,PlatformInfo.ToolChain])\r | |
110 | if ModuleTypeOptions or PlatformModuleOptions:\r | |
111 | module_build_opt.update({(m.File,m.Root): {"ModuleTypeOptions":ModuleTypeOptions, "PlatformModuleOptions":PlatformModuleOptions}})\r | |
112 | \r | |
113 | self.DataContainer = {"PLA_BO":platform_build_opt,\r | |
114 | "TOOLDEF":ToolDefinition,\r | |
115 | "MOL_BO":module_build_opt\r | |
116 | }\r | |
117 | \r | |
118 | \r | |
119 | \r | |
120 | #Platform Info\r | |
121 | PInfo = {\r | |
122 | "WorkspaceDir":PlatformInfo.Workspace.WorkspaceDir,\r | |
123 | "Target":PlatformInfo.BuildTarget,\r | |
124 | "ToolChain":PlatformInfo.Workspace.ToolChain,\r | |
125 | "BuildRuleFile":PlatformInfo.BuildRule,\r | |
126 | "Arch": PlatformInfo.Arch,\r | |
127 | "ArchList":PlatformInfo.Workspace.ArchList,\r | |
128 | "ActivePlatform":PlatformInfo.MetaFile\r | |
129 | }\r | |
130 | self.DataContainer = {'P_Info':PInfo}\r | |
131 | \r | |
132 | self.DataContainer = {'M_Name':PlatformInfo.UniqueBaseName}\r | |
133 | \r | |
134 | self.DataContainer = {"ToolChainFamily": PlatformInfo.ToolChainFamily}\r | |
135 | \r | |
136 | self.DataContainer = {"BuildRuleFamily": PlatformInfo.BuildRuleFamily}\r | |
137 | \r | |
138 | self.DataContainer = {"MixedPcd":GlobalData.MixedPcd}\r | |
139 | \r | |
140 | self.DataContainer = {"BuildOptPcd":GlobalData.BuildOptionPcd}\r | |
141 | \r | |
142 | self.DataContainer = {"BuildCommand": PlatformInfo.BuildCommand}\r | |
143 | \r | |
144 | self.DataContainer = {"AsBuildModuleList": PlatformInfo._AsBuildModuleList}\r | |
145 | \r | |
146 | self.DataContainer = {"G_defines": GlobalData.gGlobalDefines}\r | |
147 | \r | |
148 | self.DataContainer = {"CL_defines": GlobalData.gCommandLineDefines}\r | |
149 | \r | |
150 | self.DataContainer = {"Env_Var": {k:v for k, v in os.environ.items()}}\r | |
151 | \r | |
152 | self.DataContainer = {"PackageList": [(dec.MetaFile,dec.Arch) for dec in PlatformInfo.PackageList]}\r | |
153 | \r | |
154 | self.DataContainer = {"GuidDict": PlatformInfo.Platform._GuidDict}\r | |
155 | \r | |
673d09a2 | 156 | self.DataContainer = {"DatabasePath":GlobalData.gDatabasePath}\r |
636ed13a | 157 | \r |
e8449e1d FB |
158 | self.DataContainer = {"FdfParser": True if GlobalData.gFdfParser else False}\r |
159 | \r | |
673d09a2 | 160 | self.DataContainer = {"LogLevel": EdkLogger.GetLevel()}\r |