github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/scripts/toc.sh (about) 1 #!/bin/bash -eu 2 3 # Copyright 2017 Google Inc. All rights reserved. 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 # Script to handle generating a .toc file from a .so file 18 # Inputs: 19 # Environment: 20 # CROSS_COMPILE: prefix added to readelf tool 21 # Arguments: 22 # -i ${file}: input file (required) 23 # -o ${file}: output file (required) 24 # -d ${file}: deps file (required) 25 26 OPTSTRING=d:i:o:-: 27 28 usage() { 29 cat <<EOF 30 Usage: toc.sh [options] -i in-file -o out-file -d deps-file 31 Options: 32 EOF 33 exit 1 34 } 35 36 do_elf() { 37 ("${CROSS_COMPILE}readelf" -d "${infile}" | grep SONAME || echo "No SONAME for ${infile}") > "${outfile}.tmp" 38 "${CROSS_COMPILE}readelf" --dyn-syms "${infile}" | awk '{$2=""; $3=""; print}' >> "${outfile}.tmp" 39 } 40 41 do_macho() { 42 otool -l "${infile}" | grep LC_ID_DYLIB -A 5 > "${outfile}.tmp" 43 nm -gP "${infile}" | cut -f1-2 -d" " | grep -v 'U$' >> "${outfile}.tmp" 44 } 45 46 47 while getopts $OPTSTRING opt; do 48 case "$opt" in 49 d) depsfile="${OPTARG}" ;; 50 i) infile="${OPTARG}" ;; 51 o) outfile="${OPTARG}" ;; 52 -) 53 case "${OPTARG}" in 54 *) echo "Unknown option --${OPTARG}"; usage ;; 55 esac;; 56 ?) usage ;; 57 *) echo "'${opt}' '${OPTARG}'" 58 esac 59 done 60 61 if [ -z "${infile}" ]; then 62 echo "-i argument is required" 63 usage 64 fi 65 66 if [ -z "${outfile}" ]; then 67 echo "-o argument is required" 68 usage 69 fi 70 71 if [ -z "${depsfile}" ]; then 72 echo "-d argument is required" 73 usage 74 fi 75 76 rm -f "${outfile}.tmp" 77 78 cat <<EOF > "${depsfile}" 79 ${outfile}: \\ 80 ${CROSS_COMPILE}readelf \\ 81 EOF 82 83 do_elf 84 85 if cmp "${outfile}" "${outfile}.tmp" > /dev/null 2> /dev/null; then 86 rm -f "${outfile}.tmp" 87 else 88 mv -f "${outfile}.tmp" "${outfile}" 89 fi