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