1include "llvm/Option/OptParser.td"
2
3// Flags that lld/MachO understands but ld64 doesn't. These take
4// '--' instead of '-' and use dashes instead of underscores, so
5// they don't collide with the ld64 compat options.
6def grp_lld : OptionGroup<"kind">, HelpText<"LLD-SPECIFIC">;
7
8def help : Flag<["-", "--"], "help">,
9    Group<grp_lld>;
10def help_hidden : Flag<["--"], "help-hidden">,
11    HelpText<"Display help for hidden options">,
12    Group<grp_lld>;
13def verbose : Flag<["--"], "verbose">,
14    Group<grp_lld>;
15def error_limit_eq : Joined<["--"], "error-limit=">,
16    HelpText<"Maximum number of errors to print before exiting (default: 20)">,
17    Group<grp_lld>;
18def color_diagnostics: Flag<["--"], "color-diagnostics">,
19    HelpText<"Alias for --color-diagnostics=always">,
20    Group<grp_lld>;
21def no_color_diagnostics: Flag<["--"], "no-color-diagnostics">,
22    HelpText<"Alias for --color-diagnostics=never">,
23    Group<grp_lld>;
24def color_diagnostics_eq: Joined<["--"], "color-diagnostics=">,
25    HelpText<"Use colors in diagnostics (default: auto)">,
26    MetaVarName<"[auto,always,never]">,
27    Group<grp_lld>;
28def threads_eq : Joined<["--"], "threads=">,
29    HelpText<"Number of threads. '1' disables multi-threading. By default all available hardware threads are used">,
30    Group<grp_lld>;
31def thinlto_jobs_eq : Joined<["--"], "thinlto-jobs=">,
32    HelpText<"Number of ThinLTO jobs. Default to --threads=">,
33    Group<grp_lld>;
34def reproduce: Separate<["--"], "reproduce">,
35    Group<grp_lld>;
36def reproduce_eq: Joined<["--"], "reproduce=">,
37    Alias<!cast<Separate>(reproduce)>,
38    HelpText<"Write tar file containing inputs and command to reproduce link">,
39    Group<grp_lld>;
40def version: Flag<["--"], "version">,
41    HelpText<"Display the version number and exit">,
42    Group<grp_lld>;
43def lto_legacy_pass_manager: Flag<["--"], "lto-legacy-pass-manager">,
44    HelpText<"Use the legacy pass manager in LLVM">,
45    Group<grp_lld>;
46def no_lto_legacy_pass_manager : Flag<["--"], "no-lto-legacy-pass-manager">,
47    HelpText<"Use the new pass manager in LLVM">,
48    Group<grp_lld>;
49def time_trace: Flag<["--"], "time-trace">, HelpText<"Record time trace">,
50    Group<grp_lld>;
51def time_trace_granularity_eq: Joined<["--"], "time-trace-granularity=">,
52    HelpText<"Minimum time granularity (in microseconds) traced by time profiler">,
53    Group<grp_lld>;
54def time_trace_file_eq: Joined<["--"], "time-trace-file=">,
55    HelpText<"Specify time trace output file">,
56    Group<grp_lld>;
57def deduplicate_literals: Flag<["--"], "deduplicate-literals">,
58    HelpText<"Enable literal deduplication. This is implied by --icf={safe,all}">,
59    Group<grp_lld>;
60def print_dylib_search: Flag<["--"], "print-dylib-search">,
61    HelpText<"Print which paths lld searched when trying to find dylibs">,
62    Group<grp_lld>;
63def icf_eq: Joined<["--"], "icf=">,
64    HelpText<"Set level for identical code folding (default: none)">,
65    MetaVarName<"[none,safe,all]">,
66    Group<grp_lld>;
67def lto_O: Joined<["--"], "lto-O">,
68    HelpText<"Set optimization level for LTO (default: 2)">,
69    MetaVarName<"<opt-level>">,
70    Group<grp_lld>;
71def thinlto_cache_policy: Joined<["--"], "thinlto-cache-policy=">,
72    HelpText<"Pruning policy for the ThinLTO cache">,
73    Group<grp_lld>;
74def O : JoinedOrSeparate<["-"], "O">,
75    HelpText<"Optimize output file size">;
76
77// This is a complete Options.td compiled from Apple's ld(1) manpage
78// dated 2018-03-07 and cross checked with ld64 source code in repo
79// https://github.com/apple-opensource/ld64 at git tag "512.4" dated
80// 2018-03-18.
81
82// Flags<[HelpHidden]> marks options that are not yet ported to lld,
83// and serve as a scoreboard for annotating our progress toward
84// implementing ld64 options in lld. As you add implementions to
85// Driver.cpp, please remove the hidden flag here.
86
87def grp_kind : OptionGroup<"kind">, HelpText<"OUTPUT KIND">;
88
89def execute : Flag<["-"], "execute">,
90    HelpText<"Produce a main executable (default)">,
91    Group<grp_kind>;
92def dylib : Flag<["-"], "dylib">,
93    HelpText<"Produce a shared library">,
94    Group<grp_kind>;
95def bundle : Flag<["-"], "bundle">,
96    HelpText<"Produce a bundle">,
97    Group<grp_kind>;
98def r : Flag<["-"], "r">,
99    HelpText<"Merge multiple object files into one, retaining relocations">,
100    Flags<[HelpHidden]>,
101    Group<grp_kind>;
102def dylinker : Flag<["-"], "dylinker">,
103    HelpText<"Produce a dylinker only used when building dyld">,
104    Flags<[HelpHidden]>,
105    Group<grp_kind>;
106def dynamic : Flag<["-"], "dynamic">,
107    HelpText<"Link dynamically (default)">,
108    Group<grp_kind>;
109def static : Flag<["-"], "static">,
110    HelpText<"Link statically">,
111    Flags<[HelpHidden]>,
112    Group<grp_kind>;
113def preload : Flag<["-"], "preload">,
114    HelpText<"Produce an unsegmented binary for embedded systems">,
115    Flags<[HelpHidden]>,
116    Group<grp_kind>;
117def arch : Separate<["-"], "arch">,
118    MetaVarName<"<arch_name>">,
119    HelpText<"The architecture (e.g. ppc, ppc64, i386, x86_64)">,
120    Group<grp_kind>;
121def o : Separate<["-"], "o">,
122    MetaVarName<"<path>">,
123    HelpText<"The name of the output file (default: `a.out')">,
124    Group<grp_kind>;
125
126def grp_libs : OptionGroup<"libs">, HelpText<"LIBRARIES">;
127
128def l : Joined<["-"], "l">,
129    MetaVarName<"<name>">,
130    HelpText<"Search for lib<name>.dylib or lib<name>.a on the library search path">,
131    Group<grp_libs>;
132def weak_l : Joined<["-"], "weak-l">,
133    MetaVarName<"<name>">,
134    HelpText<"Like -l<name>, but mark library and its references as weak imports">,
135    Group<grp_libs>;
136def weak_library : Separate<["-"], "weak_library">,
137    MetaVarName<"<path>">,
138    HelpText<"Like bare <path>, but mark library and its references as weak imports">,
139    Group<grp_libs>;
140def needed_l : Joined<["-"], "needed-l">,
141    MetaVarName<"<name>">,
142    HelpText<"Like -l<name>, but link library even if its symbols are not used and -dead_strip_dylibs is active">,
143    Group<grp_libs>;
144def needed_library : Separate<["-"], "needed_library">,
145    MetaVarName<"<path>">,
146    HelpText<"Like bare <path>, but link library even if its symbols are not used and -dead_strip_dylibs is active">,
147    Group<grp_libs>;
148def reexport_l : Joined<["-"], "reexport-l">,
149    MetaVarName<"<name>">,
150    HelpText<"Like -l<name>, but export all symbols of <name> from newly created library">,
151    Group<grp_libs>;
152def reexport_library : Separate<["-"], "reexport_library">,
153    MetaVarName<"<path>">,
154    HelpText<"Like bare <path>, but export all symbols of <path> from newly created library">,
155    Group<grp_libs>;
156def upward_l : Joined<["-"], "upward-l">,
157    MetaVarName<"<name>">,
158    HelpText<"Like -l<name>, but specify dylib as an upward dependency">,
159    Flags<[HelpHidden]>,
160    Group<grp_libs>;
161def upward_library : Separate<["-"], "upward_library">,
162    MetaVarName<"<path>">,
163    HelpText<"Like bare <path>, but specify dylib as an upward dependency">,
164    Flags<[HelpHidden]>,
165    Group<grp_libs>;
166def L : JoinedOrSeparate<["-"], "L">,
167    MetaVarName<"<dir>">,
168    HelpText<"Add dir to the library search path">,
169    Group<grp_libs>;
170def Z : Flag<["-"], "Z">,
171    HelpText<"Remove standard directories from the library and framework search paths">,
172    Group<grp_libs>;
173def syslibroot : Separate<["-"], "syslibroot">,
174    MetaVarName<"<rootdir>">,
175    HelpText<"Prepend <rootdir> to all library and framework search paths">,
176    Group<grp_libs>;
177def search_paths_first : Flag<["-"], "search_paths_first">,
178    HelpText<"Search for lib<name>.dylib and lib<name>.a at each step in traversing search path (default for Xcode 4 and later)">,
179    Group<grp_libs>;
180def search_dylibs_first : Flag<["-"], "search_dylibs_first">,
181    HelpText<"Search for lib<name>.dylib on first pass, then for lib<name>.a on second pass through search path (default for Xcode 3 and earlier)">,
182    Group<grp_libs>;
183def framework : Separate<["-"], "framework">,
184    MetaVarName<"<name>">,
185    HelpText<"Search for <name>.framework/<name> on the framework search path">,
186    Group<grp_libs>;
187def weak_framework : Separate<["-"], "weak_framework">,
188    MetaVarName<"<name>">,
189    HelpText<"Like -framework <name>, but mark framework and its references as weak imports">,
190    Group<grp_libs>;
191def needed_framework : Separate<["-"], "needed_framework">,
192    MetaVarName<"<name>">,
193    HelpText<"Like -framework <name>, but link <name> even if none of its symbols are used and -dead_strip_dylibs is active">,
194    Group<grp_libs>;
195def reexport_framework : Separate<["-"], "reexport_framework">,
196    MetaVarName<"<name>">,
197    HelpText<"Like -framework <name>, but export all symbols of <name> from the newly created library">,
198    Group<grp_libs>;
199def upward_framework : Separate<["-"], "upward_framework">,
200    MetaVarName<"<name>">,
201    HelpText<"Like -framework <name>, but specify the framework as an upward dependency">,
202    Flags<[HelpHidden]>,
203    Group<grp_libs>;
204def F : JoinedOrSeparate<["-"], "F">,
205    MetaVarName<"<dir>">,
206    HelpText<"Add dir to the framework search path">,
207    Group<grp_libs>;
208def all_load : Flag<["-"], "all_load">,
209    HelpText<"Load all members of all static archive libraries">,
210    Group<grp_libs>;
211def ObjC : Flag<["-"], "ObjC">,
212    HelpText<"Load all members of static archives that are an Objective-C class or category.">,
213    Group<grp_libs>;
214def force_load : Separate<["-"], "force_load">,
215    MetaVarName<"<path>">,
216    HelpText<"Load all members static archive library at <path>">,
217    Group<grp_libs>;
218def force_load_swift_libs : Flag<["-"], "force_load_swift_libs">,
219    HelpText<"Apply -force_load to libraries listed in LC_LINKER_OPTIONS whose names start with 'swift'">,
220    Group<grp_libs>;
221
222def grp_content : OptionGroup<"content">, HelpText<"ADDITIONAL CONTENT">;
223
224def sectcreate : MultiArg<["-"], "sectcreate", 3>,
225    MetaVarName<"<segment> <section> <file>">,
226    HelpText<"Create <section> in <segment> from the contents of <file>">,
227    Group<grp_content>;
228def segcreate : MultiArg<["-"], "segcreate", 3>,
229    MetaVarName<"<segment> <section> <file>">,
230    Alias<sectcreate>,
231    HelpText<"Alias for -sectcreate">,
232    Group<grp_content>;
233def filelist : Separate<["-"], "filelist">,
234    MetaVarName<"<file>">,
235    HelpText<"Read names of files to link from <file>">,
236    Group<grp_content>;
237def dtrace : Separate<["-"], "dtrace">,
238    MetaVarName<"<script>">,
239    HelpText<"Enable DTrace static probes according to declarations in <script>">,
240    Flags<[HelpHidden]>,
241    Group<grp_content>;
242
243def grp_opts : OptionGroup<"opts">, HelpText<"OPTIMIZATIONS">;
244
245def dead_strip : Flag<["-"], "dead_strip">,
246    HelpText<"Remove unreachable functions and data">,
247    Group<grp_opts>;
248def order_file : Separate<["-"], "order_file">,
249    MetaVarName<"<file>">,
250    HelpText<"Layout functions and data according to specification in <file>">,
251    Group<grp_opts>;
252def no_order_inits : Flag<["-"], "no_order_inits">,
253    HelpText<"Disable default reordering of initializer and terminator functions">,
254    Flags<[HelpHidden]>,
255    Group<grp_opts>;
256def no_order_data : Flag<["-"], "no_order_data">,
257    HelpText<"Disable default reordering of global data accessed at launch time">,
258    Flags<[HelpHidden]>,
259    Group<grp_opts>;
260def image_base : Separate<["-"], "image_base">,
261    MetaVarName<"<address>">,
262    HelpText<"Preferred hex load address for a dylib or bundle.">,
263    Flags<[HelpHidden]>,
264    Group<grp_opts>;
265def seg1addr : Separate<["-"], "seg1addr">,
266    MetaVarName<"<address>">,
267    Alias<image_base>,
268    HelpText<"Alias for -image_base">,
269    Flags<[HelpHidden]>,
270    Group<grp_opts>;
271def no_implicit_dylibs : Flag<["-"], "no_implicit_dylibs">,
272    HelpText<"Do not optimize public dylib transitive symbol references">,
273    Group<grp_opts>;
274def exported_symbols_order : Separate<["-"], "exported_symbols_order">,
275    MetaVarName<"<file>">,
276    HelpText<"Specify frequently-used symbols in <file> to optimize symbol exports">,
277    Flags<[HelpHidden]>,
278    Group<grp_opts>;
279def no_zero_fill_sections : Flag<["-"], "no_zero_fill_sections">,
280    HelpText<"Explicitly store zeroed data in the final image">,
281    Flags<[HelpHidden]>,
282    Group<grp_opts>;
283def merge_zero_fill_sections : Flag<["-"], "merge_zero_fill_sections">,
284    HelpText<"Merge all zeroed data into the __zerofill section">,
285    Flags<[HelpHidden]>,
286    Group<grp_opts>;
287def no_branch_islands : Flag<["-"], "no_branch_islands">,
288    HelpText<"Disable infra for branches beyond the maximum branch distance.">,
289    Flags<[HelpHidden]>,
290    Group<grp_opts>;
291def no_deduplicate : Flag<["-"], "no_deduplicate">,
292    HelpText<"Disable code deduplicaiton (synonym for `--icf=none')">,
293    Group<grp_opts>;
294
295def grp_version : OptionGroup<"version">, HelpText<"VERSION TARGETING">;
296
297def platform_version : MultiArg<["-"], "platform_version", 3>,
298    MetaVarName<"<platform> <min_version> <sdk_version>">,
299    HelpText<"Platform (e.g., macos, ios, tvos, watchos, bridgeos, mac-catalyst, ios-sim, tvos-sim, watchos-sim, driverkit) and version numbers">,
300    Group<grp_version>;
301def sdk_version : Separate<["-"], "sdk_version">,
302    HelpText<"This option is undocumented in ld64">,
303    Flags<[HelpHidden]>,
304    Group<grp_version>;
305def macos_version_min : Separate<["-"], "macos_version_min">,
306    MetaVarName<"<version>">,
307    HelpText<"Oldest macOS version for which linked output is usable">,
308    Group<grp_version>;
309def macosx_version_min : Separate<["-"], "macosx_version_min">,
310    MetaVarName<"<version>">,
311    Alias<macos_version_min>,
312    HelpText<"Alias for -macos_version_min">,
313    Flags<[HelpHidden]>,
314    Group<grp_version>;
315def ios_version_min : Separate<["-"], "ios_version_min">,
316    MetaVarName<"<version>">,
317    HelpText<"Oldest iOS version for which linked output is usable">,
318    Flags<[HelpHidden]>,
319    Group<grp_version>;
320def ios_simulator_version_min : Separate<["-"], "ios_simulator_version_min">,
321    MetaVarName<"<version>">,
322    HelpText<"Oldest iOS simulator version for which linked output is usable">,
323    Flags<[HelpHidden]>,
324    Group<grp_version>;
325def iphoneos_version_min : Separate<["-"], "iphoneos_version_min">,
326    MetaVarName<"<version>">,
327    Alias<ios_version_min>,
328    HelpText<"Alias for -ios_version_min">,
329    Flags<[HelpHidden]>,
330    Group<grp_version>;
331def maccatalyst_version_min : Separate<["-"], "maccatalyst_version_min">,
332    MetaVarName<"<version>">,
333    HelpText<"Oldest MacCatalyst version for which linked output is usable">,
334    Flags<[HelpHidden]>,
335    Group<grp_version>;
336def iosmac_version_min : Separate<["-"], "iosmac_version_min">,
337    MetaVarName<"<version>">,
338    Alias<maccatalyst_version_min>,
339    HelpText<"Alias for -maccatalyst_version_min">,
340    Flags<[HelpHidden]>,
341    Group<grp_version>;
342def uikitformac_version_min : Separate<["-"], "uikitformac_version_min">,
343    MetaVarName<"<version>">,
344    Alias<maccatalyst_version_min>,
345    HelpText<"Alias for -maccatalyst_version_min">,
346    Flags<[HelpHidden]>,
347    Group<grp_version>;
348def tvos_version_min : Separate<["-"], "tvos_version_min">,
349    MetaVarName<"<version>">,
350    HelpText<"Oldest tvOS version for which linked output is usable">,
351    Flags<[HelpHidden]>,
352    Group<grp_version>;
353def watchos_version_min : Separate<["-"], "watchos_version_min">,
354    MetaVarName<"<version>">,
355    HelpText<"Oldest watchOS version for which linked output is usable">,
356    Flags<[HelpHidden]>,
357    Group<grp_version>;
358def bridgeos_version_min : Separate<["-"], "bridgeos_version_min">,
359    MetaVarName<"<version>">,
360    HelpText<"Oldest bridgeOS version for which linked output is usable">,
361    Flags<[HelpHidden]>,
362    Group<grp_version>;
363def driverkit_version_min : Separate<["-"], "driverkit_version_min">,
364    MetaVarName<"<version>">,
365    HelpText<"Oldest DriverKit version for which linked output is usable">,
366    Flags<[HelpHidden]>,
367    Group<grp_version>;
368
369def grp_dylib : OptionGroup<"dylib">, HelpText<"DYNAMIC LIBRARIES (DYLIB)">;
370
371def install_name : Separate<["-"], "install_name">,
372    MetaVarName<"<name>">,
373    HelpText<"Set an internal install path in a dylib">,
374    Group<grp_dylib>;
375def dylib_install_name : Separate<["-"], "dylib_install_name">,
376    MetaVarName<"<name>">,
377    Alias<install_name>,
378    HelpText<"Alias for -install_name">,
379    Group<grp_dylib>;
380def dylinker_install_name : Separate<["-"], "dylinker_install_name">,
381    MetaVarName<"<name>">,
382    Alias<install_name>,
383    HelpText<"Alias for -install_name">,
384    Group<grp_dylib>;
385def mark_dead_strippable_dylib : Flag<["-"], "mark_dead_strippable_dylib">,
386    HelpText<"Mark output dylib as dead-strippable: When a client links against it but does not use any of its symbols, the dylib will not be added to the client's list of needed dylibs">,
387    Group<grp_dylib>;
388def compatibility_version : Separate<["-"], "compatibility_version">,
389    MetaVarName<"<version>">,
390    HelpText<"Compatibility <version> of this library">,
391    Group<grp_dylib>;
392def dylib_compatibility_version : Separate<["-"], "dylib_compatibility_version">,
393    MetaVarName<"<version>">,
394    Alias<compatibility_version>,
395    HelpText<"Alias for -compatibility_version">,
396    Flags<[HelpHidden]>,
397    Group<grp_dylib>;
398def current_version : Separate<["-"], "current_version">,
399    MetaVarName<"<version>">,
400    HelpText<"Current <version> of this library">,
401    Group<grp_dylib>;
402def dylib_current_version : Separate<["-"], "dylib_current_version">,
403    MetaVarName<"<version>">,
404    Alias<current_version>,
405    HelpText<"Alias for -current_version">,
406    Flags<[HelpHidden]>,
407    Group<grp_dylib>;
408
409def grp_main : OptionGroup<"main">, HelpText<"MAIN EXECUTABLE">;
410
411def pie : Flag<["-"], "pie">,
412    HelpText<"Build a position independent executable (default)">,
413    Group<grp_main>;
414def no_pie : Flag<["-"], "no_pie">,
415    HelpText<"Do not build a position independent executable">,
416    Group<grp_main>;
417def pagezero_size : Separate<["-"], "pagezero_size">,
418    MetaVarName<"<size>">,
419    HelpText<"Size of unreadable segment at address zero is hex <size> (default is 4KB on 32-bit and 4GB on 64-bit)">,
420    Flags<[HelpHidden]>,
421    Group<grp_main>;
422def stack_size : Separate<["-"], "stack_size">,
423    MetaVarName<"<size>">,
424    HelpText<"Maximum hex stack size for the main thread in a program. (default is 8MB)">,
425    Flags<[HelpHidden]>,
426    Group<grp_main>;
427def allow_stack_execute : Flag<["-"], "allow_stack_execute">,
428    HelpText<"Mark stack segment as executable">,
429    Flags<[HelpHidden]>,
430    Group<grp_main>;
431def export_dynamic : Flag<["-"], "export_dynamic">,
432    HelpText<"Preserve all global symbols during LTO and when dead-stripping executables">,
433    Group<grp_main>;
434
435def grp_bundle : OptionGroup<"bundle">, HelpText<"CREATING A BUNDLE">;
436
437def bundle_loader : Separate<["-"], "bundle_loader">,
438    MetaVarName<"<executable>">,
439    HelpText<"Resolve undefined symbols from <executable>">,
440    Group<grp_bundle>;
441
442def grp_object : OptionGroup<"object">, HelpText<"CREATING AN OBJECT FILE">;
443
444def keep_private_externs : Flag<["-"], "keep_private_externs">,
445    HelpText<"Do not convert private external symbols to static symbols (only valid with -r)">,
446    Flags<[HelpHidden]>,
447    Group<grp_object>;
448def d : Flag<["-"], "d">,
449    HelpText<"Force tentative into real definitions for common symbols">,
450    Flags<[HelpHidden]>,
451    Group<grp_object>;
452
453def grp_resolve : OptionGroup<"resolve">, HelpText<"SYMBOL RESOLUTION">;
454
455def exported_symbol : Separate<["-"], "exported_symbol">,
456    MetaVarName<"<symbol>">,
457    HelpText<"<symbol> remains global, while others become private externs">,
458    Group<grp_resolve>;
459def exported_symbols_list : Separate<["-"], "exported_symbols_list">,
460    MetaVarName<"<file>">,
461    HelpText<"Symbols specified in <file> remain global, while others become private externs">,
462    Group<grp_resolve>;
463def unexported_symbol : Separate<["-"], "unexported_symbol">,
464    MetaVarName<"<symbol>">,
465    HelpText<"Global <symbol> becomes private extern">,
466    Group<grp_resolve>;
467def unexported_symbols_list : Separate<["-"], "unexported_symbols_list">,
468    MetaVarName<"<file>">,
469    HelpText<"Global symbols specified in <file> become private externs">,
470    Group<grp_resolve>;
471def reexported_symbols_list : Separate<["-"], "reexported_symbols_list">,
472    MetaVarName<"<file>">,
473    HelpText<"Symbols from dependent dylibs specified in <file> are reexported by this dylib">,
474    Flags<[HelpHidden]>,
475    Group<grp_resolve>;
476def alias : MultiArg<["-"], "alias", 2>,
477    MetaVarName<"<symbol_name> <alternate_name>">,
478    HelpText<"Create a symbol alias with default global visibility">,
479    Flags<[HelpHidden]>,
480    Group<grp_resolve>;
481def alias_list : Separate<["-"], "alias_list">,
482    MetaVarName<"<file>">,
483    HelpText<"Create symbol aliases specified in <file>">,
484    Flags<[HelpHidden]>,
485    Group<grp_resolve>;
486def flat_namespace : Flag<["-"], "flat_namespace">,
487    HelpText<"Resolve symbols from all dylibs, both direct and transitive. Do not record source libraries: dyld must re-search at runtime and use the first definition found">,
488    Group<grp_resolve>;
489def twolevel_namespace : Flag<["-"], "twolevel_namespace">,
490    HelpText<"Make dyld look up symbols by (dylib,name) pairs (default)">,
491    Group<grp_resolve>;
492def u : Separate<["-"], "u">,
493    MetaVarName<"<symbol>">,
494    HelpText<"Require that <symbol> be defined for the link to succeed">,
495    Group<grp_resolve>;
496def U : Separate<["-"], "U">,
497    MetaVarName<"<symbol>">,
498    HelpText<"Allow <symbol> to have no definition">,
499    Group<grp_resolve>;
500def undefined : Separate<["-"], "undefined">,
501    MetaVarName<"<treatment>">,
502    HelpText<"Handle undefined symbols according to <treatment>: error, warning, suppress, or dynamic_lookup (default is error)">,
503    Group<grp_resolve>;
504def rpath : Separate<["-"], "rpath">,
505    MetaVarName<"<path>">,
506    HelpText<"Add <path> to dyld search list for dylibs with load path prefix `@rpath/'">,
507    Group<grp_resolve>;
508def commons : Separate<["-"], "commons">,
509    MetaVarName<"<treatment>">,
510    HelpText<"Resolve tentative definitions in dylibs according to <treatment>: ignore_dylibs, use_dylibs, error (default is ignore_dylibs)">,
511    Flags<[HelpHidden]>,
512    Group<grp_resolve>;
513
514def grp_introspect : OptionGroup<"introspect">, HelpText<"INTROSPECTING THE LINKER">;
515
516def why_load : Flag<["-"], "why_load">,
517    HelpText<"Log why each object file is loaded from a static library">,
518    Group<grp_introspect>;
519def whyload : Flag<["-"], "whyload">,
520    Alias<why_load>,
521    HelpText<"Alias for -why_load">,
522    Group<grp_introspect>;
523def why_live : Separate<["-"], "why_live">,
524    MetaVarName<"<symbol>">,
525    HelpText<"Log a chain of references to <symbol>, for use with -dead_strip">,
526    Flags<[HelpHidden]>,
527    Group<grp_introspect>;
528def print_statistics : Flag<["-"], "print_statistics">,
529    HelpText<"Log the linker's memory and CPU usage">,
530    Flags<[HelpHidden]>,
531    Group<grp_introspect>;
532def t : Flag<["-"], "t">,
533    HelpText<"Log every file the linker loads: object, archive, and dylib">,
534    Group<grp_introspect>;
535def whatsloaded : Flag<["-"], "whatsloaded">,
536    HelpText<"Logs only the object files the linker loads">,
537    Flags<[HelpHidden]>,
538    Group<grp_introspect>;
539def order_file_statistics : Flag<["-"], "order_file_statistics">,
540    HelpText<"Logs information about -order_file">,
541    Flags<[HelpHidden]>,
542    Group<grp_introspect>;
543def map : Separate<["-"], "map">,
544    MetaVarName<"<path>">,
545    HelpText<"Writes all symbols and their addresses to <path>">,
546    Group<grp_introspect>;
547def dependency_info : Separate<["-"], "dependency_info">,
548    MetaVarName<"<path>">,
549    HelpText<"Dump dependency info">,
550    Group<grp_introspect>;
551def save_temps : Flag<["-"], "save-temps">,
552    HelpText<"Save intermediate LTO compilation results">,
553    Group<grp_introspect>;
554
555def grp_symtab : OptionGroup<"symtab">, HelpText<"SYMBOL TABLE">;
556
557def S : Flag<["-"], "S">,
558    HelpText<"Strip debug information (STABS or DWARF) from the output">,
559    Flags<[HelpHidden]>,
560    Group<grp_symtab>;
561def x : Flag<["-"], "x">,
562    HelpText<"Exclude non-global symbols from the output symbol table">,
563    Flags<[HelpHidden]>,
564    Group<grp_symtab>;
565def non_global_symbols_strip_list : Separate<["-"], "non_global_symbols_strip_list">,
566    MetaVarName<"<path>">,
567    HelpText<"Specify in <path> the non-global symbols that should be removed from the output symbol table">,
568    Flags<[HelpHidden]>,
569    Group<grp_symtab>;
570def non_global_symbols_no_strip_list : Separate<["-"], "non_global_symbols_no_strip_list">,
571    MetaVarName<"<path>">,
572    HelpText<"Specify in <path> the non-global symbols that should remain in the output symbol table">,
573    Flags<[HelpHidden]>,
574    Group<grp_symtab>;
575def oso_prefix : Separate<["-"], "oso_prefix">,
576    MetaVarName<"<path>">,
577    HelpText<"Remove the prefix <path> from OSO symbols in the debug map">,
578    Flags<[HelpHidden]>,
579    Group<grp_symtab>;
580def add_ast_path : Separate<["-"], "add_ast_path">,
581    MetaVarName<"<path>">,
582    HelpText<"AST paths will be emitted as STABS">,
583    Group<grp_symtab>;
584
585def grp_bitcode : OptionGroup<"bitcode">, HelpText<"BITCODE BUILD FLOW">;
586
587def bitcode_bundle : Flag<["-"], "bitcode_bundle">,
588    HelpText<"Generate an embedded bitcode bundle in the __LLVM,__bundle section of the output">,
589    Group<grp_bitcode>;
590def bitcode_hide_symbols : Flag<["-"], "bitcode_hide_symbols">,
591    HelpText<"With -bitcode_bundle, hide all non-exported symbols from output bitcode bundle.">,
592    Flags<[HelpHidden]>,
593    Group<grp_bitcode>;
594def bitcode_symbol_map : Separate<["-"], "bitcode_symbol_map">,
595    MetaVarName<"<path>">,
596    HelpText<"Write the bitcode symbol reverse mapping to file <path>, or if a directory, to <path>/UUID.bcsymbolmap">,
597    Flags<[HelpHidden]>,
598    Group<grp_bitcode>;
599
600def grp_rare : OptionGroup<"rare">, HelpText<"RARELY USED">;
601
602def v : Flag<["-"], "v">,
603    HelpText<"Print the linker version and search paths in addition to linking">,
604    Group<grp_rare>;
605def adhoc_codesign : Flag<["-"], "adhoc_codesign">,
606    HelpText<"Write an ad-hoc code signature to the output file (default for arm64 binaries)">,
607    Group<grp_rare>;
608def no_adhoc_codesign : Flag<["-"], "no_adhoc_codesign">,
609    HelpText<"Do not write an ad-hoc code signature to the output file (default for x86_64 binaries)">,
610    Group<grp_rare>;
611def version_details : Flag<["-"], "version_details">,
612    HelpText<"Print the linker version in JSON form">,
613    Flags<[HelpHidden]>,
614    Group<grp_rare>;
615def no_weak_imports : Flag<["-"], "no_weak_imports">,
616    HelpText<"Fail if any symbols are weak imports, allowed to be NULL at runtime">,
617    Flags<[HelpHidden]>,
618    Group<grp_rare>;
619def verbose_deduplicate : Flag<["-"], "verbose_deduplicate">,
620    HelpText<"Print function names eliminated by deduplication and the total size of code savings">,
621    Flags<[HelpHidden]>,
622    Group<grp_rare>;
623def no_inits : Flag<["-"], "no_inits">,
624    HelpText<"Fail if the output contains static initializers">,
625    Flags<[HelpHidden]>,
626    Group<grp_rare>;
627def no_warn_inits : Flag<["-"], "no_warn_inits">,
628    HelpText<"Suppress warnings for static initializers in the output">,
629    Flags<[HelpHidden]>,
630    Group<grp_rare>;
631def debug_variant : Flag<["-"], "debug_variant">,
632    HelpText<"Suppress warnings germane to binaries shipping to customers">,
633    Flags<[HelpHidden]>,
634    Group<grp_rare>;
635def unaligned_pointers : Separate<["-"], "unaligned_pointers">,
636    MetaVarName<"<treatment>">,
637    HelpText<"Handle unaligned pointers in __DATA segments according to <treatment>: warning, error, or suppress (default for arm64e is error, otherwise suppress)">,
638    Flags<[HelpHidden]>,
639    Group<grp_rare>;
640def dirty_data_list : Separate<["-"], "dirty_data_list">,
641    MetaVarName<"<path>">,
642    HelpText<"Specify data symbols in <path> destined for the __DATA_DIRTY segment">,
643    Flags<[HelpHidden]>,
644    Group<grp_rare>;
645def max_default_common_align : Separate<["-"], "max_default_common_align">,
646    MetaVarName<"<boundary>">,
647    HelpText<"Reduce maximum alignment for common symbols to a hex power-of-2 <boundary>">,
648    Flags<[HelpHidden]>,
649    Group<grp_rare>;
650def move_to_rw_segment : MultiArg<["-"], "move_to_rw_segment", 2>,
651    MetaVarName<"<segment> <path>">,
652    HelpText<"Move data symbols listed in <path> to another <segment>">,
653    Flags<[HelpHidden]>,
654    Group<grp_rare>;
655def move_to_ro_segment : MultiArg<["-"], "move_to_ro_segment", 2>,
656    MetaVarName<"<segment> <path>">,
657    HelpText<"Move code symbols listed in <path> to another <segment>">,
658    Flags<[HelpHidden]>,
659    Group<grp_rare>;
660def rename_section : MultiArg<["-"], "rename_section", 4>,
661    MetaVarName<"<from_segment> <from_section> <to_segment> <to_section>">,
662    HelpText<"Rename <from_segment>/<from_section> as <to_segment>/<to_section>">,
663    Group<grp_rare>;
664def rename_segment : MultiArg<["-"], "rename_segment", 2>,
665    MetaVarName<"<from_segment> <to_segment>">,
666    HelpText<"Rename <from_segment> as <to_segment>">,
667    Group<grp_rare>;
668def trace_symbol_layout : Flag<["-"], "trace_symbol_layout">,
669    HelpText<"Show where and why symbols move, as specified by -move_to_ro_segment, -move_to_rw_segment, -rename_section, and -rename_segment">,
670    Flags<[HelpHidden]>,
671    Group<grp_rare>;
672def data_const : Flag<["-"], "data_const">,
673    HelpText<"Force migration of readonly data into __DATA_CONST segment">,
674    Group<grp_rare>;
675def no_data_const : Flag<["-"], "no_data_const">,
676    HelpText<"Block migration of readonly data away from __DATA segment">,
677    Group<grp_rare>;
678def text_exec : Flag<["-"], "text_exec">,
679    HelpText<"Rename __segment TEXT to __TEXT_EXEC for sections __text and __stubs">,
680    Flags<[HelpHidden]>,
681    Group<grp_rare>;
682def section_order : MultiArg<["-"], "section_order", 2>,
683    MetaVarName<"<segment> <sections>">,
684    HelpText<"With -preload, specify layout sequence of colon-separated <sections> in <segment>">,
685    Flags<[HelpHidden]>,
686    Group<grp_rare>;
687def segment_order : Separate<["-"], "segment_order">,
688    MetaVarName<"<colon_separated_segment_list>">,
689    HelpText<"With -preload, specify layout sequence of colon-separated <segments>">,
690    Flags<[HelpHidden]>,
691    Group<grp_rare>;
692def allow_heap_execute : Flag<["-"], "allow_heap_execute">,
693    HelpText<"On i386, allow any page to execute code">,
694    Flags<[HelpHidden]>,
695    Group<grp_rare>;
696def application_extension : Flag<["-"], "application_extension">,
697    HelpText<"Mark output as safe for use in an application extension, and validate that linked dylibs are safe">,
698    Group<grp_rare>;
699def no_application_extension : Flag<["-"], "no_application_extension">,
700    HelpText<"Disable application extension functionality (default)">,
701    Group<grp_rare>;
702def fatal_warnings : Flag<["-"], "fatal_warnings">,
703    HelpText<"Treat warnings as errors">,
704    Group<grp_rare>;
705def no_eh_labels : Flag<["-"], "no_eh_labels">,
706    HelpText<"In -r mode, suppress .eh labels in the __eh_frame section">,
707    Flags<[HelpHidden]>,
708    Group<grp_rare>;
709def warn_compact_unwind : Flag<["-"], "warn_compact_unwind">,
710    HelpText<"Warn for each FDE that cannot compact into the __unwind_info section and must remain in the __eh_frame section">,
711    Flags<[HelpHidden]>,
712    Group<grp_rare>;
713def warn_weak_exports : Flag<["-"], "warn_weak_exports">,
714    HelpText<"Warn if the linked image contains weak external symbols">,
715    Flags<[HelpHidden]>,
716    Group<grp_rare>;
717def no_weak_exports : Flag<["-"], "no_weak_exports">,
718    HelpText<"Fail if the linked image contains weak external symbols">,
719    Flags<[HelpHidden]>,
720    Group<grp_rare>;
721def objc_gc_compaction : Flag<["-"], "objc_gc_compaction">,
722    HelpText<"Mark the Objective-C image as compatible with compacting garbage collection">,
723    Flags<[HelpHidden]>,
724    Group<grp_rare>;
725def objc_gc : Flag<["-"], "objc_gc">,
726    HelpText<"Verify that all code was compiled with -fobjc-gc or -fobjc-gc-only">,
727    Flags<[HelpHidden]>,
728    Group<grp_rare>;
729def objc_gc_only : Flag<["-"], "objc_gc_only">,
730    HelpText<"Verify that all code was compiled with -fobjc-gc-only">,
731    Flags<[HelpHidden]>,
732    Group<grp_rare>;
733def dead_strip_dylibs : Flag<["-"], "dead_strip_dylibs">,
734    HelpText<"Remove dylibs that are unreachable by the entry point or exported symbols">,
735    Group<grp_rare>;
736def allow_sub_type_mismatches : Flag<["-"], "allow_sub_type_mismatches">,
737    HelpText<"Permit mixing objects compiled for different ARM CPU subtypes">,
738    Flags<[HelpHidden]>,
739    Group<grp_rare>;
740def no_uuid : Flag<["-"], "no_uuid">,
741    HelpText<"Do not generate the LC_UUID load command">,
742    Flags<[HelpHidden]>,
743    Group<grp_rare>;
744def root_safe : Flag<["-"], "root_safe">,
745    HelpText<"Set the MH_ROOT_SAFE bit in the mach-o header">,
746    Flags<[HelpHidden]>,
747    Group<grp_rare>;
748def setuid_safe : Flag<["-"], "setuid_safe">,
749    HelpText<"Set the MH_SETUID_SAFE bit in the mach-o header">,
750    Flags<[HelpHidden]>,
751    Group<grp_rare>;
752def interposable : Flag<["-"], "interposable">,
753    HelpText<"Indirects access to all to exported symbols in a dylib">,
754    Flags<[HelpHidden]>,
755    Group<grp_rare>;
756def multi_module : Flag<["-"], "multi_module">,
757    Alias<interposable>,
758    HelpText<"Alias for -interposable">,
759    Flags<[HelpHidden]>,
760    Group<grp_rare>;
761def init : Separate<["-"], "init">,
762    MetaVarName<"<symbol>">,
763    HelpText<"Run <symbol> as the first initializer in a dylib">,
764    Flags<[HelpHidden]>,
765    Group<grp_rare>;
766def sub_library : Separate<["-"], "sub_library">,
767    MetaVarName<"<name>">,
768    HelpText<"Re-export the dylib as <name>">,
769    Group<grp_rare>;
770def sub_umbrella : Separate<["-"], "sub_umbrella">,
771    MetaVarName<"<name>">,
772    HelpText<"Re-export the framework as <name>">,
773    Group<grp_rare>;
774def allowable_client : Separate<["-"], "allowable_client">,
775    MetaVarName<"<name>">,
776    HelpText<"Specify <name> of a dylib or framework that is allowed to link to this dylib">,
777    Flags<[HelpHidden]>,
778    Group<grp_rare>;
779def client_name : Separate<["-"], "client_name">,
780    MetaVarName<"<name>">,
781    HelpText<"Specifies a <name> this client should match with the -allowable_client <name> in a dependent dylib">,
782    Flags<[HelpHidden]>,
783    Group<grp_rare>;
784def umbrella : Separate<["-"], "umbrella">,
785    MetaVarName<"<name>">,
786    HelpText<"Re-export this dylib through the umbrella framework <name>">,
787    Group<grp_rare>;
788def headerpad : Separate<["-"], "headerpad">,
789    MetaVarName<"<size>">,
790    HelpText<"Allocate hex <size> extra space for future expansion of the load commands via install_name_tool (default is 0x20)">,
791    Group<grp_rare>;
792def headerpad_max_install_names : Flag<["-"], "headerpad_max_install_names">,
793    HelpText<"Allocate extra space so all load-command paths can expand to MAXPATHLEN via install_name_tool">,
794    Group<grp_rare>;
795def bind_at_load : Flag<["-"], "bind_at_load">,
796    HelpText<"Tell dyld to bind all symbols at load time, rather than lazily">,
797    Flags<[HelpHidden]>,
798    Group<grp_rare>;
799def force_flat_namespace : Flag<["-"], "force_flat_namespace">,
800    HelpText<"Tell dyld to use a flat namespace on this executable and all its dependent dylibs & bundles">,
801    Flags<[HelpHidden]>,
802    Group<grp_rare>;
803def segalign : Separate<["-"], "segalign">,
804    MetaVarName<"<boundary>">,
805    HelpText<"Align all segments to hex power-of-2 <boundary>">,
806    Flags<[HelpHidden]>,
807    Group<grp_rare>;
808def sectalign : MultiArg<["-"], "sectalign", 3>,
809    MetaVarName<"<segment> <section> <boundary>">,
810    HelpText<"Align <section> within <segment> to hex power-of-2 <boundary>">,
811    Group<grp_rare>;
812def stack_addr : Separate<["-"], "stack_addr">,
813    MetaVarName<"<address>">,
814    HelpText<"Initialize stack pointer to hex <address> rounded to a page boundary">,
815    Flags<[HelpHidden]>,
816    Group<grp_rare>;
817def segprot : MultiArg<["-"], "segprot", 3>,
818    MetaVarName<"<segment> <max> <init>">,
819    HelpText<"Specifies the <max> and <init> virtual memory protection of <segment> as r/w/x/-seg_addr_table path">,
820    Group<grp_rare>;
821def segs_read_write_addr : Separate<["-"], "segs_read_write_addr">,
822    MetaVarName<"<address>">,
823    HelpText<"This option is obsolete">,
824    Flags<[HelpHidden]>,
825    Group<grp_rare>;
826def segs_read_only_addr : Separate<["-"], "segs_read_only_addr">,
827    MetaVarName<"<address>">,
828    HelpText<"This option is obsolete">,
829    Flags<[HelpHidden]>,
830    Group<grp_rare>;
831def segaddr : MultiArg<["-"], "segaddr", 2>,
832    MetaVarName<"<segment> <address>">,
833    HelpText<"Specify the starting hex <address> at a 4KiB page boundary for <segment>">,
834    Flags<[HelpHidden]>,
835    Group<grp_rare>;
836def seg_page_size : MultiArg<["-"], "seg_page_size", 2>,
837    MetaVarName<"<segment> <size>">,
838    HelpText<"Specifies the page <size> for <segment>. Segment size will be a multiple of its page size">,
839    Flags<[HelpHidden]>,
840    Group<grp_rare>;
841def dylib_file : Separate<["-"], "dylib_file">,
842    MetaVarName<"<install_path:current_path>">,
843    HelpText<"Specify <current_path> as different from where a dylib normally resides at <install_path>">,
844    Flags<[HelpHidden]>,
845    Group<grp_rare>;
846def weak_reference_mismatches : Separate<["-"], "weak_reference_mismatches">,
847    MetaVarName<"<treatment>">,
848    HelpText<"Resolve symbol imports of conflicting weakness according to <treatment> as weak, non-weak, or error (default is non-weak)">,
849    Flags<[HelpHidden]>,
850    Group<grp_rare>;
851def read_only_relocs : Separate<["-"], "read_only_relocs">,
852    MetaVarName<"<treatment>">,
853    HelpText<"Handle relocations that modify read-only pages according to <treatment> of warning, error, or suppress (i.e., allow)">,
854    Flags<[HelpHidden]>,
855    Group<grp_rare>;
856def force_cpusubtype_ALL : Flag<["-"], "force_cpusubtype_ALL">,
857    HelpText<"Mark binary as runnable on any PowerPC, ignoring any PowerPC cpu requirements encoded in the object files">,
858    Flags<[HelpHidden]>,
859    Group<grp_rare>;
860def no_arch_warnings : Flag<["-"], "no_arch_warnings">,
861    HelpText<"Suppresses warnings about inputs whose architecture does not match the -arch option">,
862    Flags<[HelpHidden]>,
863    Group<grp_rare>;
864def arch_errors_fatal : Flag<["-"], "arch_errors_fatal">,
865    HelpText<"Escalate to errors any warnings about inputs whose architecture does not match the -arch option">,
866    Flags<[HelpHidden]>,
867    Group<grp_rare>;
868def e : Separate<["-"], "e">,
869    MetaVarName<"<symbol>">,
870    HelpText<"Make <symbol> the entry point of an executable (default is \"start\" from crt1.o)">,
871    Group<grp_rare>;
872def w : Flag<["-"], "w">,
873    HelpText<"Suppress all warnings">,
874    Flags<[HelpHidden]>,
875    Group<grp_rare>;
876def final_output : Separate<["-"], "final_output">,
877    MetaVarName<"<name>">,
878    HelpText<"Specify dylib install name if -install_name is not used; used by compiler driver for multiple -arch arguments">,
879    Group<grp_rare>;
880def arch_multiple : Flag<["-"], "arch_multiple">,
881    HelpText<"Augment error and warning messages with the architecture name">,
882    Group<grp_rare>;
883def dot : Separate<["-"], "dot">,
884    MetaVarName<"<path>">,
885    HelpText<"Write a graph of symbol dependencies to <path> as a .dot file viewable with GraphViz">,
886    Flags<[HelpHidden]>,
887    Group<grp_rare>;
888def keep_relocs : Flag<["-"], "keep_relocs">,
889    HelpText<"Retain section-based relocation records in the output, which are ignored at runtime by dyld">,
890    Flags<[HelpHidden]>,
891    Group<grp_rare>;
892def warn_stabs : Flag<["-"], "warn_stabs">,
893    HelpText<"Warn when bad stab symbols inside a BINCL/EINCL prevent optimization">,
894    Flags<[HelpHidden]>,
895    Group<grp_rare>;
896def warn_commons : Flag<["-"], "warn_commons">,
897    HelpText<"Warn when a tentative definition in an object file matches an external symbol in a dylib, which often means \"extern\" is missing from a variable declaration in a header file">,
898    Flags<[HelpHidden]>,
899    Group<grp_rare>;
900def read_only_stubs : Flag<["-"], "read_only_stubs">,
901    HelpText<"On i386, make the __IMPORT segment of a final linked image read-only">,
902    Flags<[HelpHidden]>,
903    Group<grp_rare>;
904def interposable_list : Separate<["-"], "interposable_list">,
905    MetaVarName<"<path>">,
906    HelpText<"Access global symbols listed in <path> indirectly">,
907    Flags<[HelpHidden]>,
908    Group<grp_rare>;
909def no_function_starts : Flag<["-"], "no_function_starts">,
910    HelpText<"Do not create table of function start addresses">,
911    Group<grp_rare>;
912def no_objc_category_merging : Flag<["-"], "no_objc_category_merging">,
913    HelpText<"Do not merge Objective-C categories into their classes">,
914    Flags<[HelpHidden]>,
915    Group<grp_rare>;
916def object_path_lto : Separate<["-"], "object_path_lto">,
917    MetaVarName<"<path>">,
918    HelpText<"Retain any temporary mach-o file in <path> that would otherwise be deleted during LTO">,
919    Group<grp_rare>;
920def cache_path_lto : Separate<["-"], "cache_path_lto">,
921    MetaVarName<"<path>">,
922    HelpText<"Use <path> as a directory for the incremental LTO cache">,
923    Group<grp_rare>;
924def prune_interval_lto : Separate<["-"], "prune_interval_lto">,
925    MetaVarName<"<seconds>">,
926    HelpText<"Prune the incremental LTO cache after <seconds> (-1 disables pruning)">,
927    Group<grp_rare>;
928def prune_after_lto : Separate<["-"], "prune_after_lto">,
929    MetaVarName<"<seconds>">,
930    HelpText<"Remove LTO cache entries after <seconds>">,
931    Group<grp_rare>;
932def max_relative_cache_size_lto : Separate<["-"], "max_relative_cache_size_lto">,
933    MetaVarName<"<percent>">,
934    HelpText<"Limit the incremental LTO cache growth to <percent> of free disk, space">,
935    Group<grp_rare>;
936def page_align_data_atoms : Flag<["-"], "page_align_data_atoms">,
937    HelpText<"Distribute global variables on separate pages so page used/dirty status can guide creation of an order file to cluster commonly used/dirty globals">,
938    Flags<[HelpHidden]>,
939    Group<grp_rare>;
940def not_for_dyld_shared_cache : Flag<["-"], "not_for_dyld_shared_cache">,
941    HelpText<"Prevent system dylibs from being placed into the dylib shared cache">,
942    Flags<[HelpHidden]>,
943    Group<grp_rare>;
944def mllvm : Separate<["-"], "mllvm">,
945    HelpText<"Options to pass to LLVM">,
946    Group<grp_rare>;
947def mcpu : Separate<["-"], "mcpu">,
948    HelpText<"Processor family target for LTO code generation">,
949    Group<grp_rare>;
950
951def grp_deprecated : OptionGroup<"deprecated">, HelpText<"DEPRECATED">;
952
953def lazy_framework : Separate<["-"], "lazy_framework">,
954    MetaVarName<"<name>">,
955    HelpText<"This option is deprecated and is now an alias for -framework.">,
956    Flags<[HelpHidden]>,
957    Group<grp_deprecated>;
958def lazy_library : Separate<["-"], "lazy_library">,
959    MetaVarName<"<path>">,
960    HelpText<"This option is deprecated and is now an alias for regular linking">,
961    Flags<[HelpHidden]>,
962    Group<grp_deprecated>;
963def lazy_l : Joined<["-"], "lazy-l">,
964    MetaVarName<"<name>">,
965    HelpText<"This option is deprecated and is now an alias for -l<path>.">,
966    Flags<[HelpHidden]>,
967    Group<grp_deprecated>;
968def single_module : Flag<["-"], "single_module">,
969    HelpText<"Unnecessary option: this is already the default">,
970    Flags<[HelpHidden]>,
971    Group<grp_deprecated>;
972def no_dead_strip_inits_and_terms : Flag<["-"], "no_dead_strip_inits_and_terms">,
973    HelpText<"Unnecessary option: initialization and termination are roots of the dead strip graph, so never dead stripped">,
974    Flags<[HelpHidden]>,
975    Group<grp_deprecated>;
976def noall_load : Flag<["-"], "noall_load">,
977    HelpText<"Unnecessary option: this is already the default">,
978    Flags<[HelpHidden]>,
979    Group<grp_deprecated>;
980
981def grp_obsolete : OptionGroup<"obsolete">, HelpText<"OBSOLETE">;
982
983def sectorder : MultiArg<["-"], "sectorder", 3>,
984    MetaVarName<"<segname> <sectname> <orderfile>">,
985    HelpText<"Obsolete. Replaced by more general -order_file option">,
986    Group<grp_obsolete>;
987def lto_library : Separate<["-"], "lto_library">,
988    MetaVarName<"<path>">,
989    HelpText<"Obsolete. LLD supports LTO directly, without using an external dylib.">,
990    Group<grp_obsolete>;
991def y : Joined<["-"], "y">,
992    MetaVarName<"<symbol>">,
993    HelpText<"This option is obsolete in ld64">,
994    Flags<[HelpHidden]>,
995    Group<grp_obsolete>;
996def sectobjectsymbols : MultiArg<["-"], "sectobjectsymbols", 2>,
997    MetaVarName<"<segname> <sectname>">,
998    HelpText<"This option is obsolete in ld64">,
999    Flags<[HelpHidden]>,
1000    Group<grp_obsolete>;
1001def nofixprebinding : Flag<["-"], "nofixprebinding">,
1002    HelpText<"This option is obsolete in ld64">,
1003    Flags<[HelpHidden]>,
1004    Group<grp_obsolete>;
1005def noprebind_all_twolevel_modules : Flag<["-"], "noprebind_all_twolevel_modules">,
1006    HelpText<"This option is obsolete in ld64">,
1007    Flags<[HelpHidden]>,
1008    Group<grp_obsolete>;
1009def prebind_all_twolevel_modules : Flag<["-"], "prebind_all_twolevel_modules">,
1010    HelpText<"This option is obsolete in ld64">,
1011    Flags<[HelpHidden]>,
1012    Group<grp_obsolete>;
1013def prebind_allow_overlap : Flag<["-"], "prebind_allow_overlap">,
1014    HelpText<"This option is obsolete in ld64">,
1015    Flags<[HelpHidden]>,
1016    Group<grp_obsolete>;
1017def noprebind : Flag<["-"], "noprebind">,
1018    HelpText<"This option is obsolete in ld64">,
1019    Flags<[HelpHidden]>,
1020    Group<grp_obsolete>;
1021def sect_diff_relocs : Separate<["-"], "sect_diff_relocs">,
1022    MetaVarName<"<treatment>">,
1023    HelpText<"This option is obsolete in ld64">,
1024    Flags<[HelpHidden]>,
1025    Group<grp_obsolete>;
1026def A : Separate<["-"], "A">,
1027    MetaVarName<"<basefile>">,
1028    HelpText<"This option is obsolete in ld64">,
1029    Flags<[HelpHidden]>,
1030    Group<grp_obsolete>;
1031def b : Flag<["-"], "b">,
1032    HelpText<"This option is obsolete in ld64">,
1033    Flags<[HelpHidden]>,
1034    Group<grp_obsolete>;
1035def Sn : Flag<["-"], "Sn">,
1036    HelpText<"This option is obsolete in ld64">,
1037    Flags<[HelpHidden]>,
1038    Group<grp_obsolete>;
1039def Si : Flag<["-"], "Si">,
1040    HelpText<"This option is obsolete in ld64">,
1041    Flags<[HelpHidden]>,
1042    Group<grp_obsolete>;
1043def Sp : Flag<["-"], "Sp">,
1044    HelpText<"This option is obsolete in ld64">,
1045    Flags<[HelpHidden]>,
1046    Group<grp_obsolete>;
1047def X : Flag<["-"], "X">,
1048    HelpText<"This option is obsolete in ld64">,
1049    Flags<[HelpHidden]>,
1050    Group<grp_obsolete>;
1051def s : Flag<["-"], "s">,
1052    HelpText<"This option is obsolete in ld64">,
1053    Flags<[HelpHidden]>,
1054    Group<grp_obsolete>;
1055def m : Flag<["-"], "m">,
1056    HelpText<"This option is obsolete in ld64">,
1057    Flags<[HelpHidden]>,
1058    Group<grp_obsolete>;
1059def Y : Separate<["-"], "Y">,
1060    MetaVarName<"<number>">,
1061    HelpText<"This option is obsolete in ld64">,
1062    Flags<[HelpHidden]>,
1063    Group<grp_obsolete>;
1064def nomultidefs : Flag<["-"], "nomultidefs">,
1065    HelpText<"This option is obsolete in ld64">,
1066    Flags<[HelpHidden]>,
1067    Group<grp_obsolete>;
1068def multiply_defined_unused : Separate<["-"], "multiply_defined_unused">,
1069    MetaVarName<"<treatment>">,
1070    HelpText<"This option is obsolete in ld64">,
1071    Flags<[HelpHidden]>,
1072    Group<grp_obsolete>;
1073def multiply_defined : Separate<["-"], "multiply_defined">,
1074    MetaVarName<"<treatment>">,
1075    HelpText<"This option is obsolete in ld64">,
1076    Flags<[HelpHidden]>,
1077    Group<grp_obsolete>;
1078def private_bundle : Flag<["-"], "private_bundle">,
1079    HelpText<"This option is obsolete in ld64">,
1080    Flags<[HelpHidden]>,
1081    Group<grp_obsolete>;
1082def seg_addr_table_filename : Separate<["-"], "seg_addr_table_filename">,
1083    MetaVarName<"<path>">,
1084    HelpText<"This option is obsolete in ld64">,
1085    Flags<[HelpHidden]>,
1086    Group<grp_obsolete>;
1087def sectorder_detail : Flag<["-"], "sectorder_detail">,
1088    HelpText<"This option is obsolete in ld64">,
1089    Flags<[HelpHidden]>,
1090    Group<grp_obsolete>;
1091def no_compact_linkedit : Flag<["-"], "no_compact_linkedit">,
1092    HelpText<"This option is obsolete in ld64">,
1093    Flags<[HelpHidden]>,
1094    Group<grp_obsolete>;
1095def dependent_dr_info : Flag<["-"], "dependent_dr_info">,
1096    HelpText<"This option is obsolete in ld64">,
1097    Flags<[HelpHidden]>,
1098    Group<grp_obsolete>;
1099def no_dependent_dr_info : Flag<["-"], "no_dependent_dr_info">,
1100    HelpText<"This option is obsolete in ld64">,
1101    Flags<[HelpHidden]>,
1102    Group<grp_obsolete>;
1103def seglinkedit : Flag<["-"], "seglinkedit">,
1104    HelpText<"This option is obsolete in ld64">,
1105    Flags<[HelpHidden]>,
1106    Group<grp_obsolete>;
1107def noseglinkedit : Flag<["-"], "noseglinkedit">,
1108    HelpText<"This option is obsolete in ld64">,
1109    Flags<[HelpHidden]>,
1110    Group<grp_obsolete>;
1111def fvmlib : Flag<["-"], "fvmlib">,
1112    HelpText<"This option is obsolete in ld64">,
1113    Flags<[HelpHidden]>,
1114    Group<grp_obsolete>;
1115def run_init_lazily : Flag<["-"], "run_init_lazily">,
1116    HelpText<"This option is obsolete in ld64">,
1117    Flags<[HelpHidden]>,
1118    Group<grp_obsolete>;
1119def prebind : Flag<["-"], "prebind">,
1120    HelpText<"This option is obsolete in ld64">,
1121    Flags<[HelpHidden]>,
1122    Group<grp_obsolete>;
1123def twolevel_namespace_hints : Flag<["-"], "twolevel_namespace_hints">,
1124    HelpText<"This option is obsolete in ld64">,
1125    Flags<[HelpHidden]>,
1126    Group<grp_obsolete>;
1127def slow_stubs : Flag<["-"], "slow_stubs">,
1128    HelpText<"This option is obsolete in ld64">,
1129    Flags<[HelpHidden]>,
1130    Group<grp_obsolete>;
1131
1132def grp_undocumented : OptionGroup<"undocumented">, HelpText<"UNDOCUMENTED">;
1133
1134def add_linker_option : Flag<["-"], "add_linker_option">,
1135    HelpText<"This option is undocumented in ld64">,
1136    Flags<[HelpHidden]>,
1137    Group<grp_undocumented>;
1138def add_source_version : Flag<["-"], "add_source_version">,
1139    HelpText<"This option is undocumented in ld64">,
1140    Flags<[HelpHidden]>,
1141    Group<grp_undocumented>;
1142def no_source_version : Flag<["-"], "no_source_version">,
1143    HelpText<"This option is undocumented in ld64">,
1144    Flags<[HelpHidden]>,
1145    Group<grp_undocumented>;
1146def add_split_seg_info : Flag<["-"], "add_split_seg_info">,
1147    HelpText<"This option is undocumented in ld64">,
1148    Flags<[HelpHidden]>,
1149    Group<grp_undocumented>;
1150def allow_dead_duplicates : Flag<["-"], "allow_dead_duplicates">,
1151    HelpText<"This option is undocumented in ld64">,
1152    Flags<[HelpHidden]>,
1153    Group<grp_undocumented>;
1154def allow_simulator_linking_to_macosx_dylibs : Flag<["-"], "allow_simulator_linking_to_macosx_dylibs">,
1155    HelpText<"This option is undocumented in ld64">,
1156    Flags<[HelpHidden]>,
1157    Group<grp_undocumented>;
1158def bitcode_process_mode : Flag<["-"], "bitcode_process_mode">,
1159    HelpText<"This option is undocumented in ld64">,
1160    Flags<[HelpHidden]>,
1161    Group<grp_undocumented>;
1162def bitcode_verify : Flag<["-"], "bitcode_verify">,
1163    HelpText<"This option is undocumented in ld64">,
1164    Flags<[HelpHidden]>,
1165    Group<grp_undocumented>;
1166def classic_linker : Flag<["-"], "classic_linker">,
1167    HelpText<"This option is undocumented in ld64">,
1168    Flags<[HelpHidden]>,
1169    Group<grp_undocumented>;
1170def data_in_code_info : Flag<["-"], "data_in_code_info">,
1171    HelpText<"Emit data-in-code information (default)">,
1172    Group<grp_undocumented>;
1173def no_data_in_code_info : Flag<["-"], "no_data_in_code_info">,
1174    HelpText<"Do not emit data-in-code information">,
1175    Group<grp_undocumented>;
1176def debug_snapshot : Flag<["-"], "debug_snapshot">,
1177    HelpText<"This option is undocumented in ld64">,
1178    Flags<[HelpHidden]>,
1179    Group<grp_undocumented>;
1180def demangle : Flag<["-"], "demangle">,
1181    HelpText<"Demangle symbol names in diagnostics">;
1182def dyld_env : Flag<["-"], "dyld_env">,
1183    HelpText<"This option is undocumented in ld64">,
1184    Flags<[HelpHidden]>,
1185    Group<grp_undocumented>;
1186def encryptable : Flag<["-"], "encryptable">,
1187    HelpText<"Generate the LC_ENCRYPTION_INFO load command">,
1188    Group<grp_undocumented>;
1189def no_encryption : Flag<["-"], "no_encryption">,
1190    HelpText<"Do not generate the LC_ENCRYPTION_INFO load command">,
1191    Group<grp_undocumented>;
1192def executable_path : Flag<["-"], "executable_path">,
1193    HelpText<"This option is undocumented in ld64">,
1194    Flags<[HelpHidden]>,
1195    Group<grp_undocumented>;
1196def fixup_chains : Flag<["-"], "fixup_chains">,
1197    HelpText<"This option is undocumented in ld64">,
1198    Flags<[HelpHidden]>,
1199    Group<grp_undocumented>;
1200def fixup_chains_section : Flag<["-"], "fixup_chains_section">,
1201    HelpText<"This option is undocumented in ld64">,
1202    Flags<[HelpHidden]>,
1203    Group<grp_undocumented>;
1204def flto_codegen_only : Flag<["-"], "flto-codegen-only">,
1205    HelpText<"This option is undocumented in ld64">,
1206    Flags<[HelpHidden]>,
1207    Group<grp_undocumented>;
1208def force_symbol_not_weak : Flag<["-"], "force_symbol_not_weak">,
1209    HelpText<"This option is undocumented in ld64">,
1210    Flags<[HelpHidden]>,
1211    Group<grp_undocumented>;
1212def force_symbols_coalesce_list : Flag<["-"], "force_symbols_coalesce_list">,
1213    HelpText<"This option is undocumented in ld64">,
1214    Flags<[HelpHidden]>,
1215    Group<grp_undocumented>;
1216def force_symbols_not_weak_list : Flag<["-"], "force_symbols_not_weak_list">,
1217    HelpText<"This option is undocumented in ld64">,
1218    Flags<[HelpHidden]>,
1219    Group<grp_undocumented>;
1220def force_symbols_weak_list : Flag<["-"], "force_symbols_weak_list">,
1221    HelpText<"This option is undocumented in ld64">,
1222    Flags<[HelpHidden]>,
1223    Group<grp_undocumented>;
1224def force_symbol_weak : Flag<["-"], "force_symbol_weak">,
1225    HelpText<"This option is undocumented in ld64">,
1226    Flags<[HelpHidden]>,
1227    Group<grp_undocumented>;
1228def function_starts : Flag<["-"], "function_starts">,
1229    HelpText<"Create table of function start addresses (default)">,
1230    Group<grp_undocumented>;
1231def i : Flag<["-"], "i">,
1232    HelpText<"This option is undocumented in ld64">,
1233    Flags<[HelpHidden]>,
1234    Group<grp_undocumented>;
1235def ignore_auto_link : Flag<["-"], "ignore_auto_link">,
1236    HelpText<"This option is undocumented in ld64">,
1237    Flags<[HelpHidden]>,
1238    Group<grp_undocumented>;
1239def ignore_optimization_hints : Flag<["-"], "ignore_optimization_hints">,
1240    HelpText<"This option is undocumented in ld64">,
1241    Flags<[HelpHidden]>,
1242    Group<grp_undocumented>;
1243def init_offsets : Flag<["-"], "init_offsets">,
1244    HelpText<"This option is undocumented in ld64">,
1245    Flags<[HelpHidden]>,
1246    Group<grp_undocumented>;
1247def keep_dwarf_unwind : Flag<["-"], "keep_dwarf_unwind">,
1248    HelpText<"This option is undocumented in ld64">,
1249    Flags<[HelpHidden]>,
1250    Group<grp_undocumented>;
1251def no_keep_dwarf_unwind : Flag<["-"], "no_keep_dwarf_unwind">,
1252    HelpText<"This option is undocumented in ld64">,
1253    Flags<[HelpHidden]>,
1254    Group<grp_undocumented>;
1255def kext : Flag<["-"], "kext">,
1256    HelpText<"This option is undocumented in ld64">,
1257    Flags<[HelpHidden]>,
1258    Group<grp_undocumented>;
1259def kext_objects_dir : Flag<["-"], "kext_objects_dir">,
1260    HelpText<"This option is undocumented in ld64">,
1261    Flags<[HelpHidden]>,
1262    Group<grp_undocumented>;
1263def no_kext_objects : Flag<["-"], "no_kext_objects">,
1264    HelpText<"This option is undocumented in ld64">,
1265    Flags<[HelpHidden]>,
1266    Group<grp_undocumented>;
1267def kexts_use_stubs : Flag<["-"], "kexts_use_stubs">,
1268    HelpText<"This option is undocumented in ld64">,
1269    Flags<[HelpHidden]>,
1270    Group<grp_undocumented>;
1271def no_compact_unwind : Flag<["-"], "no_compact_unwind">,
1272    HelpText<"This option is undocumented in ld64">,
1273    Flags<[HelpHidden]>,
1274    Group<grp_undocumented>;
1275def no_dtrace_dof : Flag<["-"], "no_dtrace_dof">,
1276    HelpText<"This option is undocumented in ld64">,
1277    Flags<[HelpHidden]>,
1278    Group<grp_undocumented>;
1279def no_new_main : Flag<["-"], "no_new_main">,
1280    HelpText<"This option is undocumented in ld64">,
1281    Flags<[HelpHidden]>,
1282    Group<grp_undocumented>;
1283def objc_abi_version : Separate<["-"], "objc_abi_version">,
1284    HelpText<"This option is undocumented in ld64">,
1285    Flags<[HelpHidden]>,
1286    Group<grp_undocumented>;
1287def pause : Flag<["-"], "pause">,
1288    HelpText<"This option is undocumented in ld64">,
1289    Flags<[HelpHidden]>,
1290    Group<grp_undocumented>;
1291def random_uuid : Flag<["-"], "random_uuid">,
1292    HelpText<"This option is undocumented in ld64">,
1293    Flags<[HelpHidden]>,
1294    Group<grp_undocumented>;
1295def simulator_support : Flag<["-"], "simulator_support">,
1296    HelpText<"This option is undocumented in ld64">,
1297    Flags<[HelpHidden]>,
1298    Group<grp_undocumented>;
1299def snapshot_dir : Flag<["-"], "snapshot_dir">,
1300    HelpText<"This option is undocumented in ld64">,
1301    Flags<[HelpHidden]>,
1302    Group<grp_undocumented>;
1303def source_version : Flag<["-"], "source_version">,
1304    HelpText<"This option is undocumented in ld64">,
1305    Flags<[HelpHidden]>,
1306    Group<grp_undocumented>;
1307def threaded_starts_section : Flag<["-"], "threaded_starts_section">,
1308    HelpText<"This option is undocumented in ld64">,
1309    Flags<[HelpHidden]>,
1310    Group<grp_undocumented>;
1311def verbose_optimization_hints : Flag<["-"], "verbose_optimization_hints">,
1312    HelpText<"This option is undocumented in ld64">,
1313    Flags<[HelpHidden]>,
1314    Group<grp_undocumented>;
1315def version_load_command : Flag<["-"], "version_load_command">,
1316    HelpText<"This option is undocumented in ld64">,
1317    Flags<[HelpHidden]>,
1318    Group<grp_undocumented>;
1319
1320def grp_ignored : OptionGroup<"ignored">, HelpText<"IGNORED">;
1321
1322def M : Flag<["-"], "M">,
1323    HelpText<"This option is ignored in ld64">,
1324    Flags<[HelpHidden]>,
1325    Group<grp_ignored>;
1326def new_linker : Flag<["-"], "new_linker">,
1327    HelpText<"This option is ignored in ld64">,
1328    Flags<[HelpHidden]>,
1329    Group<grp_ignored>;
1330