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