<http://www.gnu.org/licenses/>. */
#include "config.h"
+#include "libiberty.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
included in tm.h). This may be overidden by setting the flag explicitly
(or by the MACOSX_DEPLOYMENT_TARGET environment). */
-static void
-darwin_default_min_version (unsigned int *decoded_options_count,
- struct cl_decoded_option **decoded_options)
+static const char *
+darwin_default_min_version (void)
{
- const unsigned int argc = *decoded_options_count;
- struct cl_decoded_option *const argv = *decoded_options;
- unsigned int i;
- const char *new_flag;
-
- /* If the command-line is empty, just return. */
- if (argc <= 1)
- return;
-
- /* Don't do this if the user specified -mmacosx-version-min= or
- -mno-macosx-version-min. */
- for (i = 1; i < argc; i++)
- if (argv[i].opt_index == OPT_mmacosx_version_min_)
- return;
-
- /* Retrieve the deployment target from the environment and insert
- it as a flag. */
- {
- const char * macosx_deployment_target;
- macosx_deployment_target = getenv ("MACOSX_DEPLOYMENT_TARGET");
- if (macosx_deployment_target
- /* Apparently, an empty string for MACOSX_DEPLOYMENT_TARGET means
- "use the default". Or, possibly "use 10.1". We choose
- to ignore the environment variable, as if it was never set. */
- && macosx_deployment_target[0])
- {
- ++*decoded_options_count;
- *decoded_options = XNEWVEC (struct cl_decoded_option,
- *decoded_options_count);
- (*decoded_options)[0] = argv[0];
- generate_option (OPT_mmacosx_version_min_, macosx_deployment_target,
- 1, CL_DRIVER, &(*decoded_options)[1]);
- memcpy (*decoded_options + 2, argv + 1,
- (argc - 1) * sizeof (struct cl_decoded_option));
- return;
- }
- }
+ /* Try to retrieve the deployment target from the environment. */
+ const char *new_flag = getenv ("MACOSX_DEPLOYMENT_TARGET");
+ /* Apparently, an empty string for MACOSX_DEPLOYMENT_TARGET means
+ "use the default". Or, possibly "use 10.1". We choose
+ to ignore the environment variable, as if it was never set. */
+ if (new_flag == NULL || new_flag[0] == 0)
#ifndef CROSS_DIRECTORY_STRUCTURE
-
- /* Try to find the version from the kernel, if we fail - we print a message
- and give up. */
- new_flag = darwin_find_version_from_kernel ();
- if (!new_flag)
- return;
-
+ /* Try to find the version from the kernel, if we fail - we print a
+ message and give up. */
+ new_flag = darwin_find_version_from_kernel ();
#else
-
- /* For cross-compilers, default to the target OS version. */
- new_flag = DEF_MIN_OSX_VERSION;
-
+ /* For cross-compilers, default to a minimum version determined by
+ the configuration. */
+ new_flag = DEF_MIN_OSX_VERSION;
#endif /* CROSS_DIRECTORY_STRUCTURE */
- /* Add the new flag. */
- ++*decoded_options_count;
- *decoded_options = XNEWVEC (struct cl_decoded_option,
- *decoded_options_count);
- (*decoded_options)[0] = argv[0];
- generate_option (OPT_mmacosx_version_min_, new_flag,
- 1, CL_DRIVER, &(*decoded_options)[1]);
- memcpy (*decoded_options + 2, argv + 1,
- (argc - 1) * sizeof (struct cl_decoded_option));
- return;
+ if (new_flag != NULL)
+ {
+ size_t len = strlen (new_flag);
+ if (len > 128) { /* Arbitrary limit, number should be like xx.yy.zz */
+ warning (0, "couldn%'t understand version %s\n", new_flag);
+ return NULL;
+ }
+ new_flag = xstrndup (new_flag, len);
+ }
+ return new_flag;
}
/* Translate -filelist and -framework options in *DECODED_OPTIONS
bool seenM64 = false;
bool appendM32 = false;
bool appendM64 = false;
+ const char *vers_string = NULL;
+ bool seen_version_min = false;
for (i = 1; i < *decoded_options_count; i++)
{
CL_DRIVER, &(*decoded_options)[i]);
break;
+ case OPT_mmacosx_version_min_:
+ seen_version_min = true;
+ vers_string = xstrndup ((*decoded_options)[i].arg, 32);
+
default:
break;
}
}
- darwin_default_min_version (decoded_options_count, decoded_options);
/* Turn -arch xxxx into the appropriate -m32/-m64 flag.
If the User tried to specify multiple arch flags (which is possible with
some Darwin compilers) warn that this mode is not supported by this
&(*decoded_options)[*decoded_options_count - 1]);
}
+ /* We will need to know the OS X version we're trying to build for here
+ so that we can figure out the mechanism and source for the sysroot to
+ be used. */
+ if (! seen_version_min && *decoded_options_count > 1)
+ {
+ /* Not set by the User, try to figure it out. */
+ vers_string = darwin_default_min_version ();
+ if (vers_string != NULL)
+ {
+ ++*decoded_options_count;
+ *decoded_options = XRESIZEVEC (struct cl_decoded_option,
+ *decoded_options,
+ *decoded_options_count);
+ generate_option (OPT_mmacosx_version_min_, vers_string, 1, CL_DRIVER,
+ &(*decoded_options)[*decoded_options_count - 1]);
+ }
+ }
}
%{headerpad_max_install_names} \
%{Zimage_base*:-image_base %*} \
%{Zinit*:-init %*} \
- %{!mmacosx-version-min=*:-macosx_version_min %(darwin_minversion)} \
%{mmacosx-version-min=*:-macosx_version_min %*} \
%{nomultidefs} \
%{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \
#define DARWIN_EXTRA_SPECS \
{ "darwin_crt1", DARWIN_CRT1_SPEC }, \
- { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \
- { "darwin_minversion", DARWIN_MINVERSION_SPEC },
+ { "darwin_dylib1", DARWIN_DYLIB1_SPEC },
#define DARWIN_DYLIB1_SPEC \
"%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \
#define SUPPORTS_INIT_PRIORITY 0
/* When building cross-compilers (and native crosses) we shall default to
- providing an osx-version-min of this unless overridden by the User. */
-#define DEF_MIN_OSX_VERSION "10.4"
+ providing an osx-version-min of this unless overridden by the User.
+ 10.5 is the only version that fully supports all our archs so that's the
+ fall-back default. */
+#define DEF_MIN_OSX_VERSION "10.5"
#endif /* CONFIG_DARWIN_H */
%(cc1_cpu) \
%{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \
%{static: %{Zdynamic: %e conflicting code gen style switches are used}}\
- %{!mmacosx-version-min=*:-mmacosx-version-min=%(darwin_minversion)} \
%{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \
%{faltivec:-maltivec -include altivec.h} %{fno-altivec:-mno-altivec} \
%<faltivec %<fno-altivec " \
#define DARWIN_CRT2_SPEC \
"%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}"
-/* Determine a minimum version based on compiler options. */
-#define DARWIN_MINVERSION_SPEC \
- "%{m64:%{fgnu-runtime:10.4; \
- ,objective-c|,objc-cpp-output:10.5; \
- ,objective-c-header:10.5; \
- ,objective-c++|,objective-c++-cpp-output:10.5; \
- ,objective-c++-header|,objc++-cpp-output:10.5; \
- :10.4}; \
- shared-libgcc:10.3; \
- :10.1}"
-
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
DARWIN_EXTRA_SPECS \