summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Maennich <maennich@google.com>2019-04-02 03:02:50 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-04-02 03:02:50 -0700
commit4cd41f0a3ff28623ea9384b0f985c36dffc3a0f9 (patch)
tree6a8272e3705cdcf7392328ebe387218eb91cd548
parent3d5669113b1a06abbe386def5652b3efa50223e1 (diff)
parentea2f60b2bc2b568aede5970644b2088df2cb98bf (diff)
add build_abi.sh to create ABI dumps from build.sh builds
am: ea2f60b2bc Change-Id: I904482063eb1247321e27f19512b3c9f647a8be8
-rw-r--r--abi/README.md8
-rwxr-xr-xbuild_abi.sh60
2 files changed, 68 insertions, 0 deletions
diff --git a/abi/README.md b/abi/README.md
index 23541b7..55cefcb 100644
--- a/abi/README.md
+++ b/abi/README.md
@@ -28,6 +28,14 @@ there is only one option: 'libabigail' (default). A sample invocation looks as
follows:
$ dump_abi --linux-tree path/to/out --out-file /path/to/abidump.out
+To ensure a consistent environment and stable toolchain, a wrapper script is
+provided at the topmost directory of this project: `build_abi.sh`. It builds
+the kernel using `build.sh` and therefore accepts the same environment
+variables to customize the build, such as BUILD_CONFIG, CC and the various
+SKIP_* variables to speed up incremental builds. Following a successful build,
+`build_abi.sh` will create an ABI dump in the DIST_DIR of the build. A sample
+invocation from the top of the repo tree looks as follows:
+ $ BUILD_CONFIG=path/to/build.config build/build_abi.sh
Comparing ABI dumps
-------------------
diff --git a/build_abi.sh b/build_abi.sh
new file mode 100755
index 0000000..12d125e
--- /dev/null
+++ b/build_abi.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Usage:
+# build/build_abi.sh
+#
+# The following environment variables are considered during execution:
+#
+# ABI_OUT_TAG
+# Customize the output file name for the abi dump. If undefined, the tag is
+# derived from `git describe`.
+
+export ROOT_DIR=$(readlink -f $(dirname $0)/..)
+
+set -e
+set -a
+
+source "${ROOT_DIR}/build/envsetup.sh"
+
+# inject CONFIG_DEBUG_INFO=y
+export POST_DEFCONFIG_CMDS="${POST_DEFCONFIG_CMDS} : && update_config_for_abi_dump"
+function update_config_for_abi_dump() {
+ ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+ -e CONFIG_DEBUG_INFO
+ (cd ${OUT_DIR} && \
+ make O=${OUT_DIR} $archsubarch CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
+}
+
+# delegate the actual build to build.sh
+${ROOT_DIR}/build/build.sh $*
+
+echo "========================================================"
+echo " Creating ABI dump"
+
+# create abi dump
+COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out/${BRANCH}})
+id=${ABI_OUT_TAG:-$(git -C $KERNEL_DIR describe --dirty --always)}
+abi_out_file=abi-${id}.out
+${ROOT_DIR}/build/abi/dump_abi \
+ --linux-tree $OUT_DIR \
+ --out-file ${DIST_DIR}/${abi_out_file}
+
+ln -sf ${abi_out_file} ${DIST_DIR}/abi.out
+
+echo "========================================================"
+echo " ABI dump has been created at ${DIST_DIR}/${abi_out_file}"
+