forked from OSchip/llvm-project
Darwin: Pass -iphoneos-version-min to ld when building for ARM.
llvm-svn: 81019
This commit is contained in:
parent
56b534d2d6
commit
84e727fb72
|
@ -155,11 +155,18 @@ ToolChain *DarwinHostInfo::getToolChain(const ArgList &Args,
|
|||
if (!TC) {
|
||||
llvm::Triple TCTriple(getTriple());
|
||||
TCTriple.setArchName(ArchName);
|
||||
|
||||
|
||||
if (strcmp(ArchName, "i386") == 0 || strcmp(ArchName, "x86_64") == 0)
|
||||
TC = new toolchains::Darwin(*this, TCTriple,
|
||||
DarwinVersion,
|
||||
GCCVersion);
|
||||
GCCVersion,
|
||||
false);
|
||||
else if (strncmp(ArchName, "arm", 3) == 0 ||
|
||||
strncmp(ArchName, "thumb", 5) == 0)
|
||||
TC = new toolchains::Darwin(*this, TCTriple,
|
||||
DarwinVersion,
|
||||
GCCVersion,
|
||||
true);
|
||||
else
|
||||
TC = new toolchains::Darwin_GCC(*this, TCTriple);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,8 @@ using namespace clang::driver::toolchains;
|
|||
|
||||
Darwin::Darwin(const HostInfo &Host, const llvm::Triple& Triple,
|
||||
const unsigned (&_DarwinVersion)[3],
|
||||
const unsigned (&_GCCVersion)[3])
|
||||
const unsigned (&_GCCVersion)[3],
|
||||
bool _IsIPhone)
|
||||
: ToolChain(Host, Triple) {
|
||||
DarwinVersion[0] = _DarwinVersion[0];
|
||||
DarwinVersion[1] = _DarwinVersion[1];
|
||||
|
@ -37,10 +38,14 @@ Darwin::Darwin(const HostInfo &Host, const llvm::Triple& Triple,
|
|||
GCCVersion[0] = _GCCVersion[0];
|
||||
GCCVersion[1] = _GCCVersion[1];
|
||||
GCCVersion[2] = _GCCVersion[2];
|
||||
IsIPhone = _IsIPhone;
|
||||
|
||||
llvm::raw_string_ostream(MacosxVersionMin)
|
||||
<< "10." << DarwinVersion[0] - 4 << '.' << DarwinVersion[1];
|
||||
|
||||
// FIXME: Lift default up.
|
||||
IPhoneOSVersionMin = "3.0";
|
||||
|
||||
ToolChainDir = "i686-apple-darwin";
|
||||
ToolChainDir += llvm::utostr(DarwinVersion[0]);
|
||||
ToolChainDir += "/";
|
||||
|
@ -150,15 +155,21 @@ DerivedArgList *Darwin::TranslateArgs(InputArgList &Args) const {
|
|||
} else if (!OSXVersion && !iPhoneVersion) {
|
||||
// Chose the default version based on the arch.
|
||||
//
|
||||
// FIXME: This will need to be fixed when we merge in arm support.
|
||||
// FIXME: Are there iPhone overrides for this?
|
||||
|
||||
// Look for MACOSX_DEPLOYMENT_TARGET, otherwise use the version
|
||||
// from the host.
|
||||
const char *Version = ::getenv("MACOSX_DEPLOYMENT_TARGET");
|
||||
if (!Version)
|
||||
Version = MacosxVersionMin.c_str();
|
||||
const Option *O = Opts.getOption(options::OPT_mmacosx_version_min_EQ);
|
||||
DAL->append(DAL->MakeJoinedArg(0, O, Version));
|
||||
if (!isIPhone()) {
|
||||
// Look for MACOSX_DEPLOYMENT_TARGET, otherwise use the version
|
||||
// from the host.
|
||||
const char *Version = ::getenv("MACOSX_DEPLOYMENT_TARGET");
|
||||
if (!Version)
|
||||
Version = MacosxVersionMin.c_str();
|
||||
const Option *O = Opts.getOption(options::OPT_mmacosx_version_min_EQ);
|
||||
DAL->append(DAL->MakeJoinedArg(0, O, Version));
|
||||
} else {
|
||||
const char *Version = IPhoneOSVersionMin.c_str();
|
||||
const Option *O = Opts.getOption(options::OPT_miphoneos_version_min_EQ);
|
||||
DAL->append(DAL->MakeJoinedArg(0, O, Version));
|
||||
}
|
||||
}
|
||||
|
||||
for (ArgList::iterator it = Args.begin(), ie = Args.end(); it != ie; ++it) {
|
||||
|
|
|
@ -53,6 +53,9 @@ class VISIBILITY_HIDDEN Darwin : public ToolChain {
|
|||
/// GCC version to use.
|
||||
unsigned GCCVersion[3];
|
||||
|
||||
/// Whether this is this an iPhone toolchain.
|
||||
bool IsIPhone;
|
||||
|
||||
/// The directory suffix for this tool chain.
|
||||
std::string ToolChainDir;
|
||||
|
||||
|
@ -60,12 +63,16 @@ class VISIBILITY_HIDDEN Darwin : public ToolChain {
|
|||
/// initialized.
|
||||
mutable std::string MacosxVersionMin;
|
||||
|
||||
/// The default iphoneos-version-min of this tool chain.
|
||||
std::string IPhoneOSVersionMin;
|
||||
|
||||
const char *getMacosxVersionMin() const;
|
||||
|
||||
public:
|
||||
Darwin(const HostInfo &Host, const llvm::Triple& Triple,
|
||||
const unsigned (&DarwinVersion)[3],
|
||||
const unsigned (&GCCVersion)[3]);
|
||||
const unsigned (&DarwinVersion)[3],
|
||||
const unsigned (&GCCVersion)[3],
|
||||
bool IsIPhone);
|
||||
~Darwin();
|
||||
|
||||
void getDarwinVersion(unsigned (&Res)[3]) const {
|
||||
|
@ -84,10 +91,16 @@ public:
|
|||
return MacosxVersionMin.c_str();
|
||||
}
|
||||
|
||||
const char *getIPhoneOSVersionStr() const {
|
||||
return IPhoneOSVersionMin.c_str();
|
||||
}
|
||||
|
||||
const std::string &getToolChainDir() const {
|
||||
return ToolChainDir;
|
||||
}
|
||||
|
||||
bool isIPhone() const { return IsIPhone; }
|
||||
|
||||
virtual DerivedArgList *TranslateArgs(InputArgList &Args) const;
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
|
|
|
@ -1457,22 +1457,22 @@ void darwin::Link::AddLinkArgs(const ArgList &Args,
|
|||
Args.AddAllArgs(CmdArgs, options::OPT_image__base);
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_init);
|
||||
|
||||
if (!Args.hasArg(options::OPT_mmacosx_version_min_EQ)) {
|
||||
if (!Args.hasArg(options::OPT_miphoneos_version_min_EQ)) {
|
||||
// FIXME: I don't understand what is going on here. This is
|
||||
// supposed to come from darwin_ld_minversion, but gcc doesn't
|
||||
// seem to be following that; it must be getting overridden
|
||||
// somewhere.
|
||||
if (!Args.hasArg(options::OPT_mmacosx_version_min_EQ) &&
|
||||
!Args.hasArg(options::OPT_miphoneos_version_min_EQ)) {
|
||||
// Add default version min.
|
||||
if (!getDarwinToolChain().isIPhone()) {
|
||||
CmdArgs.push_back("-macosx_version_min");
|
||||
CmdArgs.push_back(getDarwinToolChain().getMacosxVersionStr());
|
||||
} else {
|
||||
CmdArgs.push_back("-iphoneos_version_min");
|
||||
CmdArgs.push_back(getDarwinToolChain().getIPhoneOSVersionStr());
|
||||
}
|
||||
} else {
|
||||
// Adding all arguments doesn't make sense here but this is what
|
||||
// gcc does.
|
||||
Args.AddAllArgsTranslated(CmdArgs, options::OPT_mmacosx_version_min_EQ,
|
||||
"-macosx_version_min");
|
||||
}
|
||||
|
||||
// Adding all arguments doesn't make sense here but this is what
|
||||
// gcc does.
|
||||
Args.AddAllArgsTranslated(CmdArgs, options::OPT_mmacosx_version_min_EQ,
|
||||
"-macosx_version_min");
|
||||
Args.AddAllArgsTranslated(CmdArgs, options::OPT_miphoneos_version_min_EQ,
|
||||
"-iphoneos_version_min");
|
||||
Args.AddLastArg(CmdArgs, options::OPT_nomultidefs);
|
||||
|
|
Loading…
Reference in New Issue