Add manifest kernel FCM version

Add target-level attribute to manifest.kernel. A device manifest
can specify this attribute to specify the kernel requirements which
FCM version it conforms to.

This CL adds parsing code for the target-level attribute.

Test: libvintf_test
Bug: 139309488

Change-Id: Ibd29e0778432d046e06345d8c6e22656773819c2
diff --git a/parse_xml.cpp b/parse_xml.cpp
index eedfa1a..9b2da7f 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -949,12 +949,16 @@
         if (o.version() != KernelVersion{}) {
             appendAttr(root, "version", o.version());
         }
+        if (o.level() != Level::UNSPECIFIED) {
+            appendAttr(root, "target-level", o.level());
+        }
         if (flags.isKernelConfigsEnabled()) {
             appendChildren(root, kernelConfigConverter, o.configs(), d);
         }
     }
     bool buildObject(KernelInfo* o, NodeType* root, std::string* error) const override {
         return parseOptionalAttr(root, "version", {}, &o->mVersion, error) &&
+               parseOptionalAttr(root, "target-level", Level::UNSPECIFIED, &o->mLevel, error) &&
                parseChildren(root, kernelConfigConverter, &o->mConfigs, error);
     }
 };