darwin.h (SUBTARGET_OPTIONS): Add -mmacosx= option.
authorMatt Austern <austern@apple.com>
Mon, 23 Feb 2004 19:49:23 +0000 (19:49 +0000)
committerMatt Austern <austern@gcc.gnu.org>
Mon, 23 Feb 2004 19:49:23 +0000 (19:49 +0000)
* config/darwin.h (SUBTARGET_OPTIONS): Add -mmacosx= option.
(macosx_version_min_required): Declare global variable.
* config/darwin-protos.h (darwin_parse_macosx_version_name): Declare.
* config/darwin.c (macosx_version_min_required): Define variable.
(darwin_macosx_vers_tbl): Define. Table mapping text strings of
OS versions to numerical codes.
(darwin_parse_macosx_version_name): Define.  Parse -mmacosx=,
set macosx_version_min_required appropriately.
* config/i386/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Define.
Invoke darwin_parse_macosx_version_name.
* config/rs6000/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Add
darwin_parse_macosx_version_name to Darwin option handling.
* doc/invoke.texi (-mmacosx=): Document.

From-SVN: r78329

gcc/ChangeLog
gcc/config/darwin-protos.h
gcc/config/darwin.c
gcc/config/darwin.h
gcc/config/i386/darwin.h
gcc/config/rs6000/darwin.h
gcc/doc/invoke.texi

index f3089cdc1a3b2206c19874b9272b7d11b138a51f..d41719211f891447b732419f7d5d3aca3c12497a 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-23  Matt Austern  <austern@apple.com >
+
+       * config/darwin.h (SUBTARGET_OPTIONS): Add -mmacosx= option.
+       (macosx_version_min_required): Declare global variable.
+       * config/darwin-protos.h (darwin_parse_macosx_version_name): Declare.
+       * config/darwin.c (macosx_version_min_required): Define variable.
+       (darwin_macosx_vers_tbl): Define. Table mapping text strings of
+       OS versions to numerical codes.
+       (darwin_parse_macosx_version_name): Define.  Parse -mmacosx=,
+       set macosx_version_min_required appropriately.
+       * config/i386/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Define.
+       Invoke darwin_parse_macosx_version_name.
+       * config/rs6000/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Add
+       darwin_parse_macosx_version_name to Darwin option handling.
+       * doc/invoke.texi (-mmacosx=): Document.
+       
 2004-02-23  Dale Johannesen  <dalej@apple.com>
 
        * config/rs6000.md (movsf_hardfloat): Add POWER form of nop.
index 41bad646ce1ac05ad179e1fc162cd43541cfff5f..1c432bf15a071f79f7fd2a77e185048ecf3c6015 100644 (file)
@@ -18,6 +18,8 @@ along with GCC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
+extern void darwin_parse_macosx_version_name (void);
+
 extern int name_needs_quotes (const char *);
 
 extern void machopic_validate_stub_or_non_lazy_ptr (const char *, int);
index a2a3f579fd93e9a9effb2f10e9055e3f4edb96b0..fd5d8b6272da68cb5c76e42e9a0c254d3b3010a4 100644 (file)
@@ -48,6 +48,48 @@ static void update_non_lazy_ptrs (const char *);
 static void update_stubs (const char *);
 static const char *machopic_non_lazy_ptr_name (const char*);
 
+/* Earliest operating system for which generated code is targeted, as string
+   and as integer.  The string form is "10.0", "10.1", etc.  The corresponding
+   numeric versions are 1000, 1010, etc.  This number is used for feature 
+   tests of the form "enable_this_feature = macosx_version_min_required >= n",
+   so 0 is a conservative default. */
+
+const char *darwin_macosx_version_name;
+unsigned int macosx_version_min_required = 0;
+
+/* Parse -macosx= option. */
+
+static struct darwin_macosx_vers {
+  const char *vers_str;
+  unsigned int vers_num;
+} darwin_macosx_vers_tbl[] = {
+  { "10.0", 1000 },
+  { "10.1", 1010 },
+  { "10.2", 1020 },
+  { "jaguar", 1020 },
+  { "10.3", 1030 },
+  { "panther", 1030 },
+  { "10.4", 1040 },
+  { "10.5", 1050 },
+  { NULL, 0 }
+};  
+
+void darwin_parse_macosx_version_name (void)
+{
+  if (darwin_macosx_version_name)
+    {
+      struct darwin_macosx_vers *v = darwin_macosx_vers_tbl;
+      while (v->vers_str
+            && strcmp (darwin_macosx_version_name, v->vers_str) != 0)
+       v++;
+
+      if (v->vers_str)
+       macosx_version_min_required = v->vers_num;
+      else
+       warning ("-macosx=%s: unrecognized version", darwin_macosx_version_name);
+    }
+}
+
 int
 name_needs_quotes (const char *name)
 {
index f56746df3845925ef1c31f6299f54e9adb18df7c..b3260fdded3d354a6226a7d97200b95a203f3d2e 100644 (file)
@@ -82,6 +82,19 @@ Boston, MA 02111-1307, USA.  */
 #undef DEFAULT_PCC_STRUCT_RETURN
 #define DEFAULT_PCC_STRUCT_RETURN 0
 
+/* Strings provided by SUBTARGET_OPTIONS */
+extern const char *darwin_macosx_version_name;
+
+/* Override rs6000.h/i386.h definition */
+#undef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS                                                  \
+  { "macosx=", &darwin_macosx_version_name,                \
+      N_("Earliest operating system for which code should be generated"), 0 }
+
+/* Earliest operating system for which generated code is targeted. 1000 for 10.0,
+   1010 for 10.1, etc. */
+extern unsigned int macosx_version_min_required;
+
 /* This table intercepts weirdo options whose names would interfere
    with normal driver conventions, and either translates them into
    standardly-named options, or adds a 'Z' so that they can get to
index e99a253af33ede9bbaf0c662822b4d1d61bb5411..23db7c00853892d6dda38228e4d8ecca754c7d2c 100644 (file)
@@ -51,6 +51,11 @@ Boston, MA 02111-1307, USA.  */
 #define SUBTARGET_EXTRA_SPECS                  \
   { "darwin_arch", "i386" },
 
+#define SUBTARGET_OVERRIDE_OPTIONS                                     \
+do {                                                                   \
+  darwin_parse_macosx_version_name ();                                  \
+} while (0)
+
 /* Use the following macro for any Darwin/x86-specific command-line option
    translation.  */
 #define SUBTARGET_OPTION_TRANSLATE_TABLE
index 6f193f739c3c8a2af3f0fa20a82631f1713d0e56..5b3abab3523d0a7d38ce2df9368891efa386b713 100644 (file)
@@ -87,7 +87,8 @@ do {                                                                  \
         flag_pic = 2;                                                  \
       }                                                                        \
   }                                                                    \
-}while(0)
+  darwin_parse_macosx_version_name ();                                  \
+} while (0)
 
 /* We want -fPIC by default, unless we're using -static to compile for
    the kernel or some such.  */
index 1b6b8c4fe8264fb38aaec637ad6f08dc7fe4fef6..3a062399a333247205e1e055b853b42ed58bcffb 100644 (file)
@@ -462,7 +462,7 @@ in the following sections.
 -single_module  -static  -sub_library  -sub_umbrella @gol
 -twolevel_namespace  -umbrella  -undefined @gol
 -unexported_symbols_list  -weak_reference_mismatches @gol
--whatsloaded}
+-whatsloaded -mmacosx=@var{ver}}
 
 @emph{MIPS Options}
 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
@@ -7590,6 +7590,13 @@ See man ld(1) for more information.
 This specifies the @var{executable} that will be loading the build
 output file being linked. See man ld(1) for more information.
 
+@item -mmacosx=@var{ver}
+@opindex mmacosx
+This specifies the earliest version of Mac OS for which code should
+be generated.  Specifying @code{-mmacosx=10.2}, for example, allows
+the compiler to use features that were first made available in that
+version of the operating system.
+
 @item -allowable_client  @var{client_name}
 @itemx -arch_only