Add <vendor-ndk> tag to fwk manifest and device matrix
... in place of the old <vndk> tag. The format of this tag is:
- in framework manifest: a string (a number, or VERSION_CODE during
development):
<vendor-ndk>
<version>27</version>
</vendor-ndk>
<vendor-ndk>
<version>P</version>
</vendor-ndk>
- in device matrix: same format, but only one <vendor-ndk> tag.
<vendor-ndk>
<version>27</version>
</vendor-ndk>
Test: libvintf_test
Bug: 36400653
Change-Id: If235e257026d719838076bf0e0a2b42aa8524971
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 3e16b80..9a09eae 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -698,6 +698,8 @@
[[deprecated]]
const XmlTextConverter<VndkVersionRange> vndkVersionRangeConverter{"version"};
+
+const XmlTextConverter<std::string> vndkVersionConverter{"version"};
const XmlTextConverter<std::string> vndkLibraryConverter{"library"};
struct [[deprecated]] VndkConverter : public XmlNodeConverter<Vndk> {
@@ -718,6 +720,23 @@
[[deprecated]]
const VndkConverter vndkConverter{};
+struct VendorNdkConverter : public XmlNodeConverter<VendorNdk> {
+ std::string elementName() const override { return "vendor-ndk"; }
+ void mutateNode(const VendorNdk& object, NodeType* root, DocType* d) const override {
+ appendChild(root, vndkVersionConverter(object.mVersion, d));
+ appendChildren(root, vndkLibraryConverter, object.mLibraries, d);
+ }
+ bool buildObject(VendorNdk* object, NodeType* root) const override {
+ if (!parseChild(root, vndkVersionConverter, &object->mVersion) ||
+ !parseChildren(root, vndkLibraryConverter, &object->mLibraries)) {
+ return false;
+ }
+ return true;
+ }
+};
+
+const VendorNdkConverter vendorNdkConverter{};
+
struct HalManifestSepolicyConverter : public XmlNodeConverter<Version> {
std::string elementName() const override { return "sepolicy"; }
void mutateNode(const Version &m, NodeType *root, DocType *d) const override {
@@ -775,6 +794,8 @@
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
appendChildren(root, vndkConverter, m.framework.mVndks, d);
#pragma clang diagnostic pop
+
+ appendChildren(root, vendorNdkConverter, m.framework.mVendorNdks, d);
}
}
@@ -817,6 +838,10 @@
}
}
#pragma clang diagnostic pop
+
+ if (!parseChildren(root, vendorNdkConverter, &object->framework.mVendorNdks)) {
+ return false;
+ }
}
for (auto &&hal : hals) {
std::string description{hal.name};
@@ -915,6 +940,10 @@
appendChild(root, vndkConverter(m.device.mVndk, d));
}
#pragma clang diagnostic pop
+
+ if (!(m.device.mVendorNdk == VendorNdk{})) {
+ appendChild(root, vendorNdkConverter(m.device.mVendorNdk, d));
+ }
}
}
@@ -963,6 +992,10 @@
return false;
}
#pragma clang diagnostic pop
+
+ if (!parseOptionalChild(root, vendorNdkConverter, {}, &object->device.mVendorNdk)) {
+ return false;
+ }
}
if (!kMetaVersion.minorAtLeast(version)) {