diff options
author | Matthias Maennich <maennich@google.com> | 2019-03-29 08:41:50 +0000 |
---|---|---|
committer | Matthias Maennich <maennich@google.com> | 2019-04-02 08:45:46 +0100 |
commit | ea2f60b2bc2b568aede5970644b2088df2cb98bf (patch) | |
tree | 6a8272e3705cdcf7392328ebe387218eb91cd548 | |
parent | cec41ee52fc9966bcab1a31ea591bec5b140a306 (diff) |
add build_abi.sh to create ABI dumps from build.sh builds
Add build_abi.sh as a wrapper script to build with build.sh and create
an ABI dump using abi/dump_abi.
Bug: 111449103
Change-Id: Iea773cf2ed6f3fdc577a99f42284992e0a871d25
Signed-off-by: Matthias Maennich <maennich@google.com>
-rw-r--r-- | abi/README.md | 8 | ||||
-rwxr-xr-x | build_abi.sh | 60 |
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}" + |