1 /** @file 2 3 VfrCompiler internal defintions. 4 5 Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef _VFRCOMPILER_H_ 17 #define _VFRCOMPILER_H_ 18 19 #include "Common/UefiBaseTypes.h" 20 #include "EfiVfr.h" 21 #include "VfrFormPkg.h" 22 #include "VfrUtilityLib.h" 23 #include "ParseInf.h" 24 25 #define PROGRAM_NAME "VfrCompile" 26 #define VFR_COMPILER_VERSION " 2.00 (UEFI 2.4) " 27 // 28 // This is how we invoke the C preprocessor on the VFR source file 29 // to resolve #defines, #includes, etc. To make C source files 30 // shareable between VFR and drivers, define VFRCOMPILE so that 31 // #ifdefs can be used in shared .h files. 32 // 33 #define PREPROCESSOR_COMMAND "cl " 34 #define PREPROCESSOR_OPTIONS "/nologo /E /TC /DVFRCOMPILE " 35 36 // 37 // Specify the filename extensions for the files we generate. 38 // 39 #define VFR_PREPROCESS_FILENAME_EXTENSION ".i" 40 #define VFR_PACKAGE_FILENAME_EXTENSION ".hpk" 41 #define VFR_RECORDLIST_FILENAME_EXTENSION ".lst" 42 43 typedef struct { 44 CHAR8 VfrFileName[MAX_PATH]; 45 CHAR8 RecordListFile[MAX_PATH]; 46 CHAR8 PkgOutputFileName[MAX_PATH]; 47 CHAR8 COutputFileName[MAX_PATH]; 48 bool CreateRecordListFile; 49 bool CreateIfrPkgFile; 50 CHAR8 OutputDirectory[MAX_PATH]; 51 CHAR8 PreprocessorOutputFileName[MAX_PATH]; 52 CHAR8 VfrBaseFileName[MAX_PATH]; // name of input VFR file with no path or extension 53 CHAR8 *IncludePaths; 54 bool SkipCPreprocessor; 55 CHAR8 *CPreprocessorOptions; 56 BOOLEAN CompatibleMode; 57 BOOLEAN HasOverrideClassGuid; 58 EFI_GUID OverrideClassGuid; 59 BOOLEAN WarningAsError; 60 } OPTIONS; 61 62 typedef enum { 63 STATUS_STARTED = 0, 64 STATUS_INITIALIZED, 65 STATUS_PREPROCESSED, 66 STATUS_COMPILEED, 67 STATUS_GENBINARY, 68 STATUS_FINISHED, 69 STATUS_FAILED, 70 STATUS_DEAD, 71 } COMPILER_RUN_STATUS; 72 73 class CVfrCompiler { 74 private: 75 COMPILER_RUN_STATUS mRunStatus; 76 OPTIONS mOptions; 77 CHAR8 *mPreProcessCmd; 78 CHAR8 *mPreProcessOpt; 79 80 VOID OptionInitialization (IN INT32 , IN CHAR8 **); 81 VOID AppendIncludePath (IN CHAR8 *); 82 VOID AppendCPreprocessorOptions (IN CHAR8 *); 83 INT8 SetBaseFileName (VOID); 84 INT8 SetPkgOutputFileName (VOID); 85 INT8 SetCOutputFileName(VOID); 86 INT8 SetPreprocessorOutputFileName (VOID); 87 INT8 SetRecordListFileName (VOID); 88 89 VOID SET_RUN_STATUS (IN COMPILER_RUN_STATUS); 90 BOOLEAN IS_RUN_STATUS (IN COMPILER_RUN_STATUS); 91 VOID UpdateInfoForDynamicOpcode (VOID); 92 93 public: RunStatus(VOID)94 COMPILER_RUN_STATUS RunStatus (VOID) { 95 return mRunStatus; 96 } 97 98 public: 99 CVfrCompiler (IN INT32 , IN CHAR8 **); 100 ~CVfrCompiler (); 101 102 VOID Usage (VOID); 103 VOID Version (VOID); 104 105 VOID PreProcess (VOID); 106 VOID Compile (VOID); 107 VOID AdjustBin (VOID); 108 VOID GenBinary (VOID); 109 VOID GenCFile (VOID); 110 VOID GenRecordListFile (VOID); 111 VOID DebugError (IN CHAR8*, IN UINT32, IN UINT32, IN CONST CHAR8*, IN CONST CHAR8*, ...); 112 }; 113 114 #endif 115