| #!/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 |