bc-lee updated this revision to Diff 417595. bc-lee added a comment. Addressing review comments.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D121868/new/ 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/test/Misc/cc1as-darwin-target-variant-triple.s 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,9 @@ // Target Options Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple)); + if (Arg *A = Args.getLastArg(options::OPT_darwin_target_variant_triple)) + Opts.DarwinTargetVariantTriple = llvm::Triple(A->getValue()); + Opts.CPU = std::string(Args.getLastArgValue(OPT_target_cpu)); Opts.Features = Args.getAllArgValues(OPT_target_feature); @@ -407,6 +413,8 @@ // 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/test/Misc/cc1as-darwin-target-variant-triple.s =================================================================== --- /dev/null +++ clang/test/Misc/cc1as-darwin-target-variant-triple.s @@ -0,0 +1,33 @@ +// Run cc1as using darwin-target-variant-triple +// RUN: %clang -cc1as -triple x86_64-apple-macos10.9 -darwin-target-variant-triple x86_64-apple-ios13.1-macabi -filetype obj %s -o - \ +// RUN: | llvm-readobj --file-headers --macho-version-min - \ +// RUN: | FileCheck --check-prefix=CHECK %s + +// CHECK: File: <stdin> +// CHECK: Format: Mach-O 64-bit x86-64 +// CHECK: Arch: x86_64 +// CHECK: AddressSize: 64bit +// CHECK: MachHeader { +// CHECK: Magic: Magic64 (0xFEEDFACF) +// CHECK: CpuType: X86-64 (0x1000007) +// CHECK: CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3) +// CHECK: FileType: Relocatable (0x1) +// CHECK: NumOfLoadCommands: 3 +// CHECK: SizeOfLoadCommands: 192 +// CHECK: Flags [ (0x0) +// CHECK: ] +// CHECK: Reserved: 0x0 +// CHECK: } +// CHECK: MinVersion { +// CHECK: Cmd: LC_VERSION_MIN_MACOSX +// CHECK: Size: 16 +// CHECK: Version: 10.9 +// CHECK: SDK: n/a +// CHECK: } +// CHECK: MinVersion { +// CHECK: Cmd: LC_BUILD_VERSION +// CHECK: Size: 24 +// CHECK: Platform: macCatalyst +// CHECK: Version: 13.1 +// CHECK: SDK: n/a +// CHECK: } 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