README.md
1# How to make your build VNDK compliant
2
3## Enable VNDK flag
4In your device's BoardConfig.mk, set BOARD_VNDK_VERSION := current.
5
6Set that device's lunch combo and compile
7
8 make -j32 >log 2>&1
9
10
11## Fixing Build errors
12The resulting errors will be mainly of 2 types:
13
14### Copy headers not allowed
15Vendor modules are not allowed to use LOCAL_COPY_HEADERS. They need to export
16their headers via BUILD_HEADER_LIBRARY. Modules will import this library via
17LOCAL_HEADER_LIBRARIES.
18
19Here is an example on how to do that:
20* Lets call the offending module libabc. Open libabc's Android.mk
21* Note all the headers that are being copied by libabc
22* Create a local dir called include (or inc). Add symlinks to every file that is
23 being copied. If all the files are in the same folder, the include dir itself
24 will be a symlink to that folder
25* In Android.mk, remove all lines with copy headers
26
27
28 - LOCAL_COPY_HEADERS_TO := dir
29 - LOCAL_COPY_HEADERS := file1
30 - LOCAL_COPY_HEADERS := file2
31 - ....
32
33* Replace above lines with
34
35
36 + LOCAL_EXPORT_HEADER_LIBRARY_HEADERS := libabc_headers
37
38
39* Create the module_headers lib outside the definition of current module
40
41
42 + include $(CLEAR_VARS)
43 + LOCAL_MODULE := libabc_headers
44 + LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
45 + include $(BUILD_HEADER_LIBRARY)
46
47Note: - and + are code lines in patch format
48
49### Headers not found
50* Once all copy header violations are cleaned up, make will start throwing lots of
51 "file not found" errors. These are due to 2 reasons:
52
53 * Modules relying on copy headers are not finding those headers anymore due
54 to above changes
55
56 * VNDK build rules remove global includes from the path. So dirs like
57 system/core/include, frameworks/av/include or hardware/libhardware/include
58 will no longer be offered in include path
59* Fix them using the **parse_and_fix_errors.sh** script. Customize it according to
60 your needs.
61
62
63