gecko-dev/taskcluster/scripts/misc/build-gcc-sixgill-plugin-linux.sh
Nathan Froyd 116083d76a Bug 1451104 - part 4 - sync up gcc-related toolchains and linux64-binutils binutils version; r=glandium
We're going to copy an x86_64-unknown-linux-gnu ld into the clang build,
which clang will then use in preference to things on PATH.  We therefore
need to ensure that this ld is the same ld as would be used for other
builds, such as PGO.  This change is the most expedient way to do that;
future work will make the gcc job(s) depend on linux64-binutils directly.

Differential Revision: https://phabricator.services.mozilla.com/D22882

--HG--
extra : moz-landing-system : lando
2019-03-15 01:29:14 +00:00

91 lines
2.4 KiB
Bash
Executable file

#!/bin/bash
set -e
set -x
# This script is for building the sixgill GCC plugin for Linux. It relies on
# the gcc checkout because it needs to recompile gmp and the gcc build script
# determines the version of gmp to download.
WORKSPACE=$HOME/workspace
HOME_DIR=$WORKSPACE/build
UPLOAD_DIR=$HOME/artifacts
root_dir=$HOME_DIR
build_dir=$HOME_DIR/src/build
data_dir=$HOME_DIR/src/build/unix/build-gcc
# Download and unpack upstream toolchain artifacts (ie, the gcc binary).
. $(dirname $0)/tooltool-download.sh
gcc_version=6.4.0
gcc_ext=xz
binutils_version=2.28.1
binutils_ext=xz
sixgill_rev=bc0ef9258470
sixgill_repo=https://hg.mozilla.org/users/sfink_mozilla.com/sixgill
. $data_dir/build-gcc.sh
pushd $root_dir/gcc-$gcc_version
ln -sf ../binutils-2.31.1 binutils
ln -sf ../gmp-5.1.3 gmp
ln -sf ../isl-0.15 isl
ln -sf ../mpc-0.8.2 mpc
ln -sf ../mpfr-3.1.5 mpfr
popd
export TMPDIR=${TMPDIR:-/tmp/}
export gcc_bindir=$root_dir/src/gcc/bin
export gmp_prefix=/tools/gmp
export gmp_dir=$root_dir$gmp_prefix
prepare_sixgill() {(
cd $root_dir
hg clone -r $sixgill_rev $sixgill_repo || ( cd sixgill && hg update -r $sixgill_rev )
)}
build_gmp() {
if ! [ -x $gcc_bindir/gcc ]; then
echo "GCC not found in $gcc_bindir/gcc" >&2
exit 1
fi
# The sixgill plugin uses some gmp symbols, including some not exported by
# cc1/cc1plus. So link the plugin statically to libgmp. Except that the
# default static build does not have -fPIC, and will result in a relocation
# error, so build our own. This requires the gcc and related source to be
# in $root_dir/gcc-$gcc_version.
mkdir $root_dir/gmp-objdir || true
(
cd $root_dir/gmp-objdir
$root_dir/gcc-$gcc_version/gmp/configure --disable-shared --with-pic --prefix=$gmp_prefix
make -j8
make install DESTDIR=$root_dir
)
}
build_sixgill() {(
cd $root_dir/sixgill
export CC=$gcc_bindir/gcc
export CXX=$gcc_bindir/g++
export PATH="$gcc_bindir:$PATH"
export LD_LIBRARY_PATH="${gcc_bindir%/bin}/lib64"
export TARGET_CC=$CC
export CPPFLAGS=-I$gmp_dir/include
export EXTRA_LDFLAGS=-L$gmp_dir/lib
export HOST_CFLAGS=$CPPFLAGS
./release.sh --build-and-package --with-gmp=$gmp_dir
tarball=$(ls -td *-sixgill | head -1)/sixgill.tar.xz
cp $tarball $root_dir/sixgill.tar.xz
)}
prepare_sixgill
build_gmp
build_sixgill
# Put a tarball in the artifacts dir
mkdir -p $UPLOAD_DIR
cp $HOME_DIR/sixgill.tar.* $UPLOAD_DIR