|
7 months ago | |
---|---|---|
.. | ||
README.md | 7 months ago | |
parse-and-fix-errors.sh | 7 months ago |
README.md
How to make your build VNDK compliant
Enable VNDK flag
In your device's BoardConfig.mk, set BOARD_VNDK_VERSION := current.
Set that device's lunch combo and compile
make -j32 >log 2>&1
Fixing Build errors
The resulting errors will be mainly of 2 types:
Copy headers not allowed
Vendor modules are not allowed to use LOCAL_COPY_HEADERS. They need to export their headers via BUILD_HEADER_LIBRARY. Modules will import this library via LOCAL_HEADER_LIBRARIES.
Here is an example on how to do that:
-
Lets call the offending module libabc. Open libabc's Android.mk
-
Note all the headers that are being copied by libabc
-
Create a local dir called include (or inc). Add symlinks to every file that is being copied. If all the files are in the same folder, the include dir itself will be a symlink to that folder
-
In Android.mk, remove all lines with copy headers
- LOCAL_COPY_HEADERS_TO := dir
- LOCAL_COPY_HEADERS := file1
- LOCAL_COPY_HEADERS := file2
- ....
-
Replace above lines with
- LOCAL_EXPORT_HEADER_LIBRARY_HEADERS := libabc_headers
-
Create the module_headers lib outside the definition of current module
- include $(CLEAR_VARS)
- LOCAL_MODULE := libabc_headers
- LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
- include $(BUILD_HEADER_LIBRARY)
Note: - and + are code lines in patch format
Headers not found
-
Once all copy header violations are cleaned up, make will start throwing lots of "file not found" errors. These are due to 2 reasons:
-
Modules relying on copy headers are not finding those headers anymore due to above changes
-
VNDK build rules remove global includes from the path. So dirs like system/core/include, frameworks/av/include or hardware/libhardware/include will no longer be offered in include path
-
-
Fix them using the parse_and_fix_errors.sh script. Customize it according to your needs.