| #!/bin/bash |
| set -e |
| |
| STRIP_PATH="${1}" |
| CORE="${2}" |
| VENDOR="${3}" |
| |
| TMPDIR="$(mktemp -d ${CORE}.vndk_lib_check.XXXXXXXX)" |
| stripped_core="${TMPDIR}/core" |
| stripped_vendor="${TMPDIR}/vendor" |
| |
| function cleanup() { |
| rm -f "${stripped_core}" "${stripped_vendor}" |
| rmdir "${TMPDIR}" |
| } |
| trap cleanup EXIT |
| |
| function strip_lib() { |
| ${STRIP_PATH} \ |
| -i ${1} \ |
| -o ${2} \ |
| -d /dev/null \ |
| --remove-build-id |
| } |
| |
| strip_lib ${CORE} ${stripped_core} |
| strip_lib ${VENDOR} ${stripped_vendor} |
| if ! cmp -s ${stripped_core} ${stripped_vendor}; then |
| echo "ERROR: VNDK library $(basename ${CORE%.so}) has different core and" \ |
| "vendor variants! This means that the copy used in the system.img/etc" \ |
| "and vendor.img/etc images are different. In order to preserve space on" \ |
| "some devices, it is helpful if they are the same. Frequently, " \ |
| "libraries are different because they or their dependencies compile" \ |
| "things based on the macro '__ANDROID_VNDK__' or they specify custom" \ |
| "options under 'target: { vendor: { ... } }'. Here are some possible" \ |
| "resolutions:" |
| echo "ERROR: 1). Remove differences, possibly using the libvndksupport" \ |
| "function android_is_in_vendor_process in order to turn this into a" \ |
| "runtime difference." |
| echo "ERROR: 2). Add the library to the VndkMustUseVendorVariantList" \ |
| "variable in build/soong/cc/config/vndk.go, which is used to" \ |
| "acknowledge this difference." |
| exit 1 |
| fi |