summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Chien <loganchien@google.com>2019-09-05 14:10:27 -0700
committerLogan Chien <loganchien@google.com>2019-09-05 14:10:27 -0700
commit22af78f7ab8ad1ec21e3bfeae4f6ee44c5edc654 (patch)
tree30ff24801889c320a3f616dfdfcf47f80d93064c
parentba12137c0b31cf2ebda7cb5c55ce5a45e39f382f (diff)
downloaddevelopment-22af78f7ab8ad1ec21e3bfeae4f6ee44c5edc654.tar.gz
header-checker: Move clang-tools build script
This commit moves clang-tools build script from `prebuilts/clang-tools` to `development` so that it will be easier to read the git history of the file. Test: OUT_DIR=$(pwd) ./prebuilts/clang-tools/build-prebuilts.sh Change-Id: I6be5aded52ae141eb139f050b4bf08a48893cf6e
-rwxr-xr-xvndk/tools/header-checker/android/build-prebuilts.sh130
1 files changed, 130 insertions, 0 deletions
diff --git a/vndk/tools/header-checker/android/build-prebuilts.sh b/vndk/tools/header-checker/android/build-prebuilts.sh
new file mode 100755
index 000000000..299ce905d
--- /dev/null
+++ b/vndk/tools/header-checker/android/build-prebuilts.sh
@@ -0,0 +1,130 @@
+#!/bin/bash -ex
+
+# Copyright 2019 Google Inc. All rights reserved.
+#
+# 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.
+
+export LLVM_BUILD_HOST_TOOLS=true
+export LLVM_PREBUILTS_VERSION=clang-r365631
+export LLVM_RELEASE_VERSION=9.0.6
+
+# FIXME: Workaround to build bionic versioner in the aosp/clang-tools branch.
+export FORCE_BUILD_LLVM_COMPONENTS=true
+
+if [ -z "${OUT_DIR}" ]; then
+ echo "error: Must set OUT_DIR"
+ exit 1
+fi
+
+TOP=$(pwd)
+
+UNAME="$(uname)"
+case "${UNAME}" in
+Linux)
+ OS='linux'
+ ;;
+Darwin)
+ OS='darwin'
+ ;;
+*)
+ echo "error: Unknown uname: ${UNAME}"
+ exit 1
+ ;;
+esac
+
+# Setup Soong configuration
+SOONG_OUT="${OUT_DIR}/soong"
+SOONG_HOST_OUT="${OUT_DIR}/soong/host/${OS}-x86"
+rm -rf "${SOONG_OUT}"
+mkdir -p "${SOONG_OUT}"
+cat > "${SOONG_OUT}/soong.variables" << __EOF__
+{
+ "Allow_missing_dependencies": true,
+ "HostArch":"x86_64"
+}
+__EOF__
+
+# Targets to be built
+SOONG_BINARIES=(
+ "cxx_extractor"
+ "header-abi-linker"
+ "header-abi-dumper"
+ "header-abi-diff"
+ "merge-abi-diff"
+ "versioner"
+)
+
+binaries=()
+for name in "${SOONG_BINARIES[@]}"; do
+ binaries+=("${SOONG_HOST_OUT}/bin/${name}")
+done
+
+libs=()
+if [ "${OS}" = "darwin" ]; then
+ libs+=("${SOONG_HOST_OUT}/lib64/libc++abi_host.dylib")
+fi
+
+# Build binaries and shared libs
+build/soong/soong_ui.bash --make-mode --skip-make "${binaries[@]}" "${libs[@]}"
+
+# Copy binaries and shared libs
+SOONG_DIST="${SOONG_OUT}/dist"
+mkdir -p "${SOONG_DIST}/bin"
+cp "${binaries[@]}" "${SOONG_DIST}/bin"
+cp -R "${SOONG_HOST_OUT}/lib"* "${SOONG_DIST}"
+
+# Copy clang header and share files
+CLANG_DIR="prebuilts/clang/host/${OS}-x86/${LLVM_PREBUILTS_VERSION}"
+CLANG_LIB_DIR="${CLANG_DIR}/lib64/clang/${LLVM_RELEASE_VERSION}"
+CLANG_LIB_DIR_OUT="${SOONG_DIST}/lib64/clang/${LLVM_RELEASE_VERSION}"
+mkdir -p "${CLANG_LIB_DIR_OUT}"
+cp -R "${CLANG_LIB_DIR}/share" "${CLANG_LIB_DIR_OUT}/share"
+cp -R "${CLANG_LIB_DIR}/include" "${CLANG_LIB_DIR_OUT}/include"
+ln -s "lib64/clang/${LLVM_RELEASE_VERSION}/include" "${SOONG_DIST}/clang-headers"
+
+# Normalize library file names. All library file names must match their soname.
+function extract_soname () {
+ local file="$1"
+
+ case "${OS}" in
+ linux)
+ readelf -d "${file}" | \
+ grep '(SONAME)\s*Library soname: \[.*\]$' -o | \
+ sed 's/(SONAME)\s*Library soname: \[\(.*\)\]$/\1/g'
+ ;;
+ darwin)
+ local install_path="$(otool -D "${file}" | sed -n 2p)"
+ if [ -n "${install_path}" ]; then
+ basename "${install_path}"
+ fi
+ ;;
+ esac
+}
+
+for file in "${SOONG_OUT}/dist/lib"*"/"*; do
+ soname="$(extract_soname "${file}")"
+ if [ -n "${soname}" -a "$(basename "${file}")" != "${soname}" ]; then
+ mv "${file}" "$(dirname "${file}")/${soname}"
+ fi
+done
+
+# Package binaries and shared libs
+(
+ cd "${SOONG_OUT}/dist"
+ zip -qryX build-prebuilts.zip *
+)
+
+if [ -n "${DIST_DIR}" ]; then
+ mkdir -p "${DIST_DIR}" || true
+ cp "${SOONG_OUT}/dist/build-prebuilts.zip" "${DIST_DIR}/"
+fi