summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VfrCompile/VfrCompiler.h
blob: ce10a58b80554c0cc528bca3415f4679959cf3c6 (plain)
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 definitions.

Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _VFRCOMPILER_H_
#define _VFRCOMPILER_H_

#include "Common/UefiBaseTypes.h"
#include "EfiVfr.h"
#include "VfrFormPkg.h"
#include "VfrUtilityLib.h"
#include "ParseInf.h"

#define PROGRAM_NAME                       "VfrCompile"
#define VFR_COMPILER_VERSION               " 2.01 (UEFI 2.4) "
//
// 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;
  CHAR8   *RecordListFile;
  CHAR8   *PkgOutputFileName;
  CHAR8   *COutputFileName;
  bool    CreateRecordListFile;
  bool    CreateIfrPkgFile;
  CHAR8   *OutputDirectory;
  CHAR8   *PreprocessorOutputFileName;
  CHAR8   *VfrBaseFileName;  // name of input VFR file with no path or extension
  CHAR8   *IncludePaths;
  bool    SkipCPreprocessor;
  CHAR8   *CPreprocessorOptions;
  BOOLEAN HasOverrideClassGuid;
  EFI_GUID OverrideClassGuid;
  BOOLEAN WarningAsError;
  BOOLEAN AutoDefault;
  BOOLEAN CheckDefault;
} OPTIONS;

typedef enum {
  STATUS_STARTED = 0,
  STATUS_INITIALIZED,
  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                Version (VOID);

  VOID                PreProcess (VOID);
  VOID                Compile (VOID);
  VOID                AdjustBin (VOID);
  VOID                GenBinary (VOID);
  VOID                GenCFile (VOID);
  VOID                GenRecordListFile (VOID);
  VOID                DebugError (IN CHAR8*, IN UINT32, IN UINT32, IN CONST CHAR8*, IN CONST CHAR8*, ...);
};

#endif