xref: /llvm-project-15.0.7/lld/wasm/Options.td (revision 87628f58)
1include "llvm/Option/OptParser.td"
2
3// Convenience classes for long options which only accept two dashes. For lld
4// specific or newer long options, we prefer two dashes to avoid collision with
5// short options. For many others, we have to accept both forms to be compatible
6// with GNU ld.
7class FF<string name> : Flag<["--"], name>;
8class JJ<string name>: Joined<["--"], name>;
9
10multiclass EEq<string name, string help> {
11  def NAME: Separate<["--"], name>;
12  def NAME # _eq: Joined<["--"], name # "=">, Alias<!cast<Separate>(NAME)>,
13    HelpText<help>;
14}
15
16multiclass BB<string name, string help1, string help2> {
17  def NAME: Flag<["--"], name>, HelpText<help1>;
18  def no_ # NAME: Flag<["--"], "no-" # name>, HelpText<help2>;
19}
20
21// For options whose names are multiple letters, either one dash or
22// two can precede the option name except those that start with 'o'.
23class F<string name>: Flag<["--", "-"], name>;
24class J<string name>: Joined<["--", "-"], name>;
25class S<string name>: Separate<["--", "-"], name>;
26
27multiclass Eq<string name, string help> {
28  def NAME: Separate<["--", "-"], name>;
29  def NAME # _eq: Joined<["--", "-"], name # "=">, Alias<!cast<Separate>(NAME)>,
30    HelpText<help>;
31}
32
33multiclass B<string name, string help1, string help2> {
34  def NAME: Flag<["--", "-"], name>, HelpText<help1>;
35  def no_ # NAME: Flag<["--", "-"], "no-" # name>, HelpText<help2>;
36}
37
38// The following flags are shared with the ELF linker
39def Bsymbolic: F<"Bsymbolic">, HelpText<"Bind defined symbols locally">;
40
41defm color_diagnostics: B<"color-diagnostics",
42  "Alias for --color-diagnostics=always",
43  "Alias for --color-diagnostics=never">;
44def color_diagnostics_eq: J<"color-diagnostics=">,
45  HelpText<"Use colors in diagnostics (default: auto)">,
46  MetaVarName<"[auto,always,never]">;
47
48def compress_relocations: F<"compress-relocations">,
49  HelpText<"Compress the relocation targets in the code section.">;
50
51defm demangle: B<"demangle",
52    "Demangle symbol names",
53    "Do not demangle symbol names">;
54
55def emit_relocs: F<"emit-relocs">, HelpText<"Generate relocations in output">;
56
57def error_unresolved_symbols: F<"error-unresolved-symbols">,
58  HelpText<"Report unresolved symbols as errors">;
59
60defm export_dynamic: B<"export-dynamic",
61    "Put symbols in the dynamic symbol table",
62    "Do not put symbols in the dynamic symbol table (default)">;
63
64def entry: S<"entry">, MetaVarName<"<entry>">,
65  HelpText<"Name of entry point symbol">;
66
67defm error_limit:
68  EEq<"error-limit", "Maximum number of errors to emit before stopping (0 = no limit)">;
69
70def fatal_warnings: F<"fatal-warnings">,
71  HelpText<"Treat warnings as errors">;
72
73defm gc_sections: B<"gc-sections",
74    "Enable garbage collection of unused sections",
75    "Disable garbage collection of unused sections">;
76
77defm merge_data_segments: BB<"merge-data-segments",
78    "Enable merging data segments",
79    "Disable merging data segments">;
80
81def help: F<"help">, HelpText<"Print option help">;
82
83def l: JoinedOrSeparate<["-"], "l">, MetaVarName<"<libName>">,
84  HelpText<"Root name of library to use">;
85
86def L: JoinedOrSeparate<["-"], "L">, MetaVarName<"<dir>">,
87  HelpText<"Add a directory to the library search path">;
88
89def m: JoinedOrSeparate<["-"], "m">, HelpText<"Set target emulation">;
90
91defm mllvm: Eq<"mllvm", "Additional arguments to forward to LLVM's option processing">;
92
93defm Map: Eq<"Map", "Print a link map to the specified file">;
94
95def no_fatal_warnings: F<"no-fatal-warnings">;
96
97def o: JoinedOrSeparate<["-"], "o">, MetaVarName<"<path>">,
98  HelpText<"Path to file to write output">;
99
100def O: JoinedOrSeparate<["-"], "O">, HelpText<"Optimize output file size">;
101
102defm pie: B<"pie",
103    "Create a position independent executable",
104    "Do not create a position independent executable (default)">;
105
106defm print_gc_sections: B<"print-gc-sections",
107    "List removed unused sections",
108    "Do not list removed unused sections">;
109
110def print_map: F<"print-map">,
111  HelpText<"Print a link map to the standard output">;
112
113def relocatable: F<"relocatable">, HelpText<"Create relocatable object file">;
114
115defm reproduce: EEq<"reproduce", "Dump linker invocation and input files for debugging">;
116
117defm rsp_quoting: Eq<"rsp-quoting", "Quoting style for response files">,
118  MetaVarName<"[posix,windows]">;
119
120def shared: F<"shared">, HelpText<"Build a shared object">;
121
122def strip_all: F<"strip-all">, HelpText<"Strip all symbols">;
123
124def strip_debug: F<"strip-debug">, HelpText<"Strip debugging information">;
125
126defm threads
127    : Eq<"threads", "Number of threads. '1' disables multi-threading. By "
128                    "default all available hardware threads are used">;
129
130def trace: F<"trace">, HelpText<"Print the names of the input files">;
131
132defm trace_symbol: Eq<"trace-symbol", "Trace references to symbols">;
133
134defm undefined: Eq<"undefined", "Force undefined symbol during linking">;
135
136defm unresolved_symbols:
137  Eq<"unresolved-symbols", "Determine how to handle unresolved symbols">;
138
139def v: Flag<["-"], "v">, HelpText<"Display the version number">;
140
141def verbose: F<"verbose">, HelpText<"Verbose mode">;
142
143def version: F<"version">, HelpText<"Display the version number and exit">;
144
145def warn_unresolved_symbols: F<"warn-unresolved-symbols">,
146  HelpText<"Report unresolved symbols as warnings">;
147
148defm wrap: Eq<"wrap", "Use wrapper functions for symbol">,
149  MetaVarName<"<symbol>=<symbol>">;
150
151def z: JoinedOrSeparate<["-"], "z">, MetaVarName<"<option>">,
152  HelpText<"Linker option extensions">;
153
154// The follow flags are unique to wasm
155
156def allow_undefined: F<"allow-undefined">,
157  HelpText<"Allow undefined symbols in linked binary. "
158           "This options is equivalent to --import-undefined "
159           "and --unresolved-symbols=ignore-all">;
160
161def import_undefined: F<"import-undefined">,
162  HelpText<"Turn undefined symbols into imports where possible">;
163
164def allow_undefined_file: J<"allow-undefined-file=">,
165  HelpText<"Allow symbols listed in <file> to be undefined in linked binary">;
166
167def allow_undefined_file_s: Separate<["-"], "allow-undefined-file">,
168  Alias<allow_undefined_file>;
169
170defm export: Eq<"export", "Force a symbol to be exported">;
171
172defm export_if_defined: Eq<"export-if-defined",
173     "Force a symbol to be exported, if it is defined in the input">;
174
175def export_all: FF<"export-all">,
176  HelpText<"Export all symbols (normally combined with --no-gc-sections)">;
177
178def export_table: FF<"export-table">,
179  HelpText<"Export function table to the environment">;
180
181def growable_table: FF<"growable-table">,
182  HelpText<"Remove maximum size from function table, allowing table to grow">;
183
184def global_base: JJ<"global-base=">,
185  HelpText<"Where to start to place global data">;
186
187def import_memory: FF<"import-memory">,
188  HelpText<"Import memory from the environment">;
189
190def shared_memory: FF<"shared-memory">,
191  HelpText<"Use shared linear memory">;
192
193def import_table: FF<"import-table">,
194  HelpText<"Import function table from the environment">;
195
196def initial_memory: JJ<"initial-memory=">,
197  HelpText<"Initial size of the linear memory">;
198
199def max_memory: JJ<"max-memory=">,
200  HelpText<"Maximum size of the linear memory">;
201
202def no_entry: FF<"no-entry">,
203  HelpText<"Do not output any entry point">;
204
205def stack_first: FF<"stack-first">,
206  HelpText<"Place stack at start of linear memory rather than after data">;
207
208defm whole_archive: B<"whole-archive",
209    "Force load of all members in a static library",
210    "Do not force load of all members in a static library (default)">;
211
212defm check_features: BB<"check-features",
213    "Check feature compatibility of linked objects (default)",
214    "Ignore feature compatibility of linked objects">;
215
216def features: CommaJoined<["--", "-"], "features=">,
217  HelpText<"Comma-separated used features, inferred from input objects by default.">;
218
219// Aliases
220def: JoinedOrSeparate<["-"], "e">, Alias<entry>;
221def: J<"entry=">, Alias<entry>;
222def: Flag<["-"], "E">, Alias<export_dynamic>, HelpText<"Alias for --export-dynamic">;
223def: Flag<["-"], "i">, Alias<initial_memory>;
224def: Flag<["-"], "M">, Alias<print_map>, HelpText<"Alias for --print-map">;
225def: Flag<["-"], "r">, Alias<relocatable>;
226def: Flag<["-"], "s">, Alias<strip_all>, HelpText<"Alias for --strip-all">;
227def: Flag<["-"], "S">, Alias<strip_debug>, HelpText<"Alias for --strip-debug">;
228def: Flag<["-"], "t">, Alias<trace>, HelpText<"Alias for --trace">;
229def: JoinedOrSeparate<["-"], "y">, Alias<trace_symbol>, HelpText<"Alias for --trace-symbol">;
230def: JoinedOrSeparate<["-"], "u">, Alias<undefined>;
231
232// LTO-related options.
233def lto_O: JJ<"lto-O">, MetaVarName<"<opt-level>">,
234  HelpText<"Optimization level for LTO">;
235def lto_partitions: JJ<"lto-partitions=">,
236  HelpText<"Number of LTO codegen partitions">;
237def disable_verify: F<"disable-verify">;
238def save_temps: F<"save-temps">, HelpText<"Save intermediate LTO compilation results">;
239def thinlto_cache_dir: JJ<"thinlto-cache-dir=">,
240  HelpText<"Path to ThinLTO cached object file directory">;
241defm thinlto_cache_policy: EEq<"thinlto-cache-policy", "Pruning policy for the ThinLTO cache">;
242def thinlto_jobs: JJ<"thinlto-jobs=">,
243  HelpText<"Number of ThinLTO jobs. Default to --threads=">;
244def no_lto_legacy_pass_manager: FF<"no-lto-legacy-pass-manager">,
245  HelpText<"Use new pass manager">;
246def lto_debug_pass_manager: FF<"lto-debug-pass-manager">,
247  HelpText<"Debug new pass manager">;
248
249// Experimental PIC mode.
250def experimental_pic: FF<"experimental-pic">,
251  HelpText<"Enable Experimental PIC">;
252