• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #!/bin/bash -e
2 
3 # Copyright 2019 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 extract and repack an archive with specified object files.
18 # Inputs:
19 #  Environment:
20 #   CLANG_BIN: path to the clang bin directory
21 #  Arguments:
22 #   -i ${file}: input file
23 #   -o ${file}: output file
24 #   -d ${file}: deps file
25 
26 set -o pipefail
27 
28 OPTSTRING=d:i:o:
29 
30 usage() {
31     cat <<EOF
32 Usage: archive_repack.sh [options] <objects to repack>
33 
34 OPTIONS:
35     -i <file>: input file
36     -o <file>: output file
37     -d <file>: deps file
38 EOF
39     exit 1
40 }
41 
42 while getopts $OPTSTRING opt; do
43     case "$opt" in
44         d) depsfile="${OPTARG}" ;;
45         i) infile="${OPTARG}" ;;
46         o) outfile="${OPTARG}" ;;
47         ?) usage ;;
48     esac
49 done
50 shift "$(($OPTIND -1))"
51 
52 if [ -z "${infile}" ]; then
53     echo "-i argument is required"
54     usage
55 fi
56 
57 if [ -z "${outfile}" ]; then
58     echo "-o argument is required"
59     usage
60 fi
61 
62 # Produce deps file
63 if [ ! -z "${depsfile}" ]; then
64     cat <<EOF > "${depsfile}"
65 ${outfile}: ${infile} ${CLANG_BIN}/llvm-ar
66 EOF
67 fi
68 
69 # Get absolute path for outfile and llvm-ar.
70 LLVM_AR="${PWD}/${CLANG_BIN}/llvm-ar"
71 if [[ "$outfile" != /* ]]; then
72     outfile="${PWD}/${outfile}"
73 fi
74 
75 tempdir="${outfile}.tmp"
76 
77 # Clean up any previous temporary files.
78 rm -f "${outfile}"
79 rm -rf "${tempdir}"
80 
81 # Do repack
82 # We have to change working directory since ar only allows extracting to CWD.
83 mkdir "${tempdir}"
84 cp "${infile}" "${tempdir}/archive"
85 cd "${tempdir}"
86 "${LLVM_AR}" x "archive"
87 "${LLVM_AR}" --format=gnu qc "${outfile}" "$@"
88