xref: /aosp_15_r20/system/libvintf/include/vintf/HalManifest.h (revision 70a7ec852fcefd15a4fb57f8f183a8b1c3aacb08)
1*70a7ec85SAndroid Build Coastguard Worker /*
2*70a7ec85SAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*70a7ec85SAndroid Build Coastguard Worker  *
4*70a7ec85SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*70a7ec85SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*70a7ec85SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*70a7ec85SAndroid Build Coastguard Worker  *
8*70a7ec85SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*70a7ec85SAndroid Build Coastguard Worker  *
10*70a7ec85SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*70a7ec85SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*70a7ec85SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*70a7ec85SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*70a7ec85SAndroid Build Coastguard Worker  * limitations under the License.
15*70a7ec85SAndroid Build Coastguard Worker  */
16*70a7ec85SAndroid Build Coastguard Worker 
17*70a7ec85SAndroid Build Coastguard Worker 
18*70a7ec85SAndroid Build Coastguard Worker #ifndef ANDROID_VINTF_HAL_MANIFEST_H
19*70a7ec85SAndroid Build Coastguard Worker #define ANDROID_VINTF_HAL_MANIFEST_H
20*70a7ec85SAndroid Build Coastguard Worker 
21*70a7ec85SAndroid Build Coastguard Worker #include <utils/Errors.h>
22*70a7ec85SAndroid Build Coastguard Worker #include <map>
23*70a7ec85SAndroid Build Coastguard Worker #include <optional>
24*70a7ec85SAndroid Build Coastguard Worker #include <string>
25*70a7ec85SAndroid Build Coastguard Worker #include <vector>
26*70a7ec85SAndroid Build Coastguard Worker 
27*70a7ec85SAndroid Build Coastguard Worker #include <hidl/metadata.h>
28*70a7ec85SAndroid Build Coastguard Worker 
29*70a7ec85SAndroid Build Coastguard Worker #include "CheckFlags.h"
30*70a7ec85SAndroid Build Coastguard Worker #include "FileSystem.h"
31*70a7ec85SAndroid Build Coastguard Worker #include "HalGroup.h"
32*70a7ec85SAndroid Build Coastguard Worker #include "KernelInfo.h"
33*70a7ec85SAndroid Build Coastguard Worker #include "Level.h"
34*70a7ec85SAndroid Build Coastguard Worker #include "ManifestHal.h"
35*70a7ec85SAndroid Build Coastguard Worker #include "ManifestInstance.h"
36*70a7ec85SAndroid Build Coastguard Worker #include "MapValueIterator.h"
37*70a7ec85SAndroid Build Coastguard Worker #include "SchemaType.h"
38*70a7ec85SAndroid Build Coastguard Worker #include "SystemSdk.h"
39*70a7ec85SAndroid Build Coastguard Worker #include "VendorNdk.h"
40*70a7ec85SAndroid Build Coastguard Worker #include "Version.h"
41*70a7ec85SAndroid Build Coastguard Worker #include "Vndk.h"
42*70a7ec85SAndroid Build Coastguard Worker #include "WithFileName.h"
43*70a7ec85SAndroid Build Coastguard Worker #include "XmlFileGroup.h"
44*70a7ec85SAndroid Build Coastguard Worker #include "constants.h"
45*70a7ec85SAndroid Build Coastguard Worker 
46*70a7ec85SAndroid Build Coastguard Worker namespace android {
47*70a7ec85SAndroid Build Coastguard Worker namespace vintf {
48*70a7ec85SAndroid Build Coastguard Worker 
49*70a7ec85SAndroid Build Coastguard Worker struct MatrixHal;
50*70a7ec85SAndroid Build Coastguard Worker struct CompatibilityMatrix;
51*70a7ec85SAndroid Build Coastguard Worker 
52*70a7ec85SAndroid Build Coastguard Worker namespace details {
53*70a7ec85SAndroid Build Coastguard Worker using InstancesOfVersion =
54*70a7ec85SAndroid Build Coastguard Worker     std::map<std::string /* interface */, std::set<std::string /* instance */>>;
55*70a7ec85SAndroid Build Coastguard Worker using Instances = std::map<Version, InstancesOfVersion>;
56*70a7ec85SAndroid Build Coastguard Worker 
57*70a7ec85SAndroid Build Coastguard Worker class CheckVintfUtils;
58*70a7ec85SAndroid Build Coastguard Worker class FmOnlyVintfObject;
59*70a7ec85SAndroid Build Coastguard Worker 
60*70a7ec85SAndroid Build Coastguard Worker }  // namespace details
61*70a7ec85SAndroid Build Coastguard Worker 
62*70a7ec85SAndroid Build Coastguard Worker // A HalManifest is reported by the hardware and query-able from
63*70a7ec85SAndroid Build Coastguard Worker // framework code. This is the API for the framework.
64*70a7ec85SAndroid Build Coastguard Worker struct HalManifest : public HalGroup<ManifestHal>,
65*70a7ec85SAndroid Build Coastguard Worker                      public XmlFileGroup<ManifestXmlFile>,
66*70a7ec85SAndroid Build Coastguard Worker                      public WithFileName {
67*70a7ec85SAndroid Build Coastguard Worker    public:
68*70a7ec85SAndroid Build Coastguard Worker 
69*70a7ec85SAndroid Build Coastguard Worker     // Construct a device HAL manifest.
HalManifestHalManifest70*70a7ec85SAndroid Build Coastguard Worker     HalManifest() : mType(SchemaType::DEVICE) {}
71*70a7ec85SAndroid Build Coastguard Worker 
72*70a7ec85SAndroid Build Coastguard Worker     bool add(ManifestHal&& hal, std::string* error = nullptr);
73*70a7ec85SAndroid Build Coastguard Worker     // Move all hals from another HalManifest to this.
74*70a7ec85SAndroid Build Coastguard Worker     bool addAllHals(HalManifest* other, std::string* error = nullptr);
75*70a7ec85SAndroid Build Coastguard Worker 
76*70a7ec85SAndroid Build Coastguard Worker     // Given a component name (e.g. "android.hardware.camera"),
77*70a7ec85SAndroid Build Coastguard Worker     // return getHal(name)->transport if the component exist and v exactly matches
78*70a7ec85SAndroid Build Coastguard Worker     // one of the versions in that component, else EMPTY
79*70a7ec85SAndroid Build Coastguard Worker     Transport getHidlTransport(const std::string& name, const Version& v,
80*70a7ec85SAndroid Build Coastguard Worker                                const std::string& interfaceName,
81*70a7ec85SAndroid Build Coastguard Worker                                const std::string& instanceName) const;
82*70a7ec85SAndroid Build Coastguard Worker 
83*70a7ec85SAndroid Build Coastguard Worker     // Check compatibility against a compatibility matrix. Considered compatible if
84*70a7ec85SAndroid Build Coastguard Worker     // - framework manifest vs. device compat-mat
85*70a7ec85SAndroid Build Coastguard Worker     //     - checkIncompatibility for HALs returns only optional HALs
86*70a7ec85SAndroid Build Coastguard Worker     //     - one of manifest.vndk match compat-mat.vndk
87*70a7ec85SAndroid Build Coastguard Worker     // - device manifest vs. framework compat-mat
88*70a7ec85SAndroid Build Coastguard Worker     //     - checkIncompatibility for HALs returns only optional HALs
89*70a7ec85SAndroid Build Coastguard Worker     //     - manifest.sepolicy.version match one of compat-mat.sepolicy.sepolicy-version
90*70a7ec85SAndroid Build Coastguard Worker     bool checkCompatibility(const CompatibilityMatrix& mat, std::string* error = nullptr,
91*70a7ec85SAndroid Build Coastguard Worker                             CheckFlags::Type flags = CheckFlags::DEFAULT) const;
92*70a7ec85SAndroid Build Coastguard Worker 
93*70a7ec85SAndroid Build Coastguard Worker     // Generate a compatibility matrix such that checkCompatibility will return true.
94*70a7ec85SAndroid Build Coastguard Worker     CompatibilityMatrix generateCompatibleMatrix(bool optional = true) const;
95*70a7ec85SAndroid Build Coastguard Worker 
96*70a7ec85SAndroid Build Coastguard Worker     // Returns all component names.
97*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getHalNames() const;
98*70a7ec85SAndroid Build Coastguard Worker 
99*70a7ec85SAndroid Build Coastguard Worker     // Returns all component names and versions, e.g.
100*70a7ec85SAndroid Build Coastguard Worker     // "[email protected]", "[email protected]",
101*70a7ec85SAndroid Build Coastguard Worker     // "[email protected]"]
102*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getHalNamesAndVersions() const;
103*70a7ec85SAndroid Build Coastguard Worker 
104*70a7ec85SAndroid Build Coastguard Worker     // Type of the manifest. FRAMEWORK or DEVICE.
105*70a7ec85SAndroid Build Coastguard Worker     SchemaType type() const;
106*70a7ec85SAndroid Build Coastguard Worker     void setType(SchemaType type);
107*70a7ec85SAndroid Build Coastguard Worker 
108*70a7ec85SAndroid Build Coastguard Worker     // FCM version that it implements.
109*70a7ec85SAndroid Build Coastguard Worker     Level level() const;
110*70a7ec85SAndroid Build Coastguard Worker 
111*70a7ec85SAndroid Build Coastguard Worker     // device.mSepolicyVersion. Assume type == device.
112*70a7ec85SAndroid Build Coastguard Worker     // Abort if type != device.
113*70a7ec85SAndroid Build Coastguard Worker     const SepolicyVersion& sepolicyVersion() const;
114*70a7ec85SAndroid Build Coastguard Worker 
115*70a7ec85SAndroid Build Coastguard Worker     // framework.mVendorNdks. Assume type == framework.
116*70a7ec85SAndroid Build Coastguard Worker     // Abort if type != framework.
117*70a7ec85SAndroid Build Coastguard Worker     const std::vector<VendorNdk>& vendorNdks() const;
118*70a7ec85SAndroid Build Coastguard Worker 
119*70a7ec85SAndroid Build Coastguard Worker     // If the corresponding <xmlfile> with the given version exists,
120*70a7ec85SAndroid Build Coastguard Worker     // - Return the overridden <path> if it is present,
121*70a7ec85SAndroid Build Coastguard Worker     // - otherwise the default value: /{system,vendor}/etc/<name>_V<major>_<minor>.xml
122*70a7ec85SAndroid Build Coastguard Worker     // Otherwise if the <xmlfile> entry does not exist, "" is returned.
123*70a7ec85SAndroid Build Coastguard Worker     std::string getXmlFilePath(const std::string& xmlFileName, const Version& version) const;
124*70a7ec85SAndroid Build Coastguard Worker 
125*70a7ec85SAndroid Build Coastguard Worker     // Alternative to forEachInstance if you just need a set of instance names instead.
126*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getHidlInstances(const std::string& package, const Version& version,
127*70a7ec85SAndroid Build Coastguard Worker                                            const std::string& interfaceName) const;
128*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getAidlInstances(const std::string& package, size_t version,
129*70a7ec85SAndroid Build Coastguard Worker                                            const std::string& interfaceName) const;
130*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getAidlInstances(const std::string& package,
131*70a7ec85SAndroid Build Coastguard Worker                                            const std::string& interfaceName) const;
132*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getNativeInstances(const std::string& package) const;
133*70a7ec85SAndroid Build Coastguard Worker 
134*70a7ec85SAndroid Build Coastguard Worker     // Return whether instance is in getHidlInstances(...).
135*70a7ec85SAndroid Build Coastguard Worker     bool hasHidlInstance(const std::string& package, const Version& version,
136*70a7ec85SAndroid Build Coastguard Worker                          const std::string& interfaceName, const std::string& instance) const;
137*70a7ec85SAndroid Build Coastguard Worker 
138*70a7ec85SAndroid Build Coastguard Worker     // Return whether a given AIDL instance is in this manifest with version >= the given version.
139*70a7ec85SAndroid Build Coastguard Worker     bool hasAidlInstance(const std::string& package, size_t version,
140*70a7ec85SAndroid Build Coastguard Worker                          const std::string& interfaceName, const std::string& instance) const;
141*70a7ec85SAndroid Build Coastguard Worker 
142*70a7ec85SAndroid Build Coastguard Worker     // Return whether a given AIDL instance is in this manifest with any version.
143*70a7ec85SAndroid Build Coastguard Worker     bool hasAidlInstance(const std::string& package, const std::string& interfaceName,
144*70a7ec85SAndroid Build Coastguard Worker                          const std::string& instance) const;
145*70a7ec85SAndroid Build Coastguard Worker 
146*70a7ec85SAndroid Build Coastguard Worker     // Return whether a given native instance is in getNativeInstances(...).
147*70a7ec85SAndroid Build Coastguard Worker     bool hasNativeInstance(const std::string& package, const std::string& instance) const;
148*70a7ec85SAndroid Build Coastguard Worker 
149*70a7ec85SAndroid Build Coastguard Worker     // Insert the given instance. After inserting it, the instance will be available via
150*70a7ec85SAndroid Build Coastguard Worker     // forEachInstance* functions. This modifies the manifest.
151*70a7ec85SAndroid Build Coastguard Worker     // Return whether this operation is successful.
152*70a7ec85SAndroid Build Coastguard Worker     bool insertInstance(const FqInstance& fqInstance, Transport transport, Arch arch, HalFormat fmt,
153*70a7ec85SAndroid Build Coastguard Worker                         std::string* error = nullptr);
154*70a7ec85SAndroid Build Coastguard Worker 
155*70a7ec85SAndroid Build Coastguard Worker     // Add everything from another manifest. If no errors (return true), it is guaranteed
156*70a7ec85SAndroid Build Coastguard Worker     // that other->empty() == true after execution.
157*70a7ec85SAndroid Build Coastguard Worker     [[nodiscard]] bool addAll(HalManifest* other, std::string* error = nullptr);
158*70a7ec85SAndroid Build Coastguard Worker 
159*70a7ec85SAndroid Build Coastguard Worker    protected:
160*70a7ec85SAndroid Build Coastguard Worker     // Check before add()
161*70a7ec85SAndroid Build Coastguard Worker     bool shouldAdd(const ManifestHal& toAdd, std::string* error) const;
162*70a7ec85SAndroid Build Coastguard Worker     bool shouldAddXmlFile(const ManifestXmlFile& toAdd) const override;
163*70a7ec85SAndroid Build Coastguard Worker 
164*70a7ec85SAndroid Build Coastguard Worker     bool forEachInstanceOfVersion(
165*70a7ec85SAndroid Build Coastguard Worker         HalFormat format, ExclusiveTo exclusiveTo, const std::string& package,
166*70a7ec85SAndroid Build Coastguard Worker         const Version& expectVersion,
167*70a7ec85SAndroid Build Coastguard Worker         const std::function<bool(const ManifestInstance&)>& func) const override;
168*70a7ec85SAndroid Build Coastguard Worker 
169*70a7ec85SAndroid Build Coastguard Worker     bool forEachNativeInstance(const std::string& package,
170*70a7ec85SAndroid Build Coastguard Worker                                const std::function<bool(const ManifestInstance&)>& func) const;
171*70a7ec85SAndroid Build Coastguard Worker 
172*70a7ec85SAndroid Build Coastguard Worker    private:
173*70a7ec85SAndroid Build Coastguard Worker     friend struct HalManifestConverter;
174*70a7ec85SAndroid Build Coastguard Worker     friend class VintfObject;
175*70a7ec85SAndroid Build Coastguard Worker     friend class AssembleVintfImpl;
176*70a7ec85SAndroid Build Coastguard Worker     friend class details::CheckVintfUtils;
177*70a7ec85SAndroid Build Coastguard Worker     friend struct LibVintfTest;
178*70a7ec85SAndroid Build Coastguard Worker     friend class details::FmOnlyVintfObject;
179*70a7ec85SAndroid Build Coastguard Worker     friend std::string dump(const HalManifest &vm);
180*70a7ec85SAndroid Build Coastguard Worker     friend bool operator==(const HalManifest &lft, const HalManifest &rgt);
181*70a7ec85SAndroid Build Coastguard Worker 
182*70a7ec85SAndroid Build Coastguard Worker     status_t fetchAllInformation(const FileSystem* fileSystem, const std::string& path,
183*70a7ec85SAndroid Build Coastguard Worker                                  std::string* error = nullptr);
184*70a7ec85SAndroid Build Coastguard Worker 
185*70a7ec85SAndroid Build Coastguard Worker     details::Instances expandInstances(const std::string& name) const;
186*70a7ec85SAndroid Build Coastguard Worker     // Check if all instances in matrixHal is supported in this manifest.
187*70a7ec85SAndroid Build Coastguard Worker     bool isCompatible(const details::Instances& instances, const MatrixHal& matrixHal) const;
188*70a7ec85SAndroid Build Coastguard Worker 
189*70a7ec85SAndroid Build Coastguard Worker     // Return a list of error messages (for each <hal> name) that does NOT conform to
190*70a7ec85SAndroid Build Coastguard Worker     // the given compatibility matrix. It does not contain components that are optional.
191*70a7ec85SAndroid Build Coastguard Worker     // That is, return empty list iff
192*70a7ec85SAndroid Build Coastguard Worker     // (instance in matrix) => (instance in manifest).
193*70a7ec85SAndroid Build Coastguard Worker     std::vector<std::string> checkIncompatibleHals(const CompatibilityMatrix& mat) const;
194*70a7ec85SAndroid Build Coastguard Worker 
195*70a7ec85SAndroid Build Coastguard Worker     void removeHals(const std::string& name, size_t majorVer);
196*70a7ec85SAndroid Build Coastguard Worker 
197*70a7ec85SAndroid Build Coastguard Worker     // Returns a list of instance names that are in this manifest but
198*70a7ec85SAndroid Build Coastguard Worker     // are not specified in the given matrix, whether the HAL is specified as an optional or
199*70a7ec85SAndroid Build Coastguard Worker     // required HAL.
200*70a7ec85SAndroid Build Coastguard Worker     // That is, return empty list iff
201*70a7ec85SAndroid Build Coastguard Worker     // (instance in manifest) => (instance in matrix).
202*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> checkUnusedHals(
203*70a7ec85SAndroid Build Coastguard Worker         const CompatibilityMatrix& mat,
204*70a7ec85SAndroid Build Coastguard Worker         const std::vector<HidlInterfaceMetadata>& hidlMetadata) const;
205*70a7ec85SAndroid Build Coastguard Worker 
206*70a7ec85SAndroid Build Coastguard Worker     // Check that manifest has no entries.
207*70a7ec85SAndroid Build Coastguard Worker     bool empty() const;
208*70a7ec85SAndroid Build Coastguard Worker 
209*70a7ec85SAndroid Build Coastguard Worker     // Alternative to forEachInstance if you just need a set of instance names instead.
210*70a7ec85SAndroid Build Coastguard Worker     std::set<std::string> getInstances(HalFormat format, ExclusiveTo exclusiveTo,
211*70a7ec85SAndroid Build Coastguard Worker                                        const std::string& package, const Version& version,
212*70a7ec85SAndroid Build Coastguard Worker                                        const std::string& interfaceName) const;
213*70a7ec85SAndroid Build Coastguard Worker 
214*70a7ec85SAndroid Build Coastguard Worker     // Return whether instance is in getInstances(...).
215*70a7ec85SAndroid Build Coastguard Worker     bool hasInstance(HalFormat format, ExclusiveTo exclusiveTo, const std::string& package,
216*70a7ec85SAndroid Build Coastguard Worker                      const Version& version, const std::string& interfaceName,
217*70a7ec85SAndroid Build Coastguard Worker                      const std::string& instance) const;
218*70a7ec85SAndroid Build Coastguard Worker 
219*70a7ec85SAndroid Build Coastguard Worker     // Get the <kernel> tag. Assumes type() == DEVICE.
220*70a7ec85SAndroid Build Coastguard Worker     // - On host, <kernel> tag only exists for the fully assembled HAL manifest.
221*70a7ec85SAndroid Build Coastguard Worker     // - On device, this only contain information about level(). Other information should be
222*70a7ec85SAndroid Build Coastguard Worker     //   looked up via RuntimeInfo.
223*70a7ec85SAndroid Build Coastguard Worker     const std::optional<KernelInfo>& kernel() const;
224*70a7ec85SAndroid Build Coastguard Worker 
225*70a7ec85SAndroid Build Coastguard Worker     // Merge information of other to this.
226*70a7ec85SAndroid Build Coastguard Worker     bool mergeKernel(std::optional<KernelInfo>* other, std::string* error = nullptr);
227*70a7ec85SAndroid Build Coastguard Worker 
228*70a7ec85SAndroid Build Coastguard Worker     // Whether the manifest contains information about the kernel for compatibility checks.
229*70a7ec85SAndroid Build Coastguard Worker     // True if kernel()->checkCompatibility can be called.
230*70a7ec85SAndroid Build Coastguard Worker     bool shouldCheckKernelCompatibility() const;
231*70a7ec85SAndroid Build Coastguard Worker 
232*70a7ec85SAndroid Build Coastguard Worker     // Helper for shouldAdd(). Check if |hal| has a conflicting major version with this. Return
233*70a7ec85SAndroid Build Coastguard Worker     // false if hal should not be added, and set |error| accordingly. Return true if check passes.
234*70a7ec85SAndroid Build Coastguard Worker     bool addingConflictingMajorVersion(const ManifestHal& hal, std::string* error) const;
235*70a7ec85SAndroid Build Coastguard Worker 
236*70a7ec85SAndroid Build Coastguard Worker     // Helper for shouldAdd(). Check if |hal| has a conflicting major version in <fqname> with this.
237*70a7ec85SAndroid Build Coastguard Worker     // Return false if hal should not be added, and set |error| accordingly. Return true if check
238*70a7ec85SAndroid Build Coastguard Worker     // passes.
239*70a7ec85SAndroid Build Coastguard Worker     bool addingConflictingFqInstance(const ManifestHal& hal, std::string* error) const;
240*70a7ec85SAndroid Build Coastguard Worker 
241*70a7ec85SAndroid Build Coastguard Worker     // Inferred kernel level.
242*70a7ec85SAndroid Build Coastguard Worker     Level inferredKernelLevel() const;
243*70a7ec85SAndroid Build Coastguard Worker 
244*70a7ec85SAndroid Build Coastguard Worker     SchemaType mType;
245*70a7ec85SAndroid Build Coastguard Worker     Level mLevel = Level::UNSPECIFIED;
246*70a7ec85SAndroid Build Coastguard Worker 
247*70a7ec85SAndroid Build Coastguard Worker     // The metaversion on the source file if the HAL manifest is parsed from an XML file,
248*70a7ec85SAndroid Build Coastguard Worker     // Otherwise, the object is created programmatically, so default to libvintf meta version.
249*70a7ec85SAndroid Build Coastguard Worker     Version mSourceMetaVersion = kMetaVersion;
250*70a7ec85SAndroid Build Coastguard Worker 
251*70a7ec85SAndroid Build Coastguard Worker     // entries for device hal manifest only
252*70a7ec85SAndroid Build Coastguard Worker     struct {
253*70a7ec85SAndroid Build Coastguard Worker         SepolicyVersion mSepolicyVersion;
254*70a7ec85SAndroid Build Coastguard Worker         std::optional<KernelInfo> mKernel;
255*70a7ec85SAndroid Build Coastguard Worker     } device;
256*70a7ec85SAndroid Build Coastguard Worker 
257*70a7ec85SAndroid Build Coastguard Worker     // entries for framework hal manifest only
258*70a7ec85SAndroid Build Coastguard Worker     struct {
259*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic push
260*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wdeprecated-declarations"
261*70a7ec85SAndroid Build Coastguard Worker         std::vector<Vndk> mVndks;
262*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic pop
263*70a7ec85SAndroid Build Coastguard Worker 
264*70a7ec85SAndroid Build Coastguard Worker         std::vector<VendorNdk> mVendorNdks;
265*70a7ec85SAndroid Build Coastguard Worker         SystemSdk mSystemSdk;
266*70a7ec85SAndroid Build Coastguard Worker     } framework;
267*70a7ec85SAndroid Build Coastguard Worker };
268*70a7ec85SAndroid Build Coastguard Worker 
269*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf
270*70a7ec85SAndroid Build Coastguard Worker } // namespace android
271*70a7ec85SAndroid Build Coastguard Worker 
272*70a7ec85SAndroid Build Coastguard Worker #endif // ANDROID_VINTF_HAL_MANIFEST_H
273