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