; Processor-independent options for Darwin.

; Copyright (C) 2005-2021 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

; We have a lot of Driver options, many of which are obsolete or very very
; rarely used so, to keep this file easier to manage:

; Please place all Non-driver options first (in alphabetical order), followed
; by Driver-only options.

; Non-driver options.

dependency-file
C ObjC C++ ObjC++ Separate Alias(MF) MissingArgError(missing filename after %qs)

fapple-kext
Target C++ Var(flag_apple_kext)
Generate code for darwin loadable kernel extensions.

iframework
Target RejectNegative C ObjC C++ ObjC++ Joined Separate
-iframework <dir>	Add <dir> to the end of the system framework include path.

mconstant-cfstrings
Target Var(darwin_constant_cfstrings) Init(1)
Generate compile-time CFString objects.

Wnonportable-cfstrings
Target Var(darwin_warn_nonportable_cfstrings) Init(1) Warning
Warn if constant CFString objects contain non-portable characters.

; Use new-style pic stubs if this is true, x86 only so far.
matt-stubs
Target Var(darwin_macho_att_stub) Init(1)
Generate AT&T-style stubs for Mach-O.

mdynamic-no-pic
Target Common Mask(MACHO_DYNAMIC_NO_PIC)
Generate code suitable for executables (NOT shared libs).

mfix-and-continue
Target Var(darwin_fix_and_continue)
Generate code suitable for fast turn around debugging.

mkernel
Target Var(flag_mkernel)
Generate code for the kernel or loadable kernel extensions.

; The Init here is for the convenience of GCC developers, so that cc1
; and cc1plus don't crash if no -mmacosx-version-min is passed.  The
; driver will always pass a -mmacosx-version-min, so in normal use the
; Init is never used.
mmacosx-version-min=
Target RejectNegative Joined Var(darwin_macosx_version_min) Init(DEF_MIN_OSX_VERSION)
The earliest macOS version on which this program will run.

; Really, only relevant to PowerPC which has a 4 byte bool by default.
mone-byte-bool
Target RejectNegative Var(darwin_one_byte_bool)
Set sizeof(bool) to 1.

msymbol-stubs
Target Var(darwin_symbol_stubs) Init(0)
Force generation of external symbol indirection stubs.

; Some code-gen may be improved / adjusted if the linker is sufficiently modern.
mtarget-linker=
Target RejectNegative Joined Alias(mtarget-linker)

mtarget-linker
Target RejectNegative Joined Separate Var(darwin_target_linker) Init(LD64_VERSION)
-mtarget-linker <version>	Specify that ld64 <version> is the toolchain linker for the current invocation.

; Driver options.

all_load
Driver RejectNegative
Load all members of archive libraries, rather than only those that satisfy undefined symbols.

allowable_client
Driver RejectNegative Separate
-allowable_client <name>	The output dylib is private to the client <name>.

arch
Driver RejectNegative Separate
-arch <name>	Generate output for architecture <name>.

arch_errors_fatal
Driver RejectNegative
Mismatches between file architecture and one specified by \"-arch\" are errors instead of warnings.

asm_macosx_version_min=
Driver RejectNegative Joined
The earliest macOS version on which this program will run (formatted for the assembler).

bind_at_load
Driver RejectNegative
Generate an output executable that binds symbols on load, rather than lazily.

bundle
Driver RejectNegative
Generate a Mach-O bundle (file type MH_BUNDLE).

bundle_loader
Driver RejectNegative Separate
-bundle_loader <executable>	Treat <executable> (that will be loading this bundle) as if it was one of the dynamic libraries the bundle is linked against for symbol resolution.

client_name
Driver RejectNegative Separate
-client_name <name>	Enable the executable being built to link against a private dylib (using allowable_client).

compatibility_version
Driver RejectNegative Separate
-compatibility_version <number>	Set the version for the client interface.  Client programs must record a value less than or equal to <number>, or the binding will fail at runtime.

current_version
Driver RejectNegative Separate
-current_version <number>	Set the current version for the library to <number>.

dead_strip
Driver RejectNegative
Remove code and data that is unreachable from any exported symbol (including the entry point).

dylib_file
Driver RejectNegative Separate
-dylib_file install_name:file_name	This allows linking of a dylib with \"install_name\" but to be found in a different install position \"file_name\"

