11c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#!/bin/sh
21c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#
31c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Copyright (C) 2011 The Android Open Source Project
41c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#
51c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License");
61c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# you may not use this file except in compliance with the License.
71c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# You may obtain a copy of the License at
81c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#
91c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#      http://www.apache.org/licenses/LICENSE-2.0
101c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#
111c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software
121c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS,
131c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
141c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# See the License for the specific language governing permissions and
151c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# limitations under the License.
161c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#
171c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Rebuild all target-specific prebuilts
181c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner#
191c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
201c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerPROGDIR=$(dirname $0)
211c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner. $PROGDIR/prebuilt-common.sh
221c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
231c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerNDK_DIR=$ANDROID_NDK_ROOT
241c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerregister_var_option "--ndk-dir=<path>" NDK_DIR "NDK installation directory"
251c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
260cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-ChihARCHS=$(find_ndk_unknown_archs)
270cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-ChihARCHS="$DEFAULT_ARCHS $ARCHS"
281c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerregister_var_option "--arch=<list>" ARCHS "List of target archs to build for"
291c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
305c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-ChihNO_GEN_PLATFORMS=
315c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chihregister_var_option "--no-gen-platforms" NO_GEN_PLATFORMS "Don't generate platforms/ directory, use existing one"
325c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih
331c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerPACKAGE_DIR=
341c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerregister_var_option "--package-dir=<path>" PACKAGE_DIR "Package toolchain into this directory"
351c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
36732d3dd872bf85103b3cd391a3519d0ca957a10fRay DonnellyVISIBLE_LIBGNUSTL_STATIC=
37732d3dd872bf85103b3cd391a3519d0ca957a10fRay Donnellyregister_var_option "--visible-libgnustl-static" VISIBLE_LIBGNUSTL_STATIC "Do not use hidden visibility for libgnustl_static.a"
38732d3dd872bf85103b3cd391a3519d0ca957a10fRay Donnelly
391c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerregister_jobs_option
401c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
411c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerPROGRAM_PARAMETERS="<toolchain-src-dir>"
421c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerPROGRAM_DESCRIPTION=\
431c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner"This script can be used to rebuild all the target NDK prebuilts at once.
441c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerYou need to give it the path to the toolchain source directory, as
451c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerdownloaded by the 'download-toolchain-sources.sh' dev-script."
461c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
471c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerextract_parameters "$@"
481c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
491c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Check toolchain source path
501c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerSRC_DIR="$PARAMETERS"
511c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnercheck_toolchain_src_dir "$SRC_DIR"
52b4789c38c2898b92e7e55274ded1e7f953d5cbf7TDYaSRC_DIR=`cd $SRC_DIR; pwd`
531c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
541c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Now we can do the build
551c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerBUILDTOOLS=$ANDROID_NDK_ROOT/build/tools
561c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
571c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerdump "Building platforms and samples..."
581c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerPACKAGE_FLAGS=
591c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then
601c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    PACKAGE_FLAGS="--package-dir=$PACKAGE_DIR"
611c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfi
621c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
635c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chihif [ -z "$NO_GEN_PLATFORMS" ]; then
645c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih    echo "Preparing the build..."
655c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih    run $BUILDTOOLS/gen-platforms.sh --samples --fast-copy --dst-dir=$NDK_DIR --ndk-dir=$NDK_DIR --arch=$(spaces_to_commas $ARCHS) $PACKAGE_FLAGS
665c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih    fail_panic "Could not generate platforms and samples directores!"
675c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chihelse
685c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih    if [ ! -d "$NDK_DIR/platforms" ]; then
695c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih        echo "ERROR: --no-gen-platforms used but directory missing: $NDK_DIR/platforms"
705c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih        exit 1
715c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chih    fi
725c86028445b9510424d66cbe3cecbdc0eff7875eLai Wei-Chihfi
731c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
741c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerARCHS=$(commas_to_spaces $ARCHS)
751c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
760cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chih# Detect unknown arch
770cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-ChihUNKNOWN_ARCH=$(filter_out "$DEFAULT_ARCHS" "$ARCHS")
780cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihif [ ! -z "$UNKNOWN_ARCH" ]; then
790cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chih    ARCHS=$(filter_out "$UNKNOWN_ARCH" "$ARCHS")
800cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihfi
810cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chih
821c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerFLAGS=
831c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ "$VERBOSE" = "yes" ]; then
841c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    FLAGS=$FLAGS" --verbose"
851c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfi
861c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ "$VERBOSE2" = "yes" ]; then
871c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    FLAGS=$FLAGS" --verbose"
881c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfi
891c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then
901c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    mkdir -p "$PACKAGE_DIR"
911c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    fail_panic "Could not create package directory: $PACKAGE_DIR"
921c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    FLAGS=$FLAGS" --package-dir=\"$PACKAGE_DIR\""
931c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfi
941c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerFLAGS=$FLAGS" -j$NUM_JOBS"
951c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
961c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# First, gdbserver
971c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfor ARCH in $ARCHS; do
98f6c7ce0d9e6ed9ff94d15325ea0f42573f6277cbAndrew Hsieh    GDB_TOOLCHAINS=$(get_default_toolchain_name_for_arch $ARCH)
99f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner    for GDB_TOOLCHAIN in $GDB_TOOLCHAINS; do
100645c4b642895df912d19c123d201e7345525a2bdPavel Chupin        GDB_VERSION="--gdb-version="$(get_default_gdb_version_for_gcc $GDB_TOOLCHAIN)
101f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner        dump "Building $GDB_TOOLCHAIN gdbserver binaries..."
102645c4b642895df912d19c123d201e7345525a2bdPavel Chupin        run $BUILDTOOLS/build-gdbserver.sh "$SRC_DIR" "$NDK_DIR" "$GDB_TOOLCHAIN" "$GDB_VERSION" $FLAGS
103f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner        fail_panic "Could not build $GDB_TOOLCHAIN gdb-server!"
104f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner    done
1051c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerdone
1061c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
1071c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerFLAGS=$FLAGS" --ndk-dir=\"$NDK_DIR\""
108f3bba2e7a5623552aa505d55bdd198cab031e2bcPavel ChupinABIS=$(convert_archs_to_abis $ARCHS)
1090cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-ChihUNKNOWN_ABIS=$(convert_archs_to_abis $UNKNOWN_ARCH)
1101c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
111667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsiehdump "Building $ABIS compiler-rt binaries..."
112667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsiehrun $BUILDTOOLS/build-compiler-rt.sh --abis="$ABIS" $FLAGS --src-dir="$SRC_DIR/llvm-$DEFAULT_LLVM_VERSION/compiler-rt" \
113667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsieh   --llvm-version=$DEFAULT_LLVM_VERSION
114667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsiehfail_panic "Could not build compiler-rt!"
115667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsieh
116f3bba2e7a5623552aa505d55bdd198cab031e2bcPavel Chupindump "Building $ABIS gabi++ binaries..."
1170cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihrun $BUILDTOOLS/build-cxx-stl.sh --stl=gabi++ --abis="$ABIS" $FLAGS
1181c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfail_panic "Could not build gabi++!"
119409c951c8d0c4b31e71494c53388b43064c64e8eAndrew Hsiehrun $BUILDTOOLS/build-cxx-stl.sh --stl=gabi++ --abis="$ABIS" $FLAGS --with-debug-info
120409c951c8d0c4b31e71494c53388b43064c64e8eAndrew Hsiehfail_panic "Could not build gabi++ with debug info!"
1211c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
1220cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihdump "Building $ABIS $UNKNOWN_ABIS stlport binaries..."
1230cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihrun $BUILDTOOLS/build-cxx-stl.sh --stl=stlport --abis="$ABIS,$UNKNOWN_ABIS" $FLAGS
1241c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfail_panic "Could not build stlport!"
125409c951c8d0c4b31e71494c53388b43064c64e8eAndrew Hsiehrun $BUILDTOOLS/build-cxx-stl.sh --stl=stlport --abis="$ABIS,$UNKNOWN_ABIS" $FLAGS --with-debug-info
126409c951c8d0c4b31e71494c53388b43064c64e8eAndrew Hsiehfail_panic "Could not build stlport with debug info!"
1271c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
12803e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsiehdump "Building $ABIS $UNKNOWN_ABIS libc++ binaries... with libc++abi"
1297670977319d537cb30ed322897022f649b1bd1f9Andrew Hsiehrun $BUILDTOOLS/build-cxx-stl.sh --stl=libc++-libc++abi --abis="$ABIS,$UNKNOWN_ABIS" $FLAGS --llvm-version=$DEFAULT_LLVM_VERSION
13003e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsiehfail_panic "Could not build libc++ with libc++abi!"
13103e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsiehrun $BUILDTOOLS/build-cxx-stl.sh --stl=libc++-libc++abi --abis="$ABIS,$UNKNOWN_ABIS" $FLAGS --with-debug-info --llvm-version=$DEFAULT_LLVM_VERSION
13203e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsiehfail_panic "Could not build libc++ with libc++abi and debug info!"
13303e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh
13403e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh# workaround issues in libc++/libc++abi for x86 and mips
13503e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsiehfor abi in $ABIS; do
13603e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  case $abi in
13768799d8727d963e24c42c5056b439f6276d5d92dAndrew Hsieh     x86|x86_64|mips|mips64)
13803e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  dump "Rebuilding $abi libc++ binaries... with gabi++"
13903e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  run $BUILDTOOLS/build-cxx-stl.sh --stl=libc++-gabi++ --abis=$abi $FLAGS --llvm-version=$DEFAULT_LLVM_VERSION
14003e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  fail_panic "Could not build libc++ with gabi++!"
14103e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  run $BUILDTOOLS/build-cxx-stl.sh --stl=libc++-gabi++ --abis=$abi $FLAGS --with-debug-info --llvm-version=$DEFAULT_LLVM_VERSION
14203e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  fail_panic "Could not build libc++ with gabi++ and debug info!"
14303e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh     ;;
14403e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsieh  esac
14503e3962cba3ec10837e05744f322f5b72e29cb34Andrew Hsiehdone
1467c4534b55a734c189bc58ff8caf406430c2d2d44David 'Digit' Turner
147732d3dd872bf85103b3cd391a3519d0ca957a10fRay Donnellyif [ ! -z $VISIBLE_LIBGNUSTL_STATIC ]; then
148a8eee39c10f4e5a51d25e4c1d97014561d0715cdRay Donnelly    GNUSTL_STATIC_VIS_FLAG=--visible-libgnustl-static
149732d3dd872bf85103b3cd391a3519d0ca957a10fRay Donnellyfi
150732d3dd872bf85103b3cd391a3519d0ca957a10fRay Donnelly
151f3bba2e7a5623552aa505d55bdd198cab031e2bcPavel Chupindump "Building $ABIS gnustl binaries..."
1520cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihrun $BUILDTOOLS/build-gnu-libstdc++.sh --abis="$ABIS" $FLAGS $GNUSTL_STATIC_VIS_FLAG "$SRC_DIR"
1531c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfail_panic "Could not build gnustl!"
154409c951c8d0c4b31e71494c53388b43064c64e8eAndrew Hsiehrun $BUILDTOOLS/build-gnu-libstdc++.sh --abis="$ABIS" $FLAGS $GNUSTL_STATIC_VIS_FLAG "$SRC_DIR" --with-debug-info
155409c951c8d0c4b31e71494c53388b43064c64e8eAndrew Hsiehfail_panic "Could not build gnustl with debug info!"
1561c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
1576b4357c565834e8fd03b00bc5e30e4f0d6e6f4daAndrew Hsiehdump "Building $ABIS libportable binaries..."
1580cf77934ec5e47404dd6e28c4713511b36546a39Lai Wei-Chihrun $BUILDTOOLS/build-libportable.sh --abis="$ABIS" $FLAGS
1596b4357c565834e8fd03b00bc5e30e4f0d6e6f4daAndrew Hsiehfail_panic "Could not build libportable!"
1606b4357c565834e8fd03b00bc5e30e4f0d6e6f4daAndrew Hsieh
1611c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then
1621c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    dump "Done, see $PACKAGE_DIR"
1631c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerelse
1641c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner    dump "Done"
1651c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerfi
1661c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner
1671c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerexit 0
168