You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.0 KiB
127 lines
4.0 KiB
4 months ago
|
#!/bin/bash
|
||
|
#
|
||
|
# Copyright 2020 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.
|
||
|
#
|
||
|
# Generate Android.bp for AOSP blob self-extractors.
|
||
|
#
|
||
|
# For example, a blob package may contain:
|
||
|
# ./vendor
|
||
|
# └── qcom
|
||
|
# └── coral
|
||
|
# └── proprietary
|
||
|
# ├── lib64
|
||
|
# | ├── libfoo.so
|
||
|
# | └── libbar.so
|
||
|
# ├── libfoo.so
|
||
|
# └── libbar.so
|
||
|
#
|
||
|
# Generate prebuilt modules for these blobs:
|
||
|
# $ export SYSTEM_EXT_SPECIFIC=true # If installing prebuilts to system_ext/ partition
|
||
|
# $ export OWNER=qcom # Owner is relevant if PRODUCT_RESTRICT_VENDOR_FILES is set
|
||
|
# $ ./generate-android-bp-for-blobs.sh ./vendor/qcom/coral/proprietary > Android.bp.txt
|
||
|
# $ mv Android.bp.txt ${ANDROID_BUILD_TOP}/device/google/coral/self-extractors/qcom/staging/
|
||
|
#
|
||
|
# You may need to review the contents of Android.bp.txt as some of the blobs may
|
||
|
# have unsatisfied dependencies. Add `check_elf_files: false` to bypass this
|
||
|
# kind of build errors.
|
||
|
|
||
|
set -e
|
||
|
|
||
|
readonly PREBUILT_DIR="$1"
|
||
|
|
||
|
readonly elf_files=$(
|
||
|
for file in $(find "$PREBUILT_DIR" -type f); do
|
||
|
if readelf -h "$file" 2>/dev/null 1>&2; then
|
||
|
basename "$file"
|
||
|
fi
|
||
|
done | sort | uniq | xargs
|
||
|
)
|
||
|
|
||
|
echo "// Copyright (C) $(date +%Y) The Android Open Source Project"
|
||
|
echo "//"
|
||
|
echo "// Licensed under the Apache License, Version 2.0 (the \"License\");"
|
||
|
echo "// you may not use this file except in compliance with the License."
|
||
|
echo "// You may obtain a copy of the License at"
|
||
|
echo "//"
|
||
|
echo "// http://www.apache.org/licenses/LICENSE-2.0"
|
||
|
echo "//"
|
||
|
echo "// Unless required by applicable law or agreed to in writing, software"
|
||
|
echo "// distributed under the License is distributed on an \"AS IS\" BASIS,"
|
||
|
echo "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."
|
||
|
echo "// See the License for the specific language governing permissions and"
|
||
|
echo "// limitations under the License."
|
||
|
echo ""
|
||
|
echo "soong_namespace {"
|
||
|
echo "}"
|
||
|
|
||
|
for file in $elf_files; do
|
||
|
file32=$(find "$PREBUILT_DIR" -type f -name "$file" | grep -v 'lib64' | head)
|
||
|
file64=$(find "$PREBUILT_DIR" -type f -name "$file" | grep 'lib64' | head)
|
||
|
if [[ -n "$file32" ]] && [[ -n "$file64" ]]; then
|
||
|
multilib="both"
|
||
|
elif [[ -n "$file32" ]]; then
|
||
|
multilib="32"
|
||
|
else
|
||
|
multilib="64"
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
echo "cc_prebuilt_library_shared {"
|
||
|
echo " name: \"${file%.so}\","
|
||
|
echo " arch: {"
|
||
|
|
||
|
if [[ -f "$file32" ]]; then
|
||
|
NEEDED=$(readelf -d "$file32" | sed -n -E 's/^.*\(NEEDED\).*\[(.+)\]$/\1/p' | xargs)
|
||
|
echo " arm: {"
|
||
|
echo " srcs: [\"$(realpath --relative-to="$PREBUILT_DIR" "$file32")\"],"
|
||
|
if [[ -n "$NEEDED" ]]; then
|
||
|
echo " shared_libs: ["
|
||
|
for entry in $NEEDED; do
|
||
|
echo " \"${entry%.so}\","
|
||
|
done
|
||
|
echo " ],"
|
||
|
fi
|
||
|
echo " },"
|
||
|
fi
|
||
|
|
||
|
if [[ -f "$file64" ]]; then
|
||
|
NEEDED=$(readelf -d "$file64" | sed -n -E 's/^.*\(NEEDED\).*\[(.+)\]$/\1/p' | xargs)
|
||
|
echo " arm64: {"
|
||
|
echo " srcs: [\"$(realpath --relative-to="$PREBUILT_DIR" "$file64")\"],"
|
||
|
if [[ -n "$NEEDED" ]]; then
|
||
|
echo " shared_libs: ["
|
||
|
for entry in $NEEDED; do
|
||
|
echo " \"${entry%.so}\","
|
||
|
done
|
||
|
echo " ],"
|
||
|
fi
|
||
|
echo " },"
|
||
|
fi
|
||
|
|
||
|
echo " },"
|
||
|
echo " compile_multilib: \"$multilib\","
|
||
|
if [[ -n "$SYSTEM_EXT_SPECIFIC" ]]; then
|
||
|
echo " system_ext_specific: true,"
|
||
|
fi
|
||
|
if [[ -n "$OWNER" ]]; then
|
||
|
echo " owner: \"${OWNER}\","
|
||
|
fi
|
||
|
echo " strip: {"
|
||
|
echo " none: true,"
|
||
|
echo " },"
|
||
|
echo "}"
|
||
|
|
||
|
done
|