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#  This shell script is used to download the sources of the ccache
18#  tool that can be used to speed-up rebuilds of NDK binaries.
19#
20#  We use a special patched version of ccache 2.4 that works
21#  well on Win32 and handles the dependency generation compiler
22#  flags (-MMD -MP -MF) properly.
23#
24#  Beta versions of ccache 3.0 are supposed to do that as well but
25#  have not been checked yet.
26#
27
28# include common function and variable definitions
29. `dirname $0`/prebuilt-common.sh
30
31PROGRAM_PARAMETERS="<ndk-dir>"
32PROGRAM_DESCRIPTION="Rebuild the prebuilt ccache binary for the Android NDK toolchain."
33
34CCACHE_VERSION=ccache-2.4-android-20070905
35CCACHE_PACKAGE=$CCACHE_VERSION.tar.gz
36DOWNLOAD_ROOT=http://android.git.kernel.org/pub
37CCACHE_URL=$DOWNLOAD_ROOT/$CCACHE_PACKAGE
38
39OPTION_PACKAGE=no
40
41BUILD_OUT=$NDK_TMPDIR/build-ccache
42OPTION_BUILD_OUT=
43OPTION_FROM=
44
45register_option "--from=<url>" do_from "Specify source package" "$PACKAGE"
46register_option "--build-out=<path>" do_build_out "Set temporary build directory" "/tmp/ndk-$USER/<random>"
47
48do_from () { CCACHE_URL=$1; CCACHE_PACKAGE=`basename $1`; }
49do_build_out () { OPTION_BUILD_OUT=$1; }
50
51extract_parameters "$@"
52
53set_parameters ()
54{
55    if [ -n "$2" ] ; then
56        echo "ERROR: Too many parameters. See --help for usage."
57        exit 1
58    fi
59
60    NDK_DIR=$1
61    if [ -z "$NDK_DIR" ] ; then
62        echo "ERROR: Missing required ndk directory. See --help for usage."
63        exit 1
64    fi
65
66    mkdir -p $NDK_DIR
67    if [ $? != 0 ] ; then
68        echo "ERROR: Could not create NDK target directory: $NDK_DIR"
69        exit 1
70    fi
71}
72
73set_parameters $PARAMETERS
74
75prepare_host_build
76
77fix_option BUILD_OUT "$OPTION_BUILD_OUT" "build directory"
78
79# Check for md5sum
80check_md5sum
81
82prepare_download
83
84run rm -rf $BUILD_OUT && run mkdir -p $BUILD_OUT
85if [ $? != 0 ] ; then
86    echo "ERROR: Could not create build directory: $BUILD_OUT"
87    exit 1
88fi
89
90dump "Getting sources from $CCACHE_URL"
91
92download_file $CCACHE_URL $BUILD_OUT/$CCACHE_PACKAGE
93if [ $? != 0 ] ; then
94    dump "Could not download $CCACHE_URL"
95    dump "Aborting."
96    exit 1
97fi
98
99cd $BUILD_OUT && tar xzf $BUILD_OUT/$CCACHE_PACKAGE
100if [ $? != 0 ] ; then
101    dump "Could not unpack $CCACHE_PACKAGE in $BUILD_OUT"
102    exit 1
103fi
104
105echo "Building ccache from sources..."
106cd $BUILD_OUT/$CCACHE_VERSION && run make clean && run make unpack && run make build
107if [ $? != 0 ] ; then
108    dump "Could not build ccache in $BUILD_OUT"
109fi
110
111PREBUILT_DIR=$NDK_DIR/build/prebuilt/$HOST_TAG/ccache
112mkdir -p $PREBUILT_DIR && cp -p $BUILD_OUT/$CCACHE_VERSION/ccache $PREBUILT_DIR
113if [ $? != 0 ] ; then
114    dump "Could not copy ccache binary!"
115    exit 1
116fi
117
118dump "Done"
119