diff --git a/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java b/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java index f3b107712e..28e72af699 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java +++ b/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java @@ -83,6 +83,11 @@ public class AutoGen { /// private CommonDefinition.PCD_DRIVER_TYPE pcdDriverType; + /// + /// Judge whether this module's library instance use PcdLib library class + /// + private boolean isModuleLibraryInstanceUsePcd; + /// /// The protocl list which records in module or library surface area and /// it's dependence on library instance surface area. @@ -328,6 +333,28 @@ public class AutoGen { // String[] libClassList = SurfaceAreaQuery .getLibraryClasses(CommonDefinition.AlwaysConsumed,this.arch); + boolean isModuleConsumePcdLib = false; + List libClassArray = new ArrayList(); + for (int index = 0; index < libClassList.length; index++) { + libClassArray.add(libClassList[index]); + // + // Search all library class of a module for PcdLib + // + if (libClassList[index].equalsIgnoreCase(CommonDefinition.pcdLibName)) { + isModuleConsumePcdLib = true; + } + } + + // + // If module do not use PCD but module's library use PCD. + // + if (!isModuleConsumePcdLib && this.isModuleLibraryInstanceUsePcd) { + libClassArray.add(CommonDefinition.pcdLibName); + } + + libClassList = new String[libClassArray.size()]; + libClassArray.toArray(libClassList); + if (libClassList != null) { libClassIncludeH = LibraryClassToAutogenH(libClassList); item = libClassIncludeH.iterator(); @@ -679,7 +706,6 @@ public class AutoGen { // Get include file from GlobalData's SPDTable according to // library class name. // - for (int i = 0; i < libClassList.length; i++) { includerName = GlobalData.getLibraryClassHeaderFiles( SurfaceAreaQuery.getDependencePkg(this.arch), @@ -2050,8 +2076,7 @@ public class AutoGen { // Get override map // - Map libDoc = GlobalData.getDoc( - libInstanceId, this.arch); + Map libDoc = GlobalData.getDoc(libInstanceId, this.arch); SurfaceAreaQuery.push(libDoc); // // Get , , list of this library @@ -2066,6 +2091,9 @@ public class AutoGen { .getProtocolNotifyArray(this.arch); String[] guidList = SurfaceAreaQuery .getGuidEntryArray(this.arch); + String[] libraryClassList = SurfaceAreaQuery.getLibraryClasses( + CommonDefinition.AlwaysConsumed, + this.arch); PackageIdentification[] pkgList = SurfaceAreaQuery.getDependencePkg(this.arch); // @@ -2097,7 +2125,11 @@ public class AutoGen { this.mDepPkgList.add(pkgList[index]); } } - + for (index = 0; index < libraryClassList.length; index++) { + if (libraryClassList[index].equalsIgnoreCase(CommonDefinition.pcdLibName)) { + this.isModuleLibraryInstanceUsePcd = true; + } + } // // If not yet parse this library instance's constructor // element,parse it. diff --git a/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java b/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java index 335ff8f9d4..12deec7d53 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java +++ b/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java @@ -59,6 +59,8 @@ public class CommonDefinition { public final static String tianoR8FlashMapH = "TianoR8FlashMap.h"; public final static String flashMapH = "FlashMap.h"; + public final static String pcdLibName = "PcdLib"; + // // The defintions for identifying current module // is PEI Pcd driver or Dxe Pcd driver. diff --git a/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java b/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java index 4b5e1ff181..1086bb8d49 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java +++ b/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java @@ -624,10 +624,9 @@ public class SurfaceAreaQuery { libraryClassName.add(libraryClassList[i].getKeyword()); } } - String[] libraryArray = new String[libraryClassName.size()]; - for (int i = 0; i < libraryClassName.size(); i++) { - libraryArray[i] = libraryClassName.get(i); - } + + String[] libraryArray = new String[libraryClassName.size()]; + libraryClassName.toArray(libraryArray); return libraryArray; }