[lldb] Remove LLDB session dir and just store test traces in the respective test...
[lldb.git] / lldb / packages / Python / lldbsuite / test / dotest_args.py
1 from __future__ import absolute_import
2
3 # System modules
4 import argparse
5 import sys
6 import os
7 import textwrap
8
9 # LLDB modules
10 from . import configuration
11
12
13 def create_parser():
14     parser = argparse.ArgumentParser(
15         description='description',
16         prefix_chars='+-',
17         add_help=False)
18     group = None
19
20     # Helper function for boolean options (group will point to the current
21     # group when executing X)
22     X = lambda optstr, helpstr, **kwargs: group.add_argument(
23         optstr, help=helpstr, action='store_true', **kwargs)
24
25     group = parser.add_argument_group('Help')
26     group.add_argument(
27         '-h',
28         '--help',
29         dest='h',
30         action='store_true',
31         help="Print this help message and exit.  Add '-v' for more detailed help.")
32
33     # C and Python toolchain options
34     group = parser.add_argument_group('Toolchain options')
35     group.add_argument(
36         '-A',
37         '--arch',
38         metavar='arch',
39         dest='arch',
40         help=textwrap.dedent('''Specify the architecture(s) to test. This option can be specified more than once'''))
41     group.add_argument('-C', '--compiler', metavar='compiler', dest='compiler', help=textwrap.dedent(
42         '''Specify the compiler(s) used to build the inferior executables. The compiler path can be an executable basename or a full path to a compiler executable. This option can be specified multiple times.'''))
43     if sys.platform == 'darwin':
44         group.add_argument('--apple-sdk', metavar='apple_sdk', dest='apple_sdk', default="", help=textwrap.dedent(
45             '''Specify the name of the Apple SDK (macosx, macosx.internal, iphoneos, iphoneos.internal, or path to SDK) and use the appropriate tools from that SDK's toolchain.'''))
46     # FIXME? This won't work for different extra flags according to each arch.
47     group.add_argument(
48         '-E',
49         metavar='extra-flags',
50         help=textwrap.dedent('''Specify the extra flags to be passed to the toolchain when building the inferior programs to be debugged
51                                                            suggestions: do not lump the "-A arch1 -A arch2" together such that the -E option applies to only one of the architectures'''))
52
53     group.add_argument('--dsymutil', metavar='dsymutil', dest='dsymutil', help=textwrap.dedent('Specify which dsymutil to use.'))
54     group.add_argument('--yaml2obj', metavar='yaml2obj', dest='yaml2obj', help=textwrap.dedent('Specify which yaml2obj binary to use.'))
55     group.add_argument('--filecheck', metavar='filecheck', dest='filecheck', help=textwrap.dedent('Specify which FileCheck binary to use.'))
56
57     # Test filtering options
58     group = parser.add_argument_group('Test filtering options')
59     group.add_argument(
60         '-f',
61         metavar='filterspec',
62         action='append',
63         help=('Specify a filter, which looks like "TestModule.TestClass.test_name".  '+
64             'You may also use shortened filters, such as '+
65             '"TestModule.TestClass", "TestClass.test_name", or just "test_name".'))
66     group.add_argument(
67         '-p',
68         metavar='pattern',
69         help='Specify a regexp filename pattern for inclusion in the test suite')
70     group.add_argument('--excluded', metavar='exclusion-file', action='append', help=textwrap.dedent(
71         '''Specify a file for tests to exclude. File should contain lists of regular expressions for test files or methods,
72                                 with each list under a matching header (xfail files, xfail methods, skip files, skip methods)'''))
73     group.add_argument(
74         '-G',
75         '--category',
76         metavar='category',
77         action='append',
78         dest='categories_list',
79         help=textwrap.dedent('''Specify categories of test cases of interest. Can be specified more than once.'''))
80     group.add_argument(
81         '--skip-category',
82         metavar='category',
83         action='append',
84         dest='skip_categories',
85         help=textwrap.dedent('''Specify categories of test cases to skip. Takes precedence over -G. Can be specified more than once.'''))
86     group.add_argument(
87         '--xfail-category',
88         metavar='category',
89         action='append',
90         dest='xfail_categories',
91         help=textwrap.dedent('''Specify categories of test cases that are expected to fail. Can be specified more than once.'''))
92
93     # Configuration options
94     group = parser.add_argument_group('Configuration options')
95     group.add_argument(
96         '--framework',
97         metavar='framework-path',
98         help='The path to LLDB.framework')
99     group.add_argument(
100         '--executable',
101         metavar='executable-path',
102         help='The path to the lldb executable')
103     group.add_argument(
104         '--server',
105         metavar='server-path',
106         help='The path to the debug server executable to use')
107     group.add_argument(
108         '--out-of-tree-debugserver',
109         dest='out_of_tree_debugserver',
110         action='store_true',
111         help='A flag to indicate an out-of-tree debug server is being used')
112     group.add_argument(
113         '--dwarf-version',
114         metavar='dwarf_version',
115         dest='dwarf_version',
116         type=int,
117         help='Override the DWARF version.')
118     group.add_argument(
119         '--setting',
120         metavar='SETTING=VALUE',
121         dest='settings',
122         type=str,
123         nargs=1,
124         action='append',
125         help='Run "setting set SETTING VALUE" before executing any test.')
126     group.add_argument(
127         '-y',
128         type=int,
129         metavar='count',
130         help="Specify the iteration count used to collect our benchmarks. An example is the number of times to do 'thread step-over' to measure stepping speed.")
131     group.add_argument(
132         '-#',
133         type=int,
134         metavar='sharp',
135         dest='sharp',
136         help='Repeat the test suite for a specified number of times')
137     group.add_argument('--channel', metavar='channel', dest='channels', action='append', help=textwrap.dedent(
138         "Specify the log channels (and optional categories) e.g. 'lldb all' or 'gdb-remote packets' if no categories are specified, 'default' is used"))
139     group.add_argument(
140         '--log-success',
141         dest='log_success',
142         action='store_true',
143         help="Leave logs/traces even for successful test runs (useful for creating reference log files during debugging.)")
144     group.add_argument(
145         '--codesign-identity',
146         metavar='Codesigning identity',
147         default='lldb_codesign',
148         help='The codesigning identity to use')
149     group.add_argument(
150         '--build-dir',
151         dest='test_build_dir',
152         metavar='Test build directory',
153         default='lldb-test-build.noindex',
154         help='The root build directory for the tests. It will be removed before running.')
155     group.add_argument(
156         '--lldb-module-cache-dir',
157         dest='lldb_module_cache_dir',
158         metavar='The clang module cache directory used by LLDB',
159         help='The clang module cache directory used by LLDB. Defaults to <test build directory>/module-cache-lldb.')
160     group.add_argument(
161         '--clang-module-cache-dir',
162         dest='clang_module_cache_dir',
163         metavar='The clang module cache directory used by Clang',
164         help='The clang module cache directory used in the Make files by Clang while building tests. Defaults to <test build directory>/module-cache-clang.')
165     group.add_argument(
166         '--lldb-libs-dir',
167         dest='lldb_libs_dir',
168         metavar='path',
169         help='The path to LLDB library directory (containing liblldb)')
170     group.add_argument(
171         '--enable-plugin',
172         dest='enabled_plugins',
173         action='append',
174         type=str,
175         metavar='A plugin whose tests will be enabled',
176         help='A plugin whose tests will be enabled. The only currently supported plugin is intel-pt.')
177
178     # Configuration options
179     group = parser.add_argument_group('Remote platform options')
180     group.add_argument(
181         '--platform-name',
182         dest='lldb_platform_name',
183         metavar='platform-name',
184         help='The name of a remote platform to use')
185     group.add_argument(
186         '--platform-url',
187         dest='lldb_platform_url',
188         metavar='platform-url',
189         help='A LLDB platform URL to use when connecting to a remote platform to run the test suite')
190     group.add_argument(
191         '--platform-working-dir',
192         dest='lldb_platform_working_dir',
193         metavar='platform-working-dir',
194         help='The directory to use on the remote platform.')
195
196     # Reproducer options
197     group = parser.add_argument_group('Reproducer options')
198     group.add_argument(
199         '--capture-path',
200         metavar='reproducer path',
201         help='The reproducer capture path')
202     group.add_argument(
203         '--replay-path',
204         metavar='reproducer path',
205         help='The reproducer replay path')
206
207     # Test-suite behaviour
208     group = parser.add_argument_group('Runtime behaviour options')
209     X('-d', 'Suspend the process after launch to wait indefinitely for a debugger to attach')
210     X('-t', 'Turn on tracing of lldb command and other detailed test executions')
211     group.add_argument(
212         '-u',
213         dest='unset_env_varnames',
214         metavar='variable',
215         action='append',
216         help='Specify an environment variable to unset before running the test cases. e.g., -u DYLD_INSERT_LIBRARIES -u MallocScribble')
217     group.add_argument(
218         '--env',
219         dest='set_env_vars',
220         metavar='variable',
221         action='append',
222         help='Specify an environment variable to set to the given value before running the test cases e.g.: --env CXXFLAGS=-O3 --env DYLD_INSERT_LIBRARIES')
223     group.add_argument(
224         '--inferior-env',
225         dest='set_inferior_env_vars',
226         metavar='variable',
227         action='append',
228         help='Specify an environment variable to set to the given value for the inferior.')
229     X('-v', 'Do verbose mode of unittest framework (print out each test case invocation)')
230     group.add_argument(
231         '--enable-crash-dialog',
232         dest='disable_crash_dialog',
233         action='store_false',
234         help='(Windows only) When LLDB crashes, display the Windows crash dialog.')
235     group.set_defaults(disable_crash_dialog=True)
236
237     # Remove the reference to our helper function
238     del X
239
240     group = parser.add_argument_group('Test directories')
241     group.add_argument(
242         'args',
243         metavar='test-dir',
244         nargs='*',
245         help='Specify a list of directory names to search for test modules named after Test*.py (test discovery). If empty, search from the current working directory instead.')
246
247     return parser