dylinker
Driver RejectNegative
Produce a Mach-O dylinker (file type MH_DYLINKER), only used for building dyld.

dylinker_install_name
Driver RejectNegative Separate
-dylinker_install_name <path>	Only used for building dyld.

dynamic
Driver RejectNegative
The default (and opposite of -static), implied by user mode executables, shared libraries and bundles.

dynamiclib
Driver RejectNegative
Produce a Mach-O shared library (file type MH_DYLIB), synonym for \"-shared\".

exported_symbols_list
Driver RejectNegative Separate
-exported_symbols_list <filename>	Export global symbols in <filename> in linked output file; any symbols not mentioned will be treated as \"hidden\".

filelist
Driver RejectNegative Separate
Supply a list of objects to be linked from a file, rather than the command line.

findirect-virtual-calls
Driver RejectNegative
Used for generating code for some older kernel revisions.

flat_namespace
Driver RejectNegative
Ignore the normal two-level namespace; resolve symbols in command line order and do not record which library provided the resolved symbol.

force_cpusubtype_ALL
Driver RejectNegative
For the assembler (and linker) permit any architecture sub-variant to be used without error.

force_flat_namespace
Driver RejectNegative
Set the output object such that, on loading, dyld will ignore any two-level namespace information and resolve symbols in the discovery order for loaded libs.

framework
Driver RejectNegative Separate
-framework <name>	The linker should search for the framework <name> in the framework search path.

fterminated-vtables
Driver RejectNegative
Used for generating code for some older kernel revisions.

gfull
Driver RejectNegative
Abbreviation for \"-g -fno-eliminate-unused-debug-symbols\".

gused
Driver RejectNegative
Abbreviation for \"-g -feliminate-unused-debug-symbols\".

headerpad_max_install_names
Driver RejectNegative
Automatically adds space for longer path names in load commands (up to MAXPATHLEN).

image_base
Driver RejectNegative Separate
-image_base <address>	Specify <address> as the base address for a dylib or bundle.

init
Driver RejectNegative Separate
-init <symbol_name>	The symbol <symbol_name> will be used as the first initialiser for a dylib.

install_name
Driver RejectNegative Separate
-install_name <name>	Set the install name for a dylib.

keep_private_externs
Driver RejectNegative
Usually \"private extern\" (hidden) symbols are made local when linking, this command suppresses that such that they remain exported.

multi_module
Driver RejectNegative
(Obsolete after 10.4) Multi modules are ignored at runtime since macOS 10.4.

multiply_defined
Driver RejectNegative Separate
(Obsolete after 10.4) -multiply_defined <treatment>	Provided a mechanism for warning about symbols defined in multiple dylibs.

multiply_defined_unused
Driver RejectNegative Separate
(Obsolete after 10.4) -multiply_defined_unused <treatment>	Provided a mechanism for warning about symbols defined in the current executable also being defined in linked dylibs.

no_dead_strip_inits_and_terms
Driver RejectNegative
(Obsolete) Current linkers never dead-strip these items, so the option is not needed.

nofixprebinding
Driver RejectNegative
(Obsolete after 10.3.9) Set MH_NOPREFIXBINDING, in an executable.

nomultidefs
Driver RejectNegative
(Obsolete after 10.4)	Set MH_NOMULTIDEFS in an umbrella framework.

noprebind
Driver RejectNegative Negative(prebind)
(Obsolete) LD_PREBIND is no longer supported.

noseglinkedit
Driver RejectNegative Negative(seglinkedit)
(Obsolete) This is the default.

object
Driver RejectNegative

pagezero_size
Driver RejectNegative Separate
-pagezero_size <size>	Allows setting the page 0 size to 4kb when required.

prebind
Driver RejectNegative Negative(noprebind)
(Obsolete) LD_PREBIND is no longer supported.

prebind_all_twolevel_modules
Driver RejectNegative
(Obsolete) LD_PREBIND is no longer supported.

preload
Driver RejectNegative
Produces a Mach-O file suitable for embedded/ROM use.

private_bundle
Driver RejectNegative
(Obsolete) Allowed linking to proceed with \"-flat_namespace\" when a linked bundle contained a symbol also exported from the main executable.

