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