New tool.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@692 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qouyang 2006-06-30 19:56:10 +00:00
parent 1ea046d4c4
commit 136adffc5c
23 changed files with 2526 additions and 2096 deletions

View File

@ -70,6 +70,7 @@
<IncludePkgHeader ModuleType="DXE_SMM_DRIVER">Include/WinNtDxe.h</IncludePkgHeader>
<IncludePkgHeader ModuleType="DXE_SAL_DRIVER">Include/WinNtDxe.h</IncludePkgHeader>
<IncludePkgHeader ModuleType="UEFI_DRIVER">Include/WinNtDxe.h</IncludePkgHeader>
<IncludePkgHeader ModuleType="USER_DEFINED">Include/WinNtPeim.h</IncludePkgHeader>
</PackageHeaders>
<GuidDeclarations>
<Entry Name="WinNtVirtualDisks">

View File

@ -35,9 +35,9 @@
<Package PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3"/>
</PackageDependencies>
<PPIs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Ppi Usage="ALWAYS_CONSUMED">
<!--<Ppi Usage="ALWAYS_CONSUMED">
<PpiCName>PeCoffLoader</PpiCName>
</Ppi>
</Ppi>-->
</PPIs>
<Externs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>

View File

@ -5733,14 +5733,6 @@
<MaxDatumSize>4</MaxDatumSize>
<Value>0x5678</Value>
</PcdData>
<PcdData ItemType="DYNAMIC">
<C_Name>PcdWinNtDynamicUINT32</C_Name>
<Token>0x0001000e</Token>
<TokenSpaceGuidCName>Fix_Me</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>0x0</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>FV_RECOVERY</FvBinding>
@ -6575,17 +6567,6 @@
<Value>L"3000"</Value>
</SkuInfo>
</PcdBuildData>
<PcdBuildData ItemType="DYNAMIC">
<C_Name>PcdWinNtDynamicUINT32</C_Name>
<Token>0x0001000e</Token>
<TokenSpaceGuidCName>Fix_Me</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<SkuInfo>
<SkuId>0</SkuId>
<Value>0x0</Value>
</SkuInfo>
</PcdBuildData>
<PcdBuildData ItemType="DYNAMIC">
<C_Name>PcdKentTestDynamicUINT32</C_Name>
<Token>0x0001000e</Token>
@ -6594,10 +6575,7 @@
<MaxDatumSize>4</MaxDatumSize>
<SkuInfo>
<SkuId>0</SkuId>
<VariableName>0x0062 0x006F 0x006F 0x0074 0x006D 0x006F 0x0064 0x0065</VariableName>
<VariableGuid>WinNPassThrough</VariableGuid>
<VariableOffset>0x123</VariableOffset>
<HiiDefaultValue>0x123</HiiDefaultValue>
<Value>0x2</Value>
</SkuInfo>
</PcdBuildData>
</DynamicPcdBuildDefinitions>

View File

@ -493,7 +493,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
</targetfiles>
<sequential>
<vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}" vfrFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}">
<vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}">
<EXTRA.INC/>
</vfrcompile>

View File

@ -1,11 +1,11 @@
FPDParser = org.tianocore.build.fpd.FpdParserTask
bl = org.tianocore.build.global.VariableTask
bf = org.tianocore.build.global.LibBuildFileGenerator
GenBuild = org.tianocore.build.GenBuildTask
ToolChainSetup = org.tianocore.build.toolchain.ToolChainTask
Expand = org.tianocore.build.ExpandTask
OutputDirSetup = org.tianocore.build.OutputDirSetupTask
FrameworkBuild = org.tianocore.build.FrameworkBuildTask
OnDependency = org.tianocore.build.global.OnDependency
ToolChainSetup = org.tianocore.build.toolchain.ToolChainTask
OutputDirSetup = org.tianocore.build.OutputDirSetup
sourcefiles = org.tianocore.build.global.DpFileList
targetfiles = org.tianocore.build.global.DpFileList
file = org.tianocore.build.global.DpFile
DefaultBuildFileGenerator = org.tianocore.build.tools.DefaultBuildFileGenerator

View File

