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