| #!/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 |