@ -64,6 +64,7 @@ public class FileProcess {
{".s", "", "ASM" },
{".uni", "", "UNI" },
{".vfr", "", "VFR" },
{".Vfr", "", "VFR" },
{".dxs", "", "DPX"},
{".fv", "", "FV" },
{".efi", "", "EFI" },

View File

@ -32,8 +32,9 @@ import org.apache.tools.ant.taskdefs.Ant;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.xmlbeans.XmlObject;
import org.tianocore.build.exception.EdkException;
import org.tianocore.build.autogen.AutoGen;
import org.tianocore.build.fpd.FpdParserTask;
import org.tianocore.build.global.GenBuildLogger;
import org.tianocore.build.global.GlobalData;
import org.tianocore.build.global.OutputManager;
import org.tianocore.build.global.SurfaceAreaQuery;
@ -42,6 +43,8 @@ import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PackageIdentification;
import org.tianocore.build.id.PlatformIdentification;
import org.tianocore.build.tools.ModuleItem;
import org.tianocore.exception.EdkException;
import org.tianocore.logger.EdkLog;
/**
<p>
@ -115,7 +118,14 @@ public class GenBuildTask extends Ant {
From module build, exception from module surface area invalid.
**/
public void execute() throws BuildException {
try{
//
// set Logger
//
GenBuildLogger logger = new GenBuildLogger(getProject());
EdkLog.setLogLevel(getProject().getProperty("env.LOGLEVEL"));
EdkLog.setLogger(logger);
// remove !!
try {
pushProperties();
//
// Enable all specified properties
@ -524,8 +534,9 @@ public class GenBuildTask extends Ant {
//
// AutoGen
//
// AutoGen autogen = new AutoGen(getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId);
// autogen.genAutogen();
AutoGen autogen = new AutoGen(getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());
autogen.genAutogen();
//

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,10 @@
**/
package org.tianocore.build.autogen;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
CommonDefinition
@ -149,7 +153,7 @@ public class CommonDefinition {
new MyEnum("PEI_CORE", ModuleTypePeiCore),
new MyEnum("PEIM", ModuleTypePeim),
new MyEnum("DXE_CORE", ModuleTypeDxeCore),
new MyEnum("DXE_DRIVER", ModuleTypeDxeRuntimeDriver),
new MyEnum("DXE_DRIVER", ModuleTypeDxeDriver),
new MyEnum("DXE_RUNTIME_DRIVER", ModuleTypeDxeRuntimeDriver),
new MyEnum("DXE_SAL_DRIVER", ModuleTypeDxeSalDriver),
new MyEnum("DXE_SMM_DRIVER", ModuleTypeDxeSmmDriver),
@ -315,4 +319,32 @@ public class CommonDefinition {
}
}
/**
* Remove deuplicat string in list
*
* This function is to duplicat string in list
*
* @param String[]
* String list.
* @return String[] String list which remove the duplicate string.
*/
public static String[] remDupString (String[] orgList){
Set<String> strList = new HashSet<String>();
String[] desList ;
if (orgList == null){
return new String[0];
}
for (int i = 0; i < orgList.length; i++){
strList.add(orgList[i]);
}
desList = new String[strList.size()];
Iterator item = strList.iterator();
int index = 0;
while (item.hasNext()){
desList[index] = (String)item.next();
index++;
}
return desList;
}
}

View File

@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
package org.tianocore.build.exception;
import org.tianocore.build.exception.EdkException;
import org.tianocore.exception.EdkException;
/**
The class handle the exception throwed by entity class.
@ -35,6 +35,6 @@ public class GenBuildException extends EdkException {
super();
}
public GenBuildException(Exception e, String message){
// super(e, message);
super(e, message);
}
}

View File

@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
package org.tianocore.build.exception;
import org.tianocore.build.exception.EdkException;
import org.tianocore.exception.EdkException;
/**
The class handle the exception throwed by entity class.
@ -36,6 +36,6 @@ public class TianoToolsException extends EdkException {
}
public TianoToolsException (Exception e, String message){
// super(e, message);
super(e, message);
}
}

View File

@ -33,16 +33,19 @@ import org.apache.tools.ant.taskdefs.Ant;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.xmlbeans.XmlObject;
import org.tianocore.build.exception.EdkException;
import org.tianocore.build.global.GlobalData;
import org.tianocore.build.global.OutputManager;
import org.tianocore.build.global.SurfaceAreaQuery;
import org.tianocore.build.id.FpdModuleIdentification;
import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PlatformIdentification;
import org.tianocore.build.pcd.action.ActionMessage;
import org.tianocore.build.pcd.action.CollectPCDAction;
import org.tianocore.build.pcd.exception.EntityException;
import org.tianocore.build.toolchain.ToolChainAttribute;
import org.tianocore.build.toolchain.ToolChainElement;
import org.tianocore.build.toolchain.ToolChainMap;
import org.tianocore.exception.EdkException;
/**
<code>FpdParserTask</code> is an ANT task. The main function is parsing Framework
@ -145,6 +148,18 @@ public class FpdParserTask extends Task {
//
parseFpdFile();
//
// Pcd Collection. Call CollectPCDAction to collect pcd info.
//
try {
System.out.println("Begin PCD collecttion!");
CollectPCDAction ca = new CollectPCDAction();
ca.perform(GlobalData.getWorkspacePath(),platformId.getFpdFile().getPath(),ActionMessage.NULL_MESSAGE_LEVEL);
System.out.println("End PCD collection!");
} catch (Exception e){
throw new BuildException(e.getMessage());
}
//
// Prepare BUILD_DIR
//
@ -187,6 +202,7 @@ public class FpdParserTask extends Task {
//
// Ant call ${PLATFORM}_build.xml
//
Ant ant = new Ant();
ant.setProject(getProject());
ant.setAntfile(platformId.getFpdFile().getParent() + File.separatorChar + platformId.getName() + "_build.xml");
@ -391,7 +407,7 @@ public class FpdParserTask extends Task {
**/
private void parseModuleSAFiles() throws EdkException{
Map<FpdModuleIdentification, Map<String, XmlObject>> moduleSAs = SurfaceAreaQuery.getFpdModules();
System.out.println("Nubmer: ##" + moduleSAs.size());
//
// For every Module lists in FPD file.
//

View File

@ -21,20 +21,21 @@ import org.apache.xmlbeans.XmlObject;
import org.tianocore.DbPathAndFilename;
import org.tianocore.FrameworkDatabaseDocument;
import org.tianocore.ModuleSurfaceAreaDocument;
import org.tianocore.PcdBuildDefinitionDocument;
import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;
import org.tianocore.build.exception.EdkException;
import org.tianocore.build.id.FpdModuleIdentification;
import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PackageIdentification;
import org.tianocore.build.id.PlatformIdentification;
import org.tianocore.build.pcd.entity.MemoryDatabaseManager;
import org.tianocore.build.toolchain.ToolChainAttribute;
import org.tianocore.build.toolchain.ToolChainConfig;
import org.tianocore.build.toolchain.ToolChainElement;
import org.tianocore.build.toolchain.ToolChainInfo;
import org.tianocore.build.toolchain.ToolChainKey;
import org.tianocore.build.toolchain.ToolChainMap;
//import org.tianocore.build.pcd.entity.MemoryDatabaseManager;
//import org.tianocore.logger.EdkLog;
import org.tianocore.exception.EdkException;
import org.tianocore.logger.EdkLog;
import java.io.File;
import java.util.HashMap;
@ -130,7 +131,7 @@ public class GlobalData {
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainOption = new HashMap<FpdModuleIdentification, ToolChainMap>();
private static Map<FpdModuleIdentification, ToolChainMap> moduleToolChainFamilyOption = new HashMap<FpdModuleIdentification, ToolChainMap>();
// private static final MemoryDatabasseManager pcdDbManager = new MemoryDatabaseManager();
private static final MemoryDatabaseManager pcdDbManager = new MemoryDatabaseManager();
@ -341,7 +342,7 @@ public class GlobalData {
//
// First part: get the MSA files info
//
doc = getNativeMsa(moduleId);
doc.putAll(getNativeMsa(moduleId));
//
// Second part: put build options
@ -413,6 +414,7 @@ public class GlobalData {
msaMap.put("PPIs", cloneXmlObject(msa.getPPIs(), true));
msaMap.put("Guids", cloneXmlObject(msa.getGuids(), true));
msaMap.put("Externs", cloneXmlObject(msa.getExterns(), true));
msaMap.put("PcdCoded", cloneXmlObject(msa.getPcdCoded(), true));
return msaMap;
}
catch (Exception ex){
@ -507,15 +509,16 @@ public class GlobalData {
/**
* return two values: {cName, GuidValue}
*/
public static String[] getGuid(PackageIdentification[] packages, String name)
public static String[] getGuid(List<PackageIdentification> packages, String name)
throws BuildException {
if (packages == null) {
// throw Exception or not????
return new String[0];
}
String[] result = null;
for (int i = 0; i < packages.length; i++) {
Spd spd = spdTable.get(packages[i]);
Iterator item = packages.iterator();
while (item.hasNext()){
Spd spd = spdTable.get(item.next());
//
// If find one package defined the GUID
//
@ -523,20 +526,22 @@ public class GlobalData {
return result;
}
}
return null;
}
/**
* return two values: {cName, GuidValue}
*/
public static String[] getPpiGuid(PackageIdentification[] packages,
public static String[] getPpiGuid(List<PackageIdentification> packages,
String name) throws BuildException {
if (packages == null) {
return new String[0];
}
String[] result = null;
for (int i = 0; i < packages.length; i++) {
Spd spd = spdTable.get(packages[i]);
Iterator item = packages.iterator();
while (item.hasNext()){
Spd spd = spdTable.get(item.next());
//
// If find one package defined the Ppi GUID
//
@ -551,18 +556,19 @@ public class GlobalData {
/**
* return two values: {cName, GuidValue}
*/
public static String[] getProtocolGuid(PackageIdentification[] packages,
public static String[] getProtocolGuid(List<PackageIdentification> packages,
String name) throws BuildException {
if (packages == null) {
return new String[0];
}
String[] result = null;
for (int i = 0; i < packages.length; i++) {
Spd spd = spdTable.get(packages[i]);
Iterator item = packages.iterator();
while (item.hasNext()){
Spd spd = spdTable.get(item.next());
//
// If find one package defined the protocol GUID
//
if ((result = spd.getProtocol(name)) != null) {
if ((result = spd.getProtocol(name))!= null){
return result;
}
}
@ -750,52 +756,61 @@ public class GlobalData {
//
// for PCD
//
// public synchronized static MemoryDatabaseManager getPCDMemoryDBManager() {
// return pcdDbManager;
// }
public synchronized static MemoryDatabaseManager getPCDMemoryDBManager() {
return pcdDbManager;
}
//
// For PCD get tokenSpaceGUid
//
public synchronized static String[] getGuidInfoFromCname(String cName){
String cNameGuid[] = null;
String guid = null;
Set set = spdTable.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()){
Spd spd = (Spd) spdTable.get(iter.next());
guid = spd.getGuidFromCname(cName);
if (guid != null){
cNameGuid[0] = new String(cName);
cNameGuid[1] = new String(guid);
break;
}
}
return cNameGuid;
}
//
// For PCD
//
/**
*
* @param guidName
* @return
*/
// public synchronized static String[] getGuidInfoGuid(String guidName) {
// String[] cNameGuid = null;
// Set set = spdTable.keySet();
// Iterator iter = set.iterator();
//
// while (iter.hasNext()) {
// Spd spd = (Spd) spdTable.get(iter.next());
// cNameGuid = spd.getGuidNameArray(guidName);
// if (cNameGuid != null) {
// break;
// }
// }
// return cNameGuid;
// }
public synchronized static Map<FpdModuleIdentification, XmlObject> getFpdModuleSaXmlObject(
String xmlObjectName) {
Set<FpdModuleIdentification> fpdModuleSASet = fpdModuleSA.keySet();
Iterator item = fpdModuleSASet.iterator();
//
// For PCD
//
// public synchronized static Map<FpdModuleIdentification, XmlObject> getFpdModuleSaXmlObject(
// String xmlObjectName) {
// Set<FpdModuleIdentification> fpdModuleSASet = fpdModuleSA.keySet();
// Iterator item = fpdModuleSASet.iterator();
//
// Map<FpdModuleIdentification, XmlObject> SAPcdBuildDef = new HashMap<FpdModuleIdentification, XmlObject>();
// Map<String, XmlObject> SANode = new HashMap<String, XmlObject>();
// FpdModuleIdentification moduleId;
// while (item.hasNext()) {
// moduleId = (FpdModuleIdentification) item.next();
// SANode = fpdModuleSA.get(item.next());
// SAPcdBuildDef.put(moduleId,
// (PcdBuildDefinitionDocument.PcdBuildDefinition) SANode
// .get(xmlObjectName));
// }
// return SAPcdBuildDef;
// }
Map<FpdModuleIdentification, XmlObject> SAPcdBuildDef = new HashMap<FpdModuleIdentification, XmlObject>();
Map<String, XmlObject> SANode = new HashMap<String, XmlObject>();
FpdModuleIdentification moduleId;
while (item.hasNext()) {
moduleId = (FpdModuleIdentification) item.next();
SANode = fpdModuleSA.get(moduleId);
try{
if (SANode.get(xmlObjectName)!= null){
SAPcdBuildDef.put(moduleId,
(XmlObject) SANode
.get(xmlObjectName));
}
} catch (Exception e){
EdkLog.log(EdkLog.EDK_INFO, e.getMessage());
}
}
return SAPcdBuildDef;
}
}

View File

@ -66,6 +66,12 @@ public class Spd {
Map<String, String[]> guidInfo = new HashMap<String, String[]>();
///
/// Map of Guid info
/// Key: GuidCName
/// value: String Guid's GUID
///
Map<String, String> guidCnameInfo = new HashMap<String, String>();
/// Map of library class and its exposed header file.
/// Key : library class name
/// value : library class corresponding header file
@ -140,7 +146,7 @@ public class Spd {
// Change path seperator to system-dependent path separator
//
File file = new File (header);
header = file.getParent();
header = file.getPath();
packageHeaderInfo.put(moduleType, header);
}
@ -149,6 +155,17 @@ public class Spd {
//
guidInfo.putAll(SurfaceAreaQuery.getSpdGuid());
//
// For Pcd get TokenSpaceGuid
//
Set<String> key = guidInfo.keySet();
Iterator item = key.iterator();
String [] nameValue = new String[2];
while(item.hasNext()){
nameValue = guidInfo.get(item.next());
guidCnameInfo.put(nameValue[0], nameValue[1]);
}
//
// initialize PPI info
//
@ -220,6 +237,13 @@ public class Spd {
return guidInfo.get(guidName);
}
/**
* return Guid Value.
*/
public String getGuidFromCname(String cName){
return guidCnameInfo.get(cName);
}
/**
getLibClassInclude
@ -246,17 +270,5 @@ public class Spd {
return packageHeaderInfo.get(moduleType);
}
/**
getGuidNameArray
This function is to get the GUID's CName and it's GUID according to
GUID's name
@param guidName Name of GUID
@return CName and GUID.
**/
public String[] getGuidNameArray(String guidName) {
return this.guidInfo.get(guidName);
}
}

View File

@ -27,6 +27,7 @@ import org.apache.xmlbeans.XmlNormalizedString;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlString;
import org.tianocore.BuildOptionsDocument;
import org.tianocore.CNameType;
import org.tianocore.DataIdDocument;
import org.tianocore.ExternsDocument;
import org.tianocore.FileNameConvention;
@ -48,9 +49,11 @@ import org.tianocore.OptionDocument;
import org.tianocore.PPIsDocument;
import org.tianocore.PackageDependenciesDocument;
import org.tianocore.PackageHeadersDocument;
import org.tianocore.PcdCodedDocument;
import org.tianocore.PlatformDefinitionsDocument;
import org.tianocore.PpiDeclarationsDocument;
import org.tianocore.ProtocolDeclarationsDocument;
import org.tianocore.Sentence;
import org.tianocore.SpdHeaderDocument;
import org.tianocore.SupportedArchitectures;
import org.tianocore.FilenameDocument.Filename;
@ -63,6 +66,7 @@ import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PackageIdentification;
import org.tianocore.build.id.PlatformIdentification;
import org.tianocore.build.toolchain.ToolChainInfo;
import org.tianocore.logger.EdkLog;
/**
* SurfaceAreaQuery class is used to query Surface Area information from msa,
@ -624,8 +628,7 @@ public class SurfaceAreaQuery {
String[] entryPoints = new String[returns.length];
for (int i = 0; i < returns.length; ++i) {
entryPoints[i] = ((XmlNormalizedString) returns[i])
.getStringValue();
entryPoints[i] = ((CNameType) returns[i]).getStringValue();
}
return entryPoints;
@ -689,7 +692,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
xPath = new String[] { "/Protocol[@SupArchList='" + arch + "']" };
xPath = new String[] { "/Protocol" };
}
Object[] returns = get("Protocols", xPath);
@ -700,7 +703,10 @@ public class SurfaceAreaQuery {
String[] protocolArray = new String[returns.length];
for (int i = 0; i < returns.length; i++) {
protocolArray[i] = protocolList[i].getProtocolCName();
List<String> archList = protocolList[i].getSupArchList();
if (archList == null || archList.contains(arch)){
protocolArray[i] = protocolList[i].getProtocolCName();
}
}
return protocolArray;
}
@ -720,8 +726,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
xPath = new String[] { "/ProtocolNotify[@SupArchList='" + arch
+ "']" };
xPath = new String[] { "/ProtocolNotify" };
}
Object[] returns = get("Protocols", xPath);
@ -731,7 +736,11 @@ public class SurfaceAreaQuery {
String[] protocolNotifyList = new String[returns.length];
for (int i = 0; i < returns.length; i++) {
protocolNotifyList[i] = ((ProtocolNotify) returns[i]).getProtocolNotifyCName();
List<String> archList = ((ProtocolNotify) returns[i]).getSupArchList();
if (archList == null || archList.contains(arch)){
protocolNotifyList[i] = ((ProtocolNotify) returns[i]).getProtocolNotifyCName();
}
}
return protocolNotifyList;
@ -790,7 +799,7 @@ public class SurfaceAreaQuery {
Object[] returns = get("Externs", xPath);
if (returns != null && returns.length > 0) {
String[] stringArray = new String[returns.length];
XmlNormalizedString[] doc = (XmlNormalizedString[]) returns;
CNameType[] doc = (CNameType[]) returns;
for (int i = 0; i < returns.length; ++i) {
stringArray[i] = doc[i].getStringValue();
@ -834,7 +843,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
xPath = new String[] { "/PpiNotify[@SupArchList='" + arch + "']" };
xPath = new String[] { "/PpiNotify" };
}
Object[] returns = get("PPIs", xPath);
@ -844,7 +853,11 @@ public class SurfaceAreaQuery {
String[] ppiNotifyList = new String[returns.length];
for (int i = 0; i < returns.length; i++) {
ppiNotifyList[i] = ((PPIsDocument.PPIs.PpiNotify) returns[i]).getPpiNotifyCName();
List<String> archList = ((PPIsDocument.PPIs.PpiNotify) returns[i]).getSupArchList();
if (archList == null || archList.contains(arch)){
ppiNotifyList[i] = ((PPIsDocument.PPIs.PpiNotify) returns[i]).getPpiNotifyCName();
}
}
return ppiNotifyList;
@ -869,7 +882,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
archXpath = "/PpiNotify[@SupArchList='" + arch + "']";
archXpath = "/PpiNotify";
if (usage != null && !usage.equals("")) {
usageXpath = "/PpiNotify[@Usage='" + arch + "']";
xPath = new String[] { archXpath, usageXpath };
@ -906,7 +919,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
xPath = new String[] { "/Ppi[@SupArchList='" + arch + "']" };
xPath = new String[] { "/Ppi" };
}
Object[] returns = get("PPIs", xPath);
@ -916,7 +929,11 @@ public class SurfaceAreaQuery {
String[] ppiList = new String[returns.length];
for (int i = 0; i < returns.length; i++) {
ppiList[i] = ((PPIsDocument.PPIs.Ppi) returns[i]).getPpiCName();
List<String> archList = ((PPIsDocument.PPIs.Ppi) returns[i]).getSupArchList();
if (archList == null || archList.contains(arch)){
ppiList[i] = ((PPIsDocument.PPIs.Ppi) returns[i]).getPpiCName();
}
}
return ppiList;
}
@ -940,7 +957,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
archXpath = "/Ppi[@SupArchList='" + arch + "']";
archXpath = "/Ppi";
if (usage != null && !usage.equals("")) {
usageXpath = "/Ppi[@Usage='" + arch + "']";
xPath = new String[] { archXpath, usageXpath };
@ -975,9 +992,9 @@ public class SurfaceAreaQuery {
String[] xPath;
if (arch == null || arch.equals("")) {
xPath = new String[] { "/GuidName" };
xPath = new String[] { "/GuidCNames" };
} else {
xPath = new String[] { "/GuidName[@SupArchList='" + arch + "']" };
xPath = new String[] { "/GuidCNames" };
}
Object[] returns = get("Guids", xPath);
@ -986,7 +1003,11 @@ public class SurfaceAreaQuery {
}
String[] guidList = new String[returns.length];
for (int i = 0; i < returns.length; i++) {
guidList[i] = ((GuidsDocument.Guids.GuidCNames) returns[i]).getGuidCName();
List<String> archList = ((GuidsDocument.Guids.GuidCNames) returns[i]).getSupArchList();
if (archList == null || archList.contains(arch)){
guidList[i] = ((GuidsDocument.Guids.GuidCNames) returns[i]).getGuidCName();
}
}
return guidList;
@ -1009,7 +1030,7 @@ public class SurfaceAreaQuery {
if (arch == null || arch.equals("")) {
return new String[0];
} else {
archXpath = "/GuidEntry[@SupArchList='" + arch + "']";
archXpath = "/GuidEntry";
if (usage != null && !usage.equals("")) {
usageXpath = "/GuidEntry[@Usage='" + arch + "']";
xPath = new String[] { archXpath, usageXpath };
@ -1096,7 +1117,7 @@ public class SurfaceAreaQuery {
String[] strings = new String[returns.length];
for (int i = 0; i < returns.length; ++i) {
// TBD
// strings[i] = ((CName) returns[i]).getStringValue();
strings[i] = ((CNameType) returns[i]).getStringValue();
}
return strings;
@ -1113,8 +1134,8 @@ public class SurfaceAreaQuery {
Object[] returns = get("Externs", xPath);
if (returns != null && returns.length > 0) {
// CName constructor = (CName) returns[0];
// return constructor.getStringValue();
CNameType constructor = ((CNameType) returns[0]);
return constructor.getStringValue();
}
return null;
@ -1131,8 +1152,11 @@ public class SurfaceAreaQuery {
Object[] returns = get("Externs", xPath);
if (returns != null && returns.length > 0) {
// CName destructor = (CName) returns[0];
// return destructor.getStringValue();
//
// Only support one Destructor function.
//
CNameType destructor = (CNameType) returns[0];
return destructor.getStringValue();
}
return null;
@ -1646,9 +1670,8 @@ public class SurfaceAreaQuery {
String[] specificationList = new String[queryResult.length];
for (int i = 0; i < queryResult.length; i++) {
// specificationList[i] = ((SpecificationDocument.Specification)
// queryResult[i])
// .getStringValue();
specificationList[i] = ((Sentence)queryResult[i])
.getStringValue();
}
return specificationList;
}
@ -1765,6 +1788,9 @@ public class SurfaceAreaQuery {
guidPair[0] = entry.getCName();
guidPair[1] = entry.getGuidValue();
guidDeclMap.put(entry.getName(), guidPair);
EdkLog.log(EdkLog.EDK_VERBOSE, entry.getName());
EdkLog.log(EdkLog.EDK_VERBOSE, guidPair[0]);
EdkLog.log(EdkLog.EDK_VERBOSE, guidPair[1]);
}
return guidDeclMap;
}
@ -1793,6 +1819,9 @@ public class SurfaceAreaQuery {
protocolPair[0] = entry.getCName();
protocolPair[1] = entry.getGuidValue();
protoclMap.put(entry.getName(), protocolPair);
EdkLog.log(EdkLog.EDK_VERBOSE, entry.getName());
EdkLog.log(EdkLog.EDK_VERBOSE, protocolPair[0]);
EdkLog.log(EdkLog.EDK_VERBOSE, protocolPair[1]);
}
return protoclMap;
}
@ -1885,4 +1914,29 @@ public class SurfaceAreaQuery {
return new ModuleSADocument.ModuleSA[0];
}
/**
Get name array of PCD in a module. In one module, token space
is same, and token name should not be conflicted.
@return String[]
**/
public static String[] getModulePcdEntryNameArray() {
PcdCodedDocument.PcdCoded.PcdEntry[] pcdEntries = null;
String[] results;
int index;
String[] xPath = new String[] {"/PcdEntry"};
Object[] returns = get ("PcdCoded", xPath);
if (returns == null) {
return new String[0];
}
pcdEntries = (PcdCodedDocument.PcdCoded.PcdEntry[])returns;
results = new String[pcdEntries.length];
for (index = 0; index < pcdEntries.length; index ++) {
results[index] = pcdEntries[index].getCName();
}
return results;
}
}

View File

@ -23,20 +23,36 @@ import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.tianocore.DynamicPcdBuildDefinitionsDocument;
import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions;
import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData;
import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo;
import org.tianocore.FrameworkModulesDocument;
import org.tianocore.FrameworkPlatformDescriptionDocument;
import org.tianocore.PcdDeclarationsDocument;
import org.tianocore.PlatformSurfaceAreaDocument;
import org.tianocore.PcdBuildDefinitionDocument;
import org.tianocore.PlatformSurfaceAreaDocument.PlatformSurfaceArea;
import org.tianocore.ModuleSADocument;
import org.tianocore.ModuleSADocument.ModuleSA;
import org.tianocore.PackageSurfaceAreaDocument;
import org.tianocore.PcdBuildDefinitionDocument.PcdBuildDefinition;
import org.tianocore.build.autogen.CommonDefinition;
import org.tianocore.build.global.GlobalData;
import org.tianocore.build.global.SurfaceAreaQuery;
import org.tianocore.build.id.FpdModuleIdentification;
import org.tianocore.build.pcd.action.ActionMessage;
import org.tianocore.build.pcd.entity.DynamicTokenValue;
import org.tianocore.build.pcd.entity.MemoryDatabaseManager;
@ -44,6 +60,7 @@ import org.tianocore.build.pcd.entity.SkuInstance;
import org.tianocore.build.pcd.entity.Token;
import org.tianocore.build.pcd.entity.UsageInstance;
import org.tianocore.build.pcd.exception.EntityException;
import org.tianocore.logger.EdkLog;
import org.tianocore.ModuleTypeDef;
class CStructTypeDeclaration {
@ -407,6 +424,7 @@ class GuidTable {
Output.add("/* GuidTable */");
Output.add("{");
if (al.size() == 0) {
Output.add("\t" + getUuidCString(new UUID(0, 0)));
}
@ -1824,12 +1842,25 @@ class PcdDatabase {
}
class ModuleInfo {
public ModuleSADocument.ModuleSA module;
public ModuleTypeDef.Enum type;
private String type;
private FpdModuleIdentification moduleId;
private PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef;
public ModuleInfo (ModuleSADocument.ModuleSA module, ModuleTypeDef.Enum type) {
this.module = module;
public ModuleInfo (FpdModuleIdentification moduleId, String type, XmlObject pcdDef) {
this.moduleId = moduleId;
this.type = type;
this.pcdBuildDef = ((PcdBuildDefinitionDocument)pcdDef).getPcdBuildDefinition();
}
public String getModuleType (){
return this.type;
}
public FpdModuleIdentification getModuleId (){
return this.moduleId;
}
public PcdBuildDefinitionDocument.PcdBuildDefinition getPcdBuildDef(){
return this.pcdBuildDef;
}
}
@ -1851,8 +1882,11 @@ public class CollectPCDAction {
private int originalMessageLevel;
/// Cache the fpd docment instance for private usage.
private FrameworkPlatformDescriptionDocument fpdDocInstance;
private PlatformSurfaceAreaDocument fpdDocInstance;
/// xmlObject name
private static String xmlObjectName = "PcdBuildDefinition";
/**
Set WorkspacePath parameter for this action class.
@ -1919,7 +1953,7 @@ public class CollectPCDAction {
@throws EntityException Exception indicate failed to execute this action.
**/
private void execute() throws EntityException {
public void execute() throws EntityException {
//
// Get memoryDatabaseManager instance from GlobalData.
// The memoryDatabaseManager should be initialized for whatever build
@ -1988,14 +2022,13 @@ public class CollectPCDAction {
List<ModuleInfo> allModules = new ArrayList<ModuleInfo>();
ModuleInfo current = null;
int index = 0;
org.tianocore.Components components = null;
FrameworkModulesDocument.FrameworkModules fModules = null;
ModuleSADocument.ModuleSA[] modules = null;
HashMap<String, XmlObject> map = new HashMap<String, XmlObject>();
if (fpdDocInstance == null) {
try {
fpdDocInstance = (FrameworkPlatformDescriptionDocument)XmlObject.Factory.parse(new File(fpdFilePath));
fpdDocInstance = (PlatformSurfaceAreaDocument)XmlObject.Factory.parse(new File(fpdFilePath));
} catch(IOException ioE) {
throw new EntityException("File IO error for xml file:" + fpdFilePath + "\n" + ioE.getMessage());
} catch(XmlException xmlE) {
@ -2004,14 +2037,28 @@ public class CollectPCDAction {
}
map.put("FrameworkPlatformDescription", fpdDocInstance);
SurfaceAreaQuery.setDoc(map);
modules = SurfaceAreaQuery.getFpdModuleSAs();
for (index = 0; index < modules.length; index ++) {
SurfaceAreaQuery.setDoc(GlobalData.getDoc(modules[index].getModuleName()));
allModules.add(new ModuleInfo(modules[index],
ModuleTypeDef.Enum.forString(SurfaceAreaQuery.getModuleType())));
//map.put("FrameworkPlatformDescription", fpdDocInstance);
//SurfaceAreaQuery.setDoc(map);
Map<FpdModuleIdentification,XmlObject>pcdBuildDef = GlobalData.getFpdModuleSaXmlObject(CollectPCDAction.xmlObjectName);
Set<FpdModuleIdentification> pcdBuildKeySet = pcdBuildDef.keySet();
Iterator item = pcdBuildKeySet.iterator();
while (item.hasNext()){
FpdModuleIdentification id = (FpdModuleIdentification)item.next();
try {
allModules.add(new ModuleInfo(id, id.getModule().getModuleType(),pcdBuildDef.get(id)));
} catch (Exception e){
System.out.println(e.getMessage());
//EdkLog.log(EdkLog.EDK_INFO,e.getMessage());
}
}
// //modules = SurfaceAreaQuery.getFpdModuleSAs();
// for (index = 0; index < modules.length; index ++) {
// //SurfaceAreaQuery.setDoc(GlobalData.getDoc(modules[index].getModuleName()));
// allModules.add(new ModuleInfo(modules[index],
// ModuleTypeDef.Enum.forString(SurfaceAreaQuery.getModuleType())));
// }
return allModules;
}
@ -2049,7 +2096,8 @@ public class CollectPCDAction {
String moduleName = null;
String datum = null;
int maxDatumSize = 0;
String tokenSpaceGuidString = null;
//
// ----------------------------------------------
// 1), Get all <ModuleSA> from FPD file.
@ -2073,17 +2121,17 @@ public class CollectPCDAction {
// BUGBUG: For transition schema, we can *not* get module's version from
// <ModuleSAs>, It is work around code.
//
primaryKey1 = UsageInstance.getPrimaryKey(modules.get(index).module.getModuleName(),
primaryKey1 = UsageInstance.getPrimaryKey(modules.get(index).getModuleId().getModule().getName(),
null,
null,
null,
null,
modules.get(index).module.getArch().toString(),
modules.get(index).getModuleId().getArch(),
null);
primaryKey2 = UsageInstance.getPrimaryKey(modules.get(index2).module.getModuleName(),
primaryKey2 = UsageInstance.getPrimaryKey(modules.get(index2).getModuleId().getModule().getName(),
null,
null,
null,
modules.get(index2).module.getArch().toString(),
modules.get(index2).getModuleId().getArch(),
null);
if (primaryKey1.equalsIgnoreCase(primaryKey2)) {
isDuplicate = true;
@ -2098,13 +2146,13 @@ public class CollectPCDAction {
//
// It is legal for a module does not contains ANY pcd build definitions.
//
if (modules.get(index).module.getPcdBuildDefinition() == null) {
if (modules.get(index).getPcdBuildDef() == null) {
continue;
}
pcdBuildDataArray = modules.get(index).module.getPcdBuildDefinition().getPcdDataList();
pcdBuildDataArray = modules.get(index).getPcdBuildDef().getPcdDataList();
moduleName = modules.get(index).module.getModuleName();
moduleName = modules.get(index).getModuleId().getModule().getName();
//
// ----------------------------------------------------------------------
@ -2112,13 +2160,14 @@ public class CollectPCDAction {
// ----------------------------------------------------------------------
//
for (pcdIndex = 0; pcdIndex < pcdBuildDataArray.size(); pcdIndex ++) {
//tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName())[1];
tokenSpaceGuidString = null;
pcdBuildData = pcdBuildDataArray.get(pcdIndex);
primaryKey = Token.getPrimaryKeyString(pcdBuildData.getCName(),
translateSchemaStringToUUID(pcdBuildData.getTokenSpaceGuid()));
translateSchemaStringToUUID(tokenSpaceGuidString));
pcdType = Token.getpcdTypeFromString(pcdBuildData.getItemType().toString());
datumType = Token.getdatumTypeFromString(pcdBuildData.getDatumType().toString());
tokenNumber = Long.decode(pcdBuildData.getToken().toString());
if (pcdBuildData.getValue() != null) {
datum = pcdBuildData.getValue().toString();
} else {
@ -2135,17 +2184,6 @@ public class CollectPCDAction {
throw new EntityException(exceptionString);
}
//
// Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools
// will check that, following checking code could be removed.
//
if (pcdBuildData.getTokenSpaceGuid() == null) {
exceptionString = String.format("[FPD file error] There is no <TokenSpaceGuid> for PCD %s in module %s! This is required!",
pcdBuildData.getCName(),
moduleName);
throw new EntityException(exceptionString);
}
//
// -------------------------------------------------------------------------------------------
// 2.1.1), Do some necessary checking work for FixedAtBuild, FeatureFlag and PatchableInModule
@ -2255,8 +2293,10 @@ public class CollectPCDAction {
// If the token is not in database, create a new token instance and add
// a usage instance into this token in database.
//
//String tokenSpaceString = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName())[1];
String tokenSpaceString = null;
token = new Token(pcdBuildData.getCName(),
translateSchemaStringToUUID(pcdBuildData.getTokenSpaceGuid()));
translateSchemaStringToUUID(tokenSpaceString));
token.datumType = datumType;
token.tokenNumber = tokenNumber;
@ -2294,9 +2334,9 @@ public class CollectPCDAction {
null,
null,
null,
modules.get(index).type,
CommonDefinition.getModuleType(modules.get(index).getModuleType()),
pcdType,
modules.get(index).module.getArch().toString(),
modules.get(index).getModuleId().getArch(),
null,
datum,
maxDatumSize);
@ -2655,15 +2695,15 @@ public class CollectPCDAction {
//
if (fpdDocInstance == null) {
try {
fpdDocInstance = (FrameworkPlatformDescriptionDocument)XmlObject.Factory.parse(new File(fpdFilePath));
fpdDocInstance = (PlatformSurfaceAreaDocument)XmlObject.Factory.parse(new File(fpdFilePath));
} catch(IOException ioE) {
throw new EntityException("File IO error for xml file:" + fpdFilePath + "\n" + ioE.getMessage());
} catch(XmlException xmlE) {
throw new EntityException("Can't parse the FPD xml fle:" + fpdFilePath + "\n" + xmlE.getMessage());
}
}
dynamicPcdBuildDefinitions = fpdDocInstance.getFrameworkPlatformDescription().getDynamicPcdBuildDefinitions();
dynamicPcdBuildDefinitions = fpdDocInstance.getPlatformSurfaceArea().getDynamicPcdBuildDefinitions();
if (dynamicPcdBuildDefinitions == null) {
exceptionString = String.format("[FPD file error] There are no <PcdDynamicBuildDescriptions> in FPD file but contains Dynamic type "+
"PCD entry %s in module %s!",
@ -2674,18 +2714,10 @@ public class CollectPCDAction {
dynamicPcdBuildDataArray = dynamicPcdBuildDefinitions.getPcdBuildDataList();
for (index = 0; index < dynamicPcdBuildDataArray.size(); index ++) {
//
// Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools
// will check that, following checking code could be removed.
//
if (dynamicPcdBuildDataArray.get(index).getTokenSpaceGuid() == null) {
exceptionString = String.format("[FPD file error] There is no <TokenSpaceGuid> for PCD %s in <DynamicPcdBuildDefinitions>! This is required!",
dynamicPcdBuildDataArray.get(index).getCName());
throw new EntityException(exceptionString);
}
//String tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName())[1];
String tokenSpaceGuidString = null;
dynamicPrimaryKey = Token.getPrimaryKeyString(dynamicPcdBuildDataArray.get(index).getCName(),
translateSchemaStringToUUID(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuid()));
translateSchemaStringToUUID(tokenSpaceGuidString));
if (dynamicPrimaryKey.equalsIgnoreCase(token.getPrimaryKeyString())) {
return dynamicPcdBuildDataArray.get(index);
}
@ -2880,14 +2912,22 @@ public class CollectPCDAction {
//
// Get variable guid string according to the name of guid which will be mapped into a GUID in SPD file.
//
variableGuidString = GlobalData.getGuidInfoGuid(skuInfoList.get(index).getVariableGuid().toString());
variableGuidString = GlobalData.getGuidInfoFromCname(skuInfoList.get(index).getVariableGuid().toString());
if (variableGuidString == null) {
throw new EntityException(String.format("[GUID Error] For dynamic PCD %s, the variable guid %s can be found in all SPD file!",
token.cName,
skuInfoList.get(index).getVariableGuid().toString()));
}
skuInstance.value.setHiiData(skuInfoList.get(index).getVariableName(),
String variableStr = skuInfoList.get(index).getVariableName();
Pattern pattern = Pattern.compile("0x([a-fA-F0-9]){4}");
Matcher matcher = pattern.matcher(variableStr);
List<String> varNameList = new ArrayList<String>();
while (matcher.find()){
String str = variableStr.substring(matcher.start(),matcher.end());
varNameList.add(str);
}
skuInstance.value.setHiiData(varNameList,
translateSchemaStringToUUID(variableGuidString[1]),
skuInfoList.get(index).getVariableOffset(),
skuInfoList.get(index).getHiiDefaultValue().toString());
@ -3044,8 +3084,8 @@ public class CollectPCDAction {
ca.setWorkspacePath("m:/tianocore/edk2");
ca.setFPDFilePath("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd");
ca.setActionMessageLevel(ActionMessage.MAX_MESSAGE_LEVEL);
GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",
"m:/tianocore/edk2");
ca.execute();
// GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",
// "m:/tianocore/edk2");
// ca.execute();
}
}

View File

@ -19,11 +19,15 @@ package org.tianocore.build.pcd.action;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.xmlbeans.XmlObject;
import org.tianocore.build.global.GlobalData;
import org.tianocore.build.global.SurfaceAreaQuery;
import org.tianocore.build.pcd.entity.MemoryDatabaseManager;
import org.tianocore.build.pcd.entity.Token;
import org.tianocore.build.pcd.entity.UsageInstance;
@ -167,36 +171,167 @@ public class PCDAutoGenAction extends BuildAction {
return cAutoGenString;
}
// /**
// Construct function
//
// This function mainly initialize some member variable.
//
// @param moduleName Parameter of this action class.
// @param isEmulatedPCDDriver Parameter of this action class.
// **/
// public PCDAutoGenAction(String moduleName,
// UUID moduleGuid,
// String packageName,
// UUID packageGuid,
// String arch,
// String version,
// boolean isBuildUsedLibrary,
// String[] pcdNameArray) {
// dbManager = null;
// hAutoGenString = "";
// cAutoGenString = "";
//
// setModuleName(moduleName);
// setModuleGuid(moduleGuid);
// setPackageName(packageName);
// setPackageGuid(packageGuid);
// setPcdNameArray(pcdNameArray);
// setArch(arch);
// setVersion(version);
// setIsBuildUsedLibrary(isBuildUsedLibrary);
// }
/**
Construct function
Construct function
This function mainly initialize some member variable.
@param moduleName Parameter of this action class.
@param isEmulatedPCDDriver Parameter of this action class.
**/
public PCDAutoGenAction(String moduleName,
String moduleGuidString,
String packageName,
String packageGuidString,
String arch,
String version,
boolean isBuildUsedLibrary,
String[] pcdNameArray)
throws BuildActionException {
dbManager = null;
hAutoGenString = "";
cAutoGenString = "";
try {
setModuleName(moduleName);
setModuleGuid(translateSchemaStringToUUID(moduleGuidString));
setPackageName(packageName);
setPackageGuid(translateSchemaStringToUUID(packageGuidString));
setPcdNameArray(pcdNameArray);
setArch(arch);
setVersion(version);
setIsBuildUsedLibrary(isBuildUsedLibrary);
if (isBuildUsedLibrary) {
System.out.println("Build for library");
for (int index = 0; index < pcdNameArray.length; index ++) {
System.out.println(pcdNameArray[index]);
}
}
} catch (EntityException e){
throw new BuildActionException(e.getMessage());
}
}
/**
Translate the schema string to UUID instance.
This function mainly initialize some member variable.
@param moduleName Parameter of this action class.
@param isEmulatedPCDDriver Parameter of this action class.
**/
public PCDAutoGenAction(String moduleName,
UUID moduleGuid,
String packageName,
UUID packageGuid,
String arch,
String version,
boolean isBuildUsedLibrary,
String[] pcdNameArray) {
dbManager = null;
hAutoGenString = "";
cAutoGenString = "";
In schema, the string of UUID is defined as following two types string:
1) GuidArrayType: pattern = 0x[a-fA-F0-9]{1,8},( )*0x[a-fA-F0-9]{1,4},(
)*0x[a-fA-F0-9]{1,4}(,( )*\{)?(,?( )*0x[a-fA-F0-9]{1,2}){8}( )*(\})?
2) GuidNamingConvention: pattern =
[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}
This function will convert string and create uuid instance.
@param uuidString UUID string in XML file
@return UUID UUID instance
**/
private UUID translateSchemaStringToUUID(String uuidString)
throws EntityException {
String temp;
String[] splitStringArray;
int index;
int chIndex;
int chLen;
setModuleName(moduleName);
setModuleGuid(moduleGuid);
setPackageName(packageName);
setPackageGuid(packageGuid);
setPcdNameArray(pcdNameArray);
setArch(arch);
setVersion(version);
setIsBuildUsedLibrary(isBuildUsedLibrary);
}
if (uuidString == null) {
return null;
}
if (uuidString.length() == 0) {
return null;
}
if (uuidString.equals("0") ||
uuidString.equalsIgnoreCase("0x0")) {
return new UUID(0, 0);
}
uuidString = uuidString.replaceAll("\\{", "");
uuidString = uuidString.replaceAll("\\}", "");
//
// If the UUID schema string is GuidArrayType type then need translate
// to GuidNamingConvention type at first.
//
if ((uuidString.charAt(0) == '0') && ((uuidString.charAt(1) == 'x') || (uuidString.charAt(1) == 'X'))) {
splitStringArray = uuidString.split("," );
if (splitStringArray.length != 11) {
throw new EntityException ("[FPD file error] Wrong format for UUID string: " + uuidString);
}
//
// Remove blank space from these string and remove header string "0x"
//
for (index = 0; index < 11; index ++) {
splitStringArray[index] = splitStringArray[index].trim();
splitStringArray[index] = splitStringArray[index].substring(2, splitStringArray[index].length());
}
//
// Add heading '0' to normalize the string length
//
for (index = 3; index < 11; index ++) {
chLen = splitStringArray[index].length();
for (chIndex = 0; chIndex < 2 - chLen; chIndex ++) {
splitStringArray[index] = "0" + splitStringArray[index];
}
}
//
// construct the final GuidNamingConvention string
//
temp = String.format("%s-%s-%s-%s%s-%s%s%s%s%s%s",
splitStringArray[0],
splitStringArray[1],
splitStringArray[2],
splitStringArray[3],
splitStringArray[4],
splitStringArray[5],
splitStringArray[6],
splitStringArray[7],
splitStringArray[8],
splitStringArray[9],
splitStringArray[10]);
uuidString = temp;
}
return UUID.fromString(uuidString);
}
/**
check the parameter for action class.
@ -265,12 +400,14 @@ public class PCDAutoGenAction extends BuildAction {
dbManager.UsageInstanceContext = usageInstanceArray;
dbManager.CurrentModuleName = moduleName;
} else {
System.out.println(String.format("Generate %s 's library", dbManager.CurrentModuleName));
usageContext = dbManager.UsageInstanceContext;
//
// For building MDE package, although all module are library, but PCD entries of
// these library should be used to autogen.
//
if (usageContext == null) {
System.out.println("context is null");
usageInstanceArray = dbManager.getUsageInstanceArrayByModuleName(moduleName,
moduleGuid,
packageName,
@ -279,6 +416,7 @@ public class PCDAutoGenAction extends BuildAction {
version);
} else {
usageInstanceArray = new ArrayList<UsageInstance>();
System.out.println("context is not null!");
//
// Remove PCD entries which are not belong to this library.
//
@ -289,6 +427,7 @@ public class PCDAutoGenAction extends BuildAction {
for (index2 = 0; index2 < pcdNameArray.length; index2 ++) {
if (pcdNameArray[index2].equalsIgnoreCase(usageContext.get(index).parentToken.cName)) {
System.out.println("Found! for PCD entry " + pcdNameArray[index2]);
usageInstanceArray.add(usageContext.get(index));
break;
}
@ -404,7 +543,7 @@ public class PCDAutoGenAction extends BuildAction {
//
CollectPCDAction collectionAction = new CollectPCDAction();
GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",
WorkSpace);
WorkSpace,null);
try {
collectionAction.perform(WorkSpace,
@ -417,18 +556,18 @@ public class PCDAutoGenAction extends BuildAction {
//
// Then execute the PCDAuotoGenAction to get generated Autogen.h and Autogen.c
//
PCDAutoGenAction autogenAction = new PCDAutoGenAction("PcdPeim",
null,
null,
null,
"IA32",
null,
true,
nameArray);
autogenAction.execute();
System.out.println(autogenAction.OutputH());
System.out.println("WQWQWQWQWQ");
System.out.println(autogenAction.OutputC());
// PCDAutoGenAction autogenAction = new PCDAutoGenAction("MonoStatusCode",
// null,
// null,
// null,
// "IA32",
// null,
// false,
// nameArray);
// autogenAction.execute();
//
// System.out.println(autogenAction.OutputH());
// System.out.println("WQWQWQWQWQ");
// System.out.println(autogenAction.OutputC());
}
}

View File

@ -92,7 +92,7 @@ public class ShowPCDDatabaseAction extends UIAction {
// Initialize global data.
//
GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",
workspacePath);
workspacePath,null);
//
// Collect PCD information.

View File

@ -20,6 +20,7 @@ package org.tianocore.build.pcd.entity;
import java.util.UUID;
import org.tianocore.ModuleTypeDef;
import org.tianocore.build.autogen.CommonDefinition;
import org.tianocore.build.pcd.exception.EntityException;
/**
@ -71,7 +72,7 @@ public class UsageInstance {
///
/// The module type for this usage instance.
///
public ModuleTypeDef.Enum moduleType;
public int moduleType;
///
/// The value of the PCD in this usage instance.
@ -115,7 +116,7 @@ public class UsageInstance {
UUID moduleGUID,
String packageName,
UUID packageGUID,
ModuleTypeDef.Enum moduleType,
int moduleType,
Token.PCD_TYPE modulePcdType,
String arch,
String version,
@ -178,8 +179,8 @@ public class UsageInstance {
@return boolean
*/
public boolean isPeiPhaseComponent() {
if ((moduleType == ModuleTypeDef.PEI_CORE) ||
(moduleType == ModuleTypeDef.PEIM)) {
if ((moduleType == CommonDefinition.ModuleTypePeiCore) ||
(moduleType == CommonDefinition.ModuleTypePeim)) {
return true;
}
return false;
@ -190,12 +191,12 @@ public class UsageInstance {
// BugBug: May need confirmation on which type of module can
// make use of Dynamic(EX) PCD entry.
//
if ((moduleType == ModuleTypeDef.DXE_DRIVER) ||
(moduleType == ModuleTypeDef.DXE_RUNTIME_DRIVER) ||
(moduleType == ModuleTypeDef.DXE_SAL_DRIVER) ||
(moduleType == ModuleTypeDef.DXE_SMM_DRIVER) ||
(moduleType == ModuleTypeDef.UEFI_DRIVER) ||
(moduleType == ModuleTypeDef.UEFI_APPLICATION)
if ((moduleType == CommonDefinition.ModuleTypeDxeDriver) ||
(moduleType == CommonDefinition.ModuleTypeDxeRuntimeDriver) ||
(moduleType == CommonDefinition.ModuleTypeDxeSalDriver) ||
(moduleType == CommonDefinition.ModuleTypeDxeSmmDriver) ||
(moduleType == CommonDefinition.ModuleTypeUefiDriver) ||
(moduleType == CommonDefinition.ModuleTypeUefiApplication)
) {
return true;
}

View File

@ -14,7 +14,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
package org.tianocore.build.toolchain;
import org.tianocore.build.exception.EdkException;
import org.tianocore.exception.EdkException;
import java.io.BufferedReader;
import java.io.File;

View File

@ -17,7 +17,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
package org.tianocore.build.toolchain;
import org.apache.tools.ant.BuildException;
import org.tianocore.build.exception.EdkException;
import org.tianocore.exception.EdkException;
import org.tianocore.build.toolchain.ToolChainKey;
import org.tianocore.build.toolchain.ToolChainMap;

View File

@ -24,7 +24,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import org.tianocore.build.exception.EdkException;
import org.tianocore.exception.EdkException;
public class ToolChainKey implements java.io.Serializable, Comparable<ToolChainKey> {

View File

@ -22,7 +22,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.tianocore.build.exception.EdkException;
import org.tianocore.exception.EdkException;
public class ToolChainMap {