From bd4814401e1277f19fa1498dbd187dca68923b47 Mon Sep 17 00:00:00 2001 From: klu2 Date: Wed, 16 Aug 2006 13:59:00 +0000 Subject: [PATCH 1/1] Fix the track EDKT187: If a module do not use PCD, PcdLib library class need not be exist in its MSA file. The fixing is judge whether the module's library instance use PCD, if use, build tools will add PcdLib into module's autogen.h automatically. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1297 6f19259b-4bc3-4df7-8a09-765794883524 --- .../org/tianocore/build/autogen/AutoGen.java | 40 +++++++++++++++++-- .../build/autogen/CommonDefinition.java | 2 + .../build/global/SurfaceAreaQuery.java | 7 ++-- 3 files changed, 41 insertions(+), 8 deletions(-) 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; } -- 2.39.2