#!/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 < OPTIONS: -i : input file -o : output file -d : 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 < "${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}" "$@"