You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.1 KiB
91 lines
3.1 KiB
# LinkerConfig
|
|
|
|
## Introduction
|
|
|
|
Linkerconfig is a program to generate linker configuration based on the runtime
|
|
environment. Linkerconfig generates one or more ld.config.txt files and some
|
|
other files under /linkerconfig during init. Linker will read this generated
|
|
configuration file(s) to find out link relationship between libraries and
|
|
executable.
|
|
|
|
## Inputs
|
|
|
|
TODO: explain inputs (e.g. /system/etc/public.libraries.txt,
|
|
/apex/apex-info-list.xml, ..)
|
|
|
|
### linker.config.json
|
|
|
|
Linker configuration file can be used to add extra information while linkerconfig
|
|
creates linker configuration with the module. This module can be defined as
|
|
`linker_config` from Soong, and it will be translated as protobuf file at build
|
|
time.
|
|
|
|
A linker configuration file(linker.config.json) is compiled into a protobuf at build time
|
|
by `conv_linker_config`. You can find the compiled file under `<base>/etc/linker.config.pb`.
|
|
For example, `/apex/com.android.art/etc/linker.config.pb` is a configuration for the `com.android.art`
|
|
APEX.
|
|
|
|
`/system/etc/linker.config.pb`(or its source module `system_linker_config`) is special because
|
|
its `provideLibs` key is generated at build time.
|
|
|
|
#### Format
|
|
|
|
linker.config.json file is in json format which can contain properties as below.
|
|
|
|
| Property Name | Type | Description | Allowed module |
|
|
| ------------- | ---- | ---------------------------------------------------- | -------------- |
|
|
| permittedPaths| List<string> | Additional permitted paths | APEX |
|
|
| visible | bool | Force APEX namespace to be visible from all sections if the value is true | APEX |
|
|
| provideLibs | List<string> | Libraries providing from the module | System |
|
|
| requireLibs | List<string> | Libraries required from the module | System |
|
|
|
|
#### Example
|
|
|
|
##### APEX module
|
|
```
|
|
{
|
|
"permittedPaths" : [ "/a", "/b/c", "/d/e/f"],
|
|
"visible": true
|
|
}
|
|
```
|
|
|
|
##### System
|
|
```
|
|
{
|
|
"provideLibs" : [ "a.so", "b.so", "c.so" ],
|
|
"requireLibs" : [ "foo.so", "bar.so", "baz.so" ]
|
|
}
|
|
```
|
|
|
|
## Outputs
|
|
|
|
### /linkerconfig/ld.config.txt & /linkerconfig/*/ld.config.txt
|
|
|
|
TODO: a few words about the files
|
|
|
|
Check
|
|
[ld.config.format.md](https://android.googlesource.com/platform/bionic/+/master/linker/ld.config.format.md).
|
|
|
|
### /linkerconfig/apex.libraries.txt
|
|
|
|
The file describes libraries exposed from APEXes. libnativeloader is the main
|
|
consumer of this file.
|
|
|
|
```
|
|
# comment line
|
|
jni com_android_foo libfoo_jni.so
|
|
public com_android_bar libbar.so:libbaz.so
|
|
```
|
|
|
|
The file is line-based and each line consists of `tag apex_namespace
|
|
library_list`.
|
|
|
|
- `tag` explains what `library_list` is.
|
|
- `apex_namespace` is the namespace of the apex. Note that it is mangled like
|
|
`com_android_foo` for the APEX("com.android.foo").
|
|
- `library_list` is colon-separated list of library names.
|
|
- if `tag` is `jni`, `library_list` is the list of JNI libraries exposed
|
|
by `apex_namespace`.
|
|
- if `tag` is `public`, `library_list` is the list of public libraries
|
|
exposed by `apex_namespace`. Here, public libraries are the libs listed
|
|
in `/system/etc/public.libraries.txt.` |