1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/** @file
VfrCompiler internal defintions.
Copyright (c) 2004 - 2008, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _VFRCOMPILER_H_
#define _VFRCOMPILER_H_
#include "Common/UefiBaseTypes.h"
#include "EfiVfr.h"
#include "VfrFormPkg.h"
#include "VfrUtilityLib.h"
#define PROGRAM_NAME "VfrCompile"
#define VFR_COMPILER_VERSION " 1.95 (UEFI 2.1)"
#define VFR_COMPILER_UPDATE_TIME " updated on 2009/05/20"
//
// 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 {
CHAR8 VfrFileName[MAX_PATH];
CHAR8 RecordListFile[MAX_PATH];
CHAR8 PkgOutputFileName[MAX_PATH];
CHAR8 COutputFileName[MAX_PATH];
bool CreateRecordListFile;
bool CreateIfrPkgFile;
CHAR8 OutputDirectory[MAX_PATH];
CHAR8 PreprocessorOutputFileName[MAX_PATH];
CHAR8 VfrBaseFileName[MAX_PATH]; // name of input VFR file with no path or extension
CHAR8 *IncludePaths;
bool SkipCPreprocessor;
CHAR8 *CPreprocessorOptions;
BOOLEAN CompatibleMode;
} 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;
CHAR8 *mPreProcessCmd;
CHAR8 *mPreProcessOpt;
VOID OptionInitialization (IN INT32 , IN CHAR8 **);
VOID AppendIncludePath (IN CHAR8 *);
VOID AppendCPreprocessorOptions (IN CHAR8 *);
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 CHAR8 **);
~CVfrCompiler ();
VOID Usage (VOID);
VOID PreProcess (VOID);
VOID Compile (VOID);
VOID AdjustBin (VOID);
VOID GenBinary (VOID);
VOID GenCFile (VOID);
VOID GenRecordListFile (VOID);
VOID DebugError (VOID);
};
#endif
|