forked from msft-mirror-aosp/platform.prebuilts.sdk
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathutils.bzl
130 lines (119 loc) · 4.58 KB
/
utils.bzl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Copyright (C) 2023 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.
"""Constants and utility functions relating to prebuilt SDKs.
"""
load("//build/bazel/rules/common:api.bzl", "api")
load("//build/bazel/rules/common:sdk_version.bzl", "sdk_version")
# The highest numbered directory under prebuilts/sdk that provides an android.jar
_MAX_API_LEVEL = 34
# All api levels that have a prebuilt SDK.
_API_LEVELS = list(range(4, _MAX_API_LEVEL + 1)) + [api.FUTURE_API_LEVEL]
def _available_kinds_for_api_level(api_level):
"""Return the available SDK kinds (or scopes) under the given api level directory."""
if api_level not in _API_LEVELS:
fail("api_level %s is not one of %s" % (api_level, _API_LEVELS.join(",")))
if api_level == api.FUTURE_API_LEVEL:
return [
sdk_version.KIND_PUBLIC,
sdk_version.KIND_SYSTEM,
sdk_version.KIND_TEST,
sdk_version.KIND_SYSTEM_SERVER,
sdk_version.KIND_MODULE,
sdk_version.KIND_CORE,
]
if api_level <= 20:
return [sdk_version.KIND_PUBLIC]
if api_level <= 28:
return [
sdk_version.KIND_PUBLIC,
sdk_version.KIND_SYSTEM,
]
if api_level == 29:
return [
sdk_version.KIND_PUBLIC,
sdk_version.KIND_SYSTEM,
sdk_version.KIND_TEST,
]
return [
sdk_version.KIND_PUBLIC,
sdk_version.KIND_SYSTEM,
sdk_version.KIND_TEST,
sdk_version.KIND_SYSTEM_SERVER,
sdk_version.KIND_MODULE,
]
# core-for-system-modules public starts at v30, module starts at v33.
def _available_core_kinds_for_api_level(api_level):
"""Return all core module kinds available for a given api level."""
if api_level not in _API_LEVELS:
fail("api_level %s is not one of %s" % (api_level, _API_LEVELS.join(",")))
if api_level == api.FUTURE_API_LEVEL:
return [
sdk_version.KIND_PUBLIC,
sdk_version.KIND_MODULE,
]
if api_level <= 29:
return []
if api_level <= 32:
return [sdk_version.KIND_PUBLIC]
return [
sdk_version.KIND_PUBLIC,
sdk_version.KIND_MODULE,
]
def _to_core_kind(kind, api_level):
"""Returns the core kind corresponding to the input kind and api level."""
if api_level not in _API_LEVELS:
fail("api_level %s is not one of %s" % (api_level, _API_LEVELS.join(",")))
if api_level == api.FUTURE_API_LEVEL:
return (
sdk_version.KIND_MODULE if kind in (
sdk_version.KIND_MODULE,
sdk_version.KIND_SYSTEM_SERVER,
) else sdk_version.KIND_PUBLIC
)
if api_level <= 29:
return None
if api_level <= 32:
return sdk_version.KIND_PUBLIC
return (
sdk_version.KIND_MODULE if kind in (
sdk_version.KIND_MODULE,
sdk_version.KIND_SYSTEM_SERVER,
) else sdk_version.KIND_PUBLIC
)
def _to_aidl_kind(kind, api_level):
"""Returns the best available framework.aidl prebuilt kind for the given kind X api level."""
if api_level not in _API_LEVELS:
fail("api_level %s is not one of %s" % (api_level, _API_LEVELS.join(",")))
if api_level == api.FUTURE_API_LEVEL:
return sdk_version.KIND_PUBLIC
# Only 23 and 28 provide framework.aidl for system.
if api_level in (23, 28) and kind == sdk_version.KIND_SYSTEM:
return sdk_version.KIND_SYSTEM
return sdk_version.KIND_PUBLIC
def _to_kind_dir(kind):
"""Maps kind as specified in sdk_version with the corresponding directory under prebuilt/sdk"""
if kind == sdk_version.KIND_MODULE:
return "module-lib"
if kind == sdk_version.KIND_SYSTEM_SERVER:
return "system-server"
return kind
prebuilt_sdk_utils = struct(
MAX_API_LEVEL = _MAX_API_LEVEL,
API_LEVELS = _API_LEVELS,
available_kinds_for_api_level = _available_kinds_for_api_level,
available_core_kinds_for_api_level = _available_core_kinds_for_api_level,
to_core_kind = _to_core_kind,
to_aidl_kind = _to_aidl_kind,
to_kind_dir = _to_kind_dir,
)