blob: 2871ae6d576be1279a720fc98b998baab43ad083 [file] [log] [blame]
Sam Cleggc94d3932017-11-17 18:14:091include "llvm/Option/OptParser.td"
2
Sam Clegg87628f52022-05-26 21:05:053// 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
Sam Cleggc94d3932017-11-17 18:14:0921// 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
Sam Cleggad980a72018-10-22 08:34:3727multiclass Eq<string name, string help> {
28 def NAME: Separate<["--", "-"], name>;
29 def NAME # _eq: Joined<["--", "-"], name # "=">, Alias<!cast<Separate>(NAME)>,
30 HelpText<help>;
Sam Clegg31de2f02017-12-07 03:19:5331}
32
Nicholas Wilson08cff612018-03-13 13:12:0333multiclass 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
Sam Cleggbfb75342018-11-15 00:37:2138// The following flags are shared with the ELF linker
Sam Clegg25134072020-10-07 21:48:3739def Bsymbolic: F<"Bsymbolic">, HelpText<"Bind defined symbols locally">;
40
Sam Clegg0a9756f2022-10-03 15:31:2341def Bdynamic: F<"Bdynamic">, HelpText<"Link against shared libraries (default)">;
42
43def Bstatic: F<"Bstatic">, HelpText<"Do not link against shared libraries">;
44
Nico Weberbaa2aa22020-11-17 17:15:4245defm color_diagnostics: B<"color-diagnostics",
46 "Alias for --color-diagnostics=always",
47 "Alias for --color-diagnostics=never">;
Sam Cleggc94d3932017-11-17 18:14:0948def color_diagnostics_eq: J<"color-diagnostics=">,
Nico Weberbaa2aa22020-11-17 17:15:4249 HelpText<"Use colors in diagnostics (default: auto)">,
50 MetaVarName<"[auto,always,never]">;
Sam Cleggc94d3932017-11-17 18:14:0951
Sam Clegg30161dc2018-08-17 19:42:4652def compress_relocations: F<"compress-relocations">,
53 HelpText<"Compress the relocation targets in the code section.">;
54
Nicholas Wilson08cff612018-03-13 13:12:0355defm demangle: B<"demangle",
56 "Demangle symbol names",
57 "Do not demangle symbol names">;
58
Sam Clegg35be7ff2019-05-24 13:28:2759def emit_relocs: F<"emit-relocs">, HelpText<"Generate relocations in output">;
60
Sam Clegg206884b2020-05-01 16:14:5961def error_unresolved_symbols: F<"error-unresolved-symbols">,
62 HelpText<"Report unresolved symbols as errors">;
63
Sam Clegg305b0342018-09-27 21:06:2564defm export_dynamic: B<"export-dynamic",
65 "Put symbols in the dynamic symbol table",
66 "Do not put symbols in the dynamic symbol table (default)">;
Sam Clegg4e624182018-09-25 21:50:1567
Sam Cleggb839f152018-01-28 19:57:0468def entry: S<"entry">, MetaVarName<"<entry>">,
69 HelpText<"Name of entry point symbol">;
70
Sam Clegg87628f52022-05-26 21:05:0571defm error_limit:
72 EEq<"error-limit", "Maximum number of errors to emit before stopping (0 = no limit)">;
Sam Cleggb839f152018-01-28 19:57:0473
74def fatal_warnings: F<"fatal-warnings">,
75 HelpText<"Treat warnings as errors">;
76
Nicholas Wilson88d9ffc2018-03-13 13:16:1577defm gc_sections: B<"gc-sections",
78 "Enable garbage collection of unused sections",
79 "Disable garbage collection of unused sections">;
Sam Clegg03626332018-01-31 01:45:4780
Sam Clegg87628f52022-05-26 21:05:0581defm merge_data_segments: BB<"merge-data-segments",
Sam Clegg66844762018-05-10 18:23:5182 "Enable merging data segments",
83 "Disable merging data segments">;
84
Sam Cleggc94d3932017-11-17 18:14:0985def help: F<"help">, HelpText<"Print option help">;
86
Sam Clegg0a9756f2022-10-03 15:31:2387def library: JoinedOrSeparate<["-"], "l">, MetaVarName<"<libName>">,
Sam Cleggc94d3932017-11-17 18:14:0988 HelpText<"Root name of library to use">;
89
Sam Clegg0a9756f2022-10-03 15:31:2390def library_path: JoinedOrSeparate<["-"], "L">, MetaVarName<"<dir>">,
Sam Cleggb839f152018-01-28 19:57:0491 HelpText<"Add a directory to the library search path">;
92
Wouter van Oortmerssenb9a539c2020-06-15 22:31:1093def m: JoinedOrSeparate<["-"], "m">, HelpText<"Set target emulation">;
94
Sam Clegg87628f52022-05-26 21:05:0595defm mllvm: Eq<"mllvm", "Additional arguments to forward to LLVM's option processing">;
Sam Cleggc94d3932017-11-17 18:14:0996
Sam Cleggcc2da552020-03-27 23:52:2797defm Map: Eq<"Map", "Print a link map to the specified file">;
98
Sam Cleggb839f152018-01-28 19:57:0499def no_fatal_warnings: F<"no-fatal-warnings">;
Sam Cleggb8621592017-11-30 01:40:08100
Sam Cleggc94d3932017-11-17 18:14:09101def o: JoinedOrSeparate<["-"], "o">, MetaVarName<"<path>">,
102 HelpText<"Path to file to write output">;
103
Sam Cleggfb983cd2018-05-18 23:28:05104def O: JoinedOrSeparate<["-"], "O">, HelpText<"Optimize output file size">;
105
Sam Cleggbfb75342018-11-15 00:37:21106defm pie: B<"pie",
107 "Create a position independent executable",
108 "Do not create a position independent executable (default)">;
109
Nicholas Wilson88d9ffc2018-03-13 13:16:15110defm print_gc_sections: B<"print-gc-sections",
111 "List removed unused sections",
112 "Do not list removed unused sections">;
Sam Clegg03626332018-01-31 01:45:47113
Sam Cleggcc2da552020-03-27 23:52:27114def print_map: F<"print-map">,
115 HelpText<"Print a link map to the standard output">;
116
Sam Cleggc94d3932017-11-17 18:14:09117def relocatable: F<"relocatable">, HelpText<"Create relocatable object file">;
118
Sam Clegg87628f52022-05-26 21:05:05119defm reproduce: EEq<"reproduce", "Dump linker invocation and input files for debugging">;
Rui Ueyama35150bb2019-05-21 11:52:14120
Sam Clegg928e9e12020-03-04 19:29:45121defm rsp_quoting: Eq<"rsp-quoting", "Quoting style for response files">,
122 MetaVarName<"[posix,windows]">;
123
Sam Cleggbfb75342018-11-15 00:37:21124def shared: F<"shared">, HelpText<"Build a shared object">;
125
Sam Cleggc94d3932017-11-17 18:14:09126def strip_all: F<"strip-all">, HelpText<"Strip all symbols">;
127
128def strip_debug: F<"strip-debug">, HelpText<"Strip debugging information">;
129
Fangrui Songeb4663d2020-03-17 19:40:19130defm threads
131 : Eq<"threads", "Number of threads. '1' disables multi-threading. By "
132 "default all available hardware threads are used">;
Sam Cleggb839f152018-01-28 19:57:04133
Sam Clegg1f3f7742019-02-06 02:35:18134def trace: F<"trace">, HelpText<"Print the names of the input files">;
135
136defm trace_symbol: Eq<"trace-symbol", "Trace references to symbols">;
137
Sam Cleggad980a72018-10-22 08:34:37138defm undefined: Eq<"undefined", "Force undefined symbol during linking">;
Sam Clegg31de2f02017-12-07 03:19:53139
Sam Clegg206884b2020-05-01 16:14:59140defm unresolved_symbols:
141 Eq<"unresolved-symbols", "Determine how to handle unresolved symbols">;
142
Sam Cleggb839f152018-01-28 19:57:04143def v: Flag<["-"], "v">, HelpText<"Display the version number">;
144
145def verbose: F<"verbose">, HelpText<"Verbose mode">;
146
147def version: F<"version">, HelpText<"Display the version number and exit">;
148
Sam Clegg206884b2020-05-01 16:14:59149def warn_unresolved_symbols: F<"warn-unresolved-symbols">,
150 HelpText<"Report unresolved symbols as warnings">;
Sam Cleggc94d3932017-11-17 18:14:09151
Sam Clegga5ca34e2019-05-24 14:14:25152defm wrap: Eq<"wrap", "Use wrapper functions for symbol">,
153 MetaVarName<"<symbol>=<symbol>">;
154
Sam Clegg206884b2020-05-01 16:14:59155def z: JoinedOrSeparate<["-"], "z">, MetaVarName<"<option>">,
156 HelpText<"Linker option extensions">;
157
Sam Cleggc94d3932017-11-17 18:14:09158// The follow flags are unique to wasm
159
Sam Cleggc94d3932017-11-17 18:14:09160def allow_undefined: F<"allow-undefined">,
Nico Weber9f903472021-10-27 13:52:17161 HelpText<"Allow undefined symbols in linked binary. "
162 "This options is equivalent to --import-undefined "
163 "and --unresolved-symbols=ignore-all">;
Sam Clegg758633f2021-05-27 21:27:10164
165def import_undefined: F<"import-undefined">,
166 HelpText<"Turn undefined symbols into imports where possible">;
Sam Cleggc94d3932017-11-17 18:14:09167
168def allow_undefined_file: J<"allow-undefined-file=">,
169 HelpText<"Allow symbols listed in <file> to be undefined in linked binary">;
170
Sam Cleggb839f152018-01-28 19:57:04171def allow_undefined_file_s: Separate<["-"], "allow-undefined-file">,
172 Alias<allow_undefined_file>;
173
Sam Cleggad980a72018-10-22 08:34:37174defm export: Eq<"export", "Force a symbol to be exported">;
Sam Cleggb839f152018-01-28 19:57:04175
Sam Clegga6f40642021-04-05 15:00:30176defm export_if_defined: Eq<"export-if-defined",
177 "Force a symbol to be exported, if it is defined in the input">;
178
Sam Clegg87628f52022-05-26 21:05:05179def export_all: FF<"export-all">,
Sam Clegg177b4582018-06-07 01:27:07180 HelpText<"Export all symbols (normally combined with --no-gc-sections)">;
181
Sam Clegg87628f52022-05-26 21:05:05182def export_table: FF<"export-table">,
Nicholas Wilson874eedd2018-03-27 17:38:51183 HelpText<"Export function table to the environment">;
184
Sam Clegg87628f52022-05-26 21:05:05185def growable_table: FF<"growable-table">,
Jacob Gravelle92ed86d2019-08-27 22:58:21186 HelpText<"Remove maximum size from function table, allowing table to grow">;
187
Sam Clegg87628f52022-05-26 21:05:05188def global_base: JJ<"global-base=">,
Sam Cleggb839f152018-01-28 19:57:04189 HelpText<"Where to start to place global data">;
190
Sam Clegg87628f52022-05-26 21:05:05191def import_memory: FF<"import-memory">,
Dan Gohmand4c8a0e2022-10-04 19:50:10192 HelpText<"Import the module's memory from the default module of \"env\" with the name \"memory\".">;
193def import_memory_with_name: JJ<"import-memory=">,
194 HelpText<"Import the module's memory from the passed module with the passed name.">,
195 MetaVarName<"<module>,<name>">;
196
197def export_memory: FF<"export-memory">,
198 HelpText<"Export the module's memory with the default name of \"memory\"">;
199def export_memory_with_name: JJ<"export-memory=">,
200 HelpText<"Export the module's memory with the passed name">;
Sam Cleggb839f152018-01-28 19:57:04201
Sam Clegg87628f52022-05-26 21:05:05202def shared_memory: FF<"shared-memory">,
Derek Schuff3bea8bc2018-11-06 17:59:32203 HelpText<"Use shared linear memory">;
204
Sam Clegg87628f52022-05-26 21:05:05205def import_table: FF<"import-table">,
Nicholas Wilson874eedd2018-03-27 17:38:51206 HelpText<"Import function table from the environment">;
207
Sam Clegg87628f52022-05-26 21:05:05208def initial_memory: JJ<"initial-memory=">,
Sam Cleggb839f152018-01-28 19:57:04209 HelpText<"Initial size of the linear memory">;
210
Sam Clegg87628f52022-05-26 21:05:05211def max_memory: JJ<"max-memory=">,
Sam Cleggb839f152018-01-28 19:57:04212 HelpText<"Maximum size of the linear memory">;
213
Sam Clegg87628f52022-05-26 21:05:05214def no_entry: FF<"no-entry">,
Sam Cleggb839f152018-01-28 19:57:04215 HelpText<"Do not output any entry point">;
Sam Cleggc94d3932017-11-17 18:14:09216
Sam Clegg87628f52022-05-26 21:05:05217def stack_first: FF<"stack-first">,
Sam Clegga0f095e2018-05-03 17:21:53218 HelpText<"Place stack at start of linear memory rather than after data">;
219
Sam Clegg8adf7ac2018-07-23 23:51:19220defm whole_archive: B<"whole-archive",
221 "Force load of all members in a static library",
222 "Do not force load of all members in a static library (default)">;
223
Sam Clegg87628f52022-05-26 21:05:05224defm check_features: BB<"check-features",
Thomas Lively82de51a2019-03-26 04:11:05225 "Check feature compatibility of linked objects (default)",
226 "Ignore feature compatibility of linked objects">;
227
228def features: CommaJoined<["--", "-"], "features=">,
229 HelpText<"Comma-separated used features, inferred from input objects by default.">;
230
Sam Cleggc07e8382022-10-12 23:39:47231def extra_features: CommaJoined<["--", "-"], "extra-features=">,
232 HelpText<"Comma-separated list of features to add to the default set of features inferred from input objects.">;
233
Sam Cleggc94d3932017-11-17 18:14:09234// Aliases
Sam Clegg305b0342018-09-27 21:06:25235def: JoinedOrSeparate<["-"], "e">, Alias<entry>;
236def: J<"entry=">, Alias<entry>;
Sam Clegg0a9756f2022-10-03 15:31:23237def: F<"call_shared">, Alias<Bdynamic>, HelpText<"Alias for --Bdynamic">;
238def: F<"dy">, Alias<Bdynamic>, HelpText<"Alias for --Bdynamic">;
239def: F<"dn">, Alias<Bstatic>, HelpText<"Alias for --Bstatic">;
240def: F<"non_shared">, Alias<Bstatic>, HelpText<"Alias for --Bstatic">;
241def: F<"static">, Alias<Bstatic>, HelpText<"Alias for --Bstatic">;
Sam Clegg305b0342018-09-27 21:06:25242def: Flag<["-"], "E">, Alias<export_dynamic>, HelpText<"Alias for --export-dynamic">;
243def: Flag<["-"], "i">, Alias<initial_memory>;
Sam Clegg0a9756f2022-10-03 15:31:23244def: Separate<["--", "-"], "library">, Alias<library>;
245def: Joined<["--", "-"], "library=">, Alias<library>;
246def: Separate<["--", "-"], "library-path">, Alias<library_path>;
247def: Joined<["--", "-"], "library-path=">, Alias<library_path>;
Sam Cleggcc2da552020-03-27 23:52:27248def: Flag<["-"], "M">, Alias<print_map>, HelpText<"Alias for --print-map">;
Sam Clegg305b0342018-09-27 21:06:25249def: Flag<["-"], "r">, Alias<relocatable>;
Sam Clegg59d52f82018-10-31 19:30:43250def: Flag<["-"], "s">, Alias<strip_all>, HelpText<"Alias for --strip-all">;
251def: Flag<["-"], "S">, Alias<strip_debug>, HelpText<"Alias for --strip-debug">;
Sam Clegg1f3f7742019-02-06 02:35:18252def: Flag<["-"], "t">, Alias<trace>, HelpText<"Alias for --trace">;
253def: JoinedOrSeparate<["-"], "y">, Alias<trace_symbol>, HelpText<"Alias for --trace-symbol">;
Sam Clegg305b0342018-09-27 21:06:25254def: JoinedOrSeparate<["-"], "u">, Alias<undefined>;
Sam Cleggc729c1b2018-05-30 18:07:52255
256// LTO-related options.
Sam Clegg87628f52022-05-26 21:05:05257def lto_O: JJ<"lto-O">, MetaVarName<"<opt-level>">,
Sam Cleggc729c1b2018-05-30 18:07:52258 HelpText<"Optimization level for LTO">;
Sam Clegg87628f52022-05-26 21:05:05259def lto_partitions: JJ<"lto-partitions=">,
Sam Cleggc729c1b2018-05-30 18:07:52260 HelpText<"Number of LTO codegen partitions">;
261def disable_verify: F<"disable-verify">;
Sam Clegg299b0e52021-01-18 19:39:28262def save_temps: F<"save-temps">, HelpText<"Save intermediate LTO compilation results">;
Sam Clegg87628f52022-05-26 21:05:05263def thinlto_cache_dir: JJ<"thinlto-cache-dir=">,
Sam Cleggc729c1b2018-05-30 18:07:52264 HelpText<"Path to ThinLTO cached object file directory">;
Sam Clegg87628f52022-05-26 21:05:05265defm thinlto_cache_policy: EEq<"thinlto-cache-policy", "Pruning policy for the ThinLTO cache">;
266def thinlto_jobs: JJ<"thinlto-jobs=">,
Fangrui Songeb4663d2020-03-17 19:40:19267 HelpText<"Number of ThinLTO jobs. Default to --threads=">;
Sam Clegg87628f52022-05-26 21:05:05268def no_lto_legacy_pass_manager: FF<"no-lto-legacy-pass-manager">,
Nikita Popovb8f50ab2022-04-06 14:21:20269 HelpText<"Use new pass manager">;
Sam Clegg87628f52022-05-26 21:05:05270def lto_debug_pass_manager: FF<"lto-debug-pass-manager">,
Arthur Eubanks1314a492020-12-01 20:22:27271 HelpText<"Debug new pass manager">;
Dan Gohman46a32682020-06-12 19:05:40272
273// Experimental PIC mode.
Sam Clegg87628f52022-05-26 21:05:05274def experimental_pic: FF<"experimental-pic">,
Dan Gohman46a32682020-06-12 19:05:40275 HelpText<"Enable Experimental PIC">;