From 4c00d8eaec9d64aaf1583664f75b504cd768bdb6 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Thu, 10 Sep 2020 18:40:14 -0700 Subject: [PATCH] Add libvintf_fcm_exclude Move exclude list from check_vintf to hardware/interfaces. This is closer to the HALs. A HAL must either be declared in hardware/interfaces/compatibility_matrices or be exempted in hardware/interfaces/compatibility_matrices/exclude. Test: builds Bug: 110261831 Change-Id: I2437d92a97505ab66e47425ac17aa58319702685 --- compatibility_matrices/exclude/Android.bp | 30 +++++++ .../exclude/fcm_exclude.cpp | 81 +++++++++++++++++++ .../exclude/include/vintf/fcm_exclude.h | 30 +++++++ 3 files changed, 141 insertions(+) create mode 100644 compatibility_matrices/exclude/Android.bp create mode 100644 compatibility_matrices/exclude/fcm_exclude.cpp create mode 100644 compatibility_matrices/exclude/include/vintf/fcm_exclude.h diff --git a/compatibility_matrices/exclude/Android.bp b/compatibility_matrices/exclude/Android.bp new file mode 100644 index 0000000000..d7bf63559d --- /dev/null +++ b/compatibility_matrices/exclude/Android.bp @@ -0,0 +1,30 @@ +// Copyright (C) 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_library_host_static { + name: "libvintf_fcm_exclude", + cflags: [ + "-Wall", + "-Werror", + ], + static_libs: [ + "libbase", + ], + export_include_dirs: [ + "include", + ], + srcs: [ + "fcm_exclude.cpp", + ], +} diff --git a/compatibility_matrices/exclude/fcm_exclude.cpp b/compatibility_matrices/exclude/fcm_exclude.cpp new file mode 100644 index 0000000000..7a6ea2b476 --- /dev/null +++ b/compatibility_matrices/exclude/fcm_exclude.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include + +namespace android::vintf::details { + +// The predicate to VintfObject::checkMissingHalsInMatrices. +bool ShouldCheckMissingHalsInFcm(const std::string& package) { + using std::placeholders::_1; + + static std::vector included_prefixes{ + // Other AOSP HALs (e.g. android.frameworks.*) are not added because only framework + // matrix is checked. + "android.hardware.", + }; + + static std::vector excluded_prefixes{ + // TODO(b/110261831): reduce items in this list + "android.hardware.gnss.measurement_corrections@", + "android.hardware.graphics.bufferqueue@", + + // Exempted. + "android.hardware.camera.device@", + "android.hardware.tests.", + }; + + static std::vector excluded_exact{ + // TODO(b/110261831): reduce items in this list + "android.hardware.audio@7.0", + "android.hardware.audio.effect@7.0", + "android.hardware.biometrics.fingerprint@2.3", + "android.hardware.cas.native@1.0", + "android.hardware.fastboot@1.0", + "android.hardware.gnss.visibility_control@1.0", + "android.hardware.media.bufferpool@1.0", + "android.hardware.media.bufferpool@2.0", + "android.hardware.radio.config@1.2", + "android.hardware.tv.cec@2.0", + "android.hardware.tv.tuner@1.0", + "android.hardware.keymaster", + + // Exempted + "android.hardware.common", + "android.hardware.graphics.common", + }; + + auto package_has_prefix = [&](const std::string& prefix) { + return android::base::StartsWith(package, prefix); + }; + + // Only check packageAndVersions that are in the include list and not in the exclude list. + if (!std::any_of(included_prefixes.begin(), included_prefixes.end(), package_has_prefix)) { + return false; + } + + if (std::find(excluded_exact.begin(), excluded_exact.end(), package) != excluded_exact.end()) { + return false; + } + + return !std::any_of(excluded_prefixes.begin(), excluded_prefixes.end(), package_has_prefix); +} + +} // namespace android::vintf::details diff --git a/compatibility_matrices/exclude/include/vintf/fcm_exclude.h b/compatibility_matrices/exclude/include/vintf/fcm_exclude.h new file mode 100644 index 0000000000..f74c2172e9 --- /dev/null +++ b/compatibility_matrices/exclude/include/vintf/fcm_exclude.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include + +namespace android::vintf::details { + +// Determine whether VINTF checks |package| is missing from FCMs. +// |package| can be a HIDL package and version like +// "android.hardware.foo@1.0", or an AIDL package name like +// "android.hardware.foo". +bool ShouldCheckMissingHalsInFcm(const std::string& package); + +} // namespace android::vintf::details