aboutsummaryrefslogtreecommitdiff
path: root/tools/check_identical_lib.sh
blob: c9f436f0bb98ab8869e7ceff5cf2816cebe02ae1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/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