• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2#
3# Copyright (C) 2010 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18# Rebuild all prebuilts. This requires that you have a toolchain source tree
19#
20
21. `dirname $0`/prebuilt-common.sh
22PROGDIR=`dirname $0`
23
24NDK_DIR=$ANDROID_NDK_ROOT
25register_var_option "--ndk-dir=<path>" NDK_DIR "Put binaries into NDK install directory"
26
27BUILD_DIR=/tmp/ndk-$USER/build
28register_var_option "--build-dir=<path>" BUILD_DIR "Specify temporary build directory"
29
30ARCHS=$(find_ndk_unknown_archs)
31ARCHS="$DEFAULT_ARCHS $ARCHS"
32register_var_option "--arch=<arch>" ARCHS "Specify target architectures"
33
34NO_GEN_PLATFORMS=
35register_var_option "--no-gen-platforms" NO_GEN_PLATFORMS "Don't generate platforms/ directory, use existing one"
36
37GCC_VERSION_LIST="default" # it's arch defined by default so use default keyword
38register_var_option "--gcc-version-list=<vers>" GCC_VERSION_LIST "List of GCC release versions"
39
40LLVM_VERSION_LIST=$DEFAULT_LLVM_VERSION_LIST
41register_var_option "--llvm-version-list=<vers>" LLVM_VERSION_LIST "List of LLVM release versions"
42
43SYSTEMS=$HOST_TAG32
44if [ "$HOST_TAG32" = "linux-x86" ]; then
45    SYSTEMS=$SYSTEMS",windows"
46    # If darwin toolchain exist, build darwin too
47    if [ -f "${DARWIN_TOOLCHAIN}-gcc" ]; then
48        SYSTEMS=$SYSTEMS",darwin-x86"
49    fi
50fi
51CUSTOM_SYSTEMS=
52register_option "--systems=<list>" do_SYSTEMS "Specify host systems"
53do_SYSTEMS () { CUSTOM_SYSTEMS=true; SYSTEMS=$1; }
54
55ALSO_64=
56register_option "--also-64" do_ALSO_64 "Also build 64-bit host toolchain"
57do_ALSO_64 () { ALSO_64=yes; }
58
59RELEASE=`date +%Y%m%d`
60PACKAGE_DIR=/tmp/ndk-$USER/prebuilt-$RELEASE
61register_var_option "--package-dir=<path>" PACKAGE_DIR "Put prebuilt tarballs into <path>."
62
63DARWIN_SSH=
64if [ "$HOST_OS" = "linux" ] ; then
65register_var_option "--darwin-ssh=<hostname>" DARWIN_SSH "Specify Darwin hostname for remote build."
66fi
67
68register_try64_option
69
70PROGRAM_PARAMETERS="<toolchain-src-dir>"
71PROGRAM_DESCRIPTION=\
72"This script is used to rebuild all host and target prebuilts from scratch.
73You will need to give the path of a toolchain source directory, one which
74is typically created with the download-toolchain-sources.sh script.
75
76Unless you use the --ndk-dir option, all binaries will be installed to the
77current NDK directory.
78
79All prebuilts will then be archived into tarball that will be stored into a
80specific 'package directory'. Unless you use the --package-dir option, this
81will be: $PACKAGE_DIR
82
83Please read docs/DEV-SCRIPTS-USAGE.TXT for more usage information about this
84script.
85"
86
87extract_parameters "$@"
88
89SRC_DIR="$PARAMETERS"
90check_toolchain_src_dir "$SRC_DIR"
91
92if [ "$DARWIN_SSH" -a -z "$CUSTOM_SYSTEMS" ]; then
93    SYSTEMS=$SYSTEMS",darwin-x86"
94fi
95
96FLAGS=
97if [ "$DRYRUN" = "yes" ]; then
98    FLAGS=$FLAGS" --dryrun"
99fi
100if [ "$VERBOSE" = "yes" ]; then
101    FLAGS=$FLAGS" --verbose"
102fi
103if [ "$VERBOSE2" = "yes" ]; then
104    FLAGS=$FLAGS" --verbose"
105fi
106FLAGS=$FLAGS" --ndk-dir=$NDK_DIR"
107FLAGS=$FLAGS" --package-dir=$PACKAGE_DIR"
108FLAGS=$FLAGS" --arch=$(spaces_to_commas $ARCHS)"
109
110if [ ! -z "$NO_GEN_PLATFORMS" ]; then
111    FLAGS=$FLAGS" --no-gen-platforms"
112fi
113
114HOST_FLAGS=$FLAGS" --systems=$(spaces_to_commas $SYSTEMS)"
115if [ "$GCC_VERSION_LIST" != "default" ]; then
116    HOST_FLAGS=$HOST_FLAGS" --gcc-version-list=$(spaces_to_commas $GCC_VERSION_LIST)"
117fi
118HOST_FLAGS=$HOST_FLAGS" --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST)"
119
120TARGET_FLAGS=$FLAGS
121
122if [ "$TRY64" = "yes" ]; then
123    HOST_FLAGS=$HOST_FLAGS" --try-64"
124    # If we build only 64-bit host we need to use this flag as well so that correct toolchain is found on target tools build
125    TARGET_FLAGS=$TARGET_FLAGS" --try-64"
126fi
127if [ "$DARWIN_SSH" ]; then
128    HOST_FLAGS=$HOST_FLAGS" --darwin-ssh=$DARWIN_SSH"
129fi
130
131if [ "$ALSO_64" = "yes" -a "$TRY64" != "yes" ] ; then
132    echo "COMMAND: $PROGDIR/build-host-prebuilts.sh $HOST_FLAGS $SRC_DIR --try-64"
133    $PROGDIR/build-host-prebuilts.sh $HOST_FLAGS "$SRC_DIR" --try-64
134    fail_panic "Could not build host prebuilts in 64-bit!"
135fi
136echo "COMMAND: $PROGDIR/build-host-prebuilts.sh $HOST_FLAGS $SRC_DIR"
137$PROGDIR/build-host-prebuilts.sh $HOST_FLAGS "$SRC_DIR"
138fail_panic "Could not build host prebuilts!"
139
140if [ ! -z "$LLVM_VERSION_LIST" ]; then
141    LLVM_VERSIONS=$(commas_to_spaces $LLVM_VERSION_LIST)
142    LLVM_VERSION=${LLVM_VERSIONS%% *}
143    TARGET_FLAGS=$TARGET_FLAGS" --llvm-version=$LLVM_VERSION"
144    if [ "$GCC_VERSION_LIST" != "default" ]; then
145       for ARCH in $(commas_to_spaces $ARCHS); do
146         if [ "$ARCH" != "${ARCH%%64*}" ] ; then
147           if [ "${GCC_VERSION_LIST%%$DEFAULT_LLVM_GCC64_VERSION*}" = "$GCC_VERSION_LIST" ]; then
148              echo "ERROR: LLVM $LLVM_VERSION require GCC $DEFAULT_LLVM_GCC64_VERSION for $ARCH to be available. Try to include it in build list."
149              exit 1
150           fi
151         else
152           if [ "${GCC_VERSION_LIST%%$DEFAULT_LLVM_GCC32_VERSION*}" = "$GCC_VERSION_LIST" ]; then
153              echo "ERROR: LLVM $LLVM_VERSION require GCC $DEFAULT_LLVM_GCC32_VERSION for $ARCH to be available. Try to include it in build list."
154              exit 1
155           fi
156         fi
157       done
158    fi
159fi
160if [ "$GCC_VERSION_LIST" != "default" ]; then
161   TARGET_FLAGS=$TARGET_FLAGS" --gcc-version-list=$(spaces_to_commas $GCC_VERSION_LIST)"
162fi
163
164echo "COMMAND: $PROGDIR/build-target-prebuilts.sh $TARGET_FLAGS $SRC_DIR"
165$PROGDIR/build-target-prebuilts.sh $TARGET_FLAGS "$SRC_DIR"
166fail_panic "Could not build target prebuilts!"
167
168echo "Done, see $PACKAGE_DIR:"
169ls -l $PACKAGE_DIR
170
171exit 0
172