pthread
Driver RejectNegative

rdynamic
Driver RejectNegative
Synonym for \"-export-dynamic\" for linker versions that support it.

read_only_relocs
Driver RejectNegative Separate
-read_only_relocs <treatment>	Allow relocations in read-only pages (not recommended).

sectalign
Driver RejectNegative Separate Args(3)
-sectalign <segname> <sectname> <value>	Set section <sectname> in segment <segname> to have alignment <value> which must be an integral power of two expressed in hexadecimal form.

sectcreate
Driver RejectNegative Separate Args(3)
-sectcreate <segname> <sectname> <file>	Create section <sectname> in segment <segname> from the contents of <file>.

sectobjectsymbols
Driver RejectNegative Separate Args(2)
(Obsolete) -sectobjectsymbols <segname> <sectname>	Setting a local symbol at the start of a section is no longer supported.

sectorder
Driver RejectNegative Separate Args(3)
(Obsolete) -sectorder <segname> <sectname> <orderfile>	Replaced by a more general option \"-order_file\".

seg_addr_table
Driver RejectNegative Separate
-seg_addr_table <file>	Specify the base addresses for dynamic libraries; <file> contains a line for each library.

; This is only usable by the ld_classic linker.
seg_addr_table_filename
Driver RejectNegative Separate
(Obsolete, ld_classic only) -seg_addr_table_filename <path>.

seg1addr
Driver RejectNegative Separate
Synonym for \"image_base\".

segaddr
Driver RejectNegative Separate Args(2)
-segaddr <name> <address>	Set the base address of segment <name> to <address> which must be aligned to a page boundary (currently 4kb).

; This is only usable by the ld_classic linker.
segcreate
Driver RejectNegative Separate Args(3)
(Obsolete, ld_classic only) -sectcreate <segname> <sectname> <file>	Allowed creation of a section from a file.

seglinkedit
Driver RejectNegative Negative(noseglinkedit)
(Obsolete) Object files with LINKEDIT sections are no longer supported.

segprot
Driver RejectNegative Separate Args(3)
-segprot <segname> <max_prot> <init_prot>	The virtual memory protections for segment <segname> have maximum and initial values <max_prot> and <init_prot> respectively.  The specified values may contain \"r\", \"w\", \"x\" or \"-\" the latter meaning \"no access\".

segs_read_only_addr
Driver RejectNegative Separate
-segs_read_only_addr <address>	Specify that <address> is the base address of the read-only segments of a dylib.

segs_read_write_addr
Driver RejectNegative Separate
-segs_read_write_addr <address>	Specify that <address> is the base address address of the read-write segments of a dylib.

single_module
Driver RejectNegative
(Obsolete)	This is the default.

sub_library
Driver RejectNegative Separate
-sub_library <name>	Library named <name> will be re-exported (only useful for dylibs).

sub_umbrella
Driver RejectNegative Separate
-sub_umbrella <name>	Framework named <name> will be re-exported (only useful for dylibs).

twolevel_namespace
Driver RejectNegative
This is the default.

twolevel_namespace_hints
Driver RejectNegative
Add extra information to the executable that can speed up dynamic loading (provided that dependent libraries are unchanged).

umbrella
Driver RejectNegative
-umbrella <framework>	The specified framework will be re-exported.

undefined
Driver RejectNegative Separate
-undefined <treatment>	Specify the handling for undefined symbols (default is error).

unexported_symbols_list
Driver RejectNegative Separate
-unexported_symbols_list <filename>	Do not export the global symbols listed in <filename>.

weak_reference_mismatches
Driver RejectNegative Separate
-weak_reference_mismatches <treatment>	Specifies what to do if a symbol import conflicts between file (weak in one and not in another) the default is to treat the symbol as non-weak.

whatsloaded
Driver RejectNegative
Logs which object files the linker loads.

whyload
Driver RejectNegative
Logs which symbol(s) caused an object to be loaded.

;(Obsolete, ignored)	Strip symbols starting with "L", this is the default.
X
Driver RejectNegative

y
Driver RejectNegative Joined
(Obsolete, ignored)	Old support similar to \"-whyload\".

Mach
Driver RejectNegative
(Obsolete and unhandled by ld64, ignored)	ld should produce an executable (only handled by ld_classic).
