Home | History | Annotate | only in /development/vndk/tools/definition-tool
Up to higher level directory
NameDateSize
assets/21-Aug-2018
datasets/21-Aug-2018
README.md21-Aug-20184K
templates/21-Aug-2018
tests/21-Aug-2018
tools/21-Aug-2018
vndk_definition_tool.py21-Aug-2018130.1K

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