; Processor-independent options for Darwin.

; Copyright (C) 2005 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 2, 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 COPYING.  If not, write to the Free
; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.

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

; APPLE LOCAL begin mainline 2007-02-20 5005743
; 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 Joined Report Var(darwin_macosx_version_min) Init("10.1")
The earliest MacOS X version on which this program will run
; APPLE LOCAL end mainline 2007-02-20 5005743

mone-byte-bool
Target RejectNegative Report Var(darwin_one_byte_bool)
Set sizeof(bool) to 1

; APPLE LOCAL begin AT&T-style stub 4164563
matt-stubs
Target Report Var(darwin_macho_att_stub) Init(1)
Generate AT&T-style stubs for Mach-O
; APPLE LOCAL end AT&T-style stub 4164563

; APPLE LOCAL begin constant cfstrings
mconstant-cfstrings
Target Report Var(darwin_constant_cfstrings) Init(-1)
Generate compile-time CFString objects

mwarn-nonportable-cfstrings
Target Report Var(darwin_warn_nonportable_cfstrings) Init(1)
Warn if constant CFString objects contain non-portable characters

mpascal-strings
Target Report Var(darwin_pascal_strings)
Allow use of Pascal strings
; APPLE LOCAL end constant cfstrings

; APPLE LOCAL begin mdynamic-no-pic
mdynamic-no-pic
Target Report Mask(MACHO_DYNAMIC_NO_PIC)
Generate code suitable for executables (NOT shared libs)
; APPLE LOCAL end mdynamic-no-pic

fapple-kext
Target Report Var(flag_apple_kext)
Generate code for darwin loadable kernel extentions

mkernel
Target Report Var(flag_mkernel)
Generate code for the kernel or loadable kernel extentions
