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