@@ -207,9 +207,10 @@ struct MultilibGroupSerialization {
207207
208208struct MultilibSetSerialization {
209209 llvm::VersionTuple MultilibVersion;
210- std::vector<MultilibGroupSerialization> Groups;
211- std::vector<MultilibSerialization> Multilibs;
212- std::vector<MultilibSet::FlagMatcher> FlagMatchers;
210+ SmallVector<MultilibGroupSerialization> Groups;
211+ SmallVector<MultilibSerialization> Multilibs;
212+ SmallVector<MultilibSet::FlagMatcher> FlagMatchers;
213+ SmallVector<MultilibSet::CustomFlagDeclaration> CustomFlagDeclarations;
213214};
214215
215216} // end anonymous namespace
@@ -261,11 +262,31 @@ template <> struct llvm::yaml::MappingTraits<MultilibSet::FlagMatcher> {
261262 }
262263};
263264
265+ template <>
266+ struct llvm ::yaml::MappingTraits<MultilibSet::CustomFlagDeclaration> {
267+ static void mapping (llvm::yaml::IO &io,
268+ MultilibSet::CustomFlagDeclaration &V) {
269+ io.mapRequired (" Name" , V.Name );
270+ io.mapRequired (" Values" , V.Values );
271+ io.mapRequired (" Default" , V.DefaultValue );
272+ }
273+ static std::string validate (IO &io, MultilibSet::CustomFlagDeclaration &V) {
274+ if (V.Name .empty ())
275+ return " name required for custom flag" ;
276+ if (V.Values .empty ())
277+ return " at least one value is expected" ;
278+ if (!llvm::is_contained (V.Values , V.DefaultValue ))
279+ return " default value is not one of the possible listed values" ;
280+ return {};
281+ }
282+ };
283+
264284template <> struct llvm ::yaml::MappingTraits<MultilibSetSerialization> {
265285 static void mapping (llvm::yaml::IO &io, MultilibSetSerialization &M) {
266286 io.mapRequired (" MultilibVersion" , M.MultilibVersion );
267287 io.mapRequired (" Variants" , M.Multilibs );
268288 io.mapOptional (" Groups" , M.Groups );
289+ io.mapOptional (" Flags" , M.CustomFlagDeclarations );
269290 io.mapOptional (" Mappings" , M.FlagMatchers );
270291 }
271292 static std::string validate (IO &io, MultilibSetSerialization &M) {
@@ -297,6 +318,7 @@ template <> struct llvm::yaml::MappingTraits<MultilibSetSerialization> {
297318LLVM_YAML_IS_SEQUENCE_VECTOR (MultilibSerialization)
298319LLVM_YAML_IS_SEQUENCE_VECTOR(MultilibGroupSerialization)
299320LLVM_YAML_IS_SEQUENCE_VECTOR(MultilibSet::FlagMatcher)
321+ LLVM_YAML_IS_SEQUENCE_VECTOR(MultilibSet::CustomFlagDeclaration)
300322
301323llvm::ErrorOr<MultilibSet>
302324MultilibSet::parseYaml(llvm::MemoryBufferRef Input,
@@ -325,7 +347,8 @@ MultilibSet::parseYaml(llvm::MemoryBufferRef Input,
325347 }
326348 }
327349
328- return MultilibSet (std::move (Multilibs), std::move (MS.FlagMatchers ));
350+ return MultilibSet (std::move (Multilibs), std::move (MS.FlagMatchers ),
351+ std::move (MS.CustomFlagDeclarations ));
329352}
330353
331354LLVM_DUMP_METHOD void MultilibSet::dump () const {
0 commit comments