blob: 39ce4cebfa8edf1393768bbbe35a6a9a97e163a8 [file] [log] [blame]
Brian Carlstrom491ca9e2014-03-02 18:24:38 -08001/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_RUNTIME_PARSED_OPTIONS_H_
18#define ART_RUNTIME_PARSED_OPTIONS_H_
19
20#include <string>
Ian Rogerse63db272014-07-15 15:36:11 -070021#include <vector>
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080022
Ian Rogerse63db272014-07-15 15:36:11 -070023#include <jni.h>
24
Andreas Gampe8cf9cb32017-07-19 09:28:38 -070025#include "arch/instruction_set.h"
Ian Rogers576ca0c2014-06-06 15:58:22 -070026#include "gc/collector_type.h"
Andreas Gampe86823542019-02-25 09:38:49 -080027#include "gc/space/image_space_loading_order.h"
Mathieu Chartier2dbe6272014-09-16 10:43:23 -070028#include "gc/space/large_object_space.h"
Andreas Gampe8cf9cb32017-07-19 09:28:38 -070029// #include "jit/profile_saver_options.h"
Andreas Gampe5a0430d2019-01-04 14:33:57 -080030#include "runtime_globals.h"
Igor Murashkinaaebaa02015-01-26 10:55:53 -080031#include "runtime_options.h"
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080032
33namespace art {
34
Ian Rogerse63db272014-07-15 15:36:11 -070035class CompilerCallbacks;
36class DexFile;
Igor Murashkinaaebaa02015-01-26 10:55:53 -080037struct RuntimeArgumentMap;
Ian Rogerse63db272014-07-15 15:36:11 -070038
39typedef std::vector<std::pair<std::string, const void*>> RuntimeOptions;
40
Igor Murashkinaaebaa02015-01-26 10:55:53 -080041template <typename TVariantMap,
42 template <typename TKeyValue> class TVariantMapKey>
43struct CmdlineParser;
44
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080045class ParsedOptions {
46 public:
Igor Murashkinaaebaa02015-01-26 10:55:53 -080047 using RuntimeParser = CmdlineParser<RuntimeArgumentMap, RuntimeArgumentMap::Key>;
48 // Create a parser that can turn user-defined input into a RuntimeArgumentMap.
49 // This visibility is effectively for testing-only, and normal code does not
50 // need to create its own parser.
51 static std::unique_ptr<RuntimeParser> MakeParser(bool ignore_unrecognized);
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080052
Igor Murashkinaaebaa02015-01-26 10:55:53 -080053 // returns true if parsing succeeds, and stores the resulting options into runtime_options
Vladimir Marko88b2b802015-12-04 14:19:04 +000054 static bool Parse(const RuntimeOptions& options,
55 bool ignore_unrecognized,
56 RuntimeArgumentMap* runtime_options);
Igor Murashkinaaebaa02015-01-26 10:55:53 -080057
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080058 bool (*hook_is_sensitive_thread_)();
59 jint (*hook_vfprintf_)(FILE* stream, const char* format, va_list ap);
60 void (*hook_exit_)(jint status);
61 void (*hook_abort_)();
Nicolas Geoffray0025a862014-07-11 08:26:40 +000062
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080063 private:
Andreas Gampe313f4032014-08-29 16:01:25 -070064 ParsedOptions();
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080065
Igor Murashkinaaebaa02015-01-26 10:55:53 -080066 bool ProcessSpecialOptions(const RuntimeOptions& options,
67 RuntimeArgumentMap* runtime_options,
68 std::vector<std::string>* out_options);
69
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080070 void Usage(const char* fmt, ...);
71 void UsageMessage(FILE* stream, const char* fmt, ...);
72 void UsageMessageV(FILE* stream, const char* fmt, va_list ap);
73
74 void Exit(int status);
75 void Abort();
76
Vladimir Marko88b2b802015-12-04 14:19:04 +000077 bool DoParse(const RuntimeOptions& options,
78 bool ignore_unrecognized,
79 RuntimeArgumentMap* runtime_options);
Brian Carlstrom491ca9e2014-03-02 18:24:38 -080080};
81
82} // namespace art
83
84#endif // ART_RUNTIME_PARSED_OPTIONS_H_