; Processor-independent options for Darwin.

; Copyright (C) 2005-2019 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 Report 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 Report Var(darwin_constant_cfstrings) Init(1)
Generate compile-time CFString objects.

Wnonportable-cfstrings
Target Report 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 Report Var(darwin_macho_att_stub) Init(1)
Generate AT&T-style stubs for Mach-O.

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

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

mkernel
Target Report 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 Report Var(darwin_macosx_version_min) Init(DEF_MIN_OSX_VERSION)
The earliest MacOS X 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 Report Var(darwin_one_byte_bool)
Set sizeof(bool) to 1.

msymbol-stubs
Target Report 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 Report Alias(mtarget-linker)

mtarget-linker
Target RejectNegative Joined Separate Report Var(darwin_target_linker) Init(LD64_VERSION)
The version of ld64 in use for this toolchain.

; Driver options.

all_load
Driver RejectNegative Alias(Zall_load)
Loads all members of archive libraries

allowable_client
Driver RejectNegative Separate Alias(Zallowable_client)
-allowable_client <name>	The output dylib is private to the client(s) named

arch
Driver RejectNegative Separate
-arch <name>	Specify that the output file should be generated for architecture  \"name\"

arch_errors_fatal
Driver RejectNegative Alias(Zarch_errors_fatal)
Mismatches between file architecture and the \"-arch\" are errors instead of warnings

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

bind_at_load
Driver RejectNegative Alias(Zbind_at_load)
Produce an output file that will bind symbols on load, rather than lazily.

bundle
Driver RejectNegative Alias(Zbundle)
Produce a Mach-O bundle (file type MH_BUNDLE)

bundle_loader
Driver RejectNegative Separate Alias(Zbundle_loader)
-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 minimum version for the client interface.  Clients must record a greater number than this or the binding will fail at runtime

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

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

dylib_file
Driver Separate Alias(Zdylib_file)

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 Alias(Zdynamic)
The default (and opposite of -static), implied by user mode executables, shared libraries and bundles.

dynamiclib
Driver RejectNegative Alias(Zdynamiclib)
Produce a Mach-O shared library (file type MH_DYLIB), synonym for -shared

exported_symbols_list
Driver RejectNegative Separate Alias(Zexported_symbols_list)
-exported_symbols_list <filename>	Global symbols in \"filename\" will be exported from the 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 Alias(Zflat_namespace)
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 Alias(Zforce_cpusubtype_ALL)
For the assembler (and linker) permit any architecture sub-variant to be used without error.

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

framework
Driver RejectNegative Separate
-framework <name>	The linker should search for the named framework 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 Alias(Zimage_base)
-image_base <address>	Choose a base address for a dylib or bundle.

init
Driver RejectNegative Separate Alias(Zinit)
-init <symbol_name>	The symbol \"symbol_name\" will be used as the first initialiser for a dylib.

install_name
Driver RejectNegative Separate Alias(Zinstall_name)
-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 Alias(Zmulti_module)
(Obsolete after 10.4) Multi modules are ignored at runtime since MacOS 10.4

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

multiply_defined_unused
Driver RejectNegative Separate Alias(Zmultiplydefinedunused)
(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 Alias(Zno_dead_strip_inits_and_terms)
(Obsolete) The linker never dead strips these items, so the option is not needed.

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

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 for certain special cases.

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>	This will allow relocs in read-only pages (not advisable).

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 Alias(Zseg_addr_table)
-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 Alias(Zfn_seg_addr_table_filename)
(Obsolete, ld_classic only) -seg_addr_table_filename <path>

seg1addr
Driver RejectNegative Separate
Synonym for \"image_base\"

segaddr
Driver RejectNegative Separate Args(2) Alias(Zsegaddr)
-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

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 protection values are \"r\", \"w\", \"x\" or \"-\" the latter meaning \"no access\".

segs_read_only_addr
Driver RejectNegative Separate Alias(Zsegs_read_only_addr)
-segs_read_only_addr address 	Allows specifying the address of the read only portion of a dylib.

segs_read_write_addr
Driver RejectNegative Separate Alias(Zsegs_read_write_addr)
-segs_read_write_addr address 	Allows specifying the address of the read/write portion of a dylib.

single_module
Driver RejectNegative Alias(Zsingle_module)
(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
Specifies content that can speed up dynamic loading when the binaries are unchanged.

umbrella
Driver RejectNegative Separate Alias(Zumbrella)
-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 Alias(Zunexported_symbols_list)
-unexported_symbols_list <filename>	Don't export global symbols listed in filename.

weak_reference_mismatches
Driver RejectNegative Separate Alias(Zweak_reference_mismatches)
-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 the 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).

;; These are not "real" options, but placeholders used to hide the real options
;; from generic options processing... FIXME: they can be eliminated now.

Zall_load
Driver

Zallowable_client
Driver Separate

Zarch_errors_fatal
Driver

Zbind_at_load
Driver

Zbundle
Driver

Zbundle_loader
Driver Separate

Zdead_strip
Driver

Zdylib_file
Driver Separate

Zdynamic
Driver

Zdynamiclib
Driver

Zexported_symbols_list
Driver Separate

Zfn_seg_addr_table_filename
Driver Separate

Zflat_namespace
Driver

Zforce_cpusubtype_ALL
Driver

Zforce_flat_namespace
Driver

Zimage_base
Driver Separate

Zinit
Driver Separate

Zinstall_name
Driver Separate

Zmulti_module
Driver

Zmultiply_defined
Driver Separate

Zmultiplydefinedunused
Driver Separate

Zno_dead_strip_inits_and_terms
Driver

Zseg_addr_table
Driver Separate

Zsegaddr
Driver Separate Args(2)

Zsegs_read_only_addr
Driver Separate

Zsegs_read_write_addr
Driver Separate

Zsingle_module
Driver

Zumbrella
Driver Separate

Zunexported_symbols_list
Driver Separate

Zweak_reference_mismatches
Driver Separate

