README.md
1 VNDK Definition Tool
2 ====================
3
4 VNDK definition tool was designed to classify all shared libraries in the
5 system partition and give suggestions to copy necessary libraries to the vendor
6 partition.
7
8 ## Usage
9
10 To run VNDK definition tool, you will need three inputs:
11
12 1. The system and vendor image for your target
13 2. Android Treble reference image
14 3. Eligible VNDK list from Google (e.g. eligible-list-v3.0.csv)
15
16 The high-level overview of the command line usage is:
17
18 $ python3 ./vndk_definition_tool.py vndk \
19 --system "/path/to/your/product_out/system" \
20 --vendor "/path/to/your/product_out/vendor" \
21 --aosp-system "/path/to/aosp/generic/system" \
22 --tag-file "eligible-list-v3.0.csv"
23
24 This command will print several lines such as:
25
26 vndk-sp: libexample1.so
27 vndk-sp-ext: libexample2.so
28 extra-vendor-libs: libexample3.so
29
30 The output implies:
31
32 1. `libexample1.so` should be copied to `/system/lib[64]/vndk-sp`.
33 2. `libexample2.so` should be copied to `/vendor/lib[64]/vndk-sp`.
34 3. `libexample3.so` should be copied to `/vendor/lib[64]`.
35
36
37 # Makefile Boilerplates
38
39 There are some boilerplates in `templates` directory that can automate the
40 process to copy shared libraries. Please copy a boilerplate, rename it as
41 `Android.mk`, and replace the placeholders with corresponding values:
42
43 * `##_VNDK_SP_##` should be replaced by library names tagged with `vndk_sp`.
44
45 * `##_VNDK_SP_EXT_##` should be replaced by library names tagged with
46 `vndk_sp_ext`.
47
48 * `##_EXTRA_VENDOR_LIBS_##` should be replaced by library names tagged with
49 `extra_vendor_libs`.
50
51 * `$(YOUR_DEVICE_NAME)` has to be replaced by your own device product name.
52
53 VNDK definition tool can fill in the library names and generate an `Android.mk`
54 when the `--output-format=make` is specified:
55
56 $ python3 ./vndk_definition_tool.py vndk \
57 --system "/path/to/your/product_out/system" \
58 --vendor "/path/to/your/product_out/vendor" \
59 --aosp-system "/path/to/aosp/generic/system" \
60 --tag-file "eligible-list-v3.0.csv" \
61 --output-format=make
62
63 These boilerplates only define the modules to copy shared libraries.
64 Developers have to add the phony package name to `PRODUCT_PACKAGES` variable in
65 the `device.mk` for their devices.
66
67 PRODUCT_PACKAGES += $(YOUR_DEVICE_NAME)-vndk
68
69
70 ## Ignore Subdirectories
71
72 Some devices keep their vendor modules in `/system/vendor`. To run VNDK
73 definition tool for those devices, we have to skip `/system/vendor` and specify
74 it with `--vendor` option. For example:
75
76 python3 vndk_definition_tool.py vndk \
77 --system ${ANDROID_PRODUCT_OUT}/system \
78 --system-dir-ignored vendor \
79 --vendor ${ANDROID_PRODUCT_OUT}/system/vendor \
80 # ...
81
82
83 ## Implicit Dependencies
84
85 If there are implicit dependencies, such as `dlopen()`, we can specify them in
86 a dependency file and load the dependency file with `--load-extra-deps`. The
87 dependency file format is simple: (a) each line stands for a dependency, and
88 (b) the file before the colon depends on the file after the colon. For
89 example, `libart.so` depends on `libart-compiler.so`:
90
91 /system/lib64/libart.so: /system/lib64/libart-compiler.so
92
93 And then, run VNDK definition tool with:
94
95 $ python3 vndk_definition_tool.py vndk \
96 --system ${ANDROID_PRODUCT_OUT}/system \
97 --vendor ${ANDROID_PRODUCT_OUT}/vendor \
98 --aosp-system ${ANDROID_PRODUCT_OUT}/../generic_arm64_a \
99 --tag-file eligible-list-v3.0.csv \
100 --load-extra-deps dlopen.dep
101
102
103 ## Remarks
104
105 To run VNDK definition tool against an image (`.img`), run the following
106 command to mount the images and run `vndk_definition_tool.py` with `sudo`:
107
108 $ simg2img system.img system.raw.img
109
110 $ simg2img vendor.img vendor.raw.img
111
112 $ mkdir system
113
114 $ mkdir vendor
115
116 $ sudo mount -o loop,ro system.raw.img system
117
118 $ sudo mount -o loop,ro vendor.raw.img vendor
119
120 $ sudo python3 vndk_definition_tool.py vndk \
121 --system system \
122 --vendor vendor \
123 --aosp-system /path/to/aosp/generic/system \
124 --tag-file eligible-list-v3.0.csv
125