michaelplatings created this revision. michaelplatings added a reviewer: phosek. Herald added a project: All. michaelplatings requested review of this revision. Herald added subscribers: cfe-commits, MaskRay. Herald added a project: clang.
This new representation means that if a string is a valid command line option then it can also be used to indicate that the option is required by a multilib. To indicate that a flag is required not to be present, its first character is replaced with '!', which is intended for consistency with the logical not operator in many programming languages. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D151438 Files: clang/include/clang/Driver/Multilib.h clang/include/clang/Driver/MultilibBuilder.h clang/lib/Driver/Multilib.cpp clang/lib/Driver/MultilibBuilder.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp clang/lib/Driver/ToolChains/OHOS.cpp
Index: clang/lib/Driver/ToolChains/OHOS.cpp =================================================================== --- clang/lib/Driver/ToolChains/OHOS.cpp +++ clang/lib/Driver/ToolChains/OHOS.cpp @@ -40,15 +40,15 @@ // -mfloat-abi=soft -mfloat-abi=softfp -mfloat-abi=hard // -mfpu=neon-vfpv4 Multilibs.push_back( - Multilib("/a7_soft", {}, {}, {"+mcpu=cortex-a7", "+mfloat-abi=soft"})); + Multilib("/a7_soft", {}, {}, {"-mcpu=cortex-a7", "-mfloat-abi=soft"})); Multilibs.push_back( Multilib("/a7_softfp_neon-vfpv4", {}, {}, - {"+mcpu=cortex-a7", "+mfloat-abi=softfp", "+mfpu=neon-vfpv4"})); + {"-mcpu=cortex-a7", "-mfloat-abi=softfp", "-mfpu=neon-vfpv4"})); Multilibs.push_back( Multilib("/a7_hard_neon-vfpv4", {}, {}, - {"+mcpu=cortex-a7", "+mfloat-abi=hard", "+mfpu=neon-vfpv4"})); + {"-mcpu=cortex-a7", "-mfloat-abi=hard", "-mfpu=neon-vfpv4"})); if (Multilibs.select(Flags, Result.SelectedMultilib)) { Result.Multilibs = Multilibs; Index: clang/lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- clang/lib/Driver/ToolChains/CommonArgs.cpp +++ clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1921,9 +1921,9 @@ Multilib::flags_list &Flags) { assert(Flag.front() == '-'); if (Enabled) { - Flags.push_back(("+" + Flag.substr(1)).str()); - } else { Flags.push_back(Flag.str()); + } else { + Flags.push_back(("!" + Flag.substr(1)).str()); } } Index: clang/lib/Driver/MultilibBuilder.cpp =================================================================== --- clang/lib/Driver/MultilibBuilder.cpp +++ clang/lib/Driver/MultilibBuilder.cpp @@ -76,7 +76,7 @@ StringRef Flag(Flags[I]); llvm::StringMap<int>::iterator SI = FlagSet.find(Flag.substr(1)); - assert(StringRef(Flag).front() == '+' || StringRef(Flag).front() == '-'); + assert(StringRef(Flag).front() == '-' || StringRef(Flag).front() == '!'); if (SI == FlagSet.end()) FlagSet[Flag.substr(1)] = I; @@ -97,10 +97,10 @@ MultilibSetBuilder &MultilibSetBuilder::Maybe(const MultilibBuilder &M) { MultilibBuilder Opposite; - // Negate any '+' flags + // Negate positive flags for (StringRef Flag : M.flags()) { - if (Flag.front() == '+') - Opposite.flags().push_back(("-" + Flag.substr(1)).str()); + if (Flag.front() == '-') + Opposite.flags().push_back(("!" + Flag.substr(1)).str()); } return Either(M, Opposite); } Index: clang/lib/Driver/Multilib.cpp =================================================================== --- clang/lib/Driver/Multilib.cpp +++ clang/lib/Driver/Multilib.cpp @@ -49,7 +49,7 @@ } OS << ";"; for (StringRef Flag : Flags) { - if (Flag.front() == '+') + if (Flag.front() == '-') OS << "@" << Flag.substr(1); } } Index: clang/include/clang/Driver/MultilibBuilder.h =================================================================== --- clang/include/clang/Driver/MultilibBuilder.h +++ clang/include/clang/Driver/MultilibBuilder.h @@ -70,7 +70,7 @@ MultilibBuilder &includeSuffix(StringRef S); /// Get the flags that indicate or contraindicate this multilib's use - /// All elements begin with either '+' or '-' + /// All elements begin with either '-' or '!' const flags_list &flags() const { return Flags; } flags_list &flags() { return Flags; } Index: clang/include/clang/Driver/Multilib.h =================================================================== --- clang/include/clang/Driver/Multilib.h +++ clang/include/clang/Driver/Multilib.h @@ -58,7 +58,7 @@ const std::string &includeSuffix() const { return IncludeSuffix; } /// Get the flags that indicate or contraindicate this multilib's use - /// All elements begin with either '+' or '-' + /// All elements begin with either '-' or '!' const flags_list &flags() const { return Flags; } LLVM_DUMP_METHOD void dump() const;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits