blob: 1faf2f2d7a64bbacfab359fd4b188ae6f2485c15 [file] [log] [blame]
#!/bin/sh
#
# Copyright 2011 Google Inc.
#
# 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.
#
# Author: jmarantz@google.com (Joshua Marantz)
#
# Script to merge together multiple libraries (.a) into one larger
# library (.a). A modest effort is expended to avoid duplicate
# filenames: we rename each .o with the index of the library where we
# find it. Otherwise if multiple libraries contain string_util.o then
# only one would be included in the aggregate.
#
# Usage: ./merge_libraries /PATH/output_library.a input1.a input2.a ...
#
# The output library must be specified as an absolute path.
output=$1
shift
tmpdir=/tmp/merge_libraries.$USER.$$
rm -rf $tmpdir
mkdir $tmpdir
cd $tmpdir
rm -f $output
prefix=0
ar=ar
for lib in $*; do
prefix=`expr $prefix + 1`
files=`$ar -t $lib`
for entry in $files; do
leaf=`basename $entry`.o
# Extract all of these in parallel.
$ar p $lib $entry > $prefix.$leaf &
done
done
echo "Waiting for $prefix parallel extractions to complete."
wait
echo Adding `ls -l *.o | wc -l` files ...
$ar -q -S $output *.o
rm *.o
echo ranlib $output
ranlib $output
ls -l $output
rm -rf $tmpdir