aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config.in6
-rw-r--r--gcc/config/darwin.cc34
-rwxr-xr-xgcc/configure33
-rw-r--r--gcc/configure.ac8
4 files changed, 79 insertions, 2 deletions
diff --git a/gcc/config.in b/gcc/config.in
index d04718a..98ddddf 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 d8c8607..a80b6ca 100644
--- a/gcc/config/darwin.cc
+++ b/gcc/config/darwin.cc
@@ -3073,7 +3073,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.
@@ -3295,7 +3323,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 c43bde8..9f5b708 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -26361,6 +26361,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 fb8e32f..c10e007 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -4374,6 +4374,14 @@ case "$target_os" in
[-mmacosx-version-min=10.1], [.text],,
[AC_DEFINE(HAVE_AS_MMACOSX_VERSION_MIN_OPTION, 1,
[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