Allow default visibility to be set per package
Adds a package module type with a default_visibility property. The package module type can only be specified once per package. Bug: 133290645 Test: m droid Change-Id: Ibb2fb499c9ea88ecaa662d3cd2cbde478e4b9a4b
This commit is contained in:
42
README.md
42
README.md
@@ -133,6 +133,25 @@ directory) there are two packages, `my/app`, and the subpackage `my/app/tests`.
|
||||
|
||||
This is based on the Bazel package concept.
|
||||
|
||||
The `package` module type allows information to be specified about a package. Only a single
|
||||
`package` module can be specified per package and in the case where there are multiple `.bp` files
|
||||
in the same package directory it is highly recommended that the `package` module (if required) is
|
||||
specified in the `Android.bp` file.
|
||||
|
||||
Unlike most module type `package` does not have a `name` property. Instead the name is set to the
|
||||
name of the package, e.g. if the package is in `top/intermediate/package` then the package name is
|
||||
`//top/intermediate/package`.
|
||||
|
||||
E.g. The following will set the default visibility for all the modules defined in the package
|
||||
(irrespective of whether they are in the same `.bp` file as the `package` module) to be visible to
|
||||
all the subpackages by default.
|
||||
|
||||
```
|
||||
package {
|
||||
default_visibility: [":__subpackages"]
|
||||
}
|
||||
```
|
||||
|
||||
### Name resolution
|
||||
|
||||
Soong provides the ability for modules in different directories to specify
|
||||
@@ -191,13 +210,13 @@ this module. For example, `//project:rule`, `//project/library:lib` or
|
||||
`//independent:evil`)
|
||||
* `["//project"]`: This is shorthand for `["//project:__pkg__"]`
|
||||
* `[":__subpackages__"]`: This is shorthand for `["//project:__subpackages__"]`
|
||||
where `//project` is the module's package. e.g. using `[":__subpackages__"]` in
|
||||
where `//project` is the module's package, e.g. using `[":__subpackages__"]` in
|
||||
`packages/apps/Settings/Android.bp` is equivalent to
|
||||
`//packages/apps/Settings:__subpackages__`.
|
||||
* `["//visibility:legacy_public"]`: The default visibility, behaves as
|
||||
`//visibility:public` for now. It is an error if it is used in a module.
|
||||
|
||||
The visibility rules of `//visibility:public` and `//visibility:private` can not
|
||||
The visibility rules of `//visibility:public` and `//visibility:private` cannot
|
||||
be combined with any other visibility specifications, except
|
||||
`//visibility:public` is allowed to override visibility specifications imported
|
||||
through the `defaults` property.
|
||||
@@ -207,13 +226,18 @@ in `vendor/`, e.g. a module in `libcore` cannot declare that it is visible to
|
||||
say `vendor/google`, instead it must make itself visible to all packages within
|
||||
`vendor/` using `//vendor:__subpackages__`.
|
||||
|
||||
If a module does not specify the `visibility` property the module is
|
||||
`//visibility:legacy_public`. Once the build has been completely switched over to
|
||||
soong it is possible that a global refactoring will be done to change this to
|
||||
`//visibility:private` at which point all modules that do not currently specify
|
||||
a `visibility` property will be updated to have
|
||||
`visibility = [//visibility:legacy_public]` added. It will then be the owner's
|
||||
responsibility to replace that with a more appropriate visibility.
|
||||
If a module does not specify the `visibility` property then it uses the
|
||||
`default_visibility` property of the `package` module in the module's package.
|
||||
|
||||
If the `default_visibility` property is not set for the module's package then
|
||||
the module uses `//visibility:legacy_public`.
|
||||
|
||||
Once the build has been completely switched over to soong it is possible that a
|
||||
global refactoring will be done to change this to `//visibility:private` at
|
||||
which point all packages that do not currently specify a `default_visibility`
|
||||
property will be updated to have
|
||||
`default_visibility = [//visibility:legacy_public]` added. It will then be the
|
||||
owner's responsibility to replace that with a more appropriate visibility.
|
||||
|
||||
### Formatter
|
||||
|
||||
|
Reference in New Issue
Block a user