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