Add <conditions> to <kernel> in framework compat mat
When <conditions> are present, the <kernel> tag is only
checked when all conditions are met. This is to support
arch-specific kernel config requirements.
Test: libvintf_test
Bug: 64124223
Change-Id: I91ecd115ca42473b79bda24d9b8613eed817e7e2
Merged-In: I91ecd115ca42473b79bda24d9b8613eed817e7e2
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 3c840da..152c441 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -549,14 +549,31 @@
const MatrixHalConverter matrixHalConverter{};
+struct MatrixKernelConditionsConverter : public XmlNodeConverter<std::vector<KernelConfig>> {
+ std::string elementName() const override { return "conditions"; }
+ void mutateNode(const std::vector<KernelConfig>& conds, NodeType* root,
+ DocType* d) const override {
+ appendChildren(root, kernelConfigConverter, conds, d);
+ }
+ bool buildObject(std::vector<KernelConfig>* object, NodeType* root) const override {
+ return parseChildren(root, kernelConfigConverter, object);
+ }
+};
+
+const MatrixKernelConditionsConverter matrixKernelConditionsConverter{};
+
struct MatrixKernelConverter : public XmlNodeConverter<MatrixKernel> {
std::string elementName() const override { return "kernel"; }
void mutateNode(const MatrixKernel &kernel, NodeType *root, DocType *d) const override {
appendAttr(root, "version", kernel.mMinLts);
+ if (!kernel.mConditions.empty()) {
+ appendChild(root, matrixKernelConditionsConverter(kernel.mConditions, d));
+ }
appendChildren(root, kernelConfigConverter, kernel.mConfigs, d);
}
bool buildObject(MatrixKernel *object, NodeType *root) const override {
if (!parseAttr(root, "version", &object->mMinLts) ||
+ !parseOptionalChild(root, matrixKernelConditionsConverter, {}, &object->mConditions) ||
!parseChildren(root, kernelConfigConverter, &object->mConfigs)) {
return false;
}