bc-lee created this revision. bc-lee added reviewers: arphaman, MaskRay. Herald added a project: All. bc-lee requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This patch extends cc1as to export the build version load command with LC_VERSION_MIN_MACOSX. This is especially important for Mac Catalyst as Mac Catalyst uses the MacOS's compiler rt built-ins. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D121868 Files: clang/include/clang/Driver/Options.td clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/Darwin.h clang/tools/driver/cc1as_main.cpp
Index: clang/tools/driver/cc1as_main.cpp =================================================================== --- clang/tools/driver/cc1as_main.cpp +++ clang/tools/driver/cc1as_main.cpp @@ -144,6 +144,9 @@ /// otherwise. std::string TargetABI; + /// Darwin target variant triple, the variant of the deployment target + /// for which the code is being compiled. + llvm::Optional<llvm::Triple> DarwinTargetVariantTriple; /// @} public: @@ -209,6 +212,11 @@ // Target Options Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple)); + if (Arg *A = Args.getLastArg(options::OPT_darwin_target_variant_triple)) { + llvm::Triple TVT(A->getValue()); + Opts.DarwinTargetVariantTriple = TVT; + } + Opts.CPU = std::string(Args.getLastArgValue(OPT_target_cpu)); Opts.Features = Args.getAllArgValues(OPT_target_feature); @@ -407,6 +415,9 @@ // MCObjectFileInfo needs a MCContext reference in order to initialize itself. std::unique_ptr<MCObjectFileInfo> MOFI( TheTarget->createMCObjectFileInfo(Ctx, PIC)); + if (Opts.DarwinTargetVariantTriple) { + MOFI->setDarwinTargetVariantTriple(*Opts.DarwinTargetVariantTriple); + } Ctx.setObjectFileInfo(MOFI.get()); if (Opts.SaveTemporaryLabels) Index: clang/lib/Driver/ToolChains/Darwin.h =================================================================== --- clang/lib/Driver/ToolChains/Darwin.h +++ clang/lib/Driver/ToolChains/Darwin.h @@ -489,6 +489,12 @@ : TargetVersion) < VersionTuple(V0, V1, V2); } + /// Returns the darwin target variant triple, the variant of the deployment + /// target for which the code is being compiled. + Optional<llvm::Triple> getTargetVariantTriple() const override { + return TargetVariantTriple; + } + protected: /// Return true if c++17 aligned allocation/deallocation functions are not /// implemented in the c++ standard library of the deployment target we are Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -7754,6 +7754,8 @@ const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); const std::string &TripleStr = Triple.getTriple(); + const Optional<llvm::Triple> TargetVariantTriple = + getToolChain().getTargetVariantTriple(); const auto &D = getToolChain().getDriver(); // Don't warn about "clang -w -c foo.s" @@ -7771,6 +7773,10 @@ // Add the "effective" target triple. CmdArgs.push_back("-triple"); CmdArgs.push_back(Args.MakeArgString(TripleStr)); + if (TargetVariantTriple) { + CmdArgs.push_back("-darwin-target-variant-triple"); + CmdArgs.push_back(Args.MakeArgString(TargetVariantTriple->getTriple())); + } // Set the output mode, we currently only expect to be used as a real // assembler. Index: clang/include/clang/Driver/ToolChain.h =================================================================== --- clang/include/clang/Driver/ToolChain.h +++ clang/include/clang/Driver/ToolChain.h @@ -717,6 +717,10 @@ return llvm::DenormalMode::getIEEE(); } + virtual Optional<llvm::Triple> getTargetVariantTriple() const { + return llvm::Optional<llvm::Triple>(); + } + // We want to expand the shortened versions of the triples passed in to // the values used for the bitcode libraries. static llvm::Triple getOpenMPTriple(StringRef TripleStr) { Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -4832,16 +4832,21 @@ MarshallingInfoString<TargetOpts<"ABI">>; def target_sdk_version_EQ : Joined<["-"], "target-sdk-version=">, HelpText<"The version of target SDK used for compilation">; -def darwin_target_variant_triple : Separate<["-"], "darwin-target-variant-triple">, - HelpText<"Specify the darwin target variant triple">, - MarshallingInfoString<TargetOpts<"DarwinTargetVariantTriple">>, - Normalizer<"normalizeTriple">; def darwin_target_variant_sdk_version_EQ : Joined<["-"], "darwin-target-variant-sdk-version=">, HelpText<"The version of darwin target variant SDK used for compilation">; } // let Flags = [CC1Option, CC1AsOption, NoDriverOption] +let Flags = [CC1Option, CC1AsOption] in { + +def darwin_target_variant_triple : Separate<["-"], "darwin-target-variant-triple">, + HelpText<"Specify the darwin target variant triple">, + MarshallingInfoString<TargetOpts<"DarwinTargetVariantTriple">>, + Normalizer<"normalizeTriple">; + +} // let Flags = [CC1Option, CC1AsOption] + //===----------------------------------------------------------------------===// // Target Options (cc1 + cc1as + fc1) //===----------------------------------------------------------------------===//
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits