#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