xref: /aosp_15_r20/build/soong/java/core-libraries/Android.bp (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1// Copyright (C) 2021 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//
16// Definitions for building the Android core libraries, i.e. ART, I18n and
17// Conscrypt.
18//
19// These are here as the definitions are used by the build itself and include
20// parts from all three of those modules.
21//
22
23// A stubs target containing the parts of the public SDK API provided by the
24// core libraries.
25//
26// Don't use this directly, use "sdk_version: core_current".
27package {
28    default_applicable_licenses: ["Android-Apache-2.0"],
29}
30
31dist_targets = [
32    "sdk",
33    "win_sdk",
34]
35
36java_defaults {
37    name: "core.current.stubs.defaults",
38    visibility: ["//visibility:public"],
39    sdk_version: "none",
40    system_modules: "none",
41    is_stubs_module: true,
42}
43
44soong_config_module_type {
45    name: "core_current_stubs_soong_config_defaults",
46    module_type: "java_defaults",
47    config_namespace: "ANDROID",
48    bool_variables: [
49        "release_hidden_api_exportable_stubs",
50    ],
51    properties: [
52        "dist.targets",
53        "dist.dest",
54    ],
55}
56
57core_current_stubs_soong_config_defaults {
58    name: "core_current_stubs_everything_soong_config_defaults",
59    soong_config_variables: {
60        release_hidden_api_exportable_stubs: {
61            conditions_default: {
62                dist: {
63                    targets: dist_targets,
64                    dest: "core.current.stubs.jar",
65                },
66            },
67        },
68    },
69}
70
71core_current_stubs_soong_config_defaults {
72    name: "core_current_stubs_exportable_soong_config_defaults",
73    soong_config_variables: {
74        release_hidden_api_exportable_stubs: {
75            dist: {
76                targets: dist_targets,
77                dest: "core.current.stubs.jar",
78            },
79        },
80    },
81}
82
83java_library {
84    name: "core.current.stubs",
85    defaults: [
86        "core.current.stubs.defaults",
87        "core_current_stubs_everything_soong_config_defaults",
88    ],
89    static_libs: [
90        "art.module.public.api.stubs",
91        "conscrypt.module.public.api.stubs",
92        "i18n.module.public.api.stubs",
93    ],
94}
95
96// Used for bootstrapping ART system modules
97java_api_library {
98    name: "core.current.stubs.from-text",
99    defaults: [
100        "core.current.stubs.defaults",
101    ],
102    api_surface: "core",
103    api_contributions: [
104        "art.module.public.api.stubs.source.api.contribution",
105        "conscrypt.module.public.api.stubs.source.api.contribution",
106        "i18n.module.public.api.stubs.source.api.contribution",
107    ],
108    libs: [
109        "stub-annotations",
110    ],
111    enable_validation: false,
112    stubs_type: "everything",
113}
114
115java_library {
116    name: "core.current.stubs.exportable",
117    defaults: [
118        "core.current.stubs.defaults",
119        "core_current_stubs_exportable_soong_config_defaults",
120    ],
121    static_libs: [
122        "art.module.public.api.stubs.exportable",
123        "conscrypt.module.public.api.stubs.exportable",
124        "i18n.module.public.api.stubs.exportable",
125    ],
126}
127
128// Distributed with the SDK for turning into system modules to compile apps
129// against.
130//
131// Also, produces dist files that are used by the
132// prebuilts/sdk/update_prebuilts.py script to update the prebuilts/sdk
133// directory.
134java_library {
135    name: "core-current-stubs-for-system-modules-exportable",
136    visibility: ["//development/sdk"],
137    static_libs: [
138        "core.current.stubs.exportable",
139        // This one is not on device but it's needed when javac compiles code
140        // containing lambdas.
141        "core-lambda-stubs-for-system-modules",
142    ],
143    sdk_version: "none",
144    system_modules: "none",
145    dists: [
146        {
147            // Legacy dist location for the public file.
148            dest: "core-for-system-modules.jar",
149            targets: dist_targets,
150        },
151        {
152            dest: "system-modules/public/core-for-system-modules.jar",
153            targets: dist_targets,
154        },
155    ],
156}
157
158java_library {
159    name: "core-current-stubs-for-system-modules",
160    visibility: ["//development/sdk"],
161    static_libs: [
162        "core.current.stubs",
163        // This one is not on device but it's needed when javac compiles code
164        // containing lambdas.
165        "core-lambda-stubs-for-system-modules",
166    ],
167    sdk_version: "none",
168    system_modules: "none",
169}
170
171// Defaults module to strip out android annotations
172java_defaults {
173    name: "system-modules-no-annotations",
174    sdk_version: "none",
175    system_modules: "none",
176    jarjar_rules: "jarjar-strip-annotations-rules.txt",
177}
178
179// Same as core-current-stubs-for-system-modules, but android annotations are
180// stripped.
181java_library {
182    name: "core-current-stubs-for-system-modules-no-annotations",
183    visibility: ["//development/sdk"],
184    defaults: [
185        "system-modules-no-annotations",
186    ],
187    static_libs: [
188        "core-current-stubs-for-system-modules",
189    ],
190    dists: [
191        {
192            // Legacy dist location for the public file.
193            dest: "core-for-system-modules-no-annotations.jar",
194            targets: dist_targets,
195        },
196        {
197            dest: "system-modules/public/core-for-system-modules-no-annotations.jar",
198            targets: dist_targets,
199        },
200    ],
201}
202
203// Used when compiling higher-level code against core.current.stubs.
204java_system_modules {
205    name: "core-public-stubs-system-modules",
206    visibility: ["//visibility:public"],
207    libs: [
208        "core-current-stubs-for-system-modules-no-annotations",
209    ],
210}
211
212java_defaults {
213    name: "core.module_lib.stubs.defaults",
214    visibility: ["//visibility:private"],
215    sdk_version: "none",
216    system_modules: "none",
217}
218
219// A stubs target containing the parts of the public SDK & @SystemApi(MODULE_LIBRARIES) API
220// provided by the core libraries.
221//
222// Don't use this directly, use "sdk_version: module_current".
223java_library {
224    name: "core.module_lib.stubs",
225    defaults: [
226        "core.module_lib.stubs.defaults",
227    ],
228    static_libs: [
229        "art.module.public.api.stubs.module_lib",
230
231        // Replace the following with the module-lib correspondence when Conscrypt or i18N module
232        // provides @SystemApi(MODULE_LIBRARIES). Currently, assume that only ART module provides
233        // @SystemApi(MODULE_LIBRARIES).
234        "conscrypt.module.public.api.stubs",
235        "i18n.module.public.api.stubs",
236    ],
237}
238
239// Produces a dist file that is used by the
240// prebuilts/sdk/update_prebuilts.py script to update the prebuilts/sdk
241// directory.
242java_library {
243    name: "core-module-lib-stubs-for-system-modules",
244    visibility: ["//visibility:private"],
245    static_libs: [
246        "core.module_lib.stubs",
247        // This one is not on device but it's needed when javac compiles code
248        // containing lambdas.
249        "core-lambda-stubs-for-system-modules",
250    ],
251    sdk_version: "none",
252    system_modules: "none",
253    dist: {
254        dest: "system-modules/module-lib/core-for-system-modules.jar",
255        targets: dist_targets,
256    },
257}
258
259// Same as core-module-lib-stubs-for-system-modules, but android annotations are
260// stripped. This is used by the Java toolchain, while the annotated stub is to
261// be used by Kotlin one.
262java_library {
263    name: "core-module-lib-stubs-for-system-modules-no-annotations",
264    visibility: ["//visibility:private"],
265    defaults: [
266        "system-modules-no-annotations",
267    ],
268    static_libs: [
269        "core-module-lib-stubs-for-system-modules",
270    ],
271    dist: {
272        dest: "system-modules/module-lib/core-for-system-modules-no-annotations.jar",
273        targets: dist_targets,
274    },
275}
276
277// Used when compiling higher-level code with sdk_version "module_current"
278java_system_modules {
279    name: "core-module-lib-stubs-system-modules",
280    libs: [
281        "core-module-lib-stubs-for-system-modules-no-annotations",
282    ],
283    visibility: ["//visibility:public"],
284}
285
286// Ideally this should be a restricted allowlist but there are hundreds of modules that depend on
287// this.
288// TODO(http://b/134561230) - limit the number of dependents on this.
289core_platform_visibility = ["//visibility:public"]
290
291// Libraries containing the core platform API stubs for the core libraries.
292//
293// Although this stubs library is primarily used by the Java compiler / build to indicate
294// the core platform API surface area, compile_dex: true is used so that the Core Platform
295// API annotations are available to the dex tools that enable enforcement of runtime
296// accessibility. b/119068555
297java_library {
298    name: "legacy.core.platform.api.stubs",
299    visibility: core_platform_visibility,
300    defaults: [
301        "core.platform.api.stubs.defaults",
302    ],
303    static_libs: [
304        "art.module.public.api.stubs.module_lib",
305        "conscrypt.module.platform.api.stubs",
306        "legacy.i18n.module.platform.api.stubs",
307    ],
308}
309
310java_library {
311    name: "legacy.core.platform.api.stubs.exportable",
312    visibility: core_platform_visibility,
313    defaults: [
314        "core.platform.api.stubs.defaults",
315    ],
316    static_libs: [
317        "art.module.public.api.stubs.exportable.module_lib",
318        "conscrypt.module.platform.api.stubs.exportable",
319        "legacy.i18n.module.platform.api.stubs.exportable",
320    ],
321}
322
323java_defaults {
324    name: "android_core_platform_stubs_current_contributions",
325    api_surface: "core_platform",
326    api_contributions: [
327        "art.module.public.api.stubs.source.api.contribution",
328        "art.module.public.api.stubs.source.system.api.contribution",
329        "art.module.public.api.stubs.source.module_lib.api.contribution",
330        "conscrypt.module.platform.api.stubs.source.api.contribution",
331        "i18n.module.public.api.stubs.source.api.contribution",
332    ],
333}
334
335java_defaults {
336    name: "core.platform.api.stubs.defaults",
337    hostdex: true,
338    compile_dex: true,
339
340    sdk_version: "none",
341    system_modules: "none",
342    patch_module: "java.base",
343    is_stubs_module: true,
344}
345
346// Same as legacy.core.platform.api.stubs, but android annotations are
347// stripped. This is used by the Java toolchain, while the annotated stub is to
348// be used by Kotlin one.
349java_library {
350    name: "legacy.core.platform.api.no.annotations.stubs",
351    visibility: core_platform_visibility,
352    defaults: [
353        "system-modules-no-annotations",
354    ],
355    hostdex: true,
356    compile_dex: true,
357
358    static_libs: [
359        "legacy.core.platform.api.stubs",
360    ],
361    patch_module: "java.base",
362    is_stubs_module: true,
363}
364
365java_library {
366    name: "stable.core.platform.api.stubs",
367    visibility: core_platform_visibility,
368    defaults: [
369        "core.platform.api.stubs.defaults",
370    ],
371    static_libs: [
372        "art.module.public.api.stubs.module_lib",
373        // conscrypt only has a stable version, so it is okay to depend on it here:
374        "conscrypt.module.platform.api.stubs",
375        "stable.i18n.module.platform.api.stubs",
376    ],
377}
378
379// Same as stable.core.platform.api.stubs, but android annotations are
380// stripped. This is used by the Java toolchain, while the annotated stub is to
381// be used by Kotlin one.
382java_library {
383    name: "stable.core.platform.api.no.annotations.stubs",
384    visibility: core_platform_visibility,
385    defaults: [
386        "system-modules-no-annotations",
387    ],
388    hostdex: true,
389    compile_dex: true,
390
391    static_libs: [
392        "stable.core.platform.api.stubs",
393    ],
394    patch_module: "java.base",
395    is_stubs_module: true,
396}
397
398// Used when compiling higher-level code against *.core.platform.api.stubs.
399java_system_modules {
400    name: "legacy-core-platform-api-stubs-system-modules",
401    visibility: core_platform_visibility,
402    libs: [
403        "legacy.core.platform.api.no.annotations.stubs",
404        // This one is not on device but it's needed when javac compiles code
405        // containing lambdas.
406        "core-lambda-stubs-for-system-modules",
407    ],
408}
409
410java_system_modules {
411    name: "stable-core-platform-api-stubs-system-modules",
412    visibility: core_platform_visibility,
413    libs: [
414        "stable.core.platform.api.no.annotations.stubs",
415        // This one is not on device but it's needed when javac compiles code
416        // containing lambdas.
417        "core-lambda-stubs-for-system-modules",
418    ],
419}
420
421// Used when compiling higher-level code against art.module.public.api.stubs.
422// This abstraction should come from the inner tree linking against the stubs
423// and not from an "sdk", since parts of this abstraction do not belong to an
424// official API (e.g. stub-annotations).
425//
426// This is only intended for use within core libraries and must not be used
427// from outside.
428java_system_modules {
429    name: "art-module-public-api-stubs-system-modules",
430    visibility: [
431        "//art/build/sdk",
432        "//external/conscrypt",
433        "//external/icu/android_icu4j",
434        "//external/wycheproof",
435    ],
436    libs: [
437        "art.module.public.api.stubs",
438        // This one is not on device but it's needed when javac compiles code
439        // containing lambdas.
440        "core-lambda-stubs-for-system-modules",
441
442        // Ensure that core libraries that depend on the public API can access
443        // the UnsupportedAppUsage, CorePlatformApi and IntraCoreApi
444        // annotations.
445        "art.module.api.annotations.for.system.modules",
446    ],
447}
448
449// Used when compiling higher-level code against art.module.public.api.stubs.module_lib.
450//
451// This is only intended for use within core libraries and must not be used
452// from outside.
453java_system_modules {
454    name: "art-module-lib-api-stubs-system-modules",
455    visibility: [
456        "//art/build/sdk",
457        "//external/conscrypt",
458        "//external/icu/android_icu4j",
459    ],
460    libs: [
461        "art.module.public.api.stubs.module_lib",
462    ],
463}
464
465// Used when compiling against art.module.intra.core.api.stubs.
466java_system_modules {
467    name: "art-module-intra-core-api-stubs-system-modules",
468    visibility: [
469        "//art/build/sdk",
470        "//external/bouncycastle",
471        "//external/conscrypt",
472        "//external/icu/android_icu4j",
473    ],
474    libs: [
475        // The intra core API stubs library.
476        "art.module.intra.core.api.stubs",
477
478        // Additional classes needed by javac but which are not present in the stubs.
479        "art-module-intra-core-api-stubs-system-modules-lib",
480    ],
481}
482