--- /dev/null
+#ifndef _VFRCOMPILER_H_\r
+#define _VFRCOMPILER_H_\r
+\r
+#include "Tiano.h"\r
+#include "EfiTypes.h"\r
+#include "EfiVfr.h"\r
+#include "VfrFormPkg.h"\r
+#include "VfrUtilityLib.h"\r
+\r
+#define PROGRAM_NAME "VfrCompile"\r
+#define VFR_COMPILER_VERSION "UEFI 2.1"\r
+\r
+//\r
+// This is how we invoke the C preprocessor on the VFR source file\r
+// to resolve #defines, #includes, etc. To make C source files\r
+// shareable between VFR and drivers, define VFRCOMPILE so that\r
+// #ifdefs can be used in shared .h files.\r
+//\r
+#define PREPROCESSOR_COMMAND "cl "\r
+#define PREPROCESSOR_OPTIONS "/nologo /E /TC /DVFRCOMPILE "\r
+\r
+//\r
+// Specify the filename extensions for the files we generate.\r
+//\r
+#define VFR_PREPROCESS_FILENAME_EXTENSION ".i"\r
+#define VFR_PACKAGE_FILENAME_EXTENSION ".hpk"\r
+#define VFR_RECORDLIST_FILENAME_EXTENSION ".lst"\r
+\r
+typedef struct {\r
+ INT8 VfrFileName[MAX_PATH];\r
+ INT8 RecordListFile[MAX_PATH];\r
+ INT8 PkgOutputFileName[MAX_PATH];\r
+ INT8 COutputFileName[MAX_PATH];\r
+ bool CreateRecordListFile;\r
+ bool CreateIfrPkgFile;\r
+ INT8 OutputDirectory[MAX_PATH];\r
+ INT8 PreprocessorOutputFileName[MAX_PATH];\r
+ INT8 VfrBaseFileName[MAX_PATH]; // name of input VFR file with no path or extension\r
+ INT8 *IncludePaths;\r
+ INT8 *CPreprocessorOptions;\r
+} OPTIONS;\r
+\r
+typedef enum {\r
+ STATUS_INITIALIZED = 1,\r
+ STATUS_PREPROCESSED,\r
+ STATUS_COMPILEED,\r
+ STATUS_GENBINARY,\r
+ STATUS_FINISHED,\r
+ STATUS_FAILED,\r
+ STATUS_DEAD,\r
+} COMPILER_RUN_STATUS;\r
+\r
+class CVfrCompiler {\r
+private:\r
+ COMPILER_RUN_STATUS mRunStatus;\r
+ OPTIONS mOptions;\r
+ INT8 *mPreProcessCmd;\r
+ INT8 *mPreProcessOpt;\r
+\r
+ VOID OptionInitialization (IN INT32 , IN INT8 **);\r
+ VOID AppendIncludePath (IN INT8 *);\r
+ VOID AppendCPreprocessorOptions (IN INT8 *);\r
+ INT8 SetBaseFileName (VOID);\r
+ INT8 SetPkgOutputFileName (VOID);\r
+ INT8 SetCOutputFileName(VOID);\r
+ INT8 SetPreprocessorOutputFileName (VOID);\r
+ INT8 SetRecordListFileName (VOID);\r
+\r
+ VOID SET_RUN_STATUS (IN COMPILER_RUN_STATUS);\r
+ BOOLEAN IS_RUN_STATUS (IN COMPILER_RUN_STATUS);\r
+\r
+public:\r
+ COMPILER_RUN_STATUS RunStatus (VOID) {\r
+ return mRunStatus;\r
+ }\r
+\r
+public:\r
+ CVfrCompiler (IN INT32 , IN INT8 **);\r
+ ~CVfrCompiler ();\r
+\r
+ VOID Usage (VOID);\r
+\r
+ VOID PreProcess (VOID);\r
+ VOID Compile (VOID);\r
+ VOID GenBinary (VOID);\r
+ VOID GenCFile (VOID);\r
+ VOID GenRecordListFile (VOID);\r
+};\r
+\r
+#endif\r