xref: /aosp_15_r20/test/vts/vndk_utils/vndk/vndk_utils.py (revision 9a74111979c139a065a9a7e4d45972320c5732c7)
1*9a741119SAndroid Build Coastguard Worker#
2*9a741119SAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project
3*9a741119SAndroid Build Coastguard Worker#
4*9a741119SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*9a741119SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*9a741119SAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*9a741119SAndroid Build Coastguard Worker#
8*9a741119SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*9a741119SAndroid Build Coastguard Worker#
10*9a741119SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*9a741119SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*9a741119SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*9a741119SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*9a741119SAndroid Build Coastguard Worker# limitations under the License.
15*9a741119SAndroid Build Coastguard Worker#
16*9a741119SAndroid Build Coastguard Worker
17*9a741119SAndroid Build Coastguard Workerimport logging
18*9a741119SAndroid Build Coastguard Worker
19*9a741119SAndroid Build Coastguard Workerfrom vts.utils.python.android import api
20*9a741119SAndroid Build Coastguard Worker
21*9a741119SAndroid Build Coastguard Worker
22*9a741119SAndroid Build Coastguard Workerdef IsVndkRuntimeEnforced(dut):
23*9a741119SAndroid Build Coastguard Worker    """Returns whether VNDK run-time enforcement is enabled on the device.
24*9a741119SAndroid Build Coastguard Worker
25*9a741119SAndroid Build Coastguard Worker    VNDK run-time enforcement is optional in O-MR1 (API 27); mandatory after P.
26*9a741119SAndroid Build Coastguard Worker    If VNDK run-time enforcement is disabled, the system property named
27*9a741119SAndroid Build Coastguard Worker    ro.vndk.lite must be set to true. The usage of this function is to decide
28*9a741119SAndroid Build Coastguard Worker    whether to skip VNDK test cases.
29*9a741119SAndroid Build Coastguard Worker
30*9a741119SAndroid Build Coastguard Worker    Args:
31*9a741119SAndroid Build Coastguard Worker        dut: The AndroidDevice under test.
32*9a741119SAndroid Build Coastguard Worker
33*9a741119SAndroid Build Coastguard Worker    Returns:
34*9a741119SAndroid Build Coastguard Worker        A boolean, whether VNDK runtime should be enabled.
35*9a741119SAndroid Build Coastguard Worker    """
36*9a741119SAndroid Build Coastguard Worker    api_level = dut.getLaunchApiLevel(strict=False)
37*9a741119SAndroid Build Coastguard Worker    if not api_level:
38*9a741119SAndroid Build Coastguard Worker        logging.error("Cannot get first API level. "
39*9a741119SAndroid Build Coastguard Worker                      "Assume VNDK runtime to be enforced.")
40*9a741119SAndroid Build Coastguard Worker        return True
41*9a741119SAndroid Build Coastguard Worker    if api_level <= api.PLATFORM_API_LEVEL_O_MR1:
42*9a741119SAndroid Build Coastguard Worker        return not dut.vndk_lite
43*9a741119SAndroid Build Coastguard Worker    # For P-launching devices, VNDK run-time enforcement is mandatory.
44*9a741119SAndroid Build Coastguard Worker    return True
45*9a741119SAndroid Build Coastguard Worker
46*9a741119SAndroid Build Coastguard Worker
47*9a741119SAndroid Build Coastguard Workerdef IsVndkRequired(dut):
48*9a741119SAndroid Build Coastguard Worker    """Returns whether the device's vendor partition requires VNDK.
49*9a741119SAndroid Build Coastguard Worker
50*9a741119SAndroid Build Coastguard Worker    VNDK libraries are moved from system to vendor partition in V version. If
51*9a741119SAndroid Build Coastguard Worker    a device does not require VNDK, it does not define ro.vndk.version.
52*9a741119SAndroid Build Coastguard Worker
53*9a741119SAndroid Build Coastguard Worker    Args:
54*9a741119SAndroid Build Coastguard Worker        dut: The AndroidDevice under test.
55*9a741119SAndroid Build Coastguard Worker
56*9a741119SAndroid Build Coastguard Worker    Returns:
57*9a741119SAndroid Build Coastguard Worker        A boolean, whether VNDK is required.
58*9a741119SAndroid Build Coastguard Worker    """
59*9a741119SAndroid Build Coastguard Worker    return bool(dut.GetVndkVersion())
60*9a741119SAndroid Build Coastguard Worker
61*9a741119SAndroid Build Coastguard Worker
62*9a741119SAndroid Build Coastguard Workerdef IsVndkInstalledInVendor(dut):
63*9a741119SAndroid Build Coastguard Worker    """Returns whether the device's VNDK should be installed in vendor.
64*9a741119SAndroid Build Coastguard Worker
65*9a741119SAndroid Build Coastguard Worker    VNDK libraries are moved from system to vendor partition in V version.
66*9a741119SAndroid Build Coastguard Worker    VNDK 35 should be installed in vendor partiton.
67*9a741119SAndroid Build Coastguard Worker
68*9a741119SAndroid Build Coastguard Worker    Args:
69*9a741119SAndroid Build Coastguard Worker        dut: The AndroidDevice under test.
70*9a741119SAndroid Build Coastguard Worker
71*9a741119SAndroid Build Coastguard Worker    Returns:
72*9a741119SAndroid Build Coastguard Worker        A boolean, whether VNDK should be installed in vendor partition.
73*9a741119SAndroid Build Coastguard Worker    """
74*9a741119SAndroid Build Coastguard Worker    try:
75*9a741119SAndroid Build Coastguard Worker        return int(dut.GetVndkVersion()) > 34
76*9a741119SAndroid Build Coastguard Worker    except ValueError:
77*9a741119SAndroid Build Coastguard Worker        return False
78*9a741119SAndroid Build Coastguard Worker
79*9a741119SAndroid Build Coastguard Worker
80*9a741119SAndroid Build Coastguard Workerdef FormatVndkPath(pattern, bitness, version=""):
81*9a741119SAndroid Build Coastguard Worker    """Formats a VNDK path.
82*9a741119SAndroid Build Coastguard Worker
83*9a741119SAndroid Build Coastguard Worker    Args:
84*9a741119SAndroid Build Coastguard Worker        pattern: The path pattern containing {LIB} and {VER}.
85*9a741119SAndroid Build Coastguard Worker        bitness: A string or an integer, 32 or 64.
86*9a741119SAndroid Build Coastguard Worker        version: A string, the VNDK version.
87*9a741119SAndroid Build Coastguard Worker
88*9a741119SAndroid Build Coastguard Worker    Returns:
89*9a741119SAndroid Build Coastguard Worker        A string, the formatted path.
90*9a741119SAndroid Build Coastguard Worker    """
91*9a741119SAndroid Build Coastguard Worker    return pattern.format(LIB=("lib64" if str(bitness) == "64" else "lib"),
92*9a741119SAndroid Build Coastguard Worker                          VER=version)
93*9a741119SAndroid Build Coastguard Worker
94*9a741119SAndroid Build Coastguard Worker
95*9a741119SAndroid Build Coastguard Workerdef GetVndkDirectory(bitness, version):
96*9a741119SAndroid Build Coastguard Worker    """Returns the path to VNDK directory on device.
97*9a741119SAndroid Build Coastguard Worker
98*9a741119SAndroid Build Coastguard Worker    Args:
99*9a741119SAndroid Build Coastguard Worker        bitness: A string or an integer, 32 or 64.
100*9a741119SAndroid Build Coastguard Worker        version: A string, the VNDK version.
101*9a741119SAndroid Build Coastguard Worker
102*9a741119SAndroid Build Coastguard Worker    Returns:
103*9a741119SAndroid Build Coastguard Worker        A string, the path to VNDK directory.
104*9a741119SAndroid Build Coastguard Worker    """
105*9a741119SAndroid Build Coastguard Worker    return FormatVndkPath("/apex/com.android.vndk.v{VER}/{LIB}",
106*9a741119SAndroid Build Coastguard Worker                          bitness, version)
107*9a741119SAndroid Build Coastguard Worker
108*9a741119SAndroid Build Coastguard Worker
109*9a741119SAndroid Build Coastguard Workerdef GetVndkExtDirectories(bitness):
110*9a741119SAndroid Build Coastguard Worker    """Returns the paths to VNDK extension directories on device.
111*9a741119SAndroid Build Coastguard Worker
112*9a741119SAndroid Build Coastguard Worker    Args:
113*9a741119SAndroid Build Coastguard Worker        bitness: A string or an integer, 32 or 64.
114*9a741119SAndroid Build Coastguard Worker
115*9a741119SAndroid Build Coastguard Worker    Returns:
116*9a741119SAndroid Build Coastguard Worker        A list of strings, the paths to VNDK extension directories.
117*9a741119SAndroid Build Coastguard Worker    """
118*9a741119SAndroid Build Coastguard Worker    return [FormatVndkPath("/odm/{LIB}/vndk", bitness),
119*9a741119SAndroid Build Coastguard Worker            FormatVndkPath("/vendor/{LIB}/vndk", bitness)]
120*9a741119SAndroid Build Coastguard Worker
121*9a741119SAndroid Build Coastguard Worker
122*9a741119SAndroid Build Coastguard Workerdef GetVndkSpExtDirectories(bitness):
123*9a741119SAndroid Build Coastguard Worker    """Returns the paths to VNDK-SP extension directories on device.
124*9a741119SAndroid Build Coastguard Worker
125*9a741119SAndroid Build Coastguard Worker    Args:
126*9a741119SAndroid Build Coastguard Worker        bitness: A string or an integer, 32 or 64.
127*9a741119SAndroid Build Coastguard Worker
128*9a741119SAndroid Build Coastguard Worker    Returns:
129*9a741119SAndroid Build Coastguard Worker        A list of strings, the paths to VNDK-SP extension directories.
130*9a741119SAndroid Build Coastguard Worker    """
131*9a741119SAndroid Build Coastguard Worker    return [FormatVndkPath("/odm/{LIB}/vndk-sp", bitness),
132*9a741119SAndroid Build Coastguard Worker            FormatVndkPath("/vendor/{LIB}/vndk-sp", bitness)]
133