public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-10343] Darwin: Check as for .build_version support and use it if available.
@ 2024-04-18 14:49 Iain D Sandoe
  0 siblings, 0 replies; only message in thread
From: Iain D Sandoe @ 2024-04-18 14:49 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:da939fb65affbb91424a8b3582dbf643122f37ca

commit r12-10343-gda939fb65affbb91424a8b3582dbf643122f37ca
Author: Iain Sandoe <iain@sandoe.co.uk>
Date:   Tue Oct 17 11:10:27 2023 +0100

    Darwin: Check as for .build_version support and use it if available.
    
    This adds support for the minimum OS version data in assembler files.
    At present, we have no mechanism to detect the SDK version in use, and
    so that is omitted from build_versions.
    
    We follow the implementation in clang, '.build_version' is only emitted
    (where supported) for target macOS versions >= 10.14.  For earlier macOS
    we fall back to using a '.macosx_version_min' directive.  This latter is
    also emitted when the assembler supports it, but not build_version.
    
    gcc/ChangeLog:
    
            * config.in: Regenerate.
            * config/darwin.cc (darwin_file_start): Add assembler directives
            for the target OS version, where these are supported by the
            assembler.
            (darwin_override_options): Check for building >= macOS 10.14.
            * configure: Regenerate.
            * configure.ac: Check for assembler support of .build_version
            directives.
    
    Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
    (cherry picked from commit a4184c8a65a00eaf8a8d7f92fb8ad2f8621b39e2)

Diff:
---
 gcc/config.in        |  6 ++++++
 gcc/config/darwin.cc | 34 ++++++++++++++++++++++++++++++++--
 gcc/configure        | 33 +++++++++++++++++++++++++++++++++
 gcc/configure.ac     | 10 +++++++++-
 4 files changed, 80 insertions(+), 3 deletions(-)

diff --git a/gcc/config.in b/gcc/config.in
index f3bdcb4cdda..52f496ca5de 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -604,6 +604,12 @@
 #endif
 
 
+/* Define if your macOS assembler supports .build_version directives */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_MACOS_BUILD_VERSION
+#endif
+
+
 /* Define if the assembler understands -march=rv*_zifencei. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AS_MARCH_ZIFENCEI
diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc
index 8f039de1d8d..926ba9dca62 100644
--- a/gcc/config/darwin.cc
+++ b/gcc/config/darwin.cc
@@ -3034,7 +3034,35 @@ darwin_asm_output_dwarf_offset (FILE *file, int size, const char * lab,
 void
 darwin_file_start (void)
 {
-  /* Nothing to do.  */
+#ifdef HAVE_AS_MMACOSX_VERSION_MIN_OPTION
+  /* This should not happen with a well-formed command line, but the user could
+     invoke cc1* directly without it.  */
+  if (!darwin_macosx_version_min)
+    return;
+  /* This assumes that the version passed has been validated in the driver.  */
+  unsigned maj, min, tiny;
+  int count = sscanf (darwin_macosx_version_min, "%u.%u.%u", &maj, &min, &tiny);
+  if (count < 0)
+    return;
+  if (count < 3)
+    tiny = 0;
+  if (count < 2)
+    min = 0;
+  const char *directive;
+#ifdef HAVE_AS_MACOS_BUILD_VERSION
+  /* We only handle macos, so far.  */
+  if (generating_for_darwin_version >= 18)
+    directive = "build_version macos, ";
+  else
+#endif
+    directive = "macosx_version_min ";
+  if (count > 2 && tiny != 0)
+    fprintf (asm_out_file, "\t.%s %u, %u, %u\n", directive, maj, min, tiny);
+  else if (count > 1)
+    fprintf (asm_out_file, "\t.%s %u, %u\n", directive, maj, min);
+  else
+     fprintf (asm_out_file, "\t.%s %u, 0\n", directive, maj);
+#endif
 }
 
 /* Called for the TARGET_ASM_FILE_END hook.
@@ -3256,7 +3284,9 @@ darwin_override_options (void)
   /* Keep track of which (major) version we're generating code for.  */
   if (darwin_macosx_version_min)
     {
-      if (strverscmp (darwin_macosx_version_min, "10.7") >= 0)
+      if (strverscmp (darwin_macosx_version_min, "10.14") >= 0)
+	generating_for_darwin_version = 18;
+      else if (strverscmp (darwin_macosx_version_min, "10.7") >= 0)
 	generating_for_darwin_version = 11;
       else if (strverscmp (darwin_macosx_version_min, "10.6") >= 0)
 	generating_for_darwin_version = 10;
diff --git a/gcc/configure b/gcc/configure
index d62b03a75c9..f697874f2d8 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -26125,6 +26125,39 @@ $as_echo "#define HAVE_AS_MMACOSX_VERSION_MIN_OPTION 1" >>confdefs.h
 
 fi
 
+    if test x$gcc_cv_as_mmacosx_version_min = "xyes"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .build_version" >&5
+$as_echo_n "checking assembler for .build_version... " >&6; }
+if ${gcc_cv_as_darwin_build_version+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_darwin_build_version=no
+  if test x$gcc_cv_as != x; then
+    $as_echo ' .build_version macos, 10, 14 sdk_version 10, 14' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mmacosx-version-min=10.14 -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+	gcc_cv_as_darwin_build_version=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_darwin_build_version" >&5
+$as_echo "$gcc_cv_as_darwin_build_version" >&6; }
+if test $gcc_cv_as_darwin_build_version = yes; then
+
+$as_echo "#define HAVE_AS_MACOS_BUILD_VERSION 1" >>confdefs.h
+
+fi
+
+    fi
     ;;
 esac
 
diff --git a/gcc/configure.ac b/gcc/configure.ac
index e387ffa8ed5..fec897c2c08 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -4331,7 +4331,15 @@ case "$target_os" in
       gcc_cv_as_mmacosx_version_min,
       [-mmacosx-version-min=10.1], [.text],,
       [AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1,
-	[Define if your Mac OS X assembler supports the -mmacos-version-min option.])])
+	[Define if your macOS assembler supports the -mmacos-version-min option.])])
+    if test x$gcc_cv_as_mmacosx_version_min = "xyes"; then
+       gcc_GAS_CHECK_FEATURE([.build_version],
+           gcc_cv_as_darwin_build_version,
+           [-mmacosx-version-min=10.14],
+           [ .build_version macos, 10, 14 sdk_version 10, 14],,
+      [AC_DEFINE(HAVE_AS_MACOS_BUILD_VERSION, 1,
+	[Define if your macOS assembler supports .build_version directives])])
+    fi
     ;;
 esac

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-04-18 14:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-18 14:49 [gcc r12-10343] Darwin: Check as for .build_version support and use it if available Iain D Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).