GlobalData provide initializing, instoring, querying and update global data.\r
It is a bridge to intercommunicate between multiple component, such as AutoGen,\r
GlobalData provide initializing, instoring, querying and update global data.\r
It is a bridge to intercommunicate between multiple component, such as AutoGen,\r
Copyright (c) 2006, Intel Corporation\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
Copyright (c) 2006, Intel Corporation\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
import org.tianocore.DbPathAndFilename;\r
import org.tianocore.FrameworkDatabaseDocument;\r
import org.tianocore.ModuleSurfaceAreaDocument;\r
import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
import org.tianocore.DbPathAndFilename;\r
import org.tianocore.FrameworkDatabaseDocument;\r
import org.tianocore.ModuleSurfaceAreaDocument;\r
import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
import org.tianocore.build.id.FpdModuleIdentification;\r
import org.tianocore.build.id.ModuleIdentification;\r
import org.tianocore.build.id.PackageIdentification;\r
import org.tianocore.build.id.PlatformIdentification;\r
import org.tianocore.build.id.FpdModuleIdentification;\r
import org.tianocore.build.id.ModuleIdentification;\r
import org.tianocore.build.id.PackageIdentification;\r
import org.tianocore.build.id.PlatformIdentification;\r
import org.tianocore.build.toolchain.ToolChainAttribute;\r
import org.tianocore.build.toolchain.ToolChainConfig;\r
import org.tianocore.build.toolchain.ToolChainElement;\r
import org.tianocore.build.toolchain.ToolChainInfo;\r
import org.tianocore.build.toolchain.ToolChainKey;\r
import org.tianocore.build.toolchain.ToolChainMap;\r
import org.tianocore.build.toolchain.ToolChainAttribute;\r
import org.tianocore.build.toolchain.ToolChainConfig;\r
import org.tianocore.build.toolchain.ToolChainElement;\r
import org.tianocore.build.toolchain.ToolChainInfo;\r
import org.tianocore.build.toolchain.ToolChainKey;\r
import org.tianocore.build.toolchain.ToolChainMap;\r
\r
/**\r
GlobalData provide initializing, instoring, querying and update global data.\r
It is a bridge to intercommunicate between multiple component, such as AutoGen,\r
\r
/**\r
GlobalData provide initializing, instoring, querying and update global data.\r
It is a bridge to intercommunicate between multiple component, such as AutoGen,\r
///\r
/// Be used to ensure Global data will be initialized only once.\r
///\r
private static boolean globalFlag = false;\r
///\r
/// Be used to ensure Global data will be initialized only once.\r
///\r
private static boolean globalFlag = false;\r
///\r
/// Parsed modules list\r
///\r
private static Map<FpdModuleIdentification, Map<String, XmlObject>> parsedModules = new HashMap<FpdModuleIdentification, Map<String, XmlObject>>();\r
///\r
/// Parsed modules list\r
///\r
private static Map<FpdModuleIdentification, Map<String, XmlObject>> parsedModules = new HashMap<FpdModuleIdentification, Map<String, XmlObject>>();\r
///\r
/// built modules list with ARCH, TARGET, TOOLCHAIN\r
///\r
private static Set<FpdModuleIdentification> builtModules = new HashSet<FpdModuleIdentification>();\r
///\r
/// built modules list with ARCH, TARGET, TOOLCHAIN\r
///\r
private static Set<FpdModuleIdentification> builtModules = new HashSet<FpdModuleIdentification>();\r
/// toolsDef - build tool program information\r
/// fpdBuildOption - all modules's build options for tool tag or tool chain families\r
/// moduleSaBuildOption - build options for a specific module\r
/// toolsDef - build tool program information\r
/// fpdBuildOption - all modules's build options for tool tag or tool chain families\r
/// moduleSaBuildOption - build options for a specific module\r
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainOption = new HashMap<FpdModuleIdentification, ToolChainMap>();\r
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainFamilyOption = new HashMap<FpdModuleIdentification, ToolChainMap>();\r
\r
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainOption = new HashMap<FpdModuleIdentification, ToolChainMap>();\r
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainFamilyOption = new HashMap<FpdModuleIdentification, ToolChainMap>();\r
\r
/**\r
Parse framework database (DB) and all SPD files listed in DB to initialize\r
the environment for next build. This method will only be executed only once\r
/**\r
Parse framework database (DB) and all SPD files listed in DB to initialize\r
the environment for next build. This method will only be executed only once\r
@param workspaceDatabaseFile the file name of framework database\r
@param workspaceDir current workspace directory path\r
@throws BuildException\r
@param workspaceDatabaseFile the file name of framework database\r
@param workspaceDir current workspace directory path\r
@throws BuildException\r
// Backup workspace directory. It will be used by other method\r
//\r
GlobalData.workspaceDir = workspaceDir.replaceAll("(\\\\)", "/");\r
// Backup workspace directory. It will be used by other method\r
//\r
GlobalData.workspaceDir = workspaceDir.replaceAll("(\\\\)", "/");\r
// CONF dir + tools definition file name\r
//\r
File toolsDefFile = new File(workspaceDir + File.separatorChar + toolsDefFilename);\r
// CONF dir + tools definition file name\r
//\r
File toolsDefFile = new File(workspaceDir + File.separatorChar + toolsDefFilename);\r
// Verify FPD file, if is invalid, throw Exception\r
//\r
if (! fpdDoc.validate()) {\r
// Verify FPD file, if is invalid, throw Exception\r
//\r
if (! fpdDoc.validate()) {\r
PackageIdentification packageId = null;\r
Iterator iter = packageList.iterator();\r
while (iter.hasNext()) {\r
PackageIdentification packageId = null;\r
Iterator iter = packageList.iterator();\r
while (iter.hasNext()) {\r
/**\r
Difference between build and parse: ToolChain and Target\r
**/\r
public synchronized static boolean isModuleBuilt(FpdModuleIdentification moduleId) {\r
return builtModules.contains(moduleId);\r
}\r
/**\r
Difference between build and parse: ToolChain and Target\r
**/\r
public synchronized static boolean isModuleBuilt(FpdModuleIdentification moduleId) {\r
return builtModules.contains(moduleId);\r
}\r
public synchronized static void registerBuiltModule(FpdModuleIdentification fpdModuleId) {\r
builtModules.add(fpdModuleId);\r
}\r
\r
public synchronized static void registerBuiltModule(FpdModuleIdentification fpdModuleId) {\r
builtModules.add(fpdModuleId);\r
}\r
\r
public synchronized static void registerFpdModuleSA(FpdModuleIdentification fpdModuleId, Map<String, XmlObject> doc) {\r
Map<String, XmlObject> result = new HashMap<String, XmlObject>();\r
Set keySet = doc.keySet();\r
public synchronized static void registerFpdModuleSA(FpdModuleIdentification fpdModuleId, Map<String, XmlObject> doc) {\r
Map<String, XmlObject> result = new HashMap<String, XmlObject>();\r
Set keySet = doc.keySet();\r
- or Platform build, also include the information from FPD file. \r
- \r
- <p>Note that surface area parsing is incremental. That means the method will \r
+ or Platform build, also include the information from FPD file.\r
+\r
+ <p>Note that surface area parsing is incremental. That means the method will\r
@param moduleName the base name of the module\r
@return the overrided module surface area information\r
@throws BuildException\r
@param moduleName the base name of the module\r
@return the overrided module surface area information\r
@throws BuildException\r
//\r
// Second part: put build options\r
//\r
doc.put("BuildOptions", fpdBuildOptions);\r
//\r
// Second part: put build options\r
//\r
doc.put("BuildOptions", fpdBuildOptions);\r
- Query the native MSA information with module base name. \r
- \r
- <p>Note that MSA parsing is incremental. That means the method will \r
+ Query the native MSA information with module base name.\r
+\r
+ <p>Note that MSA parsing is incremental. That means the method will\r
public synchronized static Map<String, XmlObject> getNativeMsa(File msaFile) throws BuildException {\r
if (! msaFile.exists()) {\r
public synchronized static Map<String, XmlObject> getNativeMsa(File msaFile) throws BuildException {\r
if (! msaFile.exists()) {\r
public static Map<String, XmlObject> getFpdBuildOptions() {\r
Map<String, XmlObject> map = new HashMap<String, XmlObject>();\r
map.put("BuildOptions", fpdBuildOptions);\r
return map;\r
}\r
public static Map<String, XmlObject> getFpdBuildOptions() {\r
Map<String, XmlObject> map = new HashMap<String, XmlObject>();\r
map.put("BuildOptions", fpdBuildOptions);\r
return map;\r
}\r
public static void setFpdBuildOptions(XmlObject fpdBuildOptions) {\r
GlobalData.fpdBuildOptions = cloneXmlObject(fpdBuildOptions, true);\r
}\r
public static void setFpdBuildOptions(XmlObject fpdBuildOptions) {\r
GlobalData.fpdBuildOptions = cloneXmlObject(fpdBuildOptions, true);\r
}\r
public static Set<ModuleIdentification> getModules(PackageIdentification packageId){\r
Spd spd = spdTable.get(packageId);\r
if (spd == null ) {\r
public static Set<ModuleIdentification> getModules(PackageIdentification packageId){\r
Spd spd = spdTable.get(packageId);\r
if (spd == null ) {\r
// If can't find library class declaration in every package\r
//\r
throw new BuildException("Can not find library class [" + name\r
// If can't find library class declaration in every package\r
//\r
throw new BuildException("Can not find library class [" + name\r
public synchronized static PlatformIdentification getPlatformByName(String name) throws BuildException {\r
Iterator iter = platformList.iterator();\r
while(iter.hasNext()){\r
public synchronized static PlatformIdentification getPlatformByName(String name) throws BuildException {\r
Iterator iter = platformList.iterator();\r
while(iter.hasNext()){\r
public synchronized static PlatformIdentification getPlatform(String filename) throws BuildException {\r
File file = new File(workspaceDir + File.separatorChar + filename);\r
Iterator iter = platformList.iterator();\r
public synchronized static PlatformIdentification getPlatform(String filename) throws BuildException {\r
File file = new File(workspaceDir + File.separatorChar + filename);\r
Iterator iter = platformList.iterator();\r
public synchronized static PackageIdentification refreshPackageIdentification(PackageIdentification packageId) throws BuildException {\r
Iterator iter = packageList.iterator();\r
while(iter.hasNext()){\r
public synchronized static PackageIdentification refreshPackageIdentification(PackageIdentification packageId) throws BuildException {\r
Iterator iter = packageList.iterator();\r
while(iter.hasNext()){\r
public synchronized static ModuleIdentification refreshModuleIdentification(ModuleIdentification moduleId) throws BuildException {\r
// System.out.println("1");\r
// System.out.println("##" + moduleId.getGuid());\r
public synchronized static ModuleIdentification refreshModuleIdentification(ModuleIdentification moduleId) throws BuildException {\r
// System.out.println("1");\r
// System.out.println("##" + moduleId.getGuid());\r
}\r
Set<ModuleIdentification> modules = spd.getModules();\r
Iterator<ModuleIdentification> iter = modules.iterator();\r
}\r
Set<ModuleIdentification> modules = spd.getModules();\r
Iterator<ModuleIdentification> iter = modules.iterator();\r
\r
public static String getCommandSetting(String[] commandDescription, FpdModuleIdentification fpdModuleId) throws EdkException {\r
ToolChainKey toolChainKey = new ToolChainKey(commandDescription);\r
\r
public static String getCommandSetting(String[] commandDescription, FpdModuleIdentification fpdModuleId) throws EdkException {\r
ToolChainKey toolChainKey = new ToolChainKey(commandDescription);\r
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);\r
\r
option = moduleToolChainFamilyOption.get(fpdModuleId);\r
toolChainFamilyKey.setKey(ToolChainAttribute.FLAGS.toString(), ToolChainElement.ATTRIBUTE.value);\r
\r
option = moduleToolChainFamilyOption.get(fpdModuleId);\r
- public synchronized static String[] getGuidInfoFromCname(String cName){\r
- String cNameGuid[] = null;\r
+ public synchronized static String getGuidInfoFromCname(String cName){\r
+ String cNameGuid = null;\r
- public synchronized static Map<FpdModuleIdentification, XmlObject> getFpdModuleSaXmlObject(\r
- String xmlObjectName) {\r
+ public synchronized static Map<FpdModuleIdentification, XmlObject>\r
+ getFpdModuleSaXmlObject(String xmlObjectName) {\r
Set<FpdModuleIdentification> fpdModuleSASet = fpdModuleSA.keySet();\r
Iterator item = fpdModuleSASet.iterator();\r
Set<FpdModuleIdentification> fpdModuleSASet = fpdModuleSA.keySet();\r
Iterator item = fpdModuleSASet.iterator();\r
\r
Map<FpdModuleIdentification, XmlObject> SAPcdBuildDef = new HashMap<FpdModuleIdentification, XmlObject>();\r
Map<String, XmlObject> SANode = new HashMap<String, XmlObject>();\r
FpdModuleIdentification moduleId;\r
while (item.hasNext()) {\r
\r
Map<FpdModuleIdentification, XmlObject> SAPcdBuildDef = new HashMap<FpdModuleIdentification, XmlObject>();\r
Map<String, XmlObject> SANode = new HashMap<String, XmlObject>();\r
FpdModuleIdentification moduleId;\r
while (item.hasNext()) {\r
moduleId = (FpdModuleIdentification) item.next();\r
SANode = fpdModuleSA.get(moduleId);\r
try{\r
if (SANode.get(xmlObjectName)!= null){\r
SAPcdBuildDef.put(moduleId,\r
moduleId = (FpdModuleIdentification) item.next();\r
SANode = fpdModuleSA.get(moduleId);\r
try{\r
if (SANode.get(xmlObjectName)!= null){\r
SAPcdBuildDef.put(moduleId,\r