Just a heads up that this broke the Chromium build on Mac: https://crbug.com/874997
Apparently we have some target that explicitly targets 10.5. I don't know if that's really necessary, but the fact that we ran into this at all suggests others will too, so maybe this change warrants a release notes entry. Thanks, Hans On Wed, Aug 15, 2018 at 10:09 PM, Chris Bieneman via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: cbieneman > Date: Wed Aug 15 13:09:38 2018 > New Revision: 339807 > > URL: http://llvm.org/viewvc/llvm-project?rev=339807&view=rev > Log: > Refactor Darwin driver to refer to runtimes by component > > Summary: > In r335809, Petr Hosek lays out support for what he calls the multiarch > runtimes layout. This new way of laying out the directories for runtime > libraries is workable for all platforms. Petr did some of the common > infrastructure and made it work for Linux and Fuscia. This patch is a > cleanup to the Darwin and MachO drivers to serve as a step toward > supporting it in Darwin. > > This patch does primarily two things: > (1) Changes the APIs for how the Darwin driver refers to compiler-rt > libraries to use the component names, similar to how Linux and Fuscia do > > (2) Removes some legacy functionality for supporting macOS versions > before 10.6. This functionality is effectively dead code because in > r339277, the support was removed from compiler-rt for generating the 10.4 > runtime support library, and Xcode 10 (currently in beta) removes > libgcc_s.10.4 and libgcc_s.10.5 from the macOS SDK. > > With this patch landed a subsequent patch can modify > MachO::AddLinkRuntimeLib to support the multiarch runtimes layout. > > Worth noting: None of the removed functionality was actually covered in > the test suite. So no test case updates are required. > > Reviewers: phosek, bruno, arphaman > > Reviewed By: phosek, arphaman > > Subscribers: cfe-commits > > Differential Revision: https://reviews.llvm.org/D50618 > > Modified: > cfe/trunk/lib/Driver/ToolChains/Darwin.cpp > cfe/trunk/lib/Driver/ToolChains/Darwin.h > > Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=339807&r1=339806&r2=339807&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp (original) > +++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp Wed Aug 15 13:09:38 2018 > @@ -908,8 +908,17 @@ unsigned DarwinClang::GetDefaultDwarfVer > } > > void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, > - StringRef DarwinLibName, > - RuntimeLinkOptions Opts) const { > + StringRef Component, RuntimeLinkOptions Opts, > + bool IsShared) const { > + SmallString<64> DarwinLibName = StringRef("libclang_rt."); > + // an Darwin the builtins compomnent is not in the library name > + if (Component != "builtins") { > + DarwinLibName += Component; > + if (!(Opts & RLO_IsEmbedded)) > + DarwinLibName += "_"; > + } > + DarwinLibName += getOSLibraryNameSuffix(); > + DarwinLibName += IsShared ? "_dynamic.dylib" : ".a"; > SmallString<128> Dir(getDriver().ResourceDir); > llvm::sys::path::append( > Dir, "lib", (Opts & RLO_IsEmbedded) ? "macho_embedded" : "darwin"); > @@ -1013,10 +1022,8 @@ void Darwin::addProfileRTLibs(const ArgL > ArgStringList &CmdArgs) const { > if (!needsProfileRT(Args)) return; > > - AddLinkRuntimeLib( > - Args, CmdArgs, > - (Twine("libclang_rt.profile_") + getOSLibraryNameSuffix() + > ".a").str(), > - RuntimeLinkOptions(RLO_AlwaysLink | RLO_FirstLink)); > + AddLinkRuntimeLib(Args, CmdArgs, "profile", > + RuntimeLinkOptions(RLO_AlwaysLink | RLO_FirstLink)); > > // If we have a symbol export directive and we're linking in the profile > // runtime, automatically export symbols necessary to implement some of the > @@ -1033,12 +1040,7 @@ void DarwinClang::AddLinkSanitizerLibArg > StringRef Sanitizer, > bool Shared) const { > auto RLO = RuntimeLinkOptions(RLO_AlwaysLink | (Shared ? RLO_AddRPath : > 0U)); > - AddLinkRuntimeLib(Args, CmdArgs, > - (Twine("libclang_rt.") + Sanitizer + "_" + > - getOSLibraryNameSuffix() + > - (Shared ? "_dynamic.dylib" : ".a")) > - .str(), > - RLO); > + AddLinkRuntimeLib(Args, CmdArgs, Sanitizer, RLO, Shared); > } > > ToolChain::RuntimeLibType DarwinClang::GetRuntimeLibType( > @@ -1092,10 +1094,7 @@ void DarwinClang::AddLinkRuntimeLibArgs( > AddCXXStdlibLibArgs(Args, CmdArgs); > } > if (Sanitize.needsStatsRt()) { > - StringRef OS = isTargetMacOS() ? "osx" : "iossim"; > - AddLinkRuntimeLib(Args, CmdArgs, > - (Twine("libclang_rt.stats_client_") + OS + ".a").str(), > - RLO_AlwaysLink); > + AddLinkRuntimeLib(Args, CmdArgs, "stats_client", RLO_AlwaysLink); > AddLinkSanitizerLibArgs(Args, CmdArgs, "stats"); > } > if (Sanitize.needsEsanRt()) > @@ -1106,52 +1105,15 @@ void DarwinClang::AddLinkRuntimeLibArgs( > CmdArgs.push_back("-lSystem"); > > // Select the dynamic runtime library and the target specific static > library. > - if (isTargetWatchOSBased()) { > - // We currently always need a static runtime library for watchOS. > - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.watchos.a"); > - } else if (isTargetTvOSBased()) { > - // We currently always need a static runtime library for tvOS. > - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.tvos.a"); > - } else if (isTargetIOSBased()) { > + if (isTargetIOSBased()) { > // If we are compiling as iOS / simulator, don't attempt to link > libgcc_s.1, > // it never went into the SDK. > // Linking against libgcc_s.1 isn't needed for iOS 5.0+ > if (isIPhoneOSVersionLT(5, 0) && !isTargetIOSSimulator() && > getTriple().getArch() != llvm::Triple::aarch64) > CmdArgs.push_back("-lgcc_s.1"); > - > - // We currently always need a static runtime library for iOS. > - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.ios.a"); > - } else { > - assert(isTargetMacOS() && "unexpected non MacOS platform"); > - // The dynamic runtime library was merged with libSystem for 10.6 and > - // beyond; only 10.4 and 10.5 need an additional runtime library. > - if (isMacosxVersionLT(10, 5)) > - CmdArgs.push_back("-lgcc_s.10.4"); > - else if (isMacosxVersionLT(10, 6)) > - CmdArgs.push_back("-lgcc_s.10.5"); > - > - // Originally for OS X, we thought we would only need a static runtime > - // library when targeting 10.4, to provide versions of the static > functions > - // which were omitted from 10.4.dylib. This led to the creation of the > 10.4 > - // builtins library. > - // > - // Unfortunately, that turned out to not be true, because Darwin system > - // headers can still use eprintf on i386, and it is not exported from > - // libSystem. Therefore, we still must provide a runtime library just for > - // the tiny tiny handful of projects that *might* use that symbol. > - // > - // Then over time, we figured out it was useful to add more things to the > - // runtime so we created libclang_rt.osx.a to provide new functions when > - // deploying to old OS builds, and for a long time we had both eprintf > and > - // osx builtin libraries. Which just seems excessive. So with PR 28855, > we > - // are removing the eprintf library and expecting eprintf to be provided > by > - // the OS X builtins library. > - if (isMacosxVersionLT(10, 5)) > - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.10.4.a"); > - else > - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.osx.a"); > } > + AddLinkRuntimeLib(Args, CmdArgs, "builtins"); > } > > /// Returns the most appropriate macOS target version for the current > process. > @@ -1992,12 +1954,12 @@ void MachO::AddLinkRuntimeLibArgs(const > // Embedded targets are simple at the moment, not supporting sanitizers and > // with different libraries for each member of the product { static, PIC } > x > // { hard-float, soft-float } > - llvm::SmallString<32> CompilerRT = StringRef("libclang_rt."); > + llvm::SmallString<32> CompilerRT = StringRef(""); > CompilerRT += > (tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard) > ? "hard" > : "soft"; > - CompilerRT += Args.hasArg(options::OPT_fPIC) ? "_pic.a" : "_static.a"; > + CompilerRT += Args.hasArg(options::OPT_fPIC) ? "_pic" : "_static"; > > AddLinkRuntimeLib(Args, CmdArgs, CompilerRT, RLO_IsEmbedded); > } > @@ -2126,7 +2088,7 @@ llvm::ExceptionHandling Darwin::GetExcep > > // Only watchOS uses the new DWARF/Compact unwinding method. > llvm::Triple Triple(ComputeLLVMTriple(Args)); > - if(Triple.isWatchABI()) > + if (Triple.isWatchABI()) > return llvm::ExceptionHandling::DwarfCFI; > > return llvm::ExceptionHandling::SjLj; > @@ -2263,8 +2225,7 @@ void Darwin::addStartObjectFileArgs(cons > } > > if (!isTargetIPhoneOS() && Args.hasArg(options::OPT_shared_libgcc) && > - !isTargetWatchOS() && > - isMacosxVersionLT(10, 5)) { > + !isTargetWatchOS() && isMacosxVersionLT(10, 5)) { > const char *Str = Args.MakeArgString(GetFilePath("crt3.o")); > CmdArgs.push_back(Str); > } > > Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.h?rev=339807&r1=339806&r2=339807&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains/Darwin.h (original) > +++ cfe/trunk/lib/Driver/ToolChains/Darwin.h Wed Aug 15 13:09:38 2018 > @@ -189,9 +189,9 @@ public: > > /// Add a runtime library to the list of items to link. > void AddLinkRuntimeLib(const llvm::opt::ArgList &Args, > - llvm::opt::ArgStringList &CmdArgs, > - StringRef DarwinLibName, > - RuntimeLinkOptions Opts = RuntimeLinkOptions()) > const; > + llvm::opt::ArgStringList &CmdArgs, StringRef > Component, > + RuntimeLinkOptions Opts = RuntimeLinkOptions(), > + bool IsShared = false) const; > > /// Add any profiling runtime libraries that are needed. This is > essentially a > /// MachO specific version of addProfileRT in Tools.cpp. > @@ -252,6 +252,8 @@ public: > return llvm::ExceptionHandling::None; > } > > + virtual StringRef getOSLibraryNameSuffix() const { return ""; } > + > /// } > }; > > @@ -418,7 +420,7 @@ protected: > Action::OffloadKind DeviceOffloadKind) const > override; > > StringRef getPlatformFamily() const; > - StringRef getOSLibraryNameSuffix() const; > + StringRef getOSLibraryNameSuffix() const override; > > public: > static StringRef getSDKName(StringRef isysroot); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits