123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #!/bin/bash -e
- # 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.
- # Script to extract and repack an archive with specified object files.
- # Inputs:
- # Environment:
- # CLANG_BIN: path to the clang bin directory
- # Arguments:
- # -i ${file}: input file
- # -o ${file}: output file
- # -d ${file}: deps file
- set -o pipefail
- OPTSTRING=d:i:o:
- usage() {
- cat <<EOF
- Usage: archive_repack.sh [options] <objects to repack>
- OPTIONS:
- -i <file>: input file
- -o <file>: output file
- -d <file>: deps file
- EOF
- exit 1
- }
- while getopts $OPTSTRING opt; do
- case "$opt" in
- d) depsfile="${OPTARG}" ;;
- i) infile="${OPTARG}" ;;
- o) outfile="${OPTARG}" ;;
- ?) usage ;;
- esac
- done
- shift "$(($OPTIND -1))"
- if [ -z "${infile}" ]; then
- echo "-i argument is required"
- usage
- fi
- if [ -z "${outfile}" ]; then
- echo "-o argument is required"
- usage
- fi
- # Produce deps file
- if [ ! -z "${depsfile}" ]; then
- cat <<EOF > "${depsfile}"
- ${outfile}: ${infile} ${CLANG_BIN}/llvm-ar
- EOF
- fi
- # Get absolute path for outfile and llvm-ar.
- LLVM_AR="${PWD}/${CLANG_BIN}/llvm-ar"
- if [[ "$outfile" != /* ]]; then
- outfile="${PWD}/${outfile}"
- fi
- tempdir="${outfile}.tmp"
- # Clean up any previous temporary files.
- rm -f "${outfile}"
- rm -rf "${tempdir}"
- # Do repack
- # We have to change working directory since ar only allows extracting to CWD.
- mkdir "${tempdir}"
- cp "${infile}" "${tempdir}/archive"
- cd "${tempdir}"
- "${LLVM_AR}" x "archive"
- "${LLVM_AR}" --format=gnu qc "${outfile}" "$@"
|