11bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu#!/bin/sh 21bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# 31bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# Copyright (C) 2013 The Android Open Source Project 41bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# 51bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# Licensed under the Apache License, Version 2.0 (the "License"); 61bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# you may not use this file except in compliance with the License. 71bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# You may obtain a copy of the License at 81bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# 91bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# http://www.apache.org/licenses/LICENSE-2.0 101bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# 111bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# Unless required by applicable law or agreed to in writing, software 121bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# distributed under the License is distributed on an "AS IS" BASIS, 131bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 141bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# See the License for the specific language governing permissions and 151bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# limitations under the License. 161bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# 171bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# This shell script is used to rebuild the on-device llvm and mclinker 181bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# binaries for the Android NDK. 191bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# 201bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 211bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu# include common function and variable definitions 221bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu. `dirname $0`/prebuilt-common.sh 231bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 241bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuPROGRAM_PARAMETERS="<src-dir> <ndk-dir>" 251bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 261bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuPROGRAM_DESCRIPTION=\ 271bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu"Rebuild LLVM-related on-device binaries for the Android NDK. 281bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 291bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuWhere <src-dir> is the location of toolchain sources, <ndk-dir> is 301bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guthe top-level NDK installation path." 311bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 321bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuRELEASE=`date +%Y%m%d` 331bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuBUILD_OUT=/tmp/ndk-$USER/build/toolchain 341bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuTOOLCHAIN_BUILD_PREFIX="$BUILD_OUT/../prefix" 351bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuARCHS="$DEFAULT_ARCHS" 361bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuBUILDTOOLS=$ANDROID_NDK_ROOT/build/tools 371bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 381bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuOPTION_OUT_DIR= 391bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guregister_var_option "--out-dir=<path>" OPTION_OUT_DIR "On-device toolchain will be put at <path>" 401bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 411bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuOPTION_ARCH= 421bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guregister_var_option "--arch=<arm,x86,mips>" OPTION_ARCH "Default: all" 431bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 441bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuOPTION_GCC_VERSION= 451bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guregister_var_option "--gcc-version=<version>" OPTION_GCC_VERSION "Specify GCC toolchain version [Default: $DEFAULT_GCC_VERSION]" 461bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 471bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guregister_jobs_option 481bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 491bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guextract_parameters "$@" 501bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 511bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guprepare_canadian_toolchain /tmp/ndk-$USER/build 521bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 531bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufix_option TOOLCHAIN_BUILD_PREFIX "$OPTION_OUT_DIR" "On-device toolchain will be put at <path>" 541bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufix_option ARCHS "$OPTION_ARCH" "on-device architecture" 551bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuARCHS="`commas_to_spaces $ARCHS`" 561bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gusetup_default_log_file $BUILD_OUT/config.log 571bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 581bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guset_parameters () 591bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu{ 601bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu SRC_DIR="$1" 611bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu NDK_DIR="$2" 621bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu TOOLCHAIN="llvm-$DEFAULT_LLVM_VERSION" 631bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 641bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # Check source directory 651bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # 661bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ -z "$SRC_DIR" ] ; then 671bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu echo "ERROR: Missing source directory parameter. See --help for details." 681bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu exit 1 691bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 701bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 711bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ ! -d "$SRC_DIR/$TOOLCHAIN/llvm" ] ; then 721bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu echo "ERROR: Source directory does not contain llvm sources: $SRC_DIR/$TOOLCHAIN/llvm" 731bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu exit 1 741bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 751bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 761bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu SRC_DIR=`cd $SRC_DIR; pwd` 771bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu log "Using source directory: $SRC_DIR" 781bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 791bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # Check NDK installation directory 801bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # 811bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ -z "$NDK_DIR" ] ; then 821bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu echo "ERROR: Missing NDK directory parameter. See --help for details." 831bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu exit 1 841bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 851bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 861bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ ! -d "$NDK_DIR" ] ; then 871bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu mkdir -p $NDK_DIR 881bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ $? != 0 ] ; then 891bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu echo "ERROR: Could not create target NDK installation path: $NDK_DIR" 901bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu exit 1 911bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 921bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 931bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu NDK_DIR=`cd $NDK_DIR; pwd` 941bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu log "Using NDK directory: $NDK_DIR" 951bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 961bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # Check toolchain name 971bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # 981bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ -z "$TOOLCHAIN" ] ; then 991bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu echo "ERROR: Missing toolchain name parameter. See --help for details." 1001bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu exit 1 1011bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 1021bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu} 1031bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1041bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guset_parameters $PARAMETERS 1051bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1061bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guprepare_target_build 1071bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guprepare_abi_configure_build 1081bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guset_toolchain_ndk $NDK_DIR $TOOLCHAIN 1091bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1101bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guif [ "$MINGW" != "yes" -a "$DARWIN" != "yes" ] ; then 1111bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Using C compiler: $CC" 1121bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Using C++ compiler: $CXX" 1131bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufi 1141bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1151bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gurm -rf $BUILD_OUT 1161bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gumkdir -p $BUILD_OUT 1171bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1181bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuMAKE_FLAGS= 1191bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Guif [ "$VERBOSE" = "yes" ]; then 1201bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu MAKE_FLAGS="VERBOSE=1" 1211bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufi 1221bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1231bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gudump "Copy : mclinker source" 1241bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuMCLINKER_SRC_DIR=$BUILD_OUT/mclinker 1251bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gumkdir -p $MCLINKER_SRC_DIR 1261bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufail_panic "Couldn't create mclinker source directory: $MCLINKER_SRC_DIR" 1271bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1281bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gurun copy_directory "$SRC_DIR/mclinker" "$MCLINKER_SRC_DIR" 1291bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufail_panic "Couldn't copy mclinker source: $MCLINKER_SRC_DIR" 1301bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1311bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gucd $MCLINKER_SRC_DIR && run ./autogen.sh 1321bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufail_panic "Couldn't run autogen.sh in $MCLINKER_SRC_DIR" 1331bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1347da9ad73c2566f509b2f96faba9e30990107b1d7WenHan Gu# Remove aosp stuff away from PATH to prevent configure error. 1357da9ad73c2566f509b2f96faba9e30990107b1d7WenHan Guaosp="${ANDROID_NDK_ROOT%/}" 1367da9ad73c2566f509b2f96faba9e30990107b1d7WenHan Guaosp="${aosp%/ndk}" 1377da9ad73c2566f509b2f96faba9e30990107b1d7WenHan Guaosp_regex="${aosp}/[^:]*:" 1387da9ad73c2566f509b2f96faba9e30990107b1d7WenHan GuPATH="`echo $PATH | sed -e \"s#$aosp_regex##g\"`" 1397da9ad73c2566f509b2f96faba9e30990107b1d7WenHan Guexport PATH 1401bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1411bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gufor arch in $ARCHS; do 1421bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Rebuild for architecture $arch" 1431bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1441bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # configure the toolchain 1451bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Configure: $TOOLCHAIN toolchain build" 1461bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu LLVM_BUILD_OUT=$BUILD_OUT/llvm/$arch 1471bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu mkdir -p $LLVM_BUILD_OUT && cd $LLVM_BUILD_OUT 1481bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't cd into llvm build path: $LLVM_BUILD_OUT" 1491bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1501bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu toolchain_prefix=`get_default_toolchain_prefix_for_arch $arch` 1511bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu toolchain_name=`get_default_toolchain_name_for_arch $arch` 1521bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ -n "$OPTION_GCC_VERSION" ]; then 1531bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu toolchain_name="${toolchain_name//${DEFAULT_GCC_VERSION}/${OPTION_GCC_VERSION}}" 1541bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 1551bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu extra_configure_flags='' 1561bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu if [ $arch = "arm" ]; then 1571bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu extra_configure_flags='-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16' 1581bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fi 1591bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1601bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu run $BUILDTOOLS/make-standalone-toolchain.sh \ 1611bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --toolchain=$toolchain_name \ 1621bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --stl=stlport \ 1631bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --arch=$arch \ 1641bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --system=linux-$HOST_ARCH \ 1651bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --platform=android-9 \ 1661bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --install-dir=$BUILD_OUT/ndk-standalone-$arch 1671bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't make standalone for $arch" 1681bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1691bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu mkdir -p $TOOLCHAIN_BUILD_PREFIX/$arch 1701bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu cp -f $BUILD_OUT/ndk-standalone-$arch/$toolchain_prefix/lib/libstlport_shared.so $TOOLCHAIN_BUILD_PREFIX/$arch 1711bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1721bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu CC=$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-gcc 1731bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu CXX=$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-g++ 1741bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu export CC CXX 1751bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1761bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu run $SRC_DIR/$TOOLCHAIN/llvm/configure \ 1771bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --prefix=$TOOLCHAIN_BUILD_PREFIX/$arch \ 1781bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --host=$toolchain_prefix \ 1791bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --with-bug-report-url=$DEFAULT_ISSUE_TRACKER_URL \ 1801bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --enable-targets=$arch \ 1811bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --enable-optimized \ 1821bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --disable-polly \ 1831bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --with-clang-srcdir=/dev/null \ 1841bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --enable-shared \ 1851bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --with-extra-ld-options=-lstlport_shared \ 1861bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --disable-assertions \ 1871bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --with-extra-options="$extra_configure_flags" 1881bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't configure llvm toolchain for $arch" 1891bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1901bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Building : llvm toolchain [this can take a long time]." 1911bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu unset CC CXX # Need for BuildTools 1921bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu export CC CXX 1931bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu run make -j$NUM_JOBS $MAKE_FLAGS 1941bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't compile llvm toolchain" 1951bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 1961bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # Copy binaries what we need 1971bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu mkdir -p $TOOLCHAIN_BUILD_PREFIX/$arch 1983263b7e0913ce6b5098f5e4b8bbf2e5e4785bad8WenHan Gu cp -f $LLVM_BUILD_OUT/Release/lib/libLLVM-${DEFAULT_LLVM_VERSION}.so $TOOLCHAIN_BUILD_PREFIX/$arch 1991bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu cp -f $LLVM_BUILD_OUT/Release/bin/le32-none-ndk-translate $TOOLCHAIN_BUILD_PREFIX/$arch 2001bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu cp -f $LLVM_BUILD_OUT/Release/bin/llc $TOOLCHAIN_BUILD_PREFIX/$arch 2011bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 2021bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # build mclinker only against default the LLVM version, once 2031bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Configure: mclinker against $TOOLCHAIN" 2041bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu MCLINKER_BUILD_OUT=$MCLINKER_SRC_DIR/build/$arch 2051bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu mkdir -p $MCLINKER_BUILD_OUT && cd $MCLINKER_BUILD_OUT 2061bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't cd into mclinker build path: $MCLINKER_BUILD_OUT" 2071bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 2081bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu CC=$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-gcc 2091bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu CXX="$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-g++ -lstlport_shared" 2101bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu export CC CXX 2111bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 2121bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu run $MCLINKER_SRC_DIR/configure \ 2131bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --prefix=$TOOLCHAIN_BUILD_PREFIX/$arch \ 2141bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --with-llvm-config=$LLVM_BUILD_OUT/BuildTools/Release/bin/llvm-config \ 2153263b7e0913ce6b5098f5e4b8bbf2e5e4785bad8WenHan Gu --with-llvm-shared-lib=$LLVM_BUILD_OUT/Release/lib/libLLVM-${DEFAULT_LLVM_VERSION}.so \ 2161bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --enable-targets=$arch \ 2171bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu --host=$toolchain_prefix 2181bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't configure mclinker for $arch" 2191bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 220a265bd1090e03082f19ed03cfda0b339e0c2dbf5WenHan Gu CXXFLAGS="$CXXFLAGS -fexceptions" # optimized/ScriptParser.cc needs it 221a265bd1090e03082f19ed03cfda0b339e0c2dbf5WenHan Gu export CXXFLAGS 2221bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu dump "Building : mclinker" 2231bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu cd $MCLINKER_BUILD_OUT 224a265bd1090e03082f19ed03cfda0b339e0c2dbf5WenHan Gu run make -j$NUM_JOBS $MAKE_FLAGS CXXFLAGS="$CXXFLAGS" 2251bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu fail_panic "Couldn't compile mclinker" 2261bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 2271bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu mkdir -p $TOOLCHAIN_BUILD_PREFIX/$arch 2281bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu cp -f $MCLINKER_BUILD_OUT/optimized/ld.mcld $TOOLCHAIN_BUILD_PREFIX/$arch 2291bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 2301bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu # Strip 2311bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu STRIP=$BUILD_OUT/ndk-standalone-$arch/bin/$toolchain_prefix-strip 2321bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu find $TOOLCHAIN_BUILD_PREFIX/$arch -maxdepth 1 -type f -exec $STRIP --strip-all {} \; 2331bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gudone 2341bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gu 2351bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan GuTOOLCHAIN_BUILD_PREFIX="`cd $TOOLCHAIN_BUILD_PREFIX; pwd`" 2361bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gudump "Done. Output is under $TOOLCHAIN_BUILD_PREFIX" 2371bb27f0bcc500835368b42781f78b0c1fa9c2561WenHan Gurm -rf $BUILD_OUT 238