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