Lines Matching +full:- +full:multilib
1 //===--- Multilib.cpp - Multilib Implementation ---------------------------===//
8 //===----------------------------------------------------------------------===//
10 #include "clang/Driver/Multilib.h"
59 Multilib::Multilib(StringRef GCCSuffix, StringRef OSSuffix, in Multilib() function in Multilib
62 normalizePathSegment(this->GCCSuffix); in Multilib()
63 normalizePathSegment(this->OSSuffix); in Multilib()
64 normalizePathSegment(this->IncludeSuffix); in Multilib()
67 Multilib &Multilib::gccSuffix(StringRef S) { in gccSuffix()
73 Multilib &Multilib::osSuffix(StringRef S) { in osSuffix()
79 Multilib &Multilib::includeSuffix(StringRef S) { in includeSuffix()
85 void Multilib::print(raw_ostream &OS) const { in print()
99 bool Multilib::isValid() const { in isValid()
105 assert(StringRef(Flag).front() == '+' || StringRef(Flag).front() == '-'); in isValid()
109 else if (Flags[I] != Flags[SI->getValue()]) in isValid()
115 bool Multilib::operator==(const Multilib &Other) const { in operator ==()
138 raw_ostream &clang::driver::operator<<(raw_ostream &OS, const Multilib &M) { in operator <<()
143 MultilibSet &MultilibSet::Maybe(const Multilib &M) { in Maybe()
144 Multilib Opposite; in Maybe()
148 Opposite.flags().push_back(("-" + Flag.substr(1)).str()); in Maybe()
153 MultilibSet &MultilibSet::Either(const Multilib &M1, const Multilib &M2) { in Either()
157 MultilibSet &MultilibSet::Either(const Multilib &M1, const Multilib &M2, in Either()
158 const Multilib &M3) { in Either()
162 MultilibSet &MultilibSet::Either(const Multilib &M1, const Multilib &M2, in Either()
163 const Multilib &M3, const Multilib &M4) { in Either()
167 MultilibSet &MultilibSet::Either(const Multilib &M1, const Multilib &M2, in Either()
168 const Multilib &M3, const Multilib &M4, in Either()
169 const Multilib &M5) { in Either()
173 static Multilib compose(const Multilib &Base, const Multilib &New) { in compose()
182 Multilib Composed(GCCSuffix, OSSuffix, IncludeSuffix); in compose()
184 Multilib::flags_list &Flags = Composed.flags(); in compose()
192 MultilibSet &MultilibSet::Either(ArrayRef<Multilib> MultilibSegments) { in Either()
199 for (const Multilib &New : MultilibSegments) { in Either()
200 for (const Multilib &Base : *this) { in Either()
201 Multilib MO = compose(Base, New); in Either()
228 filterInPlace([&R](const Multilib &M) { return R.match(M.gccSuffix()); }, in FilterOut()
233 void MultilibSet::push_back(const Multilib &M) { Multilibs.push_back(M); } in push_back()
241 assert(Indicator == '+' || Indicator == '-'); in isFlagEnabled()
245 bool MultilibSet::select(const Multilib::flags_list &Flags, Multilib &M) const { in select()
253 multilib_list Filtered = filterCopy([&FlagSet](const Multilib &M) { in select()
257 if (SI->getValue() != isFlagEnabled(Flag)) in select()
276 for (const Multilib &M : *this) in print()