blob: 3d0660ce7d9ce825f3bbfe0f95b6300ace09cbc9 [file] [log] [blame]
Yo Chiang47704562020-03-24 19:31:42 +08001#!/bin/bash
2#
3# Copyright 2020 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17# Generate Android.bp for AOSP blob self-extractors.
18#
19# For example, a blob package may contain:
20# ./vendor
21# └── qcom
22# └── coral
23# └── proprietary
24# ├── lib64
25# | ├── libfoo.so
26# | └── libbar.so
27# ├── libfoo.so
28# └── libbar.so
29#
30# Generate prebuilt modules for these blobs:
31# $ export SYSTEM_EXT_SPECIFIC=true # If installing prebuilts to system_ext/ partition
Yo Chiangbe215f32020-03-31 14:54:47 +080032# $ export OWNER=qcom # Owner is relevant if PRODUCT_RESTRICT_VENDOR_FILES is set
Yo Chiang47704562020-03-24 19:31:42 +080033# $ ./generate-android-bp-for-blobs.sh ./vendor/qcom/coral/proprietary > Android.bp.txt
34# $ mv Android.bp.txt ${ANDROID_BUILD_TOP}/device/google/coral/self-extractors/qcom/staging/
35#
36# You may need to review the contents of Android.bp.txt as some of the blobs may
37# have unsatisfied dependencies. Add `check_elf_files: false` to bypass this
38# kind of build errors.
39
40set -e
41
42readonly PREBUILT_DIR="$1"
43
44readonly elf_files=$(
45 for file in $(find "$PREBUILT_DIR" -type f); do
46 if readelf -h "$file" 2>/dev/null 1>&2; then
47 basename "$file"
48 fi
49 done | sort | uniq | xargs
50)
51
52echo "// Copyright (C) $(date +%Y) The Android Open Source Project"
53echo "//"
54echo "// Licensed under the Apache License, Version 2.0 (the \"License\");"
55echo "// you may not use this file except in compliance with the License."
56echo "// You may obtain a copy of the License at"
57echo "//"
58echo "// http://www.apache.org/licenses/LICENSE-2.0"
59echo "//"
60echo "// Unless required by applicable law or agreed to in writing, software"
61echo "// distributed under the License is distributed on an \"AS IS\" BASIS,"
62echo "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."
63echo "// See the License for the specific language governing permissions and"
64echo "// limitations under the License."
65echo ""
66echo "soong_namespace {"
67echo "}"
68
69for file in $elf_files; do
70 file32=$(find "$PREBUILT_DIR" -type f -name "$file" | grep -v 'lib64' | head)
71 file64=$(find "$PREBUILT_DIR" -type f -name "$file" | grep 'lib64' | head)
72 if [[ -n "$file32" ]] && [[ -n "$file64" ]]; then
73 multilib="both"
74 elif [[ -n "$file32" ]]; then
75 multilib="32"
76 else
77 multilib="64"
78 fi
79
80echo ""
81echo "cc_prebuilt_library_shared {"
82echo " name: \"${file%.so}\","
83echo " arch: {"
84
85 if [[ -f "$file32" ]]; then
86 NEEDED=$(readelf -d "$file32" | sed -n -E 's/^.*\(NEEDED\).*\[(.+)\]$/\1/p' | xargs)
87echo " arm: {"
88echo " srcs: [\"$(realpath --relative-to="$PREBUILT_DIR" "$file32")\"],"
89 if [[ -n "$NEEDED" ]]; then
90echo " shared_libs: ["
91 for entry in $NEEDED; do
92echo " \"${entry%.so}\","
93 done
94echo " ],"
95 fi
96echo " },"
97 fi
98
99 if [[ -f "$file64" ]]; then
100 NEEDED=$(readelf -d "$file64" | sed -n -E 's/^.*\(NEEDED\).*\[(.+)\]$/\1/p' | xargs)
101echo " arm64: {"
102echo " srcs: [\"$(realpath --relative-to="$PREBUILT_DIR" "$file64")\"],"
103 if [[ -n "$NEEDED" ]]; then
104echo " shared_libs: ["
105 for entry in $NEEDED; do
106echo " \"${entry%.so}\","
107 done
108echo " ],"
109 fi
110echo " },"
111 fi
112
113echo " },"
114echo " compile_multilib: \"$multilib\","
115 if [[ -n "$SYSTEM_EXT_SPECIFIC" ]]; then
116echo " system_ext_specific: true,"
117 fi
Yo Chiangbe215f32020-03-31 14:54:47 +0800118 if [[ -n "$OWNER" ]]; then
119echo " owner: \"${OWNER}\","
120 fi
Yo Chiang47704562020-03-24 19:31:42 +0800121echo " strip: {"
122echo " none: true,"
123echo " },"
124echo "}"
125
126done