aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Holmes <mike.holmes@linaro.org>2016-04-03 08:50:36 -0400
committerAnders Roxell <anders.roxell@linaro.org>2016-04-25 14:36:53 +0200
commit32912edb9886083c4670959e2fffb462f88bd4b3 (patch)
treea322a4612b9feb090c696603bcec0d60bdc6ba69
parent284ae3d623a8621ce2102580e655d36eed2ab2d5 (diff)
diff-abi.sh: ABI diff tool for ODP
Signed-off-by: Mike Holmes <mike.holmes@linaro.org> Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
-rwxr-xr-xdiff-abi.sh138
-rwxr-xr-xpre-install.sh2
2 files changed, 140 insertions, 0 deletions
diff --git a/diff-abi.sh b/diff-abi.sh
new file mode 100755
index 0000000..ccaa290
--- /dev/null
+++ b/diff-abi.sh
@@ -0,0 +1,138 @@
+#!/bin/bash
+
+ROOT_DIR=$(readlink -f $(dirname $0))
+
+source ${ROOT_DIR}/helper/generic
+export CONFIGURE_FLAGS=""
+
+export GIT_BRANCH="${GIT_BRANCH:-master}"
+export COMPARE_BRANCH="${COMPARE_BRANCH:-api-next}"
+export GENERIC_SRCDIR="${GENERIC_SRCDIR:-${SRCDIR}/odp}"
+export GENERIC_BUILDDIR="${GENERIC_BUILDDIR:-${BUILDDIR}/odp_diff}"
+export COMPARE_BUILDDIR="${COMPARE_BUILDDIR:-${BUILDDIR}/odp_diff_2}"
+export CLEANUP="${CLEANUP:-1}"
+export COMPARE_URL="${COMPARE_URL:-""}"
+PLATFORM=${PLATFORM:-linux-generic}
+DETAILED_DIFF=${DETAILED_DIFF:-0}
+DETAILED_DIFF_FLAGS=""
+
+ABI_LOGDIR="${LOGDIR}/diff-abi"
+LOGFILE_BASENAME="${LOGFILE_BASENAME:-default}"
+LOGFILE="${ABI_LOGDIR}/${LOGFILE_BASENAME}-$(date "+%Y%m%d_%H%M")"
+mkdir -p ${ABI_LOGDIR}
+
+publishing=${ROOT_DIR}/publishing
+mkdir -p ${publishing}
+
+trap cleanup_exit INT TERM EXIT
+
+cleanup_exit()
+{
+ if [[ ${CLEANUP} -eq 1 ]]; then
+ rm -rf ${GENERIC_BUILDDIR}
+ rm -rf ${COMPARE_BUILDDIR}
+ rm -rf compat_reports* ABI-*.dump
+ rm -rf ${ABI_LOGDIR}
+ ${PLATFORM_SHORT}_cleanup
+ fi
+}
+
+usage() {
+ echo -e "$0 makes use of the following environment variables,"
+ echo -e "\tCOMPARE_URL:\t which ODP git repo to use, default: NONE"
+ echo -e "\tCOMPARE_BRANCH:\t which branch to checkout and test, default: master"
+ echo -e "\tCLEANUP:\t to save workspace set CLEANUP=0, default: 1"
+ echo -e "\tDETAILED_DIFF:\t to see a detailed list set DETAILED_DIFF=1, default: 0"
+ ${PLATFORM_SHORT}_usage
+}
+
+abi_build() {
+ # $1 BUILDDIR
+ # $2 generic or compare
+ pushd ${1} >>${LOGFILE}-${2}-abi_build.log 2>&1
+ ./bootstrap >>${LOGFILE}-${2}-abi_build.log 2>&1
+ ./configure ${CONFIGURE_FLAGS} --prefix=${1}/install CFLAGS="-g -O0" >>${LOGFILE}-${2}-abi_build.log 2>&1
+ make install -j >>${LOGFILE}-${2}-abi_build.log 2>&1
+ version_name=$(${1}/scripts/git_hash.sh ${1})
+ popd >>${LOGFILE}-${2}-abi_build.log 2>&1
+ echo ${version_name}
+}
+
+abi_dumper() {
+ # $1 BUILDDIR
+ # $2 URL
+ # $3 BRANCH
+ # $4 generic or compare
+ base_name=${ROOT_DIR}/ABI-$(basename ${2})-${3}
+ for lib in $(find ${1}/install/lib/ -type l -name 'libodp*so'); do
+ abi-dumper -sort -lver ${3} ${lib} -o ${base_name}-$(basename ${lib})-${4}.dump >>${LOGFILE}-${4}-abi_dumper.log 2>&1
+
+ done
+ echo ${base_name}
+}
+
+prepare_platform
+
+if [[ "x$1" = "x-h" || "x$1" = "x--help" ]]; then
+ usage
+ exit 0
+fi
+
+display_os
+
+if [ ${DETAILED_DIFF} -eq 1 ]; then
+ DETAILED_DIFF_FLAGS="--detailed --brief"
+fi
+
+${PLATFORM_SHORT}_get
+
+# Default compare branch and repo, if you don't set anything you will default
+# to api-next and upstream repo odp (linux-generic)
+if [ -z ${COMPARE_URL} ]; then
+ COMPARE_URL=${GIT_URL}
+fi
+
+#create a name to represent the repos being compared, the branches are noted separately
+URL1=$(echo ${GIT_URL} |sed 's|.*\/\/||' |sed 's|/|_|g' |sed 's|.git$||')
+URL2=$(echo ${COMPARE_URL} |sed 's|.*\/\/||' |sed 's|/|_|g' |sed 's|.git$||')
+URL="${URL1}-${URL2}"
+echo "${URL}"
+
+if [ ! -d "$GENERIC_BUILDDIR" ]; then
+ setup_builddir ${GENERIC_SRCDIR} ${GIT_URL} ${GIT_BRANCH} ${GENERIC_BUILDDIR}
+fi
+
+if [ ! -d "$COMPARE_BUILDDIR" ]; then
+ setup_builddir ${GENERIC_SRCDIR} ${COMPARE_URL} ${COMPARE_BRANCH} ${COMPARE_BUILDDIR}
+fi
+
+generic_version_name=$(abi_build ${GENERIC_BUILDDIR} "generic")
+generic_base_name=$(abi_dumper ${GENERIC_BUILDDIR} ${GIT_URL} ${GIT_BRANCH} "generic")
+
+
+if [[ -d ${COMPARE_BUILDDIR}/platform/linux-dpdk ]]; then
+ source ${ROOT_DIR}/helper/platform/dpdk
+ dpdk_prepare >>${LOGFILE}-${4}-prepare.log 2>&1
+ dpdk_get >>${LOGFILE}-${4}-prepare.log 2>&1
+ dpdk_build >>${LOGFILE}-${4}-prepare.log 2>&1
+ ## CONFIGURE_FLAGS
+fi
+
+compare_version_name=$(abi_build ${COMPARE_BUILDDIR} "compare")
+compare_base_name=$(abi_dumper ${COMPARE_BUILDDIR} ${COMPARE_URL} ${COMPARE_BRANCH} "compare")
+#compare_base_name=${ROOT_DIR}/ABI-$(basename ${COMPARE_URL})-${COMPARE_BRANCH}
+#abi_dumper ${COMPARE_BUILDDIR} ${COMPARE_BRANCH} ${compare_base_name} "compare"
+
+
+publishing_dir="${publishing}/${URL}/${GIT_BRANCH}-${generic_version_name}_to_${COMPARE_BRANCH}-${compare_version_name}"
+
+rm -rf ${publishing_dir}
+mkdir -p ${publishing_dir}
+
+abi-compliance-checker -l ${URL} -old $(ls ${generic_base_name}-libodphelper*.dump) -new $(ls ${compare_base_name}-libodphelper*.dump)
+mv compat_reports/${URL}/${GIT_BRANCH}_to_${COMPARE_BRANCH}/compat_report.html ${publishing_dir}/libodphelper-compat_report.html
+
+abi-compliance-checker -l ${URL} -old $(ls ${generic_base_name}-libodp-*.dump) -new $(ls ${compare_base_name}-libodp-*.dump)
+mv compat_reports/${URL}/${GIT_BRANCH}_to_${COMPARE_BRANCH}/compat_report.html ${publishing_dir}/libodp-compat_report.html
+
+## vim: set sw=4 sts=4 et foldmethod=syntax : ##
diff --git a/pre-install.sh b/pre-install.sh
index a7d0dc4..2822dd0 100755
--- a/pre-install.sh
+++ b/pre-install.sh
@@ -3,6 +3,8 @@
[[ $(grep utopic /etc/lsb-release) ]] && sudo sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo apt-get update
sudo apt-get install --yes --no-install-recommends \
+ abi-compliance-checker \
+ abi-dumper \
automake \
autoconf \
asciidoc \