name
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
runtime_libs
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
Properties for ABI compatibility checker.
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
⊕strip.keep_symbols_and_debug_frame
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
Generate stubs to make this library accessible to APEXes.
⊕target.android
If this is a vendor public library, properties to describe the vendor public library stubs.
cc_api_library
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
runtime_libs
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
variants
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
Default: true
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
variants
list of string
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
cc_api_variant
name
,
src
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
export_headers_as_system
,
export_include_dirs
,
host_required
,
init_rc
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
variant
,
vendor
,
vendor_ramdisk
,
version
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
src
string
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
export_include_dirs
list of string, Header directory to export
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
variant
string
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
version
string
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
cc_benchmark
cc_benchmark compiles an executable binary that performs benchmark testing
of a specific component in a device. Additional files such as test suites
and test configuration are installed on the side of the compiled executed
binary.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
auto_gen_config
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
data
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
require_root
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_config
,
test_config_template
,
test_for
,
test_suites
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
auto_gen_config
bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml
doesn't exist next to the Android.bp, this attribute doesn't need to be set to true
explicitly.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
data
list of string, list of files or filegroup modules that provide data that should be installed alongside
the test
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
require_root
bool, Add RootTargetPreparer to auto generated test config. This guarantees the test to run
with root permission.
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_config
string, the name of the test configuration (for example "AndroidTest.xml") that should be
installed with the module.
test_config_template
string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that
should be installed with the module.
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
test_suites
list of string, list of compatibility suites (for example "cts", "vts") that the module should be
installed into.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_benchmark_host
cc_benchmark_host compiles an executable binary that performs benchmark
testing of a specific component in the host. Additional files such as
test suites and test configuration are installed on the side of the
compiled executed binary.
name
,
srcs
,
exclude_srcs
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
auto_gen_config
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
data
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
require_root
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_config
,
test_config_template
,
test_for
,
test_suites
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
auto_gen_config
bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml
doesn't exist next to the Android.bp, this attribute doesn't need to be set to true
explicitly.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
data
list of string, list of files or filegroup modules that provide data that should be installed alongside
the test
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
require_root
bool, Add RootTargetPreparer to auto generated test config. This guarantees the test to run
with root permission.
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_config
string, the name of the test configuration (for example "AndroidTest.xml") that should be
installed with the module.
test_config_template
string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that
should be installed with the module.
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
test_suites
list of string, list of compatibility suites (for example "cts", "vts") that the module should be
installed into.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_binary
cc_binary produces a binary that is runnable on a device.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.vendor_ramdisk
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_binary_host
cc_binary_host produces a binary that is runnable on a host.
name
,
srcs
,
exclude_srcs
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_defaults
cc_defaults provides a set of properties that can be inherited by other cc
modules. A module can use the properties from a cc_defaults using
`defaults: ["<:default_module_name>"]`. Properties of both modules are
merged (when possible) by prepending the default module's values to the
depending module's values.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
auto_gen_config
,
bazel_module
,
bootstrap
,
c_std
,
cflags
,
check_elf_files
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
corpus
,
cpp_std
,
cppflags
,
crt
,
data
,
data_bins
,
data_libs
,
debug
,
debug_ramdisk
,
defaults_visibility
,
device_specific
,
dictionary
,
disable_framework
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_ndk_sysroot
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
fuzz_config
,
fuzzing_frameworks
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
gtest
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
isolated
,
ldflags
,
lex
,
licenses
,
linker_script
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
no_named_install_directory
,
nocrt
,
objs
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
per_testcase_directory
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
require_root
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static
,
static_executable
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_config
,
test_config_template
,
test_for
,
test_mainline_modules
,
test_options
,
test_per_src
,
test_suites
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
auto_gen_config
bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml
doesn't exist next to the Android.bp, this attribute doesn't need to be set to true
explicitly.
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
If this is set, the file extension will be ignored and this will be used as the std version value. Setting this
to "default" will use the build system default version. This cannot be set at the same time as cpp_std.
cflags
list of string, list of clang flags required to correctly interpret the headers.
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
symbols, etc), default true.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
corpus
list of string, Optional list of seed files to be installed to the fuzz target's output
directory.
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
crt
bool, Indicates that this module is a CRT object. CRT objects will be split
into a variant per-API level between min_sdk_version and current.
data
list of string, Optional list of data files to be installed to the fuzz target's output
directory. Directory structure relative to the module is preserved.
data_bins
list of string, list of binary modules that should be installed alongside the test
data_libs
list of string, list of shared library modules that should be installed alongside the test
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
defaults_visibility
list of string, Controls the visibility of the defaults module itself.
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
dictionary
string, Optional dictionary to be installed to the fuzz target's output directory.
disable_framework
bool, Add RunCommandTargetPreparer to stop framework before the test and start it after the test.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_ndk_sysroot
bool, Indicates that this module should not be included in the NDK sysroot.
Only applies to CRT objects. Defaults to false.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
fuzz_config
FuzzConfig, Config for running the target on fuzzing infrastructure.
fuzzing_frameworks
FuzzFrameworks, Define the fuzzing frameworks this fuzz target can be built for. If
empty then the fuzz target will be available to be built for all fuzz
frameworks available
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
gtest
bool, if set, build against the gtest library. Defaults to true.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
isolated
bool, if set, use the isolated gtest runner. Defaults to true if gtest is also true and the arch is Windows, false
otherwise.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_script
string, if set, the path to a linker script to pass to ld -r when combining multiple object files.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
no_named_install_directory
bool, Disables the creation of a test-specific directory when used with
relative_install_path. Useful if several tests need to be in the same
directory, but test_per_src doesn't work.
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
objs
list of string, names of other cc_object modules to link into this module using partial linking
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
per_testcase_directory
bool, Install the test into a folder named for the module in all test suites.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
require_root
bool, Add RootTargetPreparer to auto generated test config. This guarantees the test to run
with root permission.
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
⊕sanitized.address
⊕sanitized.hwaddress
⊕sanitized.none
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of shared libraries that provide headers for this binding.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of default libraries that will provide headers for this module. If unset, generally
defaults to libc, libm, and libdl. Set to [] to prevent using headers from the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
⊕target.product
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_config
string, the name of the test configuration (for example "AndroidTest.xml") that should be
installed with the module.
test_config_template
string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that
should be installed with the module.
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
test_mainline_modules
list of string, Add parameterized mainline modules to auto generated test config. The options will be
handled by TradeFed to download and install the specified modules on the device.
⊕test_options
TestOptions
Test options.
run_test_as
string, The UID that you want to run the test as on a device.
test_suite_tag
list of string, A list of free-formed strings without spaces that categorize the test.
min_shipping_api_level
int64, Add ShippingApiLevelModuleController to auto generated test config. If the device properties
for the shipping api level is less than the min_shipping_api_level, skip this module.
vsr_min_shipping_api_level
int64, Add ShippingApiLevelModuleController to auto generated test config. If any of the device
shipping api level and vendor api level properties are less than the
vsr_min_shipping_api_level, skip this module.
As this includes the shipping api level check, it is not allowed to define
min_shipping_api_level at the same time with this property.
min_vndk_version
int64, Add MinApiLevelModuleController with ro.vndk.version property. If ro.vndk.version has an
integer value and the value is less than the min_vndk_version, skip this module.
unit_test
bool, If the test is a hostside (no device required) unittest that shall be run
during presubmit check.
tags
list of string, Tags provide additional metadata to customize test execution by downstream
test runners. The tags have no special meaning to Soong.
test_per_src
bool, Create a separate binary for each source file. Useful when there is
global state that can not be torn down and reset between each test suite.
test_suites
list of string, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
windows_import_lib
string, Optionally provide an import library if this is a Windows PE DLL prebuilt.
This is needed only if this library is linked by other modules in build time.
Only makes sense for the Windows target.
yacc
YaccProperties
cc_fuzz
cc_fuzz creates a host/device fuzzer binary. Host binaries can be found at
$ANDROID_HOST_OUT/fuzz/, and device binaries can be found at /data/fuzz on
your device, or $ANDROID_PRODUCT_OUT/data/fuzz in your build tree.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
corpus
,
cpp_std
,
cppflags
,
data
,
debug
,
debug_ramdisk
,
device_specific
,
dictionary
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
fuzz_config
,
fuzzing_frameworks
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
corpus
list of string, Optional list of seed files to be installed to the fuzz target's output
directory.
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
data
list of string, Optional list of data files to be installed to the fuzz target's output
directory. Directory structure relative to the module is preserved.
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
dictionary
string, Optional dictionary to be installed to the fuzz target's output directory.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
fuzz_config
FuzzConfig, Config for running the target on fuzzing infrastructure.
fuzzing_frameworks
FuzzFrameworks, Define the fuzzing frameworks this fuzz target can be built for. If
empty then the fuzz target will be available to be built for all fuzz
frameworks available
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.vendor_ramdisk
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_genrule
cc_genrule is a genrule that can depend on other cc_* objects.
The cmd may be run multiple times, once for each of the different arch/etc
variations. The following environment variables will be set when the command
execute:
CC_ARCH the name of the architecture the command is being executed for
CC_MULTILIB "lib32" if the architecture the command is being executed for is 32-bit,
"lib64" if it is 64-bit.
CC_NATIVE_BRIDGE the name of the subdirectory that native bridge libraries are stored in if
the architecture has native bridge enabled, empty if it is disabled.
CC_OS the name of the OS the command is being executed for.
name
,
srcs
,
exclude_srcs
,
host_supported
,
device_supported
,
apex_available
,
arch
,
bazel_module
,
cmd
,
compile_multilib
,
debug_ramdisk
,
depfile
,
device_specific
,
dist
,
dists
,
enabled
,
export_include_dirs
,
host_required
,
init_rc
,
licenses
,
multilib
,
native_bridge_supported
,
odm_available
,
out
,
owner
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.platform_sdk_extension_version
,
product_variables.platform_sdk_version
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
sdk_version
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
tool_files
,
tools
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of input files
exclude_srcs
list of string, input files to exclude
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
cmd
string, The command to run on one or more input files. Cmd supports substitution of a few variables.
Available variables for substitution:
$(location): the path to the first entry in tools or tool_files.
$(location <label>): the path to the tool, tool_file, input or output with name <label>. Use $(location) if <label> refers to a rule that outputs exactly one file.
$(locations <label>): the paths to the tools, tool_files, inputs or outputs with name <label>. Use $(locations) if <label> refers to a rule that outputs two or more files.
$(in): one or more input files.
$(out): a single output file.
$(depfile): a file to which dependencies will be written, if the depfile property is set to true.
$(genDir): the sandbox directory for this tool; contains $(out).
$$: a literal $
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
depfile
bool, Enable reading a file containing dependencies in gcc format after the command completes
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
export_include_dirs
list of string, List of directories to export generated headers from
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
odm_available
bool
out
list of string, names of the output files that will be generated
owner
string, vendor who owns this module
product_available
bool
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕srcs
⊕exclude_srcs
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.platform_sdk_extension_version
⊕product_variables.platform_sdk_version
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool
required
list of string, names of other modules to install if this module is installed
sdk_version
string
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
tool_files
list of string, Local file that is used as the tool
tools
list of string, name of the modules (if any) that produces the host executable. Leave empty for
prebuilts or scripts that do not need a module to build them.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
cc_library
cc_library creates both static and/or shared libraries for a device and/or
host. By default, a cc_library has a single variant that targets the device.
Specifying `host_supported: true` also creates a library that targets the
host.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_library_headers contains a set of c/c++ headers which are imported by
other soong cc modules using the header_libs property. For best practices,
use export_include_dirs property or LOCAL_EXPORT_C_INCLUDE_DIRS for
Make.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
Properties for ABI compatibility checker.
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
⊕strip.keep_symbols_and_debug_frame
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
Sanitizers to run with flag configuration specified
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
Generate stubs to make this library accessible to APEXes.
⊕target.android
If this is a vendor public library, properties to describe the vendor public library stubs.
cc_library_host_shared
cc_library_host_shared creates a shared library that is usable on a host.
name
,
srcs
,
exclude_srcs
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
static
bool, Link statically against the protobuf runtime
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_library_host_static
cc_library_host_static creates a static library that is linkable to a host
binary.
name
,
srcs
,
exclude_srcs
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
static
bool, Link statically against the protobuf runtime
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_library_shared
cc_library_shared creates a shared library for a device and/or host.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_library_static
cc_library_static creates a static library for a device and/or host binary.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_object
cc_object runs the compiler without running the linker. It is rarely
necessary, but sometimes used to generate .s files from .c files to use as
input to a cc_genrule module.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
aidl
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
crt
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
enabled
,
exclude_from_ndk_sysroot
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
generated_headers
,
generated_sources
,
gnu_extensions
,
header_libs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
installable
,
instruction_set
,
lex
,
licenses
,
linker_script
,
local_include_dirs
,
logtags
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
objs
,
odm_available
,
openmp
,
owner
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
release
,
renderscript
,
required
,
rtti
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
stl
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.host
,
target.platform
,
target.product
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy_disabled_srcs
,
tidy_timeout_srcs
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
vintf_fragments
,
visibility
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
Default: [-fno-addrsig]
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
crt
bool, Indicates that this module is a CRT object. CRT objects will be split
into a variant per-API level between min_sdk_version and current.
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_ndk_sysroot
bool, Indicates that this module should not be included in the NDK sysroot.
Only applies to CRT objects. Defaults to false.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_script
string, if set, the path to a linker script to pass to ld -r when combining multiple object files.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
objs
list of string, names of other cc_object modules to link into this module using partial linking
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
owner
string, vendor who owns this module
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
static
bool, Link statically against the protobuf runtime
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of shared library modules should only provide headers for this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of static library modules that should only provide headers for this module.
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of default libraries that will provide headers for this module. If unset, generally
defaults to libc, libm, and libdl. Set to [] to prevent using headers from the defaults.
target
interface
⊕target.android
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
⊕target.product
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.recovery
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.vendor_ramdisk
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
yacc
YaccProperties
cc_prebuilt_binary
cc_prebuilt_binary installs a precompiled executable in srcs property in the
device's directory, for both the host and device
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
use_clang_lld
,
use_source_config_var
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, a prebuilt library or binary. Can reference a genrule module that generates an executable file.
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
symbols, etc), default true.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefer
bool, When prefer is set to true the prebuilt will be used instead of any source module with
a matching name.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
⊕sanitized.address
⊕sanitized.hwaddress
⊕sanitized.none
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_source_config_var
ConfigVarProperties, When specified this names a Soong config variable that controls the prefer property.
If the value of the named Soong config variable is true then prefer is set to false and vice
versa. If the Soong config variable is not set then it defaults to false, so prefer defaults
to true.
If specified then the prefer property is ignored in favor of the value of the Soong config
variable.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
windows_import_lib
string, Optionally provide an import library if this is a Windows PE DLL prebuilt.
This is needed only if this library is linked by other modules in build time.
Only makes sense for the Windows target.
cc_prebuilt_library
cc_prebuilt_library installs a precompiled shared library that are
listed in the srcs property in the device's directory.
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_source_config_var
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, a prebuilt library or binary. Can reference a genrule module that generates an executable file.
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
symbols, etc), default true.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefer
bool, When prefer is set to true the prebuilt will be used instead of any source module with
a matching name.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
⊕sanitized.address
⊕sanitized.hwaddress
⊕sanitized.none
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_source_config_var
ConfigVarProperties, When specified this names a Soong config variable that controls the prefer property.
If the value of the named Soong config variable is true then prefer is set to false and vice
versa. If the Soong config variable is not set then it defaults to false, so prefer defaults
to true.
If specified then the prefer property is ignored in favor of the value of the Soong config
variable.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
windows_import_lib
string, Optionally provide an import library if this is a Windows PE DLL prebuilt.
This is needed only if this library is linked by other modules in build time.
Only makes sense for the Windows target.
cc_prebuilt_library_headers is a prebuilt version of cc_library_headers
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_source_config_var
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
Properties for ABI compatibility checker.
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
⊕strip.keep_symbols_and_debug_frame
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
Sanitizers to run with flag configuration specified
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
Generate stubs to make this library accessible to APEXes.
⊕target.android
If this is a vendor public library, properties to describe the vendor public library stubs.
cc_prebuilt_library_shared
cc_prebuilt_library_shared installs a precompiled shared library that are
listed in the srcs property in the device's directory.
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_source_config_var
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, a prebuilt library or binary. Can reference a genrule module that generates an executable file.
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
symbols, etc), default true.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefer
bool, When prefer is set to true the prebuilt will be used instead of any source module with
a matching name.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
⊕sanitized.address
⊕sanitized.hwaddress
⊕sanitized.none
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_source_config_var
ConfigVarProperties, When specified this names a Soong config variable that controls the prefer property.
If the value of the named Soong config variable is true then prefer is set to false and vice
versa. If the Soong config variable is not set then it defaults to false, so prefer defaults
to true.
If specified then the prefer property is ignored in favor of the value of the Soong config
variable.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
windows_import_lib
string, Optionally provide an import library if this is a Windows PE DLL prebuilt.
This is needed only if this library is linked by other modules in build time.
Only makes sense for the Windows target.
cc_prebuilt_library_static
cc_prebuilt_library_static installs a precompiled static library that are
listed in the srcs property in the device's directory.
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_source_config_var
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, a prebuilt library or binary. Can reference a genrule module that generates an executable file.
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
symbols, etc), default true.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefer
bool, When prefer is set to true the prebuilt will be used instead of any source module with
a matching name.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
⊕sanitized.address
⊕sanitized.hwaddress
⊕sanitized.none
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_source_config_var
ConfigVarProperties, When specified this names a Soong config variable that controls the prefer property.
If the value of the named Soong config variable is true then prefer is set to false and vice
versa. If the Soong config variable is not set then it defaults to false, so prefer defaults
to true.
If specified then the prefer property is ignored in favor of the value of the Soong config
variable.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
windows_import_lib
string, Optionally provide an import library if this is a Windows PE DLL prebuilt.
This is needed only if this library is linked by other modules in build time.
Only makes sense for the Windows target.
cc_prebuilt_object
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
clang
,
compile_multilib
,
crt
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
enabled
,
exclude_from_ndk_sysroot
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
header_libs
,
host_required
,
init_rc
,
installable
,
licenses
,
linker_script
,
logtags
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
objs
,
odm_available
,
owner
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
stl
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.host
,
target.platform
,
target.recovery
,
target_required
,
test_for
,
use_source_config_var
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
srcs
list of string
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
crt
bool, Indicates that this module is a CRT object. CRT objects will be split
into a variant per-API level between min_sdk_version and current.
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_ndk_sysroot
bool, Indicates that this module should not be included in the NDK sysroot.
Only applies to CRT objects. Defaults to false.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
installable
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_script
string, if set, the path to a linker script to pass to ld -r when combining multiple object files.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
objs
list of string, names of other cc_object modules to link into this module using partial linking
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
owner
string, vendor who owns this module
prefer
bool, When prefer is set to true the prebuilt will be used instead of any source module with
a matching name.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
required
list of string, names of other modules to install if this module is installed
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of shared library modules should only provide headers for this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of static library modules that should only provide headers for this module.
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of default libraries that will provide headers for this module. If unset, generally
defaults to libc, libm, and libdl. Set to [] to prevent using headers from the defaults.
target
interface
⊕target.android
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
use_source_config_var
ConfigVarProperties, When specified this names a Soong config variable that controls the prefer property.
If the value of the named Soong config variable is true then prefer is set to false and vice
versa. If the Soong config variable is not set then it defaults to false, so prefer defaults
to true.
If specified then the prefer property is ignored in favor of the value of the Soong config
variable.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
cc_prebuilt_test_library_shared
cc_prebuilt_test_library_shared installs a precompiled shared library
to be used as a data dependency of a test-related module (such as cc_test, or
cc_test_library).
name
,
srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefer
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize
,
sanitized.address
,
sanitized.hwaddress
,
sanitized.none
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_source_config_var
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
windows_import_lib
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, a prebuilt library or binary. Can reference a genrule module that generates an executable file.
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined
symbols, etc), default true.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefer
bool, When prefer is set to true the prebuilt will be used instead of any source module with
a matching name.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
⊕sanitized.address
⊕sanitized.hwaddress
⊕sanitized.none
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_source_config_var
ConfigVarProperties, When specified this names a Soong config variable that controls the prefer property.
If the value of the named Soong config variable is true then prefer is set to false and vice
versa. If the Soong config variable is not set then it defaults to false, so prefer defaults
to true.
If specified then the prefer property is ignored in favor of the value of the Soong config
variable.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
windows_import_lib
string, Optionally provide an import library if this is a Windows PE DLL prebuilt.
This is needed only if this library is linked by other modules in build time.
Only makes sense for the Windows target.
cc_test
cc_test generates a test config file and an executable binary file to test
specific functionality on a device. The executable binary gets an implicit
static_libs dependency on libgtests unless the gtest flag is set to false.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
auto_gen_config
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
data
,
data_bins
,
data_libs
,
debug
,
debug_ramdisk
,
device_specific
,
disable_framework
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
gtest
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
isolated
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
no_named_install_directory
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
per_testcase_directory
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
require_root
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_config
,
test_config_template
,
test_for
,
test_mainline_modules
,
test_options
,
test_per_src
,
test_suites
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
auto_gen_config
bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml
doesn't exist next to the Android.bp, this attribute doesn't need to be set to true
explicitly.
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
data
list of string, list of files or filegroup modules that provide data that should be installed alongside
the test
data_bins
list of string, list of binary modules that should be installed alongside the test
data_libs
list of string, list of shared library modules that should be installed alongside the test
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
disable_framework
bool, Add RunCommandTargetPreparer to stop framework before the test and start it after the test.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
gtest
bool, if set, build against the gtest library. Defaults to true.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
isolated
bool, if set, use the isolated gtest runner. Defaults to true if gtest is also true and the arch is Windows, false
otherwise.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
no_named_install_directory
bool, Disables the creation of a test-specific directory when used with
relative_install_path. Useful if several tests need to be in the same
directory, but test_per_src doesn't work.
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
per_testcase_directory
bool, Install the test into a folder named for the module in all test suites.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
static
bool, Link statically against the protobuf runtime
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
require_root
bool, Add RootTargetPreparer to auto generated test config. This guarantees the test to run
with root permission.
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_config
string, the name of the test configuration (for example "AndroidTest.xml") that should be
installed with the module.
test_config_template
string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that
should be installed with the module.
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
test_mainline_modules
list of string, Add parameterized mainline modules to auto generated test config. The options will be
handled by TradeFed to download and install the specified modules on the device.
⊕test_options
TestOptions
Test options.
run_test_as
string, The UID that you want to run the test as on a device.
test_suite_tag
list of string, A list of free-formed strings without spaces that categorize the test.
min_shipping_api_level
int64, Add ShippingApiLevelModuleController to auto generated test config. If the device properties
for the shipping api level is less than the min_shipping_api_level, skip this module.
vsr_min_shipping_api_level
int64, Add ShippingApiLevelModuleController to auto generated test config. If any of the device
shipping api level and vendor api level properties are less than the
vsr_min_shipping_api_level, skip this module.
As this includes the shipping api level check, it is not allowed to define
min_shipping_api_level at the same time with this property.
min_vndk_version
int64, Add MinApiLevelModuleController with ro.vndk.version property. If ro.vndk.version has an
integer value and the value is less than the min_vndk_version, skip this module.
unit_test
bool, If the test is a hostside (no device required) unittest that shall be run
during presubmit check.
tags
list of string, Tags provide additional metadata to customize test execution by downstream
test runners. The tags have no special meaning to Soong.
test_per_src
bool, Create a separate binary for each source file. Useful when there is
global state that can not be torn down and reset between each test suite.
test_suites
list of string, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_test_host
cc_test_host compiles a test host binary.
name
,
srcs
,
exclude_srcs
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
auto_gen_config
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
data
,
data_bins
,
data_libs
,
debug
,
debug_ramdisk
,
device_specific
,
disable_framework
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
gtest
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
isolated
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
no_named_install_directory
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
per_testcase_directory
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
require_root
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
stl
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_config
,
test_config_template
,
test_for
,
test_mainline_modules
,
test_options
,
test_per_src
,
test_suites
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
auto_gen_config
bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml
doesn't exist next to the Android.bp, this attribute doesn't need to be set to true
explicitly.
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
data
list of string, list of files or filegroup modules that provide data that should be installed alongside
the test
data_bins
list of string, list of binary modules that should be installed alongside the test
data_libs
list of string, list of shared library modules that should be installed alongside the test
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
disable_framework
bool, Add RunCommandTargetPreparer to stop framework before the test and start it after the test.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
gtest
bool, if set, build against the gtest library. Defaults to true.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
isolated
bool, if set, use the isolated gtest runner. Defaults to true if gtest is also true and the arch is Windows, false
otherwise.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
no_named_install_directory
bool, Disables the creation of a test-specific directory when used with
relative_install_path. Useful if several tests need to be in the same
directory, but test_per_src doesn't work.
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
per_testcase_directory
bool, Install the test into a folder named for the module in all test suites.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
static
bool, Link statically against the protobuf runtime
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
require_root
bool, Add RootTargetPreparer to auto generated test config. This guarantees the test to run
with root permission.
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_config
string, the name of the test configuration (for example "AndroidTest.xml") that should be
installed with the module.
test_config_template
string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that
should be installed with the module.
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
test_mainline_modules
list of string, Add parameterized mainline modules to auto generated test config. The options will be
handled by TradeFed to download and install the specified modules on the device.
⊕test_options
TestOptions
Test options.
run_test_as
string, The UID that you want to run the test as on a device.
test_suite_tag
list of string, A list of free-formed strings without spaces that categorize the test.
min_shipping_api_level
int64, Add ShippingApiLevelModuleController to auto generated test config. If the device properties
for the shipping api level is less than the min_shipping_api_level, skip this module.
vsr_min_shipping_api_level
int64, Add ShippingApiLevelModuleController to auto generated test config. If any of the device
shipping api level and vendor api level properties are less than the
vsr_min_shipping_api_level, skip this module.
As this includes the shipping api level check, it is not allowed to define
min_shipping_api_level at the same time with this property.
min_vndk_version
int64, Add MinApiLevelModuleController with ro.vndk.version property. If ro.vndk.version has an
integer value and the value is less than the min_vndk_version, skip this module.
unit_test
bool, If the test is a hostside (no device required) unittest that shall be run
during presubmit check.
tags
list of string, Tags provide additional metadata to customize test execution by downstream
test runners. The tags have no special meaning to Soong.
test_per_src
bool, Create a separate binary for each source file. Useful when there is
global state that can not be torn down and reset between each test suite.
test_suites
list of string, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
cc_test_library
cc_test_library creates an archive of files (i.e. .o files) which is later
referenced by another module (such as cc_test, cc_defaults or cc_test_library)
for archiving or linking.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bazel_module
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
gtest
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
isolated
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
test_suites
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
srcs may reference the outputs of other modules that produce source files like genrule
or filegroup using the syntax ":module".
exclude_srcs
list of string, list of source files that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
defaults
list of string
host_supported
bool, If set to true, build a variant of the module for the host. Defaults to false.
device_supported
bool, If set to true, build a variant of the module for the device. Defaults to true.
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
include_dirs
list of string, list of directories that will be added to the aidl include paths.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the aidl include paths.
generate_traces
bool, whether to generate traces (for systrace) for this interface
flags
list of string, list of flags that will be passed to the AIDL compiler
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
asflags
list of string, list of module-specific flags that will be used for .S compiles
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
c_std
string, C standard version to use. Can be a specific version (such as "gnu11"),
"experimental" (which will use draft versions like C1x when available),
or the empty string (which will use the default).
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles.
clang
bool, Deprecated. true is the default, false is invalid.
clang_asflags
list of string, list of module-specific flags that will be used for .S compiles when
compiling with clang
clang_cflags
list of string, list of module-specific flags that will be used for C and C++ compiles when
compiling with clang
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
conlyflags
list of string, list of module-specific flags that will be used for C compiles
cpp_std
string, C++ standard version to use. Can be a specific version (such as
"gnu++11"), "experimental" (which will use draft versions like C++1z when
available), or the empty string (which will use the default).
cppflags
list of string, list of module-specific flags that will be used for C++ compiles
⊕debug
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_generated_sources
list of string, list of generated sources that should not be used to build the C/C++ module.
This is most useful in the arch/multilib variants to remove non-common files
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
generated_sources
list of string, list of generated sources to compile. These are the names of gensrcs or
genrule modules.
gnu_extensions
bool, if set to false, use -std=c++* instead of -std=gnu++*
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
gtest
bool, if set, build against the gtest library. Defaults to true.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
include_build_directory
bool, Add the directory containing the Android.bp file to the list of include
directories. Defaults to true.
include_dirs
list of string, list of directories relative to the root of the source tree that will
be added to the include path using -I.
If possible, don't use this. If adding paths from the current directory use
local_include_dirs, if adding paths from other modules use export_include_dirs in
that module.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
instruction_set
string, the instruction set architecture to use to compile the C/C++
module.
isolated
bool, if set, use the isolated gtest runner. Defaults to true if gtest is also true and the arch is Windows, false
otherwise.
ldflags
list of string, list of module-specific flags that will be used for all link steps
lex
LexProperties
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
local_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path using -I
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
openmp
bool, Build and link with OpenMP
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕cflags
⊕exclude_srcs
⊕include_dirs
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.binder32bit
⊕product_variables.debuggable
⊕cflags
⊕cppflags
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕exclude_srcs
⊕product_variables.enforce_vintf_manifest
⊕product_variables.eng
⊕cflags
⊕cppflags
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕cflags
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.malloc_pattern_fill_contents
⊕product_variables.malloc_zero_contents
⊕product_variables.native_coverage
⊕product_variables.override_rs_driver
⊕product_variables.pdk
⊕product_variables.platform_sdk_version
⊕product_variables.safestack
⊕product_variables.treble_linker_namespaces
⊕product_variables.uml
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
static
bool, Link statically against the protobuf runtime
type
string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
plugin
string, Proto plugin to use as the generator. Must be a cc_binary_host module.
include_dirs
list of string, list of directories that will be added to the protoc include paths.
local_include_dirs
list of string, list of directories relative to the bp file that will
be added to the protoc include paths.
canonical_path_from_root
bool, whether to identify the proto files from the root of the
source tree (the original method in Android, useful for
android-specific protos), or relative from where they were
specified (useful for external/third party protos).
This defaults to true today, but is expected to default to
false in the future.
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
⊕release
cflags
list of string, list of module-specific flags that will be used for C and C++ compiles in debug or
release builds
⊕renderscript
include_dirs
list of string, list of directories that will be added to the llvm-rs-cc include paths
flags
list of string, list of flags that will be passed to llvm-rs-cc
target_api
string, Renderscript API level to target
required
list of string, names of other modules to install if this module is installed
rtti
bool, pass -frtti instead of -fno-rtti
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the platform
variant of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
srcs
list of string, list of source files that should only be used in the
recovery variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to
build the recovery variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the recovery
variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to
build the recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
srcs
list of string, list of source files that should only be used in vendor or
product variant of the C/C++ module.
exclude_srcs
list of string, list of source files that should not be used to build vendor
or product variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build vendor
or product variant of the C/C++ module.
exclude_generated_sources
list of string, list of generated sources that should not be used to build
vendor or product variant of the C/C++ module.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_srcs
list of string, list of source files that should not be used to
build the vendor ramdisk variant of the C/C++ module.
cflags
list of string, List of additional cflags that should be used to build the vendor ramdisk
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
test_suites
list of string, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_disabled_srcs
list of string, list of source files that should not be compiled with clang-tidy.
tidy_flags
list of string, Extra flags to pass to clang-tidy
tidy_timeout_srcs
list of string, list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set.
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
yacc
YaccProperties
fdo_profile
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
profile
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
profile
string
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
kernel_headers retrieves the list of kernel headers directories from
TARGET_BOARD_KERNEL_HEADERS and TARGET_PRODUCT_KERNEL_HEADERS variables in
a makefile for compilation. See
https://android.googlesource.com/platform/build/+/master/core/config.mk
for more details on them.
name
,
srcs
,
exclude_srcs
,
defaults
,
host_supported
,
device_supported
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
asflags
,
bootstrap
,
buildstubs
,
c_std
,
cflags
,
clang
,
clang_asflags
,
clang_cflags
,
compile_multilib
,
conlyflags
,
cpp_std
,
cppflags
,
debug
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_generated_sources
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
generated_headers
,
generated_sources
,
gnu_extensions
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
include_build_directory
,
include_dirs
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
instruction_set
,
ldflags
,
lex
,
licenses
,
linker_scripts
,
llndk
,
local_include_dirs
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
openmp
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.binder32bit
,
product_variables.debuggable
,
product_variables.enforce_vintf_manifest
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.malloc_pattern_fill_contents
,
product_variables.malloc_zero_contents
,
product_variables.native_coverage
,
product_variables.override_rs_driver
,
product_variables.pdk
,
product_variables.platform_sdk_version
,
product_variables.safestack
,
product_variables.treble_linker_namespaces
,
product_variables.uml
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
release
,
renderscript
,
required
,
rtti
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_disabled_srcs
,
tidy_flags
,
tidy_timeout_srcs
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
,
yacc
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
Properties for ABI compatibility checker.
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
⊕strip.keep_symbols_and_debug_frame
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
Sanitizers to run with flag configuration specified
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
Generate stubs to make this library accessible to APEXes.
⊕target.android
If this is a vendor public library, properties to describe the vendor public library stubs.
llndk_libraries_txt
llndk_libraries_txt is a singleton module whose content is a list of LLNDK libraries
generated by Soong but can be referenced by other modules.
For example, apex_vndk can depend on these files as prebuilt.
Make uses LLNDK_LIBRARIES to determine which libraries to install.
HWASAN is only part of the LL-NDK in builds in which libc depends on HWASAN.
Therefore, by removing the library here, we cause it to only be installed if libc
depends on it.
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
insert_vndk_version
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
Default: llndk.libraries.txt
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
insert_vndk_version
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
ndk_headers installs the sets of ndk headers defined in the srcs property
to the sysroot base + "usr/include" + to directory + directory component.
ndk_headers requires the license file to be specified. Example:
Given:
sysroot base = "ndk/sysroot"
from = "include/foo"
to = "bar"
header = "include/foo/woodly/doodly.h"
output path = "ndk/sysroot/usr/include/bar/woodly/doodly.h"
name
,
srcs
,
exclude_srcs
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
from
,
host_required
,
init_rc
,
license
,
licenses
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target.android
,
target.host
,
target_required
,
to
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
⊕target.android
ndk_library
ndk_library creates a library that exposes a stub implementation of functions
and variables for use at build time only.
name
,
allow_untyped_symbols
,
arch
,
bazel_module
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
export_header_libs
,
first_version
,
host_required
,
init_rc
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
symbol_file
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
unversioned_until
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
allow_untyped_symbols
bool, If true, does not emit errors when APIs lacking type information are
found. This is false by default and should not be enabled outside bionic,
where it is enabled pending a fix for http://b/190554910 (no debug info
for asm implemented symbols).
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
first_version
string, The first API level a library was available. A library will be generated
for every API level beginning with this one.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
unversioned_until
string, The first API level that library should have the version script applied.
This defaults to the value of first_version, and should almost never be
used. This is only needed to work around platform bugs like
https://github.com/android-ndk/ndk/issues/265.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
ndk_prebuilt_shared_stl
ndk_prebuilt_shared_stl exports a precompiled ndk shared standard template
library (stl) library for linking operation. The soong's module name format
is ndk_<NAME>.so where the library is located under
./prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/$(HOST_ARCH)/<NAME>.so.
name
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
Default: minimum
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
Default: none
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
ndk_prebuilt_static_stl
ndk_prebuilt_static_stl exports a precompiled ndk static standard template
library (stl) library for linking operation. The soong's module name format
is ndk_<NAME>.a where the library is located under
./prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/$(HOST_ARCH)/<NAME>.a.
name
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
runtime_libs
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
stl
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕lto.never
⊕sanitize.address
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
Default: current
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
Default: none
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
preprocessed_ndk_headers preprocesses all the ndk headers listed in the srcs
property by executing the command defined in the preprocessor property.
name
,
srcs
,
exclude_srcs
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
license
,
licenses
,
native_bridge_supported
,
owner
,
preprocessor
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target.android
,
target.host
,
target_required
,
to
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
⊕target.android
recovery_snapshot
name
,
arch
,
binaries
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
header_libs
,
host_required
,
init_rc
,
licenses
,
multilib
,
native_bridge_supported
,
objects
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
rlibs
,
shared_libs
,
soc_specific
,
static_libs
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_arch
,
target_required
,
vendor
,
vendor_ramdisk
,
version
,
vintf_fragments
,
visibility
,
vndk_libs
name
string, The name of the module. Must be unique across all modules.
arch
interface
binaries
list of string
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
objects
list of string
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕static_libs
⊕shared_libs
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
rlibs
list of string
shared_libs
list of string
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
version
string, snapshot version.
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vndk_libs
list of string
recovery_snapshot_binary
recovery_snapshot_binary is a special prebuilt executable binary which is auto-generated by
development/vendor_snapshot/update.py. As a part of recovery snapshot, recovery_snapshot_binary
overrides the recovery variant of the cc binary with the same name, if BOARD_VNDK_VERSION is set.
name
,
src
,
defaults
,
afdo
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
recovery_snapshot_header is a special header library which is auto-generated by
development/vendor_snapshot/update.py. As a part of recovery snapshot, recovery_snapshot_header
overrides the recovery variant of the cc header library with the same name, if BOARD_VNDK_VERSION
is set.
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
cfi
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
hwasan
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize_minimal_dep
,
sanitize_ubsan_dep
,
sanitizervariation
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
Properties for ABI compatibility checker.
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
⊕strip.keep_symbols_and_debug_frame
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
Generate stubs to make this library accessible to APEXes.
⊕target.android
If this is a vendor public library, properties to describe the vendor public library stubs.
recovery_snapshot_object
recovery_snapshot_object is a special prebuilt compiled object file which is auto-generated by
development/vendor_snapshot/update.py. As a part of recovery snapshot, recovery_snapshot_object
overrides the recovery variant of the cc object with the same name, if BOARD_VNDK_VERSION is set.
name
,
src
,
defaults
,
apex_available
,
arch
,
bootstrap
,
clang
,
compile_multilib
,
crt
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
enabled
,
exclude_from_ndk_sysroot
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
header_libs
,
host_required
,
init_rc
,
installable
,
licenses
,
linker_script
,
logtags
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
objs
,
odm_available
,
owner
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
stl
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.host
,
target.platform
,
target.recovery
,
target_arch
,
target_required
,
test_for
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
crt
bool, Indicates that this module is a CRT object. CRT objects will be split
into a variant per-API level between min_sdk_version and current.
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_ndk_sysroot
bool, Indicates that this module should not be included in the NDK sysroot.
Only applies to CRT objects. Defaults to false.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
installable
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_script
string, if set, the path to a linker script to pass to ld -r when combining multiple object files.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
objs
list of string, names of other cc_object modules to link into this module using partial linking
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
owner
string, vendor who owns this module
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
required
list of string, names of other modules to install if this module is installed
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of shared library modules should only provide headers for this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of static library modules that should only provide headers for this module.
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of default libraries that will provide headers for this module. If unset, generally
defaults to libc, libm, and libdl. Set to [] to prevent using headers from the defaults.
target
interface
⊕target.android
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
recovery_snapshot_shared
recovery_snapshot_shared is a special prebuilt shared library which is auto-generated by
development/vendor_snapshot/update.py. As a part of recovery snapshot, recovery_snapshot_shared
overrides the recovery variant of the cc shared library with the same name, if BOARD_VNDK_VERSION
is set.
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
cfi
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
hwasan
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize_minimal_dep
,
sanitize_ubsan_dep
,
sanitizervariation
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
⊕cfi
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_flags
list of string, list of flags that will be used for any module that links against this module.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
⊕hwasan
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
⊕sanitizervariation
SanitizerType
SanitizerType
cc.SanitizerType
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
Default: true
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
recovery_snapshot_static
recovery_snapshot_static is a special prebuilt static library which is auto-generated by
development/vendor_snapshot/update.py. As a part of recovery snapshot, recovery_snapshot_static
overrides the recovery variant of the cc static library with the same name, if BOARD_VNDK_VERSION
is set.
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
cfi
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
hwasan
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize_minimal_dep
,
sanitize_ubsan_dep
,
sanitizervariation
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
⊕cfi
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_flags
list of string, list of flags that will be used for any module that links against this module.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
⊕hwasan
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
⊕sanitizervariation
SanitizerType
SanitizerType
cc.SanitizerType
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
Default: true
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
vendor_snapshot
name
,
arch
,
binaries
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
header_libs
,
host_required
,
init_rc
,
licenses
,
multilib
,
native_bridge_supported
,
objects
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
rlibs
,
shared_libs
,
soc_specific
,
static_libs
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_arch
,
target_required
,
vendor
,
vendor_ramdisk
,
version
,
vintf_fragments
,
visibility
,
vndk_libs
name
string, The name of the module. Must be unique across all modules.
arch
interface
binaries
list of string
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
objects
list of string
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕static_libs
⊕shared_libs
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
rlibs
list of string
shared_libs
list of string
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
version
string, snapshot version.
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vndk_libs
list of string
vendor_snapshot_binary
vendor_snapshot_binary is a special prebuilt executable binary which is auto-generated by
development/vendor_snapshot/update.py. As a part of vendor snapshot, vendor_snapshot_binary
overrides the vendor variant of the cc binary with the same name, if BOARD_VNDK_VERSION is set.
name
,
src
,
defaults
,
afdo
,
allow_undefined_symbols
,
apex_available
,
arch
,
bazel_module
,
bootstrap
,
buildstubs
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_generated_headers
,
export_header_lib_headers
,
export_shared_lib_headers
,
export_static_lib_headers
,
group_static_libs
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_executable
,
static_libs
,
stem
,
strip
,
suffix
,
symlink_preferred_arch
,
symlinks
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
⊕bazel_module
bazelModuleProperties
In "Bazel mixed build" mode, this represents the Bazel target replacing
this Soong module.
label
string, The label of the Bazel target replacing this Soong module. When run in conversion mode, this
will import the handcrafted build target into the autogenerated file. Note: this may result in
a conflict due to duplicate targets if bp2build_available is also set.
bp2build_available
bool, If true, bp2build will generate the converted Bazel target for this module. Note: this may
cause a conflict due to the duplicate targets if label is also set.
This is a bool pointer to support tristates: true, false, not set.
To opt in a module, set bazel_module: { bp2build_available: true }
To opt out a module, set bazel_module: { bp2build_available: false }
To defer the default setting for the directory, do not set the value.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other binaries
(in Make or Soong).
This does not completely prevent installation of the overridden binaries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_executable
bool, compile executable with -static
static_libs
list of string, list of modules that should be statically linked into this module.
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
suffix
string, append to the name of the output
symlink_preferred_arch
bool, if set, install a symlink to the preferred architecture
symlinks
list of string, install symlinks to the binary. Symlink names will have the suffix and the binary
extension (if any) appended
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
⊕target.product
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
⊕target.vendor
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
vendor_snapshot_header is a special header library which is auto-generated by
development/vendor_snapshot/update.py. As a part of vendor snapshot, vendor_snapshot_header
overrides the vendor variant of the cc header library with the same name, if BOARD_VNDK_VERSION
is set.
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
cfi
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
hwasan
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize_minimal_dep
,
sanitize_ubsan_dep
,
sanitizervariation
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
Properties for ABI compatibility checker.
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
⊕strip.keep_symbols_and_debug_frame
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
Generate stubs to make this library accessible to APEXes.
⊕target.android
If this is a vendor public library, properties to describe the vendor public library stubs.
vendor_snapshot_object
vendor_snapshot_object is a special prebuilt compiled object file which is auto-generated by
development/vendor_snapshot/update.py. As a part of vendor snapshot, vendor_snapshot_object
overrides the vendor variant of the cc object with the same name, if BOARD_VNDK_VERSION is set.
name
,
src
,
defaults
,
apex_available
,
arch
,
bootstrap
,
clang
,
compile_multilib
,
crt
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
enabled
,
exclude_from_ndk_sysroot
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
header_libs
,
host_required
,
init_rc
,
installable
,
licenses
,
linker_script
,
logtags
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
objs
,
odm_available
,
owner
,
prefix_symbols
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
required
,
sanitize
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static_libs
,
stl
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.host
,
target.platform
,
target.recovery
,
target_arch
,
target_required
,
test_for
,
vendor
,
vendor_available
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
crt
bool, Indicates that this module is a CRT object. CRT objects will be split
into a variant per-API level between min_sdk_version and current.
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_ndk_sysroot
bool, Indicates that this module should not be included in the NDK sysroot.
Only applies to CRT objects. Defaults to false.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
installable
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_script
string, if set, the path to a linker script to pass to ld -r when combining multiple object files.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
objs
list of string, names of other cc_object modules to link into this module using partial linking
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
owner
string, vendor who owns this module
prefix_symbols
string, if set, add an extra objcopy --prefix-symbols= step
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
required
list of string, names of other modules to install if this module is installed
⊕sanitize
SanitizeUserProps
never
bool, Prevent use of any sanitizers on this module
Default: true
address
bool, ASan (Address sanitizer), incompatible with static binaries.
Always runs in a diagnostic mode.
Use of address sanitizer disables cfi sanitizer.
Hwaddress sanitizer takes precedence over this sanitizer.
thread
bool, TSan (Thread sanitizer), incompatible with static binaries and 32 bit architectures.
Always runs in a diagnostic mode.
Use of thread sanitizer disables cfi and scudo sanitizers.
Hwaddress sanitizer takes precedence over this sanitizer.
hwaddress
bool, HWASan (Hardware Address sanitizer).
Use of hwasan sanitizer disables cfi, address, thread, and scudo sanitizers.
all_undefined
bool, Undefined behavior sanitizer
undefined
bool, Subset of undefined behavior sanitizer
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable
fuzzer
bool, Fuzzer, incompatible with static binaries.
safestack
bool, safe-stack sanitizer, incompatible with 32-bit architectures.
cfi
bool, cfi sanitizer, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, incompatible with Darwin.
scudo
bool, scudo sanitizer, incompatible with asan, hwasan, tsan
This should not be used in Android 11+ : https://source.android.com/devices/tech/debug/scudo
deprecated
scs
bool, shadow-call-stack sanitizer, only available on arm64/riscv64.
memtag_heap
bool, Memory-tagging, only available on arm64
if diag.memtag unset or false, enables async memory tagging
memtag_stack
bool, Memory-tagging stack instrumentation, only available on arm64
Adds instrumentation to detect stack buffer overflows and use-after-scope using MTE.
writeonly
bool, A modifier for ASAN and HWASAN for write only instrumentation
⊕diag
Sanitizers to run in the diagnostic mode (as opposed to the release mode).
Replaces abort() on error with a human-readable error message.
Address and Thread sanitizers always run in diagnostic mode.
undefined
bool, Undefined behavior sanitizer, diagnostic mode
cfi
bool, cfi sanitizer, diagnostic mode, incompatible with asan, hwasan, fuzzer, or Darwin
integer_overflow
bool, signed/unsigned integer overflow sanitizer, diagnostic mode, incompatible with Darwin.
memtag_heap
bool, Memory-tagging, only available on arm64
requires sanitizer.memtag: true
if set, enables sync memory tagging
misc_undefined
list of string, List of specific undefined behavior sanitizers to enable in diagnostic mode
no_recover
list of string, List of sanitizers to pass to -fno-sanitize-recover
results in only the first detected error for these sanitizers being reported and program then
exits with a non-zero exit code.
⊕config
Sanitizers to run with flag configuration specified
cfi_assembly_support
bool, Enables CFI support flags for assembly-heavy libraries
recover
list of string, List of sanitizers to pass to -fsanitize-recover
allows execution to continue for these sanitizers to detect multiple errors rather than only
the first one
blocklist
string, value to pass to -fsanitize-ignorelist
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of shared library modules should only provide headers for this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of static library modules that should only provide headers for this module.
stl
string, Select the STL library to use. Possible values are "libc++",
"libc++_static", "libstdc++", or "none". Leave blank to select the
default.
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of default libraries that will provide headers for this module. If unset, generally
defaults to libc, libm, and libdl. Set to [] to prevent using headers from the defaults.
target
interface
⊕target.android
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.recovery
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vendor_snapshot_shared
vendor_snapshot_shared is a special prebuilt shared library which is auto-generated by
development/vendor_snapshot/update.py. As a part of vendor snapshot, vendor_snapshot_shared
overrides the vendor variant of the cc shared library with the same name, if BOARD_VNDK_VERSION
is set.
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
cfi
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
hwasan
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize_minimal_dep
,
sanitize_ubsan_dep
,
sanitizervariation
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
⊕cfi
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_flags
list of string, list of flags that will be used for any module that links against this module.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
⊕hwasan
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
⊕sanitizervariation
SanitizerType
SanitizerType
cc.SanitizerType
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
Default: true
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
vendor_snapshot_static
vendor_snapshot_static is a special prebuilt static library which is auto-generated by
development/vendor_snapshot/update.py. As a part of vendor snapshot, vendor_snapshot_static
overrides the vendor variant of the cc static library with the same name, if BOARD_VNDK_VERSION
is set.
name
,
src
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
bootstrap
,
buildstubs
,
cfi
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
hwasan
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sanitize_minimal_dep
,
sanitize_ubsan_dep
,
sanitizervariation
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared_libs
,
soc_specific
,
static
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
src
string, Prebuilt file for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
⊕cfi
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_flags
list of string, list of flags that will be used for any module that links against this module.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
⊕hwasan
SnapshotLibraryProperties
Module definitions for snapshots of libraries (shared, static, header).
Modules (vendor|recovery)_snapshot_(shared|static|header) are defined here. Shared libraries and
static libraries have their prebuilt library files (.so for shared, .a for static) as their src,
which can be installed or linked against. Also they export flags needed when linked, such as
include directories, c flags, sanitize dependency information, etc.
These modules are auto-generated by development/vendor_snapshot/update.py.
src
string, Prebuilt file for each arch.
export_include_dirs
list of string, list of directories that will be added to the include path (using -I).
export_system_include_dirs
list of string, list of directories that will be added to the system path (using -isystem).
export_flags
list of string, list of flags that will be used for any module that links against this module.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sanitize_minimal_dep
bool, Whether this prebuilt needs to depend on sanitize minimal runtime or not.
sanitize_ubsan_dep
bool, Whether this prebuilt needs to depend on sanitize ubsan runtime or not.
⊕sanitizervariation
SanitizerType
SanitizerType
cc.SanitizerType
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
⊕static
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
Default: true
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
⊕target.product
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
versioned_ndk_headers preprocesses the headers with the bionic versioner:
https://android.googlesource.com/platform/bionic/+/master/tools/versioner/README.md.
Unlike the ndk_headers soong module, versioned_ndk_headers operates on a
directory level specified in `from` property. This is only used to process
the bionic/libc/include directory.
name
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
from
,
host_required
,
init_rc
,
license
,
licenses
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target.android
,
target.host
,
target_required
,
to
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
⊕target.android
vndk_prebuilt_shared
vndk_prebuilt_shared installs Vendor Native Development kit (VNDK) snapshot
shared libraries for system build. Example:
vndk_prebuilt_shared {
name: "libfoo",
version: "27",
target_arch: "arm64",
vendor_available: true,
product_available: true,
vndk: {
enabled: true,
},
export_include_dirs: ["include/external/libfoo/vndk_include"],
arch: {
arm64: {
srcs: ["arm/lib64/libfoo.so"],
},
arm: {
srcs: ["arm/lib/libfoo.so"],
},
},
}
name
,
srcs
,
defaults
,
afdo
,
aidl
,
allow_undefined_symbols
,
apex_available
,
arch
,
binder32bit
,
bootstrap
,
buildstubs
,
check_elf_files
,
clang
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
double_loadable
,
dynamic_list
,
enabled
,
exclude_from_recovery_snapshot
,
exclude_from_vendor_snapshot
,
exclude_runtime_libs
,
exclude_shared_libs
,
exclude_static_libs
,
export_flags
,
export_generated_headers
,
export_header_lib_headers
,
export_include_dirs
,
export_shared_lib_headers
,
export_static_lib_headers
,
export_system_include_dirs
,
force_symbols_not_weak_list
,
force_symbols_weak_list
,
group_static_libs
,
header_abi_checker
,
header_libs
,
host_ldlibs
,
host_required
,
init_rc
,
inject_bssl_hash
,
install_in_root
,
install_in_xbin
,
installable
,
ldflags
,
licenses
,
linker_scripts
,
llndk
,
logtags
,
lto
,
min_sdk_version
,
multilib
,
native_bridge_supported
,
native_coverage
,
no_libcrt
,
nocrt
,
odm_available
,
overrides
,
owner
,
pack_relocations
,
pgo
,
product_available
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.arc
,
product_variables.debuggable
,
product_variables.eng
,
product_variables.flatten_apex
,
product_variables.malloc_not_svelte
,
product_variables.native_coverage
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
proto
,
ramdisk
,
ramdisk_available
,
recovery
,
recovery_available
,
relative_install_path
,
required
,
runtime_libs
,
sdclang
,
sdk_variant_only
,
sdk_version
,
shared
,
shared_libs
,
soc_specific
,
static_libs
,
static_ndk_lib
,
stem
,
strip
,
stubs
,
suffix
,
system_ext_specific
,
system_shared_libs
,
target
,
target.android
,
target.apex
,
target.host
,
target.platform
,
target.product
,
target.ramdisk
,
target.recovery
,
target.vendor
,
target.vendor_ramdisk
,
target_arch
,
target_required
,
test_for
,
tidy
,
tidy_checks
,
tidy_checks_as_errors
,
tidy_flags
,
unexported_symbols_list
,
unique_host_soname
,
use_clang_lld
,
use_version_lib
,
vendor
,
vendor_available
,
vendor_public_library
,
vendor_ramdisk
,
vendor_ramdisk_available
,
version
,
version_script
,
vintf_fragments
,
visibility
,
vndk
,
whole_program_vtables
,
whole_static_libs
name
string, The name of the module. Must be unique across all modules.
srcs
list of string, Prebuilt files for each arch.
defaults
list of string
afdo
bool, Afdo allows developers self-service enroll for
automatic feedback-directed optimization using profile data.
⊕aidl
allow_undefined_symbols
bool, allow the module to contain undefined symbols. By default,
modules cannot contain undefined symbols that are not satisified by their immediate
dependencies. Set this flag to true to remove --no-undefined from the linker flags.
This flag should only be necessary for compiling low-level libraries like libc.
apex_available
list of string, Availability of this module in APEXes. Only the listed APEXes can contain this module. If
the module has stubs then other APEXes and the platform may access it through them
(subject to visibility).
"//apex_available:anyapex" is a pseudo APEX name that matches to any APEX.
"//apex_available:platform" refers to non-APEX partitions like "system.img".
"com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.".
Default is ["//apex_available:platform"].
arch
interface
binder32bit
bool, If the prebuilt snapshot lib is built with 32 bit binder, this must be set to true.
The lib with 64 bit binder does not need to set this property.
bootstrap
bool, Allows this module to use non-APEX version of libraries. Useful
for building binaries that are started before APEXes are activated.
⊕buildstubs
bool
check_elf_files
bool, Check the prebuilt ELF files (e.g. DT_SONAME, DT_NEEDED, resolution of undefined symbols,
etc).
Default: false
clang
bool, Deprecated. true is the default, false is invalid.
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
double_loadable
bool, whether this module is capable of being loaded with other instance
(possibly an older version) of the same module in the same process.
Currently, a shared library that is a member of VNDK (vndk: {enabled: true})
can be double loaded in a vendor process if the library is also a
(direct and indirect) dependency of an LLNDK library. Such libraries must be
explicitly marked as `double_loadable: true` by the owner, or the dependency
from the LLNDK lib should be cut if the lib is not designed to be double loaded.
dynamic_list
string, local file name to pass to the linker as --dynamic-list
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
exclude_from_recovery_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the recovery snapshot.
exclude_from_vendor_snapshot
bool, Normally Soong uses the directory structure to decide which modules
should be included (framework) or excluded (non-framework) from the
different snapshots (vendor, recovery, etc.), but this property
allows a partner to exclude a module normally thought of as a
framework module from the vendor snapshot.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with this module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build this module
exclude_static_libs
list of string, list of static libs that should not be used to build this module
export_flags
list of string, list of flags that will be used for any module that links against this module.
export_include_dirs
list of string, list of directories relative to the Blueprints file that will
be added to the include path (using -I) for this module and any module that links
against this module. Directories listed in export_include_dirs do not need to be
listed in local_include_dirs.
export_system_include_dirs
list of string, list of directories that will be added to the system include path
using -isystem for this module and any module that links against this module.
force_symbols_not_weak_list
string, local file name to pass to the linker as -force_symbols_not_weak_list
force_symbols_weak_list
string, local file name to pass to the linker as -force_symbols_weak_list
group_static_libs
bool, deprecated and ignored because lld makes it unnecessary. See b/189475744.
Properties for ABI compatibility checker.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
host_ldlibs
list of string, -l arguments to pass to linker for host-provided shared libraries
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
inject_bssl_hash
bool, Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
install_in_root
bool, Install output directly in {partition}/, not in any subdir. This is only intended for use by
init_first_stage.
install_in_xbin
bool, Install output directly in {partition}/xbin
installable
bool
ldflags
list of string, list of module-specific flags that will be used for all link steps
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
linker_scripts
list of string, local files to pass to the linker as --script
⊕llndk
llndkLibraryProperties
If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
the module pointed to by llndk_stubs if it is set.
symbol_file
string, Relative path to the symbol map.
An example file can be seen here: TODO(danalbert): Make an example.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
private
bool, whether this module can be directly depended upon by libs that are installed
to /vendor and /product.
When set to true, this module can only be depended on by VNDK libraries, not
vendor nor product libraries. This effectively hides this module from
non-system modules. Default value is false.
logtags
list of string, *.logtags files, to combine together in order to generate the /system/etc/event-log-tags
file
⊕lto
Lto must violate capitialization style for acronyms so that it can be
referred to in blueprint files as "lto"
never
bool
full
bool
thin
bool
min_sdk_version
string, Minimum OS API level supported by this C or C++ module. This property becomes the value
of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
this property is also used to ensure that the min_sdk_version of the containing module is
not older (i.e. less) than this module's min_sdk_version. When not set, this property
defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
min_sdk_version of the containing APEX. When the module
is not built for an APEX, "apex_inherit" defaults to sdk_version.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
native_coverage
bool
no_libcrt
bool, don't link in libclang_rt.builtins-*.a
Default: true
nocrt
bool, don't link in crt_begin and crt_end. This flag should only be necessary for
compiling crt or libc.
Default: true
odm_available
bool, This is the same as the "vendor_available" except that the install path
of the vendor variant is /odm or /vendor/odm.
By replacing "vendor_available: true" with "odm_available: true", the
module will install its vendor variant to the /odm partition or /vendor/odm.
As the modules with "odm_available: true" still create the vendor variants,
they can link to the other vendor modules as the vendor_available modules do.
Also, the vendor modules can link to odm_available modules.
It may not be used for VNDK modules.
overrides
list of string, Names of modules to be overridden. Listed modules can only be other shared libraries
(in Make or Soong).
This does not completely prevent installation of the overridden libraries, but if both
binaries would be installed by default (in PRODUCT_PACKAGES) the other library will be removed
from PRODUCT_PACKAGES.
owner
string, vendor who owns this module
pack_relocations
bool, Generate compact dynamic relocation table, default true.
⊕pgo
instrumentation
bool
profile_file
string
benchmarks
list of string
enable_profile_use
bool
cflags
list of string, Additional compiler flags to use when building this module
for profiling.
product_available
bool, whether this module should be allowed to be directly depended by other
modules with `product_specific: true` or `product_available: true`.
If set to true, an additional product variant will be built separately
that is limited to the set of libraries and headers that are exposed to
/product modules.
The product variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /product modules.
Different from the 'vendor_available' property, the modules with
vndk: {enabled: true} don't have to define 'product_available'. The VNDK
library without 'product_available' may not be depended on by any other
modules that has product variants including the product available VNDKs.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.arc
⊕shared_libs
⊕static_libs
⊕srcs
⊕whole_static_libs
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕strip.all
⊕strip.keep_symbols
⊕strip.keep_symbols_and_debug_frame
⊕static_libs
⊕whole_static_libs
⊕shared_libs
⊕srcs
⊕product_variables.eng
⊕product_variables.flatten_apex
⊕product_variables.malloc_not_svelte
⊕shared_libs
⊕whole_static_libs
⊕exclude_static_libs
⊕srcs
⊕product_variables.native_coverage
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
⊕proto
ramdisk
bool, Whether this module is installed to ramdisk
ramdisk_available
bool, Make this module available when building for ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
recovery
bool, Whether this module is installed to recovery partition
recovery_available
bool, Make this module available when building for recovery
relative_install_path
string, install to a subdirectory of the default install path for the module
required
list of string, names of other modules to install if this module is installed
runtime_libs
list of string, list of modules that should be installed with this module. This is similar to 'required'
but '.vendor' suffix will be appended to the module names if the shared libraries have
vendor variants and this module uses VNDK.
sdclang
bool, compile module with SDLLVM instead of AOSP LLVM
sdk_variant_only
bool, If true, always create an sdk variant and don't create a platform variant.
sdk_version
string, The API level that this module is built against. The APIs of this API level will be
visible at build time, but use of any APIs newer than min_sdk_version will render the
module unloadable on older devices. In the future it will be possible to weakly-link new
APIs, making the behavior match Java: such modules will load on older devices, but
calling new APIs on devices that do not support them will result in a crash.
This property has the same behavior as sdk_version does for Java modules. For those
familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
does for Java code.
In addition, setting this property causes two variants to be built, one for the platform
and one for apps.
⊕shared
StaticOrSharedProperties
srcs
list of string
tidy_disabled_srcs
list of string
tidy_timeout_srcs
list of string
⊕sanitized
Sanitized
⊕none
⊕address
⊕hwaddress
cflags
list of string
enabled
bool
whole_static_libs
list of string
static_libs
list of string
shared_libs
list of string
system_shared_libs
list of string
apex_available
list of string
installable
bool
shared_libs
list of string, list of modules that should be dynamically linked into this module.
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
static_libs
list of string, list of modules that should be statically linked into this module.
static_ndk_lib
bool
stem
string, set the name of the output
⊕strip
none
bool, none forces all stripping to be disabled.
Device modules default to stripping enabled leaving mini debuginfo.
Host modules default to stripping disabled, but can be enabled by setting any other
strip boolean property.
Default: true
all
bool, all forces stripping everything, including the mini debug info.
keep_symbols
bool, keep_symbols enables stripping but keeps all symbols.
keep_symbols_list
list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled.
If it is unset then all symbols are kept.
keep_symbols_and_debug_frame
bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
⊕stubs
Generate stubs to make this library accessible to APEXes.
symbol_file
string, Relative path to the symbol map. The symbol map provides the list of
symbols that are exported for stubs variant of this library.
versions
list of string, List versions to generate stubs libs for. The version name "current" is always
implicitly added.
implementation_installable
bool, Whether to not require the implementation of the library to be installed if a
client of the stubs is installed. Defaults to true; set to false if the
implementation is made available by some other means, e.g. in a Microdroid
virtual machine.
suffix
string, set suffix of the name of the output
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
system_shared_libs
list of string, list of system libraries that will be dynamically linked to
shared library and executable modules. If unset, generally defaults to libc,
libm, and libdl. Set to [] to prevent linking against the defaults.
Default: []
target
interface
⊕target.android
⊕target.apex
exclude_shared_libs
list of string, list of shared libs that should not be used to build the apex variant of
the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build the apex
variant of the C/C++ module.
⊕target.host
⊕target.platform
required
list of string, List of modules required by the core variant.
exclude_required
list of string, List of modules not required by the core variant.
shared_libs
list of string, list of shared libs that should be use to build the platform variant
of a module that sets sdk_version. This should rarely be necessary,
in most cases the same libraries are available for the SDK and platform
variants.
exclude_shared_libs
list of string, list of shared libs that should not be used to build the platform variant
of the C/C++ module.
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.product
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
⊕target.ramdisk
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
ramdisk variant of the C/C++ module.
⊕target.recovery
shared_libs
list of string, list of shared libs that only should be used to build the recovery
variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build the recovery
variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
recovery variant of the C/C++ module.
required
list of string, List of modules required by the recovery variant.
exclude_required
list of string, List of modules not required by the recovery variant.
⊕target.vendor
override_export_include_dirs
list of string, list of exported include directories, like
export_include_dirs, that will be applied to
vendor or product variant of this library.
This will overwrite any other declarations.
shared_libs
list of string, list of shared libs that only should be used to build vendor or
product variant of the C/C++ module.
static_libs
list of string, list of static libs that only should be used to build vendor or
product variant of the C/C++ module.
exclude_shared_libs
list of string, list of shared libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build vendor or
product variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor or product variant of the C/C++ module.
version_script
string, version script for vendor or product variant
suffix
string, set suffix of the name of the output
enabled
bool, Enable ABI checks (even if this is not an LLNDK/VNDK lib)
symbol_file
string, Path to a symbol file that specifies the symbols to be included in the generated
ABI dump file
exclude_symbol_versions
list of string, Symbol versions that should be ignored from the symbol file
exclude_symbol_tags
list of string, Symbol tags that should be ignored from the symbol file
check_all_apis
bool, Run checks on all APIs (in addition to the ones referred by
one of exported ELF symbols.)
diff_flags
list of string, Extra flags passed to header-abi-diff
ref_dump_dirs
list of string, Opt-in reference dump directories
⊕target.vendor_ramdisk
exclude_shared_libs
list of string, list of shared libs that should not be used to build
the recovery variant of the C/C++ module.
exclude_static_libs
list of string, list of static libs that should not be used to build
the vendor ramdisk variant of the C/C++ module.
exclude_runtime_libs
list of string, list of runtime libs that should not be installed along with the
vendor ramdisk variant of the C/C++ module.
target_arch
string, Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64')
target_required
list of string, names of other modules to install on target if this module is installed
test_for
list of string, List of APEXes that this module has private access to for testing purpose. The module
can depend on libraries that are not exported by the APEXes and use private symbols
from the exported libraries.
tidy
bool, whether to run clang-tidy over C-like sources.
tidy_checks
list of string, Extra checks to enable or disable in clang-tidy
tidy_checks_as_errors
list of string, Checks that should be treated as errors.
tidy_flags
list of string, Extra flags to pass to clang-tidy
unexported_symbols_list
string, local file name to pass to the linker as -unexported_symbols_list
unique_host_soname
bool, rename host libraries to prevent overlap with system installed libraries
use_clang_lld
bool, Use clang lld instead of gnu ld.
use_version_lib
bool, make android::build:GetBuildNumber() available containing the build ID.
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_available
bool, whether this module should be allowed to be directly depended by other
modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`.
If set to true, two variants will be built separately, one like
normal, and the other limited to the set of libraries and headers
that are exposed to /vendor modules.
The vendor variant may be used with a different (newer) /system,
so it shouldn't have any unversioned runtime dependencies, or
make assumptions about the system that may not be true in the
future.
If set to false, this module becomes inaccessible from /vendor modules.
The modules with vndk: {enabled: true} must define 'vendor_available'
to 'true'.
Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
⊕vendor_public_library
vendorPublicLibraryProperties
If this is a vendor public library, properties to describe the vendor public library stubs.
symbol_file
string, Relative path to the symbol map.
unversioned
bool, Whether the system library uses symbol versions.
override_export_include_dirs
list of string, list of directories relative to the Blueprints file that willbe added to the include path
(using -I) for any module that links against the LLNDK variant of this module, replacing
any that were listed outside the llndk clause.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vendor_ramdisk_available
bool, Make this module available when building for vendor ramdisk.
On device without a dedicated recovery partition, the module is only
available after switching root into
/first_stage_ramdisk. To expose the module before switching root, install
the recovery variant instead.
version
string, VNDK snapshot version.
version_script
string, local file name to pass to the linker as --version-script
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
⊕vndk
enabled
bool, declared as a VNDK or VNDK-SP module. The vendor variant
will be installed in /system instead of /vendor partition.
`vendor_available` and `product_available` must be explicitly
set to either true or false together with `vndk: {enabled: true}`.
support_system_process
bool, declared as a VNDK-SP module, which is a subset of VNDK.
`vndk: { enabled: true }` must set together.
All these modules are allowed to link to VNDK-SP or LL-NDK
modules only. Other dependency will cause link-type errors.
If `support_system_process` is not set or set to false,
the module is VNDK-core and can link to other VNDK-core,
VNDK-SP or LL-NDK modules only.
private
bool, declared as a VNDK-private module.
This module still creates the vendor and product variants refering
to the `vendor_available: true` and `product_available: true`
properties. However, it is only available to the other VNDK modules
but not to the non-VNDK vendor or product modules.
extends
string, Extending another module
whole_program_vtables
bool, Use -fwhole-program-vtables cflag.
whole_static_libs
list of string, list of modules whose object files should be linked into this module
in their entirety. For static library modules, all of the .o files from the intermediate
directory of the dependency will be linked into this modules .a file. For a shared library,
the dependency's .a file will be linked into this module using -Wl,--whole-archive.
vndkcore_libraries_txt
vndkcore_libraries_txt is a singleton module whose content is a list of VNDK core libraries
generated by Soong but can be referenced by other modules.
For example, apex_vndk can depend on these files as prebuilt.
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
insert_vndk_version
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
Default: vndkcore.libraries.txt
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
insert_vndk_version
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vndkcorevariant_libraries_txt
vndkcorevariant_libraries_txt is a singleton module whose content is a list of VNDK libraries
that are using the core variant, generated by Soong but can be referenced by other modules.
For example, apex_vndk can depend on these files as prebuilt.
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
insert_vndk_version
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
Default: vndkcorevariant.libraries.txt
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
insert_vndk_version
bool
Default: false
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vndkprivate_libraries_txt
vndkprivate_libraries_txt is a singleton module whose content is a list of VNDK private libraries
generated by Soong but can be referenced by other modules.
For example, apex_vndk can depend on these files as prebuilt.
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
insert_vndk_version
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
Default: vndkprivate.libraries.txt
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
insert_vndk_version
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vndkproduct_libraries_txt
vndkproduct_libraries_txt is a singleton module whose content is a list of VNDK product libraries
generated by Soong but can be referenced by other modules.
For example, apex_vndk can depend on these files as prebuilt.
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
insert_vndk_version
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
Default: vndkproduct.libraries.txt
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
insert_vndk_version
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.
vndksp_libraries_txt
vndksp_libraries_txt is a singleton module whose content is a list of VNDKSP libraries
generated by Soong but can be referenced by other modules.
For example, apex_vndk can depend on these files as prebuilt.
name
,
arch
,
compile_multilib
,
debug_ramdisk
,
device_specific
,
dist
,
dists
,
enabled
,
host_required
,
init_rc
,
insert_vndk_version
,
licenses
,
multilib
,
native_bridge_supported
,
owner
,
product_specific
,
product_variables.always_use_prebuilt_sdks
,
product_variables.debuggable
,
product_variables.flatten_apex
,
product_variables.pdk
,
product_variables.unbundled_build
,
proprietary
,
ramdisk
,
recovery
,
required
,
soc_specific
,
system_ext_specific
,
target
,
target.android
,
target.host
,
target_required
,
vendor
,
vendor_ramdisk
,
vintf_fragments
,
visibility
name
string, The name of the module. Must be unique across all modules.
Default: vndksp.libraries.txt
arch
interface
compile_multilib
string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values
are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both
architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit
platform).
debug_ramdisk
bool, Whether this module is installed to debug ramdisk
device_specific
bool, whether this module is specific to a device, not only for SoC, but also for off-chip
peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition
does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist).
This implies `soc_specific:true`.
⊕dist
Dist
configuration to distribute output files from this module to the distribution
directory (default: $OUT/dist, configurable with $DIST_DIR)
targets
list of string, Copy the output of this module to the $DIST_DIR when `dist` is specified on the
command line and any of these targets are also on the command line, or otherwise
built
dest
string, The name of the output artifact. This defaults to the basename of the output of
the module.
dir
string, The directory within the dist directory to store the artifact. Defaults to the
top level directory ("").
suffix
string, A suffix to add to the artifact file name (before any extension).
append_artifact_with_product
bool, If true, then the artifact file will be appended with _<product name>. For
example, if the product is coral and the module is an android_app module
of name foo, then the artifact would be foo_coral.apk. If false, there is
no change to the artifact file name.
tag
string, A string tag to select the OutputFiles associated with the tag.
If no tag is specified then it will select the default dist paths provided
by the module type. If a tag of "" is specified then it will return the
default output files provided by the modules, i.e. the result of calling
OutputFiles("").
dists
list of Dist, a list of configurations to distribute output files from this module to the
distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
enabled
bool, emit build rules for this module
Disabling a module should only be done for those modules that cannot be built
in the current environment. Modules that can build in the current environment
but are not usually required (e.g. superceded by a prebuilt) should not be
disabled as that will prevent them from being built by the checkbuild target
and so prevent early detection of changes that have broken those modules.
host_required
list of string, names of other modules to install on host if this module is installed
init_rc
list of string, init.rc files to be installed if this module is installed
insert_vndk_version
bool
licenses
list of string, Describes the licenses applicable to this module. Must reference license modules.
multilib
interface
native_bridge_supported
bool, Whether this module is built for non-native architectures (also known as native bridge binary)
owner
string, vendor who owns this module
product_specific
bool, whether this module is specific to a software configuration of a product (e.g. country,
network operator, etc). When set to true, it is installed into /product (or
/system/product if product partition does not exist).
⊕product_variables.always_use_prebuilt_sdks
⊕product_variables.debuggable
⊕init_rc
⊕required
⊕host_required
⊕target_required
⊕product_variables.flatten_apex
⊕product_variables.pdk
⊕product_variables.unbundled_build
proprietary
bool, whether this is a proprietary vendor module, and should be installed into /vendor
ramdisk
bool, Whether this module is installed to ramdisk
recovery
bool, Whether this module is installed to recovery partition
required
list of string, names of other modules to install if this module is installed
soc_specific
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
system_ext_specific
bool, whether this module extends system. When set to true, it is installed into /system_ext
(or /system/system_ext if system_ext partition does not exist).
target
interface
⊕target.android
⊕target.host
target_required
list of string, names of other modules to install on target if this module is installed
vendor
bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true,
it is installed into /vendor (or /system/vendor if vendor partition does not exist).
Use `soc_specific` instead for better meaning.
vendor_ramdisk
bool, Whether this module is installed to vendor ramdisk
vintf_fragments
list of string, VINTF manifest fragments to be installed if this module is installed
visibility
list of string, Controls the visibility of this module to other modules. Allowable values are one or more of
these formats:
["//visibility:public"]: Anyone can use this module.
["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
this module.
["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
Can only be used at the beginning of a list of visibility rules.
["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
other/package (defined in some/package/*.bp and other/package/*.bp) have access to
this module. Note that sub-packages do not have access to the rule; for example,
//some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
is a special module and must be used verbatim. It represents all of the modules in the
package.
["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
or other or in one of their sub-packages have access to this module. For example,
//project:rule, //project/library:lib or //other/testing/internal:munge are allowed
to depend on this rule (but not //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
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.
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
it will use the `default_visibility` of its closest ancestor package for which
a `default_visibility` property is specified.
If no `default_visibility` property can be found then the module uses the
global default of `//visibility:legacy_public`.
The `visibility` property has no effect on a defaults module although it does
apply to any non-defaults module that uses it. To set the visibility of a
defaults module, use the `defaults_visibility` property on the defaults module;
not to be confused with the `default_visibility` property on the package module.
See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for
more details.