\r
package org.tianocore.build.autogen;\r
\r
-import org.tianocore.build.global.GlobalData;\r
-import org.tianocore.build.global.Spd;\r
-import org.tianocore.build.global.SurfaceAreaQuery;\r
-import org.tianocore.build.id.ModuleIdentification;\r
-import org.tianocore.build.id.PackageIdentification;\r
-import org.tianocore.GuidsDocument;\r
-import org.tianocore.LibraryClassDocument.LibraryClass;\r
-import org.tianocore.PPIsDocument;\r
-import org.tianocore.ProtocolsDocument;\r
-import org.tianocore.build.pcd.action.PCDAutoGenAction;\r
-import org.tianocore.build.exception.*;\r
-import org.tianocore.logger.EdkLog;\r
-import org.apache.tools.ant.BuildException;\r
-import org.apache.xmlbeans.XmlObject;\r
-\r
import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
import java.io.FileReader;\r
import java.io.FileWriter;\r
import java.util.ArrayList;\r
import java.util.Map;\r
import java.util.Set;\r
\r
+import org.apache.tools.ant.BuildException;\r
+import org.apache.xmlbeans.XmlObject;\r
+import org.tianocore.GuidsDocument;\r
+import org.tianocore.LibraryClassDocument.LibraryClass;\r
+import org.tianocore.PPIsDocument;\r
+import org.tianocore.ProtocolsDocument;\r
+import org.tianocore.build.exception.*;\r
+import org.tianocore.build.global.GlobalData;\r
+import org.tianocore.build.global.Spd;\r
+import org.tianocore.build.global.SurfaceAreaQuery;\r
+import org.tianocore.build.id.ModuleIdentification;\r
+import org.tianocore.build.id.PackageIdentification;\r
+import org.tianocore.build.pcd.action.PCDAutoGenAction;\r
+import org.tianocore.logger.EdkLog;\r
+\r
/**\r
* This class is to generate Autogen.h and Autogen.c according to module surface\r
* area or library surface area.\r
// / The output path of Autogen.h and Autogen.c\r
// /\r
private String outputPath;\r
-\r
+ /// \r
+ /// The name of FV directory \r
+ /// \r
+ private String fvDir;\r
// /\r
// / The base name of module or library.\r
// /\r
* @param arch\r
* Target architecture.\r
*/\r
- public AutoGen(String outputPath, ModuleIdentification moduleId, String arch) {\r
+ public AutoGen(String fvDir, String outputPath, ModuleIdentification moduleId, String arch) {\r
this.outputPath = outputPath;\r
this.moduleId = moduleId;\r
this.arch = arch;\r
+ this.fvDir = fvDir;\r
\r
}\r
\r
}\r
fileBuffer.append("\r\n");\r
\r
- //\r
+ //\r
+ // If is TianoR8FlashMap, copy {Fv_DIR}/FlashMap.h to \r
+ // {DEST_DIR_DRBUG}/FlashMap.h\r
+ // \r
+ if (SurfaceAreaQuery.isHaveTianoR8FlashMap()) {\r
+ fileBuffer.append(CommonDefinition.include);\r
+ fileBuffer.append(" <");\r
+ fileBuffer.append(CommonDefinition.tianoR8FlashMapH + ">\r\n");\r
+ copyFlashMapHToDebugDir();\r
+ }\r
+\r
// Write PCD autogen information to AutoGen.h.\r
//\r
if (this.myPcdAutogen != null) {\r
}\r
fileBuffer.append("\r\n");\r
\r
+ //\r
+ // If is TianoR8FlashMap, copy {Fv_DIR}/FlashMap.h to \r
+ // {DEST_DIR_DRBUG}/FlashMap.h\r
+ // \r
+ if (SurfaceAreaQuery.isHaveTianoR8FlashMap()) {\r
+ fileBuffer.append(CommonDefinition.include);\r
+ fileBuffer.append(" <");\r
+ fileBuffer.append(CommonDefinition.tianoR8FlashMapH + ">\r\n");\r
+ copyFlashMapHToDebugDir();\r
+ }\r
+\r
//\r
// Write PCD information to library AutoGen.h.\r
//\r
\r
}\r
\r
+ private void copyFlashMapHToDebugDir() throws AutoGenException{\r
+ \r
+ File inFile = new File(fvDir + File.separatorChar + CommonDefinition.flashMapH);\r
+ int size = (int)inFile.length();\r
+ byte[] buffer = new byte[size];\r
+ File outFile = new File (this.outputPath + File.separatorChar + CommonDefinition.tianoR8FlashMapH);\r
+ try{\r
+ if (inFile.exists()) {\r
+ FileInputStream fis = new FileInputStream (inFile);\r
+ fis.read(buffer);\r
+ FileOutputStream fos = new FileOutputStream(outFile);\r
+ fos.write(buffer);\r
+ fis.close();\r
+ fos.close();\r
+ }else {\r
+ throw new AutoGenException("The flashMap.h file don't exist!!");\r
+ }\r
+ } catch (Exception e){\r
+ throw new AutoGenException(e.getMessage());\r
+ }\r
+ \r
+ }\r
+\r
}
\ No newline at end of file
**/\r
package org.tianocore.build.global;\r
\r
+import java.io.File;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+import java.util.logging.Logger;\r
+\r
import org.apache.tools.ant.BuildException;\r
+import org.apache.tools.ant.Project;\r
import org.apache.xmlbeans.XmlObject;\r
import org.tianocore.DbPathAndFilename;\r
import org.tianocore.FrameworkDatabaseDocument;\r
import org.tianocore.ModuleSurfaceAreaDocument;\r
-import org.tianocore.PcdBuildDefinitionDocument;\r
import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
+import org.tianocore.PcdBuildDefinitionDocument;\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.exception.EdkException;\r
import org.tianocore.logger.EdkLog;\r
\r
-import java.io.File;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-import java.util.logging.Logger;\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
private static final MemoryDatabaseManager pcdDbManager = new MemoryDatabaseManager();\r
\r
- \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
@throws BuildException\r
Framework Dababase or SPD or MSA file is not valid\r
**/\r
- public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename) throws BuildException {\r
+ public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename ) throws BuildException {\r
//\r
// ensure this method will be revoked only once\r
//\r
return;\r
}\r
globalFlag = true;\r
- \r
- //\r
+\r
+ // \r
// Backup workspace directory. It will be used by other method\r
//\r
GlobalData.workspaceDir = workspaceDir.replaceAll("(\\\\)", "/");\r