summaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorqouyang <qouyang@6f19259b-4bc3-4df7-8a09-765794883524>2006-07-11 08:19:18 +0000
committerqouyang <qouyang@6f19259b-4bc3-4df7-8a09-765794883524>2006-07-11 08:19:18 +0000
commit73b4e31adc1000ff7b066445af347424c7f67535 (patch)
treefca31eb29bab068edba857faf8e9b7c3aed875ba /Tools
parent4748b24d77d65a13dd2bcb0f9fa9ed83f24f9bf4 (diff)
downloadedk2-platforms-73b4e31adc1000ff7b066445af347424c7f67535.tar.xz
EDKT96.
Build tools need to auto-generated the FlashMap.h from .fdf file before a module is built, and then included by Autogen.h based on attributes of module in build time, and copy FlashMap.h to Module\DEBUG dir and change "FlashMap.h" to "TianoR8FlashMap.h". git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@874 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'Tools')
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java2
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java86
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java3
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/global/GlobalData.java29
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java20
5 files changed, 106 insertions, 34 deletions
diff --git a/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java b/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
index c01ca93985..665ab89232 100644
--- a/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
+++ b/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
@@ -542,7 +542,7 @@ public class GenBuildTask extends Ant {
// AutoGen
//
- AutoGen autogen = new AutoGen(getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());
+ AutoGen autogen = new AutoGen(getProject().getProperty("FV_DIR"), getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());
autogen.genAutogen();
diff --git a/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java b/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java
index 3aff06f956..e36945501b 100644
--- a/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java
+++ b/Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java
@@ -17,22 +17,9 @@
package org.tianocore.build.autogen;
-import org.tianocore.build.global.GlobalData;
-import org.tianocore.build.global.Spd;
-import org.tianocore.build.global.SurfaceAreaQuery;
-import org.tianocore.build.id.ModuleIdentification;
-import org.tianocore.build.id.PackageIdentification;
-import org.tianocore.GuidsDocument;
-import org.tianocore.LibraryClassDocument.LibraryClass;
-import org.tianocore.PPIsDocument;
-import org.tianocore.ProtocolsDocument;
-import org.tianocore.build.pcd.action.PCDAutoGenAction;
-import org.tianocore.build.exception.*;
-import org.tianocore.logger.EdkLog;
-import org.apache.tools.ant.BuildException;
-import org.apache.xmlbeans.XmlObject;
-
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
@@ -43,6 +30,21 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.tools.ant.BuildException;
+import org.apache.xmlbeans.XmlObject;
+import org.tianocore.GuidsDocument;
+import org.tianocore.LibraryClassDocument.LibraryClass;
+import org.tianocore.PPIsDocument;
+import org.tianocore.ProtocolsDocument;
+import org.tianocore.build.exception.*;
+import org.tianocore.build.global.GlobalData;
+import org.tianocore.build.global.Spd;
+import org.tianocore.build.global.SurfaceAreaQuery;
+import org.tianocore.build.id.ModuleIdentification;
+import org.tianocore.build.id.PackageIdentification;
+import org.tianocore.build.pcd.action.PCDAutoGenAction;
+import org.tianocore.logger.EdkLog;
+
/**
* This class is to generate Autogen.h and Autogen.c according to module surface
* area or library surface area.
@@ -52,7 +54,10 @@ public class AutoGen {
// / The output path of Autogen.h and Autogen.c
// /
private String outputPath;
-
+ ///
+ /// The name of FV directory
+ ///
+ private String fvDir;
// /
// / The base name of module or library.
// /
@@ -104,10 +109,11 @@ public class AutoGen {
* @param arch
* Target architecture.
*/
- public AutoGen(String outputPath, ModuleIdentification moduleId, String arch) {
+ public AutoGen(String fvDir, String outputPath, ModuleIdentification moduleId, String arch) {
this.outputPath = outputPath;
this.moduleId = moduleId;
this.arch = arch;
+ this.fvDir = fvDir;
}
@@ -316,7 +322,17 @@ public class AutoGen {
}
fileBuffer.append("\r\n");
- //
+ //
+ // If is TianoR8FlashMap, copy {Fv_DIR}/FlashMap.h to
+ // {DEST_DIR_DRBUG}/FlashMap.h
+ //
+ if (SurfaceAreaQuery.isHaveTianoR8FlashMap()) {
+ fileBuffer.append(CommonDefinition.include);
+ fileBuffer.append(" <");
+ fileBuffer.append(CommonDefinition.tianoR8FlashMapH + ">\r\n");
+ copyFlashMapHToDebugDir();
+ }
+
// Write PCD autogen information to AutoGen.h.
//
if (this.myPcdAutogen != null) {
@@ -544,6 +560,17 @@ public class AutoGen {
}
fileBuffer.append("\r\n");
+ //
+ // If is TianoR8FlashMap, copy {Fv_DIR}/FlashMap.h to
+ // {DEST_DIR_DRBUG}/FlashMap.h
+ //
+ if (SurfaceAreaQuery.isHaveTianoR8FlashMap()) {
+ fileBuffer.append(CommonDefinition.include);
+ fileBuffer.append(" <");
+ fileBuffer.append(CommonDefinition.tianoR8FlashMapH + ">\r\n");
+ copyFlashMapHToDebugDir();
+ }
+
//
// Write PCD information to library AutoGen.h.
//
@@ -2029,4 +2056,27 @@ public class AutoGen {
}
+ private void copyFlashMapHToDebugDir() throws AutoGenException{
+
+ File inFile = new File(fvDir + File.separatorChar + CommonDefinition.flashMapH);
+ int size = (int)inFile.length();
+ byte[] buffer = new byte[size];
+ File outFile = new File (this.outputPath + File.separatorChar + CommonDefinition.tianoR8FlashMapH);
+ try{
+ if (inFile.exists()) {
+ FileInputStream fis = new FileInputStream (inFile);
+ fis.read(buffer);
+ FileOutputStream fos = new FileOutputStream(outFile);
+ fos.write(buffer);
+ fis.close();
+ fos.close();
+ }else {
+ throw new AutoGenException("The flashMap.h file don't exist!!");
+ }
+ } catch (Exception e){
+ throw new AutoGenException(e.getMessage());
+ }
+
+ }
+
} \ No newline at end of file
diff --git a/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java b/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java
index ad245edd17..5f83e4d9df 100644
--- a/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java
+++ b/Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java
@@ -54,6 +54,9 @@ public class CommonDefinition {
public final static String protocolGuid = "ProtocolGuid";
public final static String ppiGuid = "PpiGuid";
public final static String guidGuid = "Guid";
+
+ public final static String tianoR8FlashMapH = "TianoR8FlashMap.h";
+ public final static String flashMapH = "FlashMap.h";
//
// AutoGen.h and AutoGen.c file's header
diff --git a/Tools/Source/GenBuild/org/tianocore/build/global/GlobalData.java b/Tools/Source/GenBuild/org/tianocore/build/global/GlobalData.java
index 51f198571a..19725167c5 100644
--- a/Tools/Source/GenBuild/org/tianocore/build/global/GlobalData.java
+++ b/Tools/Source/GenBuild/org/tianocore/build/global/GlobalData.java
@@ -16,13 +16,23 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
package org.tianocore.build.global;
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
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.PcdBuildDefinitionDocument;
import org.tianocore.build.id.FpdModuleIdentification;
import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PackageIdentification;
@@ -37,15 +47,6 @@ import org.tianocore.build.toolchain.ToolChainMap;
import org.tianocore.exception.EdkException;
import org.tianocore.logger.EdkLog;
-import java.io.File;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-
/**
GlobalData provide initializing, instoring, querying and update global data.
It is a bridge to intercommunicate between multiple component, such as AutoGen,
@@ -133,8 +134,6 @@ public class GlobalData {
private static final MemoryDatabaseManager pcdDbManager = new MemoryDatabaseManager();
-
-
/**
Parse framework database (DB) and all SPD files listed in DB to initialize
the environment for next build. This method will only be executed only once
@@ -145,7 +144,7 @@ public class GlobalData {
@throws BuildException
Framework Dababase or SPD or MSA file is not valid
**/
- public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename) throws BuildException {
+ public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename ) throws BuildException {
//
// ensure this method will be revoked only once
//
@@ -153,8 +152,8 @@ public class GlobalData {
return;
}
globalFlag = true;
-
- //
+
+ //
// Backup workspace directory. It will be used by other method
//
GlobalData.workspaceDir = workspaceDir.replaceAll("(\\\\)", "/");
diff --git a/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java b/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java
index 37c60643e7..c2918b7b3b 100644
--- a/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java
+++ b/Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java
@@ -1916,4 +1916,24 @@ public class SurfaceAreaQuery {
return false;
}
+
+ public static boolean isHaveTianoR8FlashMap(){
+ PcdCodedDocument.PcdCoded.PcdEntry[] pcdEntries = null;
+ String[] results;
+ int index;
+ String[] xPath = new String[] {"/"};
+ Object[] returns = get ("Externs", xPath);
+
+ if (returns == null) {
+ return false;
+ }
+
+ ExternsDocument.Externs ext = (ExternsDocument.Externs)returns[0];
+
+ if (ext.getTianoR8FlashMapH()){
+ return true;
+ }else {
+ return false;
+ }
+ }
}