/
main_options.h
238 lines (200 loc) · 9.62 KB
/
main_options.h
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef RUNTIME_BIN_MAIN_OPTIONS_H_
#define RUNTIME_BIN_MAIN_OPTIONS_H_
#include "bin/dartutils.h"
#include "bin/dfe.h"
#include "platform/globals.h"
#include "platform/growable_array.h"
#include "platform/hashmap.h"
namespace dart {
namespace bin {
// A list of options taking string arguments. Organized as:
// V(flag_name, field_name)
// The value of the flag can then be accessed with Options::field_name().
#define STRING_OPTIONS_LIST(V) \
V(packages, packages_file) \
V(snapshot, snapshot_filename) \
V(snapshot_depfile, snapshot_deps_filename) \
V(depfile, depfile) \
V(depfile_output_filename, depfile_output_filename) \
V(root_certs_file, root_certs_file) \
V(root_certs_cache, root_certs_cache) \
V(namespace, namespc) \
V(write_service_info, vm_write_service_info_filename)
// As STRING_OPTIONS_LIST but for boolean valued options. The default value is
// always false, and the presence of the flag switches the value to true.
#define BOOL_OPTIONS_LIST(V) \
V(version, version_option) \
V(compile_all, compile_all) \
V(disable_service_origin_check, vm_service_dev_mode) \
V(disable_service_auth_codes, vm_service_auth_disabled) \
V(deterministic, deterministic) \
V(trace_loading, trace_loading) \
V(short_socket_read, short_socket_read) \
V(short_socket_write, short_socket_write) \
V(disable_exit, exit_disabled) \
V(preview_dart_2, nop_option) \
V(suppress_core_dump, suppress_core_dump) \
V(enable_service_port_fallback, enable_service_port_fallback) \
V(disable_dart_dev, disable_dart_dev) \
V(no_dds, disable_dds) \
V(long_ssl_cert_evaluation, long_ssl_cert_evaluation) \
V(bypass_trusting_system_roots, bypass_trusting_system_roots) \
V(delayed_filewatch_callback, delayed_filewatch_callback) \
V(mark_main_isolate_as_system_isolate, mark_main_isolate_as_system_isolate) \
V(no_serve_observatory, disable_observatory)
// Boolean flags that have a short form.
#define SHORT_BOOL_OPTIONS_LIST(V) \
V(h, help, help_option) \
V(v, verbose, verbose_option)
#define DEBUG_BOOL_OPTIONS_LIST(V) \
V(force_load_elf_from_memory, force_load_elf_from_memory)
// A list of flags taking arguments from an enum. Organized as:
// V(flag_name, enum_type, field_name)
// In main_options.cc there must be a list of strings that matches the enum
// called k{enum_type}Names. The field is not automatically declared in
// main_options.cc. It must be explicitly declared.
#define ENUM_OPTIONS_LIST(V) \
V(snapshot_kind, SnapshotKind, gen_snapshot_kind) \
V(verbosity, VerbosityLevel, verbosity)
// Callbacks passed to DEFINE_CB_OPTION().
#define CB_OPTIONS_LIST(V) \
V(ProcessEnvironmentOption) \
V(ProcessEnableVmServiceOption) \
V(ProcessObserveOption) \
V(ProcessVMDebuggingOptions)
// This enum must match the strings in kSnapshotKindNames in main_options.cc.
enum SnapshotKind {
kNone,
kKernel,
kAppJIT,
};
// This enum must match the strings in kVerbosityLevelNames in main_options.cc.
enum VerbosityLevel {
kError,
kWarning,
kInfo,
kAll,
};
static constexpr const char* DEFAULT_VM_SERVICE_SERVER_IP = "localhost";
static constexpr int DEFAULT_VM_SERVICE_SERVER_PORT = 8181;
static constexpr int INVALID_VM_SERVICE_SERVER_PORT = -1;
class Options {
public:
// Returns true if argument parsing succeeded. False otherwise.
static bool ParseArguments(int argc,
char** argv,
bool vm_run_app_shapshot,
CommandLineOptions* vm_options,
char** script_name,
CommandLineOptions* dart_options,
bool* print_flags_seen,
bool* verbose_debug_seen);
#define STRING_OPTION_GETTER(flag, variable) \
static const char* variable() { return variable##_; }
STRING_OPTIONS_LIST(STRING_OPTION_GETTER)
#undef STRING_OPTION_GETTER
#define BOOL_OPTION_GETTER(flag, variable) \
static bool variable() { return variable##_; }
BOOL_OPTIONS_LIST(BOOL_OPTION_GETTER)
#if defined(DEBUG)
DEBUG_BOOL_OPTIONS_LIST(BOOL_OPTION_GETTER)
#endif
#undef BOOL_OPTION_GETTER
#define SHORT_BOOL_OPTION_GETTER(short_name, long_name, variable) \
static bool variable() { return variable##_; }
SHORT_BOOL_OPTIONS_LIST(SHORT_BOOL_OPTION_GETTER)
#undef SHORT_BOOL_OPTION_GETTER
#define ENUM_OPTIONS_GETTER(flag, type, variable) \
static type variable() { return variable##_; }
ENUM_OPTIONS_LIST(ENUM_OPTIONS_GETTER)
#undef ENUM_OPTIONS_GETTER
// Callbacks have to be public.
#define CB_OPTIONS_DECL(callback) \
static bool callback(const char* arg, CommandLineOptions* vm_options);
CB_OPTIONS_LIST(CB_OPTIONS_DECL)
#undef CB_OPTIONS_DECL
static bool preview_dart_2() { return true; }
static dart::SimpleHashMap* environment() { return environment_; }
static bool enable_vm_service() { return enable_vm_service_; }
static const char* vm_service_server_ip() { return vm_service_server_ip_; }
static int vm_service_server_port() { return vm_service_server_port_; }
static Dart_KernelCompilationVerbosityLevel verbosity_level() {
return VerbosityLevelToDartAPI(verbosity_);
}
#if !defined(DART_PRECOMPILED_RUNTIME)
static DFE* dfe() { return dfe_; }
static void set_dfe(DFE* dfe) { dfe_ = dfe; }
#endif // !defined(DART_PRECOMPILED_RUNTIME)
static void PrintUsage();
static void PrintVersion();
static void DestroyEnvironment();
private:
#define STRING_OPTION_DECL(flag, variable) static const char* variable##_;
STRING_OPTIONS_LIST(STRING_OPTION_DECL)
#undef STRING_OPTION_DECL
#define BOOL_OPTION_DECL(flag, variable) static bool variable##_;
BOOL_OPTIONS_LIST(BOOL_OPTION_DECL)
#if defined(DEBUG)
DEBUG_BOOL_OPTIONS_LIST(BOOL_OPTION_DECL)
#endif
#undef BOOL_OPTION_DECL
#define SHORT_BOOL_OPTION_DECL(short_name, long_name, variable) \
static bool variable##_;
SHORT_BOOL_OPTIONS_LIST(SHORT_BOOL_OPTION_DECL)
#undef SHORT_BOOL_OPTION_DECL
#define ENUM_OPTION_DECL(flag, type, variable) static type variable##_;
ENUM_OPTIONS_LIST(ENUM_OPTION_DECL)
#undef ENUM_OPTION_DECL
static dart::SimpleHashMap* environment_;
// Frontend argument processing.
#if !defined(DART_PRECOMPILED_RUNTIME)
static DFE* dfe_;
#endif // !defined(DART_PRECOMPILED_RUNTIME)
static Dart_KernelCompilationVerbosityLevel VerbosityLevelToDartAPI(
VerbosityLevel level) {
switch (level) {
case kError:
return Dart_KernelCompilationVerbosityLevel_Error;
case kWarning:
return Dart_KernelCompilationVerbosityLevel_Warning;
case kInfo:
return Dart_KernelCompilationVerbosityLevel_Info;
case kAll:
return Dart_KernelCompilationVerbosityLevel_All;
default:
UNREACHABLE();
}
}
// VM Service argument processing.
static const char* vm_service_server_ip_;
static bool enable_vm_service_;
static int vm_service_server_port_;
static bool ExtractPortAndAddress(const char* option_value,
int* out_port,
const char** out_ip,
int default_port,
const char* default_ip);
#define OPTION_FRIEND(flag, variable) friend class OptionProcessor_##flag;
STRING_OPTIONS_LIST(OPTION_FRIEND)
BOOL_OPTIONS_LIST(OPTION_FRIEND)
#if defined(DEBUG)
DEBUG_BOOL_OPTIONS_LIST(OPTION_FRIEND)
#endif
#undef OPTION_FRIEND
#define SHORT_BOOL_OPTION_FRIEND(short_name, long_name, variable) \
friend class OptionProcessor_##long_name;
SHORT_BOOL_OPTIONS_LIST(SHORT_BOOL_OPTION_FRIEND)
#undef SHORT_BOOL_OPTION_FRIEND
#define ENUM_OPTION_FRIEND(flag, type, variable) \
friend class OptionProcessor_##flag;
ENUM_OPTIONS_LIST(ENUM_OPTION_FRIEND)
#undef ENUM_OPTION_FRIEND
DISALLOW_ALLOCATION();
DISALLOW_IMPLICIT_CONSTRUCTORS(Options);
};
} // namespace bin
} // namespace dart
#endif // RUNTIME_BIN_MAIN_OPTIONS_H_