Skip to content

Commit

Permalink
Extract *.a to *.bc conversion into separate script.
Browse files Browse the repository at this point in the history
Reviewers: eugenis

Subscribers: llvm-commits, kubamracek

Differential Revision: https://reviews.llvm.org/D30013

llvm-svn: 295272
  • Loading branch information
vitalybuka committed Feb 16, 2017
1 parent a1a8646 commit e4465db
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 17 deletions.
39 changes: 39 additions & 0 deletions compiler-rt/lib/sanitizer_common/symbolizer/scripts/ar_to_bc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash

function usage() {
echo "Usage: $0 INPUT... OUTPUT"
exit 1
}

if [ "$#" -le 1 ]; then
usage
fi

AR=$(readlink -f $AR)
LINK=$(readlink -f $LINK)

INPUTS=
OUTPUT=
for ARG in $@; do
INPUTS="$INPUTS $OUTPUT"
OUTPUT=$(readlink -f $ARG)
done

echo Inputs: $INPUTS
echo Output: $OUTPUT

SCRATCH_DIR=$(mktemp -d)
ln -s $INPUTS $SCRATCH_DIR/

pushd $SCRATCH_DIR

for INPUT in *; do
for OBJ in $($AR t $INPUT); do
$AR x $INPUT $OBJ
mv -f $OBJ $(basename $INPUT).$OBJ
done
done

$LINK *.o -o $OUTPUT

rm -rf $SCRATCH_DIR
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ cd $BUILD_DIR
CC=$CLANG_DIR/clang
CXX=$CLANG_DIR/clang++
TBLGEN=$CLANG_DIR/llvm-tblgen
LINK=$CLANG_DIR/llvm-link
OPT=$CLANG_DIR/opt
AR=$CLANG_DIR/llvm-ar
export AR=$CLANG_DIR/llvm-ar
export LINK=$CLANG_DIR/llvm-link

for F in $CC $CXX $TBLGEN $LINK $OPT $AR; do
if [[ ! -x "$F" ]]; then
Expand Down Expand Up @@ -136,29 +136,26 @@ rm -rf ${SYMBOLIZER_BUILD}
mkdir ${SYMBOLIZER_BUILD}
cd ${SYMBOLIZER_BUILD}

for A in $LIBCXX_BUILD/lib/libc++.a \
echo "Compiling..."
SYMBOLIZER_FLAGS="$FLAGS -std=c++11 -I${LLVM_SRC}/include -I${LLVM_BUILD}/include -I${LIBCXX_BUILD}/include/c++/v1"
$CXX $SYMBOLIZER_FLAGS ${SRC_DIR}/sanitizer_symbolize.cc ${SRC_DIR}/sanitizer_wrappers.cc -c
$AR rc symbolizer.a sanitizer_symbolize.o sanitizer_wrappers.o

SYMBOLIZER_API_LIST=__sanitizer_symbolize_code,__sanitizer_symbolize_data,__sanitizer_symbolize_flush,__sanitizer_symbolize_demangle

# Merge all the object files together and copy the resulting library back.
$SCRIPT_DIR/ar_to_bc.sh $LIBCXX_BUILD/lib/libc++.a \
$LIBCXX_BUILD/lib/libc++abi.a \
$LLVM_BUILD/lib/libLLVMSymbolize.a \
$LLVM_BUILD/lib/libLLVMObject.a \
$LLVM_BUILD/lib/libLLVMDebugInfoDWARF.a \
$LLVM_BUILD/lib/libLLVMSupport.a \
$LLVM_BUILD/lib/libLLVMDebugInfoPDB.a \
$LLVM_BUILD/lib/libLLVMMC.a \
$ZLIB_BUILD/libz.a ; do
for O in $($AR t $A); do
$AR x $A $O
mv -f $O "$(basename $A).$O" # Rename to avoid collisions between libs.
done
done
$ZLIB_BUILD/libz.a \
symbolizer.a \
all.bc

echo "Compiling..."
SYMBOLIZER_FLAGS="$FLAGS -std=c++11 -I${LLVM_SRC}/include -I${LLVM_BUILD}/include -I${LIBCXX_BUILD}/include/c++/v1"
$CXX $SYMBOLIZER_FLAGS ${SRC_DIR}/sanitizer_symbolize.cc ${SRC_DIR}/sanitizer_wrappers.cc -c

SYMBOLIZER_API_LIST=__sanitizer_symbolize_code,__sanitizer_symbolize_data,__sanitizer_symbolize_flush,__sanitizer_symbolize_demangle

# Merge all the object files together and copy the resulting library back.
$LINK *.o -o all.bc
echo "Optimizing..."
$OPT -internalize -internalize-public-api-list=${SYMBOLIZER_API_LIST} all.bc -o opt.bc
$CC $FLAGS -fno-lto -c opt.bc -o symbolizer.o
Expand Down

0 comments on commit e4465db

Please sign in to